Subversion Repository Public Repository

Nextrek

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
/**
* Different types of animation looping.
*
* @module gs
* @class AnimationLoopType
* @memberof gs
* @static
* @final
 */
var AnimationLoopType, Component_PathAnimation,
  extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
  hasProp = {}.hasOwnProperty;

AnimationLoopType = (function() {
  function AnimationLoopType() {}

  AnimationLoopType.initialize = function() {

    /**
    * No looping.
    * @property NONE
    * @static
    * @final
     */
    this.NONE = 0;

    /**
    * Regular looping. If the end of an animation is reached it will start
    * from the beginning.
    * @property NORMAL
    * @static
    * @final
     */
    this.NORMAL = 1;

    /**
    * Reverse looping. If the end of an animation is reached it will be
    * reversed an goes now from end to start.
    * @property REVERSE
    * @static
    * @final
     */
    return this.REVERSE = 2;
  };

  return AnimationLoopType;

})();

AnimationLoopType.initialize();

gs.AnimationLoopType = AnimationLoopType;

Component_PathAnimation = (function(superClass) {
  extend(Component_PathAnimation, superClass);


  /**
  * Executes a path-animation on a game-object. A path-animation moves the
  * game-object along a path of quadratic bezier-curves.
  *
  * @module gs
  * @class Component_PathAnimation
  * @extends gs.Component_Animation
  * @memberof gs
  * @constructor
   */

  function Component_PathAnimation(data) {
    Component_PathAnimation.__super__.constructor.apply(this, arguments);
    this.path = (data != null ? data.path : void 0) || null;
    this.easing = new gs.Easing(null, data != null ? data.easing : void 0);
    this.startPosition = (data != null ? data.startPosition : void 0) || null;
    this.loopType = (data != null ? data.loopType : void 0) || 0;
    this.animationType = 0;
    this.effects = (data != null ? data.effects : void 0) || [];
    this.effect = null;
  }


  /**
  * Serializes the path-animation into a data-bundle.
  *
  * @method toDataBundle
   */

  Component_PathAnimation.prototype.toDataBundle = function() {
    return {
      path: this.path,
      easing: this.easing,
      startPosition: this.startPosition,
      loopType: this.loopType
    };
  };


  /**
  * Skips the animation. That is used to skip an animation if the user
  * wants to skip very fast through a visual novel scene.
  *
  * @method skip
   */

  Component_PathAnimation.prototype.skip = function() {
    if (this.loopType === 0 && this.easing.duration > 1) {
      this.easing.duration = 1;
      return this.easing.time = 0;
    }
  };


  /**
  * Calculates a certain point on a specified bezier-curve.
  *
  * @method quadraticBezierPoint
  * @protected
  * @param {number} startPt - The start-point of the bezier-curve.
  * @param {number} controlPt - The control-point of the bezier-curve.
  * @param {number} endPt - The end-point of the bezier-curve.
  * @param {number} percent - The percentage (0.0 - 1.0). A percentage of
  * 0.0 returns the <b>startPt</b> and 1.0 returns the <b>endPt</b> while
  * 0.5 return the point at the middle of the bezier-curve.
   */

  Component_PathAnimation.prototype.quadraticBezierPoint = function(startPt, controlPt, endPt, percent) {
    var x, y;
    x = Math.pow(1 - percent, 2) * startPt.x + 2 * (1 - percent) * percent * controlPt.x + Math.pow(percent, 2) * endPt.x;
    y = Math.pow(1 - percent, 2) * startPt.y + 2 * (1 - percent) * percent * controlPt.y + Math.pow(percent, 2) * endPt.y;
    return {
      x: x,
      y: y
    };
  };


  /**
  * Updates the path-animation.
  *
  * @method update
   */

  Component_PathAnimation.prototype.update = function() {
    var current, curve, effect, i, j, k, len, len1, len2, point, ref, ref1, ref2, value;
    Component_PathAnimation.__super__.update.apply(this, arguments);
    if (!this.easing.isRunning) {
      return;
    }
    this.easing.updateValue();
    value = this.easing.value;
    point = this.path.curveLength / 100 * value;
    ref = this.path.curveLengths;
    for (i = j = 0, len1 = ref.length; j < len1; i = ++j) {
      len = ref[i];
      if (point <= len.len + len.offset) {
        current = {
          percent: (point - len.offset) / len.len,
          path: this.path.data[i]
        };
        break;
      }
    }
    curve = current.path;
    point = this.quadraticBezierPoint(curve.pt1, curve.cpt, curve.pt2, current.percent);
    switch (this.animationType) {
      case 0:
        this.object.dstRect.x = Math.round(point.x - this.path.data[0].pt1.x + this.startPosition.x);
        this.object.dstRect.y = Math.round(point.y - this.path.data[0].pt1.y + this.startPosition.y);
        break;
      case 2:
        this.object.visual.scroll.x = Math.round(point.x - this.path.data[0].pt1.x + this.startPosition.x);
        this.object.visual.scroll.y = Math.round(point.y - this.path.data[0].pt1.y + this.startPosition.y);
    }
    ref1 = this.effects;
    for (k = 0, len2 = ref1.length; k < len2; k++) {
      effect = ref1[k];
      if ((!this.effect || (this.effect !== effect && ((ref2 = this.effect) != null ? ref2.time : void 0) <= effect.time)) && this.easing.time >= effect.time) {
        this.effect = effect;
        AudioManager.playSound(this.effect.sound);
      }
    }
    if (!this.easing.isRunning) {
      switch (this.loopType) {
        case 0:
          return typeof this.callback === "function" ? this.callback(this.object, this) : void 0;
        case 1:
          this.easing.startValue(0, 100, this.easing.duration);
          this.startPosition.x = this.object.dstRect.x;
          return this.startPosition.y = this.object.dstRect.y;
        case 2:
          this.effect = null;
          return this.easing.startValue(this.easing.value, 100 - this.easing.value * 2, this.easing.duration);
      }
    }
  };


  /**
  * Starts the path-animation. Scrolls the game object along the path.
  *
  * @method scrollPath
  * @param {Object} path The path to follow.
  * @param {gs.AnimationLoopType} loopType The loop-Type.
  * @param {number} duration The duration in frames.
  * @param {Object} easingType The easing-type.
  * @param {function} [callback] An optional callback called if blending is finished.
   */

  Component_PathAnimation.prototype.scroll = function(path, loopType, duration, easingType, effects, callback) {
    this.start(path, loopType, duration, easingType, callback);
    return this.animationType = 2;
  };


  /**
  * Starts the path-animation.
  *
  * @method movePath
  * @param {Object} path The path to follow.
  * @param {gs.AnimationLoopType} loopType The loop-Type.
  * @param {number} duration The duration in frames.
  * @param {Object} easingType The easing-type.
  * @param {function} [callback] An optional callback called if blending is finished.
   */

  Component_PathAnimation.prototype.start = function(path, loopType, duration, easingType, effects, callback) {
    var curve, j, l, len1, length, lengths, point, ref, x, y;
    this.effects = effects || [];
    this.effect = null;
    this.callback = callback;
    this.loopType = loopType;
    this.path = {
      data: path || [],
      curveLength: null,
      curveLengths: null
    };
    this.easing.type = easingType || gs.Easings.EASE_LINEAR[gs.EasingTypes.EASE_IN];
    this.easing.startValue(0, 100, duration);
    this.startPosition = {
      x: this.object.dstRect.x,
      y: this.object.dstRect.y
    };
    if (this.path.data.length === 0) {
      return typeof this.callback === "function" ? this.callback(this.object, this) : void 0;
    } else if (duration === 0 || this.isInstantSkip()) {
      point = this.path.data.last().pt2;
      this.object.dstRect.x = Math.round(point.x - this.path.data[0].pt1.x + this.startPosition.x);
      this.object.dstRect.y = Math.round(point.y - this.path.data[0].pt1.y + this.startPosition.y);
      return typeof this.callback === "function" ? this.callback(this.object, this) : void 0;
    } else if (this.path.curveLength == null) {
      length = 0;
      lengths = [];
      ref = this.path.data;
      for (j = 0, len1 = ref.length; j < len1; j++) {
        curve = ref[j];
        x = (curve.cpt.x - curve.pt1.x) + (curve.pt2.x - curve.cpt.x);
        y = (curve.cpt.y - curve.pt1.y) + (curve.pt2.y - curve.cpt.y);
        l = Math.round(Math.sqrt(x * x + y * y));
        lengths.push({
          len: l,
          offset: length
        });
        length += l;
      }
      this.path.curveLength = length;
      return this.path.curveLengths = lengths;
    }
  };

  return Component_PathAnimation;

})(gs.Component_Animation);

gs.Component_PathAnimation = Component_PathAnimation;

//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFRQTs7Ozs7Ozs7O0FBQUEsSUFBQSwwQ0FBQTtFQUFBOzs7QUFTTTs7O0VBQ0YsaUJBQUMsQ0FBQSxVQUFELEdBQWEsU0FBQTs7QUFDVDs7Ozs7O0lBTUEsSUFBQyxDQUFBLElBQUQsR0FBUTs7QUFFUjs7Ozs7OztJQU9BLElBQUMsQ0FBQSxNQUFELEdBQVU7O0FBRVY7Ozs7Ozs7V0FPQSxJQUFDLENBQUEsT0FBRCxHQUFXO0VBekJGOzs7Ozs7QUEyQmpCLGlCQUFpQixDQUFDLFVBQWxCLENBQUE7O0FBQ0EsRUFBRSxDQUFDLGlCQUFILEdBQXVCOztBQUVqQjs7OztBQUNGOzs7Ozs7Ozs7OztFQVVhLGlDQUFDLElBQUQ7SUFDVCwwREFBQSxTQUFBO0lBRUEsSUFBQyxDQUFBLElBQUQsbUJBQVEsSUFBSSxDQUFFLGNBQU4sSUFBYztJQUN0QixJQUFDLENBQUEsTUFBRCxHQUFjLElBQUEsRUFBRSxDQUFDLE1BQUgsQ0FBVSxJQUFWLGlCQUFnQixJQUFJLENBQUUsZUFBdEI7SUFDZCxJQUFDLENBQUEsYUFBRCxtQkFBaUIsSUFBSSxDQUFFLHVCQUFOLElBQXVCO0lBQ3hDLElBQUMsQ0FBQSxRQUFELG1CQUFZLElBQUksQ0FBRSxrQkFBTixJQUFrQjtJQUM5QixJQUFDLENBQUEsYUFBRCxHQUFpQjtJQUNqQixJQUFDLENBQUEsT0FBRCxtQkFBVyxJQUFJLENBQUUsaUJBQU4sSUFBaUI7SUFDNUIsSUFBQyxDQUFBLE1BQUQsR0FBVTtFQVREOzs7QUFVYjs7Ozs7O29DQUtBLFlBQUEsR0FBYyxTQUFBO1dBQ1Y7TUFBQSxJQUFBLEVBQU0sSUFBQyxDQUFBLElBQVA7TUFDQSxNQUFBLEVBQVEsSUFBQyxDQUFBLE1BRFQ7TUFFQSxhQUFBLEVBQWUsSUFBQyxDQUFBLGFBRmhCO01BR0EsUUFBQSxFQUFVLElBQUMsQ0FBQSxRQUhYOztFQURVOzs7QUFNZDs7Ozs7OztvQ0FN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SUFBQyxDQUFBLFFBQVEsZUFKbkI7S0FBQSxNQUtBLElBQU8sNkJBQVA7TUFDRCxNQUFBLEdBQVM7TUFDVCxPQUFBLEdBQVU7QUFFVjtBQUFBLFdBQUEsdUNBQUE7O1FBQ0ksQ0FBQSxHQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFWLEdBQWMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUF6QixDQUFBLEdBQThCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFWLEdBQWMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUF6QjtRQUNsQyxDQUFBLEdBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQVYsR0FBYyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQXpCLENBQUEsR0FBOEIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQVYsR0FBYyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQXpCO1FBQ2xDLENBQUEsR0FBSSxJQUFJLENBQUMsS0FBTCxDQUFXLElBQUksQ0FBQyxJQUFMLENBQVUsQ0FBQSxHQUFFLENBQUYsR0FBTSxDQUFBLEdBQUUsQ0FBbEIsQ0FBWDtRQUVKLE9BQU8sQ0FBQyxJQUFSLENBQWE7VUFBRSxHQUFBLEVBQUssQ0FBUDtVQUFVLE1BQUEsRUFBUSxNQUFsQjtTQUFiO1FBQ0EsTUFBQSxJQUFVO0FBTmQ7TUFRQSxJQUFDLENBQUEsSUFBSSxDQUFDLFdBQU4sR0FBb0I7YUFDcEIsSUFBQyxDQUFBLElBQUksQ0FBQyxZQUFOLEdBQXFCLFFBYnBCOztFQWpCRjs7OztHQWxJMkIsRUFBRSxDQUFDOztBQWtLekMsRUFBRSxDQUFDLHVCQUFILEdBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4jXG4jICAgU2NyaXB0OiBDb21wb25lbnRfUGF0aEFuaW1hdGlvblxuI1xuIyAgICQkQ09QWVJJR0hUJCRcbiNcbiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4jIyMqXG4qIERpZmZlcmVudCB0eXBlcyBvZiBhbmltYXRpb24gbG9vcGluZy5cbipcbiogQG1vZHVsZSBnc1xuKiBAY2xhc3MgQW5pbWF0aW9uTG9vcFR5cGVcbiogQG1lbWJlcm9mIGdzXG4qIEBzdGF0aWNcbiogQGZpbmFsXG4jIyNcbmNsYXNzIEFuaW1hdGlvbkxvb3BUeXBlXG4gICAgQGluaXRpYWxpemU6IC0+XG4gICAgICAgICMjIypcbiAgICAgICAgKiBObyBsb29waW5nLlxuICAgICAgICAqIEBwcm9wZXJ0eSBOT05FXG4gICAgICAgICogQHN0YXRpY1xuICAgICAgICAqIEBmaW5hbFxuICAgICAgICAjIyNcbiAgICAgICAgQE5PTkUgPSAwXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogUmVndWxhciBsb29waW5nLiBJZiB0aGUgZW5kIG9mIGFuIGFuaW1hdGlvbiBpcyByZWFjaGVkIGl0IHdpbGwgc3RhcnRcbiAgICAgICAgKiBmcm9tIHRoZSBiZWdpbm5pbmcuXG4gICAgICAgICogQHByb3BlcnR5IE5PUk1BTFxuICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgKiBAZmluYWxcbiAgICAgICAgIyMjXG4gICAgICAgIEBOT1JNQUwgPSAxXG4gICAgICAgIFxuICAgICAgICAjIyMqXG4gICAgICAgICogUmV2ZXJzZSBsb29waW5nLiBJZiB0aGUgZW5kIG9mIGFuIGFuaW1hdGlvbiBpcyByZWFjaGVkIGl0IHdpbGwgYmVcbiAgICAgICAgKiByZXZlcnNlZCBhbiBnb2VzIG5vdyBmcm9tIGVuZCB0byBzdGFydC5cbiAgICAgICAgKiBAcHJvcGVydHkgUkVWRVJTRVxuICAgICAgICAqIEBzdGF0aWNcbiAgICAgICAgKiBAZmluYWxcbiAgICAgICAgIyMjXG4gICAgICAgIEBSRVZFUlNFID0gMlxuICAgICAgICBcbkFuaW1hdGlvbkxvb3BUeXBlLmluaXRpYWxpemUoKVxuZ3MuQW5pbWF0aW9uTG9vcFR5cGUgPSBBbmltYXRpb25Mb29wVHlwZVxuXG5jbGFzcyBDb21wb25lbnRfUGF0aEFuaW1hdGlvbiBleHRlbmRzIGdzLkNvbXBvbmVudF9BbmltYXRpb25cbiAgICAjIyMqXG4gICAgKiBFeGVjdXRlcyBhIHBhdGgtYW5pbWF0aW9uIG9uIGEgZ2FtZS1vYmplY3QuIEEgcGF0aC1hbmltYXRpb24gbW92ZXMgdGhlXG4gICAgKiBnYW1lLW9iamVjdCBhbG9uZyBhIHBhdGggb2YgcXVhZHJhdGljIGJlemllci1jdXJ2ZXMuXG4gICAgKlxuICAgICogQG1vZHVsZSBnc1xuICAgICogQGNsYXNzIENvbXBvbmVudF9QYXRoQW5pbWF0aW9uXG4gICAgKiBAZXh0ZW5kcyBncy5Db21wb25lbnRfQW5pbWF0aW9uXG4gICAgKiBAbWVtYmVyb2YgZ3NcbiAgICAqIEBjb25zdHJ1Y3RvclxuICAgICMjI1xuICAgIGNvbnN0cnVjdG9yOiAoZGF0YSkgLT5cbiAgICAgICAgc3VwZXJcbiAgICAgICAgXG4gICAgICAgIEBwYXRoID0gZGF0YT8ucGF0aCB8fCBudWxsXG4gICAgICAgIEBlYXNpbmcgPSBuZXcgZ3MuRWFzaW5nKG51bGwsIGRhdGE/LmVhc2luZylcbiAgICAgICAgQHN0YXJ0UG9zaXRpb24gPSBkYXRhPy5zdGFydFBvc2l0aW9uIHx8IG51bGxcbiAgICAgICAgQGxvb3BUeXBlID0gZGF0YT8ubG9vcFR5cGUgfHwgMFxuICAgICAgICBAYW5pbWF0aW9uVHlwZSA9IDBcbiAgICAgICAgQGVmZmVjdHMgPSBkYXRhPy5lZmZlY3RzIHx8IFtdXG4gICAgICAgIEBlZmZlY3QgPSBudWxsXG4gICAgIyMjKlxuICAgICogU2VyaWFsaXplcyB0aGUgcGF0aC1hbmltYXRpb24gaW50byBhIGRhdGEtYnVuZGxlLlxuICAgICpcbiAgICAqIEBtZXRob2QgdG9EYXRhQnVuZGxlXG4gICAgIyMjXG4gICAgdG9EYXRhQnVuZGxlOiAtPlxuICAgICAgICBwYXRoOiBAcGF0aCxcbiAgICAgICAgZWFzaW5nOiBAZWFzaW5nLFxuICAgICAgICBzdGFydFBvc2l0aW9uOiBAc3RhcnRQb3NpdGlvbixcbiAgICAgICAgbG9vcFR5cGU6IEBsb29wVHlwZVxuICAgICBcbiAgICAjIyMqXG4gICAgKiBTa2lwcyB0aGUgYW5pbWF0aW9uLiBUaGF0IGlzIHVzZWQgdG8gc2tpcCBhbiBhbmltYXRpb24gaWYgdGhlIHVzZXJcbiAgICAqIHdhbnRzIHRvIHNraXAgdmVyeSBmYXN0IHRocm91Z2ggYSB2aXN1YWwgbm92ZWwgc2NlbmUuXG4gICAgKlxuICAgICogQG1ldGhvZCBza2lwXG4gICAgIyMjICAgICAgXG4gICAgc2tpcDogLT5cbiAgICAgICAgaWYgQGxvb3BUeXBlID09IDAgYW5kIEBlYXNpbmcuZHVyYXRpb24gPiAxXG4gICAgICAgICAgICBAZWFzaW5nLmR1cmF0aW9uID0gMVxuICAgICAgICAgICAgQGVhc2luZy50aW1lID0gMFxuICAgICBcbiAgICAjIyMqXG4gICAgKiBDYWxjdWxhdGVzIGEgY2VydGFpbiBwb2ludCBvbiBhIHNwZWNpZmllZCBiZXppZXItY3VydmUuXG4gICAgKlxuICAgICogQG1ldGhvZCBxdWFkcmF0aWNCZXppZXJQb2ludFxuICAgICogQHByb3RlY3RlZFxuICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0UHQgLSBUaGUgc3RhcnQtcG9pbnQgb2YgdGhlIGJlemllci1jdXJ2ZS5cbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb250cm9sUHQgLSBUaGUgY29udHJvbC1wb2ludCBvZiB0aGUgYmV6aWVyLWN1cnZlLlxuICAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFB0IC0gVGhlIGVuZC1wb2ludCBvZiB0aGUgYmV6aWVyLWN1cnZlLlxuICAgICogQHBhcmFtIHtudW1iZXJ9IHBlcmNlbnQgLSBUaGUgcGVyY2VudGFnZSAoMC4wIC0gMS4wKS4gQSBwZXJjZW50YWdlIG9mXG4gICAgKiAwLjAgcmV0dXJucyB0aGUgPGI+c3RhcnRQdDwvYj4gYW5kIDEuMCByZXR1cm5zIHRoZSA8Yj5lbmRQdDwvYj4gd2hpbGVcbiAgICAqIDAuNSByZXR1cm4gdGhlIHBvaW50IGF0IHRoZSBtaWRkbGUgb2YgdGhlIGJlemllci1jdXJ2ZS5cbiAgICAjIyMgICBcbiAgICBxdWFkcmF0aWNCZXppZXJQb2ludDogKHN0YXJ0UHQsIGNvbnRyb2xQdCwgZW5kUHQsIHBlcmNlbnQpIC0+XG4gICAgICAgIHggPSBNYXRoLnBvdygxLXBlcmNlbnQsMikgKiBzdGFydFB0LnggKyAyICogKDEtcGVyY2VudCkgKiBwZXJjZW50ICogY29udHJvbFB0LnggKyBNYXRoLnBvdyhwZXJjZW50LDIpICogZW5kUHQueFxuICAgICAgICB5ID0gTWF0aC5wb3coMS1wZXJjZW50LDIpICogc3RhcnRQdC55ICsgMiAqICgxLXBlcmNlbnQpICogcGVyY2VudCAqIGNvbnRyb2xQdC55ICsgTWF0aC5wb3cocGVyY2VudCwyKSAqIGVuZFB0LnlcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB4OiB4LCB5OiB5IFxuICAgICMjIypcbiAgICAqIFVwZGF0ZXMgdGhlIHBhdGgtYW5pbWF0aW9uLlxuICAgICpcbiAgICAqIEBtZXRob2QgdXBkYXRlXG4gICAgIyMjICAgXG4gICAgdXBkYXRlOiAtPlxuICAgICAgICBzdXBlclxuICAgICAgICBpZiBub3QgQGVhc2luZy5pc1J1bm5pbmcgdGhlbiByZXR1cm5cbiAgICAgICAgXG4gICAgICAgIEBlYXNpbmcudXBkYXRlVmFsdWUoKVxuICAgICAgICB2YWx1ZSA9IEBlYXNpbmcudmFsdWVcbiAgICAgICAgXG4gICAgICAgIHBvaW50ID0gQHBhdGguY3VydmVMZW5ndGggLyAxMDAgKiB2YWx1ZVxuICAgICAgICBmb3IgbGVuLCBpIGluIEBwYXRoLmN1cnZlTGVuZ3Roc1xuICAgICAgICAgICAgaWYgcG9pbnQgPD0gbGVuLmxlbiArIGxlbi5vZmZzZXRcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0geyBwZXJjZW50OiAocG9pbnQgLSBsZW4ub2Zmc2V0KSAvIGxlbi5sZW4sIHBhdGg6IEBwYXRoLmRhdGFbaV0gfVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgXG4gICAgICAgIGN1cnZlID0gY3VycmVudC5wYXRoXG4gICAgICAgIHBvaW50ID0gQHF1YWRyYXRpY0JlemllclBvaW50KGN1cnZlLnB0MSwgY3VydmUuY3B0LCBjdXJ2ZS5wdDIsIGN1cnJlbnQucGVyY2VudClcblxuICAgICAgICBzd2l0Y2ggQGFuaW1hdGlvblR5cGVcbiAgICAgICAgICAgIHdoZW4gMFxuICAgICAgICAgICAgICAgIEBvYmplY3QuZHN0UmVjdC54ID0gTWF0aC5yb3VuZChwb2ludC54IC0gQHBhdGguZGF0YVswXS5wdDEueCArIEBzdGFydFBvc2l0aW9uLngpXG4gICAgICAgICAgICAgICAgQG9iamVjdC5kc3RSZWN0LnkgPSBNYXRoLnJvdW5kKHBvaW50LnkgLSBAcGF0aC5kYXRhWzBdLnB0MS55ICsgQHN0YXJ0UG9zaXRpb24ueSlcbiAgICAgICAgICAgIHdoZW4gMlxuICAgICAgICAgICAgICAgIEBvYmplY3QudmlzdWFsLnNjcm9sbC54ID0gTWF0aC5yb3VuZChwb2ludC54IC0gQHBhdGguZGF0YVswXS5wdDEueCArIEBzdGFydFBvc2l0aW9uLngpXG4gICAgICAgICAgICAgICAgQG9iamVjdC52aXN1YWwuc2Nyb2xsLnkgPSBNYXRoLnJvdW5kKHBvaW50LnkgLSBAcGF0aC5kYXRhWzBdLnB0MS55ICsgQHN0YXJ0UG9zaXRpb24ueSlcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgZm9yIGVmZmVjdCBpbiBAZWZmZWN0c1xuICAgICAgICAgICAgaWYgKCFAZWZmZWN0IG9yIChAZWZmZWN0ICE9IGVmZmVjdCBhbmQgQGVmZmVjdD8udGltZSA8PSBlZmZlY3QudGltZSkpIGFuZCBAZWFzaW5nLnRpbWUgPj0gZWZmZWN0LnRpbWVcbiAgICAgICAgICAgICAgICBAZWZmZWN0ID0gZWZmZWN0XG4gICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLnBsYXlTb3VuZChAZWZmZWN0LnNvdW5kKVxuICAgICAgICBcbiAgICAgICAgaWYgbm90IEBlYXNpbmcuaXNSdW5uaW5nXG4gICAgICAgICAgICBzd2l0Y2ggQGxvb3BUeXBlXG4gICAgICAgICAgICAgICAgd2hlbiAwXG4gICAgICAgICAgICAgICAgICAgIEBjYWxsYmFjaz8oQG9iamVjdCwgdGhpcylcbiAgICAgICAgICAgICAgICB3aGVuIDEgIyBOb3JtYWxcbiAgICAgICAgICAgICAgICAgICAgQGVhc2luZy5zdGFydFZhbHVlKDAsIDEwMCwgQGVhc2luZy5kdXJhdGlvbilcbiAgICAgICAgICAgICAgICAgICAgQHN0YXJ0UG9zaXRpb24ueCA9IEBvYmplY3QuZHN0UmVjdC54XG4gICAgICAgICAgICAgICAgICAgIEBzdGFydFBvc2l0aW9uLnkgPSBAb2JqZWN0LmRzdFJlY3QueVxuICAgICAgICAgICAgICAgIHdoZW4gMiAjIFJldmVyc2VcbiAgICAgICAgICAgICAgICAgICAgQGVmZmVjdCA9IG51bGxcbiAgICAgICAgICAgICAgICAgICAgQGVhc2luZy5zdGFydFZhbHVlKEBlYXNpbmcudmFsdWUsIDEwMCAtIEBlYXNpbmcudmFsdWUqMiwgQGVhc2luZy5kdXJhdGlvbilcbiAgICBcbiAgICAjIyMqXG4gICAgKiBTdGFydHMgdGhlIHBhdGgtYW5pbWF0aW9uLiBTY3JvbGxzIHRoZSBnYW1lIG9iamVjdCBhbG9uZyB0aGUgcGF0aC5cbiAgICAqXG4gICAgKiBAbWV0aG9kIHNjcm9sbFBhdGhcbiAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXRoIFRoZSBwYXRoIHRvIGZvbGxvdy5cbiAgICAqIEBwYXJhbSB7Z3MuQW5pbWF0aW9uTG9vcFR5cGV9IGxvb3BUeXBlIFRoZSBsb29wLVR5cGUuXG4gICAgKiBAcGFyYW0ge251bWJlcn0gZHVyYXRpb24gVGhlIGR1cmF0aW9uIGluIGZyYW1lcy5cbiAgICAqIEBwYXJhbSB7T2JqZWN0fSBlYXNpbmdUeXBlIFRoZSBlYXNpbmctdHlwZS5cbiAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10gQW4gb3B0aW9uYWwgY2FsbGJhY2sgY2FsbGVkIGlmIGJsZW5kaW5nIGlzIGZpbmlzaGVkLiBcbiAgICAjIyMgICAgICAgICAgICAgICAgXG4gICAgc2Nyb2xsOiAocGF0aCwgbG9vcFR5cGUsIGR1cmF0aW9uLCBlYXNpbmdUeXBlLCBlZmZlY3RzLCBjYWxsYmFjaykgLT5cbiAgICAgICAgQHN0YXJ0KHBhdGgsIGxvb3BUeXBlLCBkdXJhdGlvbiwgZWFzaW5nVHlwZSwgY2FsbGJhY2spXG4gICAgICAgIEBhbmltYXRpb25UeXBlID0gMlxuICAgICAgICBcbiAgICAjIyMqXG4gICAgKiBTdGFydHMgdGhlIHBhdGgtYW5pbWF0aW9uLlxuICAgICpcbiAgICAqIEBtZXRob2QgbW92ZVBhdGhcbiAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXRoIFRoZSBwYXRoIHRvIGZvbGxvdy5cbiAgICAqIEBwYXJhbSB7Z3MuQW5pbWF0aW9uTG9vcFR5cGV9IGxvb3BUeXBlIFRoZSBsb29wLVR5cGUuXG4gICAgKiBAcGFyYW0ge251bWJlcn0gZHVyYXRpb24gVGhlIGR1cmF0aW9uIGluIGZyYW1lcy5cbiAgICAqIEBwYXJhbSB7T2JqZWN0fSBlYXNpbmdUeXBlIFRoZSBlYXNpbmctdHlwZS5cbiAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IFtjYWxsYmFja10gQW4gb3B0aW9uYWwgY2FsbGJhY2sgY2FsbGVkIGlmIGJsZW5kaW5nIGlzIGZpbmlzaGVkLiBcbiAgICAjIyMgICAgICAgICAgICAgICAgXG4gICAgc3RhcnQ6IChwYXRoLCBsb29wVHlwZSwgZHVyYXRpb24sIGVhc2luZ1R5cGUsIGVmZmVjdHMsIGNhbGxiYWNrKSAtPlxuICAgICAgICBAZWZmZWN0cyA9IGVmZmVjdHMgfHwgW11cbiAgICAgICAgQGVmZmVjdCA9IG51bGxcbiAgICAgICAgQGNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICAgICAgQGxvb3BUeXBlID0gbG9vcFR5cGVcbiAgICAgICAgQHBhdGggPSBkYXRhOiBwYXRofHxbXSwgY3VydmVMZW5ndGg6IG51bGwsIGN1cnZlTGVuZ3RoczogbnVsbFxuICAgICAgICBAZWFzaW5nLnR5cGUgPSBlYXNpbmdUeXBlIHx8IGdzLkVhc2luZ3MuRUFTRV9MSU5FQVJbZ3MuRWFzaW5nVHlwZXMuRUFTRV9JTl1cbiAgICAgICAgQGVhc2luZy5zdGFydFZhbHVlKDAsIDEwMCwgZHVyYXRpb24pXG4gICAgICAgIEBzdGFydFBvc2l0aW9uID0geDogQG9iamVjdC5kc3RSZWN0LngsIHk6IEBvYmplY3QuZHN0UmVjdC55XG4gICAgICAgIFxuICAgICAgICBpZiBAcGF0aC5kYXRhLmxlbmd0aCA9PSAwXG4gICAgICAgICAgICBAY2FsbGJhY2s/KEBvYmplY3QsIHRoaXMpXG4gICAgICAgIGVsc2UgaWYgZHVyYXRpb24gPT0gMCBvciBAaXNJbnN0YW50U2tpcCgpXG4gICAgICAgICAgICBwb2ludCA9IEBwYXRoLmRhdGEubGFzdCgpLnB0MlxuICAgICAgICAgICAgQG9iamVjdC5kc3RSZWN0LnggPSBNYXRoLnJvdW5kKHBvaW50LnggLSBAcGF0aC5kYXRhWzBdLnB0MS54ICsgQHN0YXJ0UG9zaXRpb24ueClcbiAgICAgICAgICAgIEBvYmplY3QuZHN0UmVjdC55ID0gTWF0aC5yb3VuZChwb2ludC55IC0gQHBhdGguZGF0YVswXS5wdDEueSArIEBzdGFydFBvc2l0aW9uLnkpXG4gICAgICAgICAgICBAY2FsbGJhY2s/KEBvYmplY3QsIHRoaXMpXG4gICAgICAgIGVsc2UgaWYgbm90IEBwYXRoLmN1cnZlTGVuZ3RoP1xuICAgICAgICAgICAgbGVuZ3RoID0gMFxuICAgICAgICAgICAgbGVuZ3RocyA9IFtdXG5cbiAgICAgICAgICAgIGZvciBjdXJ2ZSBpbiBAcGF0aC5kYXRhXG4gICAgICAgICAgICAgICAgeCA9IChjdXJ2ZS5jcHQueCAtIGN1cnZlLnB0MS54KSArIChjdXJ2ZS5wdDIueCAtIGN1cnZlLmNwdC54KVxuICAgICAgICAgICAgICAgIHkgPSAoY3VydmUuY3B0LnkgLSBjdXJ2ZS5wdDEueSkgKyAoY3VydmUucHQyLnkgLSBjdXJ2ZS5jcHQueSlcbiAgICAgICAgICAgICAgICBsID0gTWF0aC5yb3VuZChNYXRoLnNxcnQoeCp4ICsgeSp5KSlcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBsZW5ndGhzLnB1c2goeyBsZW46IGwsIG9mZnNldDogbGVuZ3RoIH0pXG4gICAgICAgICAgICAgICAgbGVuZ3RoICs9IGxcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIEBwYXRoLmN1cnZlTGVuZ3RoID0gbGVuZ3RoXG4gICAgICAgICAgICBAcGF0aC5jdXJ2ZUxlbmd0aHMgPSBsZW5ndGhzXG4gICAgICAgICAgICBcbmdzLkNvbXBvbmVudF9QYXRoQW5pbWF0aW9uID0gQ29tcG9uZW50X1BhdGhBbmltYXRpb24iXX0=
//# sourceURL=Component_PathAnimation_62.js

Commits for Nextrek/s2s/development/Component_PathAnimation_2718D349K7844A4CA3S98A2E776B3771FDE3.js

Diff revisions: vs.
Revision Author Commited Message
1101 Diff Diff ASorrentino picture ASorrentino Wed 16 May, 2018 21:31:54 +0000
1096 Diff Diff ASorrentino picture ASorrentino Wed 16 May, 2018 13:01:21 +0000

Testi

1086 Diff Diff ASorrentino picture ASorrentino Fri 11 May, 2018 21:50:37 +0000
1084 MOliva picture MOliva Fri 11 May, 2018 12:41:55 +0000