@esotericsoftware/spine-core 4.0.9 → 4.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/Animation.js +577 -710
  2. package/dist/AnimationState.js +239 -259
  3. package/dist/AnimationStateData.js +15 -17
  4. package/dist/AssetManagerBase.d.ts +3 -0
  5. package/dist/AssetManagerBase.js +168 -147
  6. package/dist/AtlasAttachmentLoader.js +20 -22
  7. package/dist/Bone.js +89 -91
  8. package/dist/BoneData.js +4 -6
  9. package/dist/ConstraintData.js +4 -6
  10. package/dist/Event.js +4 -6
  11. package/dist/EventData.js +4 -6
  12. package/dist/IkConstraint.js +48 -50
  13. package/dist/IkConstraintData.js +12 -31
  14. package/dist/PathConstraint.js +116 -118
  15. package/dist/PathConstraintData.js +9 -28
  16. package/dist/Skeleton.js +189 -192
  17. package/dist/SkeletonBinary.js +352 -363
  18. package/dist/SkeletonBounds.js +79 -81
  19. package/dist/SkeletonClipping.js +86 -88
  20. package/dist/SkeletonData.js +46 -48
  21. package/dist/SkeletonJson.js +307 -310
  22. package/dist/Skin.js +65 -69
  23. package/dist/Slot.js +16 -18
  24. package/dist/SlotData.js +4 -6
  25. package/dist/Texture.js +14 -39
  26. package/dist/TextureAtlas.js +56 -85
  27. package/dist/TransformConstraint.js +77 -79
  28. package/dist/TransformConstraintData.js +20 -39
  29. package/dist/Triangulator.js +71 -73
  30. package/dist/Updatable.js +1 -1
  31. package/dist/Utils.js +183 -245
  32. package/dist/VertexEffect.js +1 -1
  33. package/dist/attachments/Attachment.js +41 -62
  34. package/dist/attachments/AttachmentLoader.js +1 -1
  35. package/dist/attachments/BoundingBoxAttachment.js +9 -28
  36. package/dist/attachments/ClippingAttachment.js +9 -28
  37. package/dist/attachments/MeshAttachment.js +29 -48
  38. package/dist/attachments/PathAttachment.js +11 -30
  39. package/dist/attachments/PointAttachment.js +16 -35
  40. package/dist/attachments/RegionAttachment.js +82 -101
  41. package/dist/attachments/index.js +1 -1
  42. package/dist/iife/spine-core.js +62 -22
  43. package/dist/iife/spine-core.js.map +2 -2
  44. package/dist/iife/spine-core.min.js +2 -2
  45. package/dist/index.js +1 -1
  46. package/dist/polyfills.js +2 -2
  47. package/dist/vertexeffects/JitterEffect.js +10 -12
  48. package/dist/vertexeffects/SwirlEffect.js +18 -20
  49. package/package.json +1 -1
  50. package/dist/Animation.js.map +0 -1
  51. package/dist/AnimationState.js.map +0 -1
  52. package/dist/AnimationStateData.js.map +0 -1
  53. package/dist/AssetManagerBase.js.map +0 -1
  54. package/dist/AtlasAttachmentLoader.js.map +0 -1
  55. package/dist/Bone.js.map +0 -1
  56. package/dist/BoneData.js.map +0 -1
  57. package/dist/ConstraintData.js.map +0 -1
  58. package/dist/Event.js.map +0 -1
  59. package/dist/EventData.js.map +0 -1
  60. package/dist/IkConstraint.js.map +0 -1
  61. package/dist/IkConstraintData.js.map +0 -1
  62. package/dist/PathConstraint.js.map +0 -1
  63. package/dist/PathConstraintData.js.map +0 -1
  64. package/dist/Skeleton.js.map +0 -1
  65. package/dist/SkeletonBinary.js.map +0 -1
  66. package/dist/SkeletonBounds.js.map +0 -1
  67. package/dist/SkeletonClipping.js.map +0 -1
  68. package/dist/SkeletonData.js.map +0 -1
  69. package/dist/SkeletonJson.js.map +0 -1
  70. package/dist/Skin.js.map +0 -1
  71. package/dist/Slot.js.map +0 -1
  72. package/dist/SlotData.js.map +0 -1
  73. package/dist/Texture.js.map +0 -1
  74. package/dist/TextureAtlas.js.map +0 -1
  75. package/dist/TransformConstraint.js.map +0 -1
  76. package/dist/TransformConstraintData.js.map +0 -1
  77. package/dist/Triangulator.js.map +0 -1
  78. package/dist/Updatable.js.map +0 -1
  79. package/dist/Utils.js.map +0 -1
  80. package/dist/VertexEffect.js.map +0 -1
  81. package/dist/attachments/Attachment.js.map +0 -1
  82. package/dist/attachments/AttachmentLoader.js.map +0 -1
  83. package/dist/attachments/BoundingBoxAttachment.js.map +0 -1
  84. package/dist/attachments/ClippingAttachment.js.map +0 -1
  85. package/dist/attachments/MeshAttachment.js.map +0 -1
  86. package/dist/attachments/PathAttachment.js.map +0 -1
  87. package/dist/attachments/PointAttachment.js.map +0 -1
  88. package/dist/attachments/RegionAttachment.js.map +0 -1
  89. package/dist/attachments/index.js.map +0 -1
  90. package/dist/index.js.map +0 -1
  91. package/dist/polyfills.js.map +0 -1
  92. package/dist/vertexeffects/JitterEffect.js.map +0 -1
  93. package/dist/vertexeffects/SwirlEffect.js.map +0 -1
@@ -32,8 +32,8 @@ import { StringSet, Pool, Utils, MathUtils } from "./Utils";
32
32
  * multiple animations on top of each other (layering).
33
33
  *
34
34
  * See [Applying Animations](http://esotericsoftware.com/spine-applying-animations/) in the Spine Runtimes Guide. */
35
- var AnimationState = /** @class */ (function () {
36
- function AnimationState(data) {
35
+ export class AnimationState {
36
+ constructor(data) {
37
37
  /** The list of tracks that currently have animations, which may contain null entries. */
38
38
  this.tracks = new Array();
39
39
  /** Multiplier for the delta time when the animation state is updated, causing time for all animations and mixes to play slower
@@ -47,25 +47,25 @@ var AnimationState = /** @class */ (function () {
47
47
  this.queue = new EventQueue(this);
48
48
  this.propertyIDs = new StringSet();
49
49
  this.animationsChanged = false;
50
- this.trackEntryPool = new Pool(function () { return new TrackEntry(); });
50
+ this.trackEntryPool = new Pool(() => new TrackEntry());
51
51
  this.data = data;
52
52
  }
53
- AnimationState.emptyAnimation = function () {
53
+ static emptyAnimation() {
54
54
  if (!_emptyAnimation)
55
55
  _emptyAnimation = new Animation("<empty>", [], 0);
56
56
  return _emptyAnimation;
57
- };
57
+ }
58
58
  /** Increments each track entry {@link TrackEntry#trackTime()}, setting queued animations as current if needed. */
59
- AnimationState.prototype.update = function (delta) {
59
+ update(delta) {
60
60
  delta *= this.timeScale;
61
- var tracks = this.tracks;
62
- for (var i = 0, n = tracks.length; i < n; i++) {
63
- var current = tracks[i];
61
+ let tracks = this.tracks;
62
+ for (let i = 0, n = tracks.length; i < n; i++) {
63
+ let current = tracks[i];
64
64
  if (!current)
65
65
  continue;
66
66
  current.animationLast = current.nextAnimationLast;
67
67
  current.trackLast = current.nextTrackLast;
68
- var currentDelta = delta * current.timeScale;
68
+ let currentDelta = delta * current.timeScale;
69
69
  if (current.delay > 0) {
70
70
  current.delay -= currentDelta;
71
71
  if (current.delay > 0)
@@ -73,10 +73,10 @@ var AnimationState = /** @class */ (function () {
73
73
  currentDelta = -current.delay;
74
74
  current.delay = 0;
75
75
  }
76
- var next = current.next;
76
+ let next = current.next;
77
77
  if (next) {
78
78
  // When the next entry's delay is passed, change to the next entry, preserving leftover time.
79
- var nextTime = current.trackLast - next.delay;
79
+ let nextTime = current.trackLast - next.delay;
80
80
  if (nextTime >= 0) {
81
81
  next.delay = 0;
82
82
  next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale;
@@ -97,7 +97,7 @@ var AnimationState = /** @class */ (function () {
97
97
  }
98
98
  if (current.mixingFrom && this.updateMixingFrom(current, delta)) {
99
99
  // End mixing from entries once all have completed.
100
- var from = current.mixingFrom;
100
+ let from = current.mixingFrom;
101
101
  current.mixingFrom = null;
102
102
  if (from)
103
103
  from.mixingTo = null;
@@ -109,13 +109,13 @@ var AnimationState = /** @class */ (function () {
109
109
  current.trackTime += currentDelta;
110
110
  }
111
111
  this.queue.drain();
112
- };
112
+ }
113
113
  /** Returns true when all mixing from entries are complete. */
114
- AnimationState.prototype.updateMixingFrom = function (to, delta) {
115
- var from = to.mixingFrom;
114
+ updateMixingFrom(to, delta) {
115
+ let from = to.mixingFrom;
116
116
  if (!from)
117
117
  return true;
118
- var finished = this.updateMixingFrom(from, delta);
118
+ let finished = this.updateMixingFrom(from, delta);
119
119
  from.animationLast = from.nextAnimationLast;
120
120
  from.trackLast = from.nextTrackLast;
121
121
  // Require mixTime > 0 to ensure the mixing from entry was applied at least once.
@@ -133,41 +133,41 @@ var AnimationState = /** @class */ (function () {
133
133
  from.trackTime += delta * from.timeScale;
134
134
  to.mixTime += delta;
135
135
  return false;
136
- };
136
+ }
137
137
  /** Poses the skeleton using the track entry animations. There are no side effects other than invoking listeners, so the
138
138
  * animation state can be applied to multiple skeletons to pose them identically.
139
139
  * @returns True if any animations were applied. */
140
- AnimationState.prototype.apply = function (skeleton) {
140
+ apply(skeleton) {
141
141
  if (!skeleton)
142
142
  throw new Error("skeleton cannot be null.");
143
143
  if (this.animationsChanged)
144
144
  this._animationsChanged();
145
- var events = this.events;
146
- var tracks = this.tracks;
147
- var applied = false;
148
- for (var i_1 = 0, n_1 = tracks.length; i_1 < n_1; i_1++) {
149
- var current = tracks[i_1];
145
+ let events = this.events;
146
+ let tracks = this.tracks;
147
+ let applied = false;
148
+ for (let i = 0, n = tracks.length; i < n; i++) {
149
+ let current = tracks[i];
150
150
  if (!current || current.delay > 0)
151
151
  continue;
152
152
  applied = true;
153
- var blend = i_1 == 0 ? MixBlend.first : current.mixBlend;
153
+ let blend = i == 0 ? MixBlend.first : current.mixBlend;
154
154
  // Apply mixing from entries first.
155
- var mix = current.alpha;
155
+ let mix = current.alpha;
156
156
  if (current.mixingFrom)
157
157
  mix *= this.applyMixingFrom(current, skeleton, blend);
158
158
  else if (current.trackTime >= current.trackEnd && !current.next)
159
159
  mix = 0;
160
160
  // Apply current entry.
161
- var animationLast = current.animationLast, animationTime = current.getAnimationTime(), applyTime = animationTime;
162
- var applyEvents = events;
161
+ let animationLast = current.animationLast, animationTime = current.getAnimationTime(), applyTime = animationTime;
162
+ let applyEvents = events;
163
163
  if (current.reverse) {
164
164
  applyTime = current.animation.duration - applyTime;
165
165
  applyEvents = null;
166
166
  }
167
- var timelines = current.animation.timelines;
168
- var timelineCount = timelines.length;
169
- if ((i_1 == 0 && mix == 1) || blend == MixBlend.add) {
170
- for (var ii = 0; ii < timelineCount; ii++) {
167
+ let timelines = current.animation.timelines;
168
+ let timelineCount = timelines.length;
169
+ if ((i == 0 && mix == 1) || blend == MixBlend.add) {
170
+ for (let ii = 0; ii < timelineCount; ii++) {
171
171
  // Fixes issue #302 on IOS9 where mix, blend sometimes became undefined and caused assets
172
172
  // to sometimes stop rendering when using color correction, as their RGBA values become NaN.
173
173
  // (https://github.com/pixijs/pixi-spine/issues/302)
@@ -180,23 +180,23 @@ var AnimationState = /** @class */ (function () {
180
180
  }
181
181
  }
182
182
  else {
183
- var timelineMode = current.timelineMode;
184
- var firstFrame = current.timelinesRotation.length != timelineCount << 1;
183
+ let timelineMode = current.timelineMode;
184
+ let firstFrame = current.timelinesRotation.length != timelineCount << 1;
185
185
  if (firstFrame)
186
186
  current.timelinesRotation.length = timelineCount << 1;
187
- for (var ii = 0; ii < timelineCount; ii++) {
188
- var timeline_1 = timelines[ii];
189
- var timelineBlend = timelineMode[ii] == SUBSEQUENT ? blend : MixBlend.setup;
190
- if (timeline_1 instanceof RotateTimeline) {
191
- this.applyRotateTimeline(timeline_1, skeleton, applyTime, mix, timelineBlend, current.timelinesRotation, ii << 1, firstFrame);
187
+ for (let ii = 0; ii < timelineCount; ii++) {
188
+ let timeline = timelines[ii];
189
+ let timelineBlend = timelineMode[ii] == SUBSEQUENT ? blend : MixBlend.setup;
190
+ if (timeline instanceof RotateTimeline) {
191
+ this.applyRotateTimeline(timeline, skeleton, applyTime, mix, timelineBlend, current.timelinesRotation, ii << 1, firstFrame);
192
192
  }
193
- else if (timeline_1 instanceof AttachmentTimeline) {
194
- this.applyAttachmentTimeline(timeline_1, skeleton, applyTime, blend, true);
193
+ else if (timeline instanceof AttachmentTimeline) {
194
+ this.applyAttachmentTimeline(timeline, skeleton, applyTime, blend, true);
195
195
  }
196
196
  else {
197
197
  // This fixes the WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109
198
198
  Utils.webkit602BugfixHelper(mix, blend);
199
- timeline_1.apply(skeleton, animationLast, applyTime, applyEvents, mix, timelineBlend, MixDirection.mixIn);
199
+ timeline.apply(skeleton, animationLast, applyTime, applyEvents, mix, timelineBlend, MixDirection.mixIn);
200
200
  }
201
201
  }
202
202
  }
@@ -220,12 +220,12 @@ var AnimationState = /** @class */ (function () {
220
220
  this.unkeyedState += 2; // Increasing after each use avoids the need to reset attachmentState for every slot.
221
221
  this.queue.drain();
222
222
  return applied;
223
- };
224
- AnimationState.prototype.applyMixingFrom = function (to, skeleton, blend) {
225
- var from = to.mixingFrom;
223
+ }
224
+ applyMixingFrom(to, skeleton, blend) {
225
+ let from = to.mixingFrom;
226
226
  if (from.mixingFrom)
227
227
  this.applyMixingFrom(from, skeleton, blend);
228
- var mix = 0;
228
+ let mix = 0;
229
229
  if (to.mixDuration == 0) { // Single frame mix to undo mixingFrom changes.
230
230
  mix = 1;
231
231
  if (blend == MixBlend.first)
@@ -238,32 +238,32 @@ var AnimationState = /** @class */ (function () {
238
238
  if (blend != MixBlend.first)
239
239
  blend = from.mixBlend;
240
240
  }
241
- var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold;
242
- var timelines = from.animation.timelines;
243
- var timelineCount = timelines.length;
244
- var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix);
245
- var animationLast = from.animationLast, animationTime = from.getAnimationTime(), applyTime = animationTime;
246
- var events = null;
241
+ let attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold;
242
+ let timelines = from.animation.timelines;
243
+ let timelineCount = timelines.length;
244
+ let alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix);
245
+ let animationLast = from.animationLast, animationTime = from.getAnimationTime(), applyTime = animationTime;
246
+ let events = null;
247
247
  if (from.reverse)
248
248
  applyTime = from.animation.duration - applyTime;
249
249
  else if (mix < from.eventThreshold)
250
250
  events = this.events;
251
251
  if (blend == MixBlend.add) {
252
- for (var i = 0; i < timelineCount; i++)
252
+ for (let i = 0; i < timelineCount; i++)
253
253
  timelines[i].apply(skeleton, animationLast, applyTime, events, alphaMix, blend, MixDirection.mixOut);
254
254
  }
255
255
  else {
256
- var timelineMode = from.timelineMode;
257
- var timelineHoldMix = from.timelineHoldMix;
258
- var firstFrame = from.timelinesRotation.length != timelineCount << 1;
256
+ let timelineMode = from.timelineMode;
257
+ let timelineHoldMix = from.timelineHoldMix;
258
+ let firstFrame = from.timelinesRotation.length != timelineCount << 1;
259
259
  if (firstFrame)
260
260
  from.timelinesRotation.length = timelineCount << 1;
261
261
  from.totalAlpha = 0;
262
- for (var i = 0; i < timelineCount; i++) {
263
- var timeline = timelines[i];
264
- var direction = MixDirection.mixOut;
265
- var timelineBlend = void 0;
266
- var alpha = 0;
262
+ for (let i = 0; i < timelineCount; i++) {
263
+ let timeline = timelines[i];
264
+ let direction = MixDirection.mixOut;
265
+ let timelineBlend;
266
+ let alpha = 0;
267
267
  switch (timelineMode[i]) {
268
268
  case SUBSEQUENT:
269
269
  if (!drawOrder && timeline instanceof DrawOrderTimeline)
@@ -285,7 +285,7 @@ var AnimationState = /** @class */ (function () {
285
285
  break;
286
286
  default:
287
287
  timelineBlend = MixBlend.setup;
288
- var holdMix = timelineHoldMix[i];
288
+ let holdMix = timelineHoldMix[i];
289
289
  alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration);
290
290
  break;
291
291
  }
@@ -309,8 +309,8 @@ var AnimationState = /** @class */ (function () {
309
309
  from.nextAnimationLast = animationTime;
310
310
  from.nextTrackLast = from.trackTime;
311
311
  return mix;
312
- };
313
- AnimationState.prototype.applyAttachmentTimeline = function (timeline, skeleton, time, blend, attachments) {
312
+ }
313
+ applyAttachmentTimeline(timeline, skeleton, time, blend, attachments) {
314
314
  var slot = skeleton.slots[timeline.slotIndex];
315
315
  if (!slot.bone.active)
316
316
  return;
@@ -323,24 +323,24 @@ var AnimationState = /** @class */ (function () {
323
323
  // If an attachment wasn't set (ie before the first frame or attachments is false), set the setup attachment later.
324
324
  if (slot.attachmentState <= this.unkeyedState)
325
325
  slot.attachmentState = this.unkeyedState + SETUP;
326
- };
327
- AnimationState.prototype.setAttachment = function (skeleton, slot, attachmentName, attachments) {
326
+ }
327
+ setAttachment(skeleton, slot, attachmentName, attachments) {
328
328
  slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName));
329
329
  if (attachments)
330
330
  slot.attachmentState = this.unkeyedState + CURRENT;
331
- };
332
- AnimationState.prototype.applyRotateTimeline = function (timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) {
331
+ }
332
+ applyRotateTimeline(timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) {
333
333
  if (firstFrame)
334
334
  timelinesRotation[i] = 0;
335
335
  if (alpha == 1) {
336
336
  timeline.apply(skeleton, 0, time, null, 1, blend, MixDirection.mixIn);
337
337
  return;
338
338
  }
339
- var bone = skeleton.bones[timeline.boneIndex];
339
+ let bone = skeleton.bones[timeline.boneIndex];
340
340
  if (!bone.active)
341
341
  return;
342
- var frames = timeline.frames;
343
- var r1 = 0, r2 = 0;
342
+ let frames = timeline.frames;
343
+ let r1 = 0, r2 = 0;
344
344
  if (time < frames[0]) {
345
345
  switch (blend) {
346
346
  case MixBlend.setup:
@@ -357,13 +357,13 @@ var AnimationState = /** @class */ (function () {
357
357
  r2 = bone.data.rotation + timeline.getCurveValue(time);
358
358
  }
359
359
  // Mix between rotations using the direction of the shortest route on the first frame while detecting crosses.
360
- var total = 0, diff = r2 - r1;
360
+ let total = 0, diff = r2 - r1;
361
361
  diff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360;
362
362
  if (diff == 0) {
363
363
  total = timelinesRotation[i];
364
364
  }
365
365
  else {
366
- var lastTotal = 0, lastDiff = 0;
366
+ let lastTotal = 0, lastDiff = 0;
367
367
  if (firstFrame) {
368
368
  lastTotal = 0;
369
369
  lastDiff = diff;
@@ -372,7 +372,7 @@ var AnimationState = /** @class */ (function () {
372
372
  lastTotal = timelinesRotation[i]; // Angle and direction of mix, including loops.
373
373
  lastDiff = timelinesRotation[i + 1]; // Difference between bones.
374
374
  }
375
- var current = diff > 0, dir = lastTotal >= 0;
375
+ let current = diff > 0, dir = lastTotal >= 0;
376
376
  // Detect cross at 0 (not 180).
377
377
  if (MathUtils.signum(lastDiff) != MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) {
378
378
  // A cross after a 360 rotation is a loop.
@@ -387,24 +387,24 @@ var AnimationState = /** @class */ (function () {
387
387
  }
388
388
  timelinesRotation[i + 1] = diff;
389
389
  bone.rotation = r1 + total * alpha;
390
- };
391
- AnimationState.prototype.queueEvents = function (entry, animationTime) {
392
- var animationStart = entry.animationStart, animationEnd = entry.animationEnd;
393
- var duration = animationEnd - animationStart;
394
- var trackLastWrapped = entry.trackLast % duration;
390
+ }
391
+ queueEvents(entry, animationTime) {
392
+ let animationStart = entry.animationStart, animationEnd = entry.animationEnd;
393
+ let duration = animationEnd - animationStart;
394
+ let trackLastWrapped = entry.trackLast % duration;
395
395
  // Queue events before complete.
396
- var events = this.events;
397
- var i = 0, n = events.length;
396
+ let events = this.events;
397
+ let i = 0, n = events.length;
398
398
  for (; i < n; i++) {
399
- var event_1 = events[i];
400
- if (event_1.time < trackLastWrapped)
399
+ let event = events[i];
400
+ if (event.time < trackLastWrapped)
401
401
  break;
402
- if (event_1.time > animationEnd)
402
+ if (event.time > animationEnd)
403
403
  continue; // Discard events outside animation start/end.
404
- this.queue.event(entry, event_1);
404
+ this.queue.event(entry, event);
405
405
  }
406
406
  // Queue complete if completed a loop iteration or the animation.
407
- var complete = false;
407
+ let complete = false;
408
408
  if (entry.loop)
409
409
  complete = duration == 0 || trackLastWrapped > entry.trackTime % duration;
410
410
  else
@@ -413,40 +413,40 @@ var AnimationState = /** @class */ (function () {
413
413
  this.queue.complete(entry);
414
414
  // Queue events after complete.
415
415
  for (; i < n; i++) {
416
- var event_2 = events[i];
417
- if (event_2.time < animationStart)
416
+ let event = events[i];
417
+ if (event.time < animationStart)
418
418
  continue; // Discard events outside animation start/end.
419
- this.queue.event(entry, event_2);
419
+ this.queue.event(entry, event);
420
420
  }
421
- };
421
+ }
422
422
  /** Removes all animations from all tracks, leaving skeletons in their current pose.
423
423
  *
424
424
  * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose,
425
425
  * rather than leaving them in their current pose. */
426
- AnimationState.prototype.clearTracks = function () {
427
- var oldDrainDisabled = this.queue.drainDisabled;
426
+ clearTracks() {
427
+ let oldDrainDisabled = this.queue.drainDisabled;
428
428
  this.queue.drainDisabled = true;
429
- for (var i = 0, n = this.tracks.length; i < n; i++)
429
+ for (let i = 0, n = this.tracks.length; i < n; i++)
430
430
  this.clearTrack(i);
431
431
  this.tracks.length = 0;
432
432
  this.queue.drainDisabled = oldDrainDisabled;
433
433
  this.queue.drain();
434
- };
434
+ }
435
435
  /** Removes all animations from the track, leaving skeletons in their current pose.
436
436
  *
437
437
  * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose,
438
438
  * rather than leaving them in their current pose. */
439
- AnimationState.prototype.clearTrack = function (trackIndex) {
439
+ clearTrack(trackIndex) {
440
440
  if (trackIndex >= this.tracks.length)
441
441
  return;
442
- var current = this.tracks[trackIndex];
442
+ let current = this.tracks[trackIndex];
443
443
  if (!current)
444
444
  return;
445
445
  this.queue.end(current);
446
446
  this.clearNext(current);
447
- var entry = current;
447
+ let entry = current;
448
448
  while (true) {
449
- var from = entry.mixingFrom;
449
+ let from = entry.mixingFrom;
450
450
  if (!from)
451
451
  break;
452
452
  this.queue.end(from);
@@ -456,9 +456,9 @@ var AnimationState = /** @class */ (function () {
456
456
  }
457
457
  this.tracks[current.trackIndex] = null;
458
458
  this.queue.drain();
459
- };
460
- AnimationState.prototype.setCurrent = function (index, current, interrupt) {
461
- var from = this.expandToIndex(index);
459
+ }
460
+ setCurrent(index, current, interrupt) {
461
+ let from = this.expandToIndex(index);
462
462
  this.tracks[index] = current;
463
463
  current.previous = null;
464
464
  if (from) {
@@ -473,29 +473,27 @@ var AnimationState = /** @class */ (function () {
473
473
  from.timelinesRotation.length = 0; // Reset rotation for mixing out, in case entry was mixed in.
474
474
  }
475
475
  this.queue.start(current);
476
- };
476
+ }
477
477
  /** Sets an animation by name.
478
478
  *
479
479
  * See {@link #setAnimationWith()}. */
480
- AnimationState.prototype.setAnimation = function (trackIndex, animationName, loop) {
481
- if (loop === void 0) { loop = false; }
482
- var animation = this.data.skeletonData.findAnimation(animationName);
480
+ setAnimation(trackIndex, animationName, loop = false) {
481
+ let animation = this.data.skeletonData.findAnimation(animationName);
483
482
  if (!animation)
484
483
  throw new Error("Animation not found: " + animationName);
485
484
  return this.setAnimationWith(trackIndex, animation, loop);
486
- };
485
+ }
487
486
  /** Sets the current animation for a track, discarding any queued animations. If the formerly current track entry was never
488
487
  * applied to a skeleton, it is replaced (not mixed from).
489
488
  * @param loop If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its
490
489
  * duration. In either case {@link TrackEntry#trackEnd} determines when the track is cleared.
491
490
  * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept
492
491
  * after the {@link AnimationStateListener#dispose()} event occurs. */
493
- AnimationState.prototype.setAnimationWith = function (trackIndex, animation, loop) {
494
- if (loop === void 0) { loop = false; }
492
+ setAnimationWith(trackIndex, animation, loop = false) {
495
493
  if (!animation)
496
494
  throw new Error("animation cannot be null.");
497
- var interrupt = true;
498
- var current = this.expandToIndex(trackIndex);
495
+ let interrupt = true;
496
+ let current = this.expandToIndex(trackIndex);
499
497
  if (current) {
500
498
  if (current.nextTrackLast == -1) {
501
499
  // Don't mix from an entry that was never applied.
@@ -509,22 +507,20 @@ var AnimationState = /** @class */ (function () {
509
507
  else
510
508
  this.clearNext(current);
511
509
  }
512
- var entry = this.trackEntry(trackIndex, animation, loop, current);
510
+ let entry = this.trackEntry(trackIndex, animation, loop, current);
513
511
  this.setCurrent(trackIndex, entry, interrupt);
514
512
  this.queue.drain();
515
513
  return entry;
516
- };
514
+ }
517
515
  /** Queues an animation by name.
518
516
  *
519
517
  * See {@link #addAnimationWith()}. */
520
- AnimationState.prototype.addAnimation = function (trackIndex, animationName, loop, delay) {
521
- if (loop === void 0) { loop = false; }
522
- if (delay === void 0) { delay = 0; }
523
- var animation = this.data.skeletonData.findAnimation(animationName);
518
+ addAnimation(trackIndex, animationName, loop = false, delay = 0) {
519
+ let animation = this.data.skeletonData.findAnimation(animationName);
524
520
  if (!animation)
525
521
  throw new Error("Animation not found: " + animationName);
526
522
  return this.addAnimationWith(trackIndex, animation, loop, delay);
527
- };
523
+ }
528
524
  /** Adds an animation to be played after the current or last queued animation for a track. If the track is empty, it is
529
525
  * equivalent to calling {@link #setAnimationWith()}.
530
526
  * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry
@@ -533,17 +529,15 @@ var AnimationState = /** @class */ (function () {
533
529
  * previous entry is looping, its next loop completion is used instead of its duration.
534
530
  * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept
535
531
  * after the {@link AnimationStateListener#dispose()} event occurs. */
536
- AnimationState.prototype.addAnimationWith = function (trackIndex, animation, loop, delay) {
537
- if (loop === void 0) { loop = false; }
538
- if (delay === void 0) { delay = 0; }
532
+ addAnimationWith(trackIndex, animation, loop = false, delay = 0) {
539
533
  if (!animation)
540
534
  throw new Error("animation cannot be null.");
541
- var last = this.expandToIndex(trackIndex);
535
+ let last = this.expandToIndex(trackIndex);
542
536
  if (last) {
543
537
  while (last.next)
544
538
  last = last.next;
545
539
  }
546
- var entry = this.trackEntry(trackIndex, animation, loop, last);
540
+ let entry = this.trackEntry(trackIndex, animation, loop, last);
547
541
  if (!last) {
548
542
  this.setCurrent(trackIndex, entry, true);
549
543
  this.queue.drain();
@@ -556,7 +550,7 @@ var AnimationState = /** @class */ (function () {
556
550
  }
557
551
  entry.delay = delay;
558
552
  return entry;
559
- };
553
+ }
560
554
  /** Sets an empty animation for a track, discarding any queued animations, and sets the track entry's
561
555
  * {@link TrackEntry#mixduration}. An empty animation has no timelines and serves as a placeholder for mixing in or out.
562
556
  *
@@ -571,13 +565,12 @@ var AnimationState = /** @class */ (function () {
571
565
  * {@link TrackEntry#setMixDuration()}. Mixing from an empty animation causes the new animation to be applied more and
572
566
  * more over the mix duration. Properties keyed in the new animation transition from the value from lower tracks or from the
573
567
  * setup pose value if no lower tracks key the property to the value keyed in the new animation. */
574
- AnimationState.prototype.setEmptyAnimation = function (trackIndex, mixDuration) {
575
- if (mixDuration === void 0) { mixDuration = 0; }
576
- var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation(), false);
568
+ setEmptyAnimation(trackIndex, mixDuration = 0) {
569
+ let entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation(), false);
577
570
  entry.mixDuration = mixDuration;
578
571
  entry.trackEnd = mixDuration;
579
572
  return entry;
580
- };
573
+ }
581
574
  /** Adds an empty animation to be played after the current or last queued animation for a track, and sets the track entry's
582
575
  * {@link TrackEntry#mixDuration}. If the track is empty, it is equivalent to calling
583
576
  * {@link #setEmptyAnimation()}.
@@ -589,40 +582,37 @@ var AnimationState = /** @class */ (function () {
589
582
  * loop completion is used instead of its duration.
590
583
  * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept
591
584
  * after the {@link AnimationStateListener#dispose()} event occurs. */
592
- AnimationState.prototype.addEmptyAnimation = function (trackIndex, mixDuration, delay) {
593
- if (mixDuration === void 0) { mixDuration = 0; }
594
- if (delay === void 0) { delay = 0; }
595
- var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation(), false, delay);
585
+ addEmptyAnimation(trackIndex, mixDuration = 0, delay = 0) {
586
+ let entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation(), false, delay);
596
587
  if (delay <= 0)
597
588
  entry.delay += entry.mixDuration - mixDuration;
598
589
  entry.mixDuration = mixDuration;
599
590
  entry.trackEnd = mixDuration;
600
591
  return entry;
601
- };
592
+ }
602
593
  /** Sets an empty animation for every track, discarding any queued animations, and mixes to it over the specified mix
603
594
  * duration. */
604
- AnimationState.prototype.setEmptyAnimations = function (mixDuration) {
605
- if (mixDuration === void 0) { mixDuration = 0; }
606
- var oldDrainDisabled = this.queue.drainDisabled;
595
+ setEmptyAnimations(mixDuration = 0) {
596
+ let oldDrainDisabled = this.queue.drainDisabled;
607
597
  this.queue.drainDisabled = true;
608
- for (var i = 0, n = this.tracks.length; i < n; i++) {
609
- var current = this.tracks[i];
598
+ for (let i = 0, n = this.tracks.length; i < n; i++) {
599
+ let current = this.tracks[i];
610
600
  if (current)
611
601
  this.setEmptyAnimation(current.trackIndex, mixDuration);
612
602
  }
613
603
  this.queue.drainDisabled = oldDrainDisabled;
614
604
  this.queue.drain();
615
- };
616
- AnimationState.prototype.expandToIndex = function (index) {
605
+ }
606
+ expandToIndex(index) {
617
607
  if (index < this.tracks.length)
618
608
  return this.tracks[index];
619
609
  Utils.ensureArrayCapacity(this.tracks, index + 1, null);
620
610
  this.tracks.length = index + 1;
621
611
  return null;
622
- };
612
+ }
623
613
  /** @param last May be null. */
624
- AnimationState.prototype.trackEntry = function (trackIndex, animation, loop, last) {
625
- var entry = this.trackEntryPool.obtain();
614
+ trackEntry(trackIndex, animation, loop, last) {
615
+ let entry = this.trackEntryPool.obtain();
626
616
  entry.trackIndex = trackIndex;
627
617
  entry.animation = animation;
628
618
  entry.loop = loop;
@@ -646,22 +636,22 @@ var AnimationState = /** @class */ (function () {
646
636
  entry.mixDuration = !last ? 0 : this.data.getMix(last.animation, animation);
647
637
  entry.mixBlend = MixBlend.replace;
648
638
  return entry;
649
- };
639
+ }
650
640
  /** Removes the {@link TrackEntry#getNext() next entry} and all entries after it for the specified entry. */
651
- AnimationState.prototype.clearNext = function (entry) {
652
- var next = entry.next;
641
+ clearNext(entry) {
642
+ let next = entry.next;
653
643
  while (next) {
654
644
  this.queue.dispose(next);
655
645
  next = next.next;
656
646
  }
657
647
  entry.next = null;
658
- };
659
- AnimationState.prototype._animationsChanged = function () {
648
+ }
649
+ _animationsChanged() {
660
650
  this.animationsChanged = false;
661
651
  this.propertyIDs.clear();
662
- var tracks = this.tracks;
663
- for (var i = 0, n = tracks.length; i < n; i++) {
664
- var entry = tracks[i];
652
+ let tracks = this.tracks;
653
+ for (let i = 0, n = tracks.length; i < n; i++) {
654
+ let entry = tracks[i];
665
655
  if (!entry)
666
656
  continue;
667
657
  while (entry.mixingFrom)
@@ -672,24 +662,24 @@ var AnimationState = /** @class */ (function () {
672
662
  entry = entry.mixingTo;
673
663
  } while (entry);
674
664
  }
675
- };
676
- AnimationState.prototype.computeHold = function (entry) {
677
- var to = entry.mixingTo;
678
- var timelines = entry.animation.timelines;
679
- var timelinesCount = entry.animation.timelines.length;
680
- var timelineMode = entry.timelineMode;
665
+ }
666
+ computeHold(entry) {
667
+ let to = entry.mixingTo;
668
+ let timelines = entry.animation.timelines;
669
+ let timelinesCount = entry.animation.timelines.length;
670
+ let timelineMode = entry.timelineMode;
681
671
  timelineMode.length = timelinesCount;
682
- var timelineHoldMix = entry.timelineHoldMix;
672
+ let timelineHoldMix = entry.timelineHoldMix;
683
673
  timelineHoldMix.length = 0;
684
- var propertyIDs = this.propertyIDs;
674
+ let propertyIDs = this.propertyIDs;
685
675
  if (to && to.holdPrevious) {
686
- for (var i = 0; i < timelinesCount; i++)
676
+ for (let i = 0; i < timelinesCount; i++)
687
677
  timelineMode[i] = propertyIDs.addAll(timelines[i].getPropertyIds()) ? HOLD_FIRST : HOLD_SUBSEQUENT;
688
678
  return;
689
679
  }
690
- outer: for (var i = 0; i < timelinesCount; i++) {
691
- var timeline = timelines[i];
692
- var ids = timeline.getPropertyIds();
680
+ outer: for (let i = 0; i < timelinesCount; i++) {
681
+ let timeline = timelines[i];
682
+ let ids = timeline.getPropertyIds();
693
683
  if (!propertyIDs.addAll(ids))
694
684
  timelineMode[i] = SUBSEQUENT;
695
685
  else if (!to || timeline instanceof AttachmentTimeline || timeline instanceof DrawOrderTimeline
@@ -697,7 +687,7 @@ var AnimationState = /** @class */ (function () {
697
687
  timelineMode[i] = FIRST;
698
688
  }
699
689
  else {
700
- for (var next = to.mixingTo; next; next = next.mixingTo) {
690
+ for (let next = to.mixingTo; next; next = next.mixingTo) {
701
691
  if (next.animation.hasTimeline(ids))
702
692
  continue;
703
693
  if (entry.mixDuration > 0) {
@@ -710,43 +700,41 @@ var AnimationState = /** @class */ (function () {
710
700
  timelineMode[i] = HOLD_FIRST;
711
701
  }
712
702
  }
713
- };
703
+ }
714
704
  /** Returns the track entry for the animation currently playing on the track, or null if no animation is currently playing. */
715
- AnimationState.prototype.getCurrent = function (trackIndex) {
705
+ getCurrent(trackIndex) {
716
706
  if (trackIndex >= this.tracks.length)
717
707
  return null;
718
708
  return this.tracks[trackIndex];
719
- };
709
+ }
720
710
  /** Adds a listener to receive events for all track entries. */
721
- AnimationState.prototype.addListener = function (listener) {
711
+ addListener(listener) {
722
712
  if (!listener)
723
713
  throw new Error("listener cannot be null.");
724
714
  this.listeners.push(listener);
725
- };
715
+ }
726
716
  /** Removes the listener added with {@link #addListener()}. */
727
- AnimationState.prototype.removeListener = function (listener) {
728
- var index = this.listeners.indexOf(listener);
717
+ removeListener(listener) {
718
+ let index = this.listeners.indexOf(listener);
729
719
  if (index >= 0)
730
720
  this.listeners.splice(index, 1);
731
- };
721
+ }
732
722
  /** Removes all listeners added with {@link #addListener()}. */
733
- AnimationState.prototype.clearListeners = function () {
723
+ clearListeners() {
734
724
  this.listeners.length = 0;
735
- };
725
+ }
736
726
  /** Discards all listener notifications that have not yet been delivered. This can be useful to call from an
737
727
  * {@link AnimationStateListener} when it is known that further notifications that may have been already queued for delivery
738
728
  * are not wanted because new animations are being set. */
739
- AnimationState.prototype.clearListenerNotifications = function () {
729
+ clearListenerNotifications() {
740
730
  this.queue.clear();
741
- };
742
- return AnimationState;
743
- }());
744
- export { AnimationState };
731
+ }
732
+ }
745
733
  /** Stores settings and other state for the playback of an animation on an {@link AnimationState} track.
746
734
  *
747
735
  * References to a track entry must not be kept after the {@link AnimationStateListener#dispose()} event occurs. */
748
- var TrackEntry = /** @class */ (function () {
749
- function TrackEntry() {
736
+ export class TrackEntry {
737
+ constructor() {
750
738
  /** Controls how properties keyed in the animation are mixed with lower tracks. Defaults to {@link MixBlend#replace}, which
751
739
  * replaces the values from the lower tracks with the animation values. {@link MixBlend#add} adds the animation values to
752
740
  * the values from the lower tracks.
@@ -758,7 +746,7 @@ var TrackEntry = /** @class */ (function () {
758
746
  this.timelineHoldMix = new Array();
759
747
  this.timelinesRotation = new Array();
760
748
  }
761
- TrackEntry.prototype.reset = function () {
749
+ reset() {
762
750
  this.next = null;
763
751
  this.previous = null;
764
752
  this.mixingFrom = null;
@@ -768,29 +756,29 @@ var TrackEntry = /** @class */ (function () {
768
756
  this.timelineMode.length = 0;
769
757
  this.timelineHoldMix.length = 0;
770
758
  this.timelinesRotation.length = 0;
771
- };
759
+ }
772
760
  /** Uses {@link #trackTime} to compute the `animationTime`, which is between {@link #animationStart}
773
761
  * and {@link #animationEnd}. When the `trackTime` is 0, the `animationTime` is equal to the
774
762
  * `animationStart` time. */
775
- TrackEntry.prototype.getAnimationTime = function () {
763
+ getAnimationTime() {
776
764
  if (this.loop) {
777
- var duration = this.animationEnd - this.animationStart;
765
+ let duration = this.animationEnd - this.animationStart;
778
766
  if (duration == 0)
779
767
  return this.animationStart;
780
768
  return (this.trackTime % duration) + this.animationStart;
781
769
  }
782
770
  return Math.min(this.trackTime + this.animationStart, this.animationEnd);
783
- };
784
- TrackEntry.prototype.setAnimationLast = function (animationLast) {
771
+ }
772
+ setAnimationLast(animationLast) {
785
773
  this.animationLast = animationLast;
786
774
  this.nextAnimationLast = animationLast;
787
- };
775
+ }
788
776
  /** Returns true if at least one loop has been completed.
789
777
  *
790
778
  * See {@link AnimationStateListener#complete()}. */
791
- TrackEntry.prototype.isComplete = function () {
779
+ isComplete() {
792
780
  return this.trackTime >= this.animationEnd - this.animationStart;
793
- };
781
+ }
794
782
  /** Resets the rotation directions for mixing this entry's rotate timelines. This can be useful to avoid bones rotating the
795
783
  * long way around when using {@link #alpha} and starting animations on other tracks.
796
784
  *
@@ -798,11 +786,11 @@ var TrackEntry = /** @class */ (function () {
798
786
  * the short way or the long way around. The two rotations likely change over time, so which direction is the short or long
799
787
  * way also changes. If the short way was always chosen, bones would flip to the other side when that direction became the
800
788
  * long way. TrackEntry chooses the short way the first time it is applied and remembers that direction. */
801
- TrackEntry.prototype.resetRotationDirections = function () {
789
+ resetRotationDirections() {
802
790
  this.timelinesRotation.length = 0;
803
- };
804
- TrackEntry.prototype.getTrackComplete = function () {
805
- var duration = this.animationEnd - this.animationStart;
791
+ }
792
+ getTrackComplete() {
793
+ let duration = this.animationEnd - this.animationStart;
806
794
  if (duration != 0) {
807
795
  if (this.loop)
808
796
  return duration * (1 + ((this.trackTime / duration) | 0)); // Completion of next loop.
@@ -810,78 +798,76 @@ var TrackEntry = /** @class */ (function () {
810
798
  return duration; // Before duration.
811
799
  }
812
800
  return this.trackTime; // Next update.
813
- };
814
- return TrackEntry;
815
- }());
816
- export { TrackEntry };
817
- var EventQueue = /** @class */ (function () {
818
- function EventQueue(animState) {
801
+ }
802
+ }
803
+ export class EventQueue {
804
+ constructor(animState) {
819
805
  this.objects = [];
820
806
  this.drainDisabled = false;
821
807
  this.animState = animState;
822
808
  }
823
- EventQueue.prototype.start = function (entry) {
809
+ start(entry) {
824
810
  this.objects.push(EventType.start);
825
811
  this.objects.push(entry);
826
812
  this.animState.animationsChanged = true;
827
- };
828
- EventQueue.prototype.interrupt = function (entry) {
813
+ }
814
+ interrupt(entry) {
829
815
  this.objects.push(EventType.interrupt);
830
816
  this.objects.push(entry);
831
- };
832
- EventQueue.prototype.end = function (entry) {
817
+ }
818
+ end(entry) {
833
819
  this.objects.push(EventType.end);
834
820
  this.objects.push(entry);
835
821
  this.animState.animationsChanged = true;
836
- };
837
- EventQueue.prototype.dispose = function (entry) {
822
+ }
823
+ dispose(entry) {
838
824
  this.objects.push(EventType.dispose);
839
825
  this.objects.push(entry);
840
- };
841
- EventQueue.prototype.complete = function (entry) {
826
+ }
827
+ complete(entry) {
842
828
  this.objects.push(EventType.complete);
843
829
  this.objects.push(entry);
844
- };
845
- EventQueue.prototype.event = function (entry, event) {
830
+ }
831
+ event(entry, event) {
846
832
  this.objects.push(EventType.event);
847
833
  this.objects.push(entry);
848
834
  this.objects.push(event);
849
- };
850
- EventQueue.prototype.drain = function () {
835
+ }
836
+ drain() {
851
837
  if (this.drainDisabled)
852
838
  return;
853
839
  this.drainDisabled = true;
854
- var objects = this.objects;
855
- var listeners = this.animState.listeners;
856
- for (var i = 0; i < objects.length; i += 2) {
857
- var type = objects[i];
858
- var entry = objects[i + 1];
840
+ let objects = this.objects;
841
+ let listeners = this.animState.listeners;
842
+ for (let i = 0; i < objects.length; i += 2) {
843
+ let type = objects[i];
844
+ let entry = objects[i + 1];
859
845
  switch (type) {
860
846
  case EventType.start:
861
847
  if (entry.listener && entry.listener.start)
862
848
  entry.listener.start(entry);
863
- for (var ii = 0; ii < listeners.length; ii++)
849
+ for (let ii = 0; ii < listeners.length; ii++)
864
850
  if (listeners[ii].start)
865
851
  listeners[ii].start(entry);
866
852
  break;
867
853
  case EventType.interrupt:
868
854
  if (entry.listener && entry.listener.interrupt)
869
855
  entry.listener.interrupt(entry);
870
- for (var ii = 0; ii < listeners.length; ii++)
856
+ for (let ii = 0; ii < listeners.length; ii++)
871
857
  if (listeners[ii].interrupt)
872
858
  listeners[ii].interrupt(entry);
873
859
  break;
874
860
  case EventType.end:
875
861
  if (entry.listener && entry.listener.end)
876
862
  entry.listener.end(entry);
877
- for (var ii = 0; ii < listeners.length; ii++)
863
+ for (let ii = 0; ii < listeners.length; ii++)
878
864
  if (listeners[ii].end)
879
865
  listeners[ii].end(entry);
880
866
  // Fall through.
881
867
  case EventType.dispose:
882
868
  if (entry.listener && entry.listener.dispose)
883
869
  entry.listener.dispose(entry);
884
- for (var ii = 0; ii < listeners.length; ii++)
870
+ for (let ii = 0; ii < listeners.length; ii++)
885
871
  if (listeners[ii].dispose)
886
872
  listeners[ii].dispose(entry);
887
873
  this.animState.trackEntryPool.free(entry);
@@ -889,29 +875,27 @@ var EventQueue = /** @class */ (function () {
889
875
  case EventType.complete:
890
876
  if (entry.listener && entry.listener.complete)
891
877
  entry.listener.complete(entry);
892
- for (var ii = 0; ii < listeners.length; ii++)
878
+ for (let ii = 0; ii < listeners.length; ii++)
893
879
  if (listeners[ii].complete)
894
880
  listeners[ii].complete(entry);
895
881
  break;
896
882
  case EventType.event:
897
- var event_3 = objects[i++ + 2];
883
+ let event = objects[i++ + 2];
898
884
  if (entry.listener && entry.listener.event)
899
- entry.listener.event(entry, event_3);
900
- for (var ii = 0; ii < listeners.length; ii++)
885
+ entry.listener.event(entry, event);
886
+ for (let ii = 0; ii < listeners.length; ii++)
901
887
  if (listeners[ii].event)
902
- listeners[ii].event(entry, event_3);
888
+ listeners[ii].event(entry, event);
903
889
  break;
904
890
  }
905
891
  }
906
892
  this.clear();
907
893
  this.drainDisabled = false;
908
- };
909
- EventQueue.prototype.clear = function () {
894
+ }
895
+ clear() {
910
896
  this.objects.length = 0;
911
- };
912
- return EventQueue;
913
- }());
914
- export { EventQueue };
897
+ }
898
+ }
915
899
  export var EventType;
916
900
  (function (EventType) {
917
901
  EventType[EventType["start"] = 0] = "start";
@@ -921,45 +905,41 @@ export var EventType;
921
905
  EventType[EventType["complete"] = 4] = "complete";
922
906
  EventType[EventType["event"] = 5] = "event";
923
907
  })(EventType || (EventType = {}));
924
- var AnimationStateAdapter = /** @class */ (function () {
925
- function AnimationStateAdapter() {
926
- }
927
- AnimationStateAdapter.prototype.start = function (entry) {
928
- };
929
- AnimationStateAdapter.prototype.interrupt = function (entry) {
930
- };
931
- AnimationStateAdapter.prototype.end = function (entry) {
932
- };
933
- AnimationStateAdapter.prototype.dispose = function (entry) {
934
- };
935
- AnimationStateAdapter.prototype.complete = function (entry) {
936
- };
937
- AnimationStateAdapter.prototype.event = function (entry, event) {
938
- };
939
- return AnimationStateAdapter;
940
- }());
941
- export { AnimationStateAdapter };
908
+ export class AnimationStateAdapter {
909
+ start(entry) {
910
+ }
911
+ interrupt(entry) {
912
+ }
913
+ end(entry) {
914
+ }
915
+ dispose(entry) {
916
+ }
917
+ complete(entry) {
918
+ }
919
+ event(entry, event) {
920
+ }
921
+ }
942
922
  /** 1. A previously applied timeline has set this property.
943
923
  *
944
924
  * Result: Mix from the current pose to the timeline pose. */
945
- export var SUBSEQUENT = 0;
925
+ export const SUBSEQUENT = 0;
946
926
  /** 1. This is the first timeline to set this property.
947
927
  * 2. The next track entry applied after this one does not have a timeline to set this property.
948
928
  *
949
929
  * Result: Mix from the setup pose to the timeline pose. */
950
- export var FIRST = 1;
930
+ export const FIRST = 1;
951
931
  /** 1) A previously applied timeline has set this property.<br>
952
932
  * 2) The next track entry to be applied does have a timeline to set this property.<br>
953
933
  * 3) The next track entry after that one does not have a timeline to set this property.<br>
954
934
  * Result: Mix from the current pose to the timeline pose, but do not mix out. This avoids "dipping" when crossfading
955
935
  * animations that key the same property. A subsequent timeline will set this property using a mix. */
956
- export var HOLD_SUBSEQUENT = 2;
936
+ export const HOLD_SUBSEQUENT = 2;
957
937
  /** 1) This is the first timeline to set this property.<br>
958
938
  * 2) The next track entry to be applied does have a timeline to set this property.<br>
959
939
  * 3) The next track entry after that one does not have a timeline to set this property.<br>
960
940
  * Result: Mix from the setup pose to the timeline pose, but do not mix out. This avoids "dipping" when crossfading animations
961
941
  * that key the same property. A subsequent timeline will set this property using a mix. */
962
- export var HOLD_FIRST = 3;
942
+ export const HOLD_FIRST = 3;
963
943
  /** 1. This is the first timeline to set this property.
964
944
  * 2. The next track entry to be applied does have a timeline to set this property.
965
945
  * 3. The next track entry after that one does have a timeline to set this property.
@@ -972,8 +952,8 @@ export var HOLD_FIRST = 3;
972
952
  * "dipping" A is not mixed out, however D (the first entry that doesn't set the property) mixing in is used to mix out A
973
953
  * (which affects B and C). Without using D to mix out, A would be applied fully until mixing completes, then snap into
974
954
  * place. */
975
- export var HOLD_MIX = 4;
976
- export var SETUP = 1;
977
- export var CURRENT = 2;
978
- var _emptyAnimation = null;
979
- //# sourceMappingURL=AnimationState.js.map
955
+ export const HOLD_MIX = 4;
956
+ export const SETUP = 1;
957
+ export const CURRENT = 2;
958
+ let _emptyAnimation = null;
959
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5pbWF0aW9uU3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQW5pbWF0aW9uU3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUloSixPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBSTVEOzs7b0hBR29IO0FBQ3BILE1BQU0sT0FBTyxjQUFjO0lBMkIxQixZQUFhLElBQXdCO1FBbEJyQyx5RkFBeUY7UUFDekYsV0FBTSxHQUFHLElBQUksS0FBSyxFQUFjLENBQUM7UUFFakM7OzsyRkFHbUY7UUFDbkYsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRWpCLFdBQU0sR0FBRyxJQUFJLEtBQUssRUFBUyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxJQUFJLEtBQUssRUFBMEIsQ0FBQztRQUNoRCxVQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsZ0JBQVcsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQzlCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUUxQixtQkFBYyxHQUFHLElBQUksSUFBSSxDQUFhLEdBQUcsRUFBRSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQztRQUc3RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0lBNUJPLE1BQU0sQ0FBQyxjQUFjO1FBQzVCLElBQUksQ0FBQyxlQUFlO1lBQUUsZUFBZSxHQUFHLElBQUksU0FBUyxDQUFDLFNBQVMsRUFBRSxF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