@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
package/dist/Skeleton.js CHANGED
@@ -38,8 +38,8 @@ import { Color, Utils, MathUtils } from "./Utils";
38
38
  /** Stores the current pose for a skeleton.
39
39
  *
40
40
  * See [Instance objects](http://esotericsoftware.com/spine-runtime-architecture#Instance-objects) in the Spine Runtimes Guide. */
41
- var Skeleton = /** @class */ (function () {
42
- function Skeleton(data) {
41
+ export class Skeleton {
42
+ constructor(data) {
43
43
  /** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link #updateCache()}. */
44
44
  this._updateCache = new Array();
45
45
  /** Returns the skeleton's time. This can be used for tracking, such as with Slot {@link Slot#attachmentTime}.
@@ -60,40 +60,40 @@ var Skeleton = /** @class */ (function () {
60
60
  throw new Error("data cannot be null.");
61
61
  this.data = data;
62
62
  this.bones = new Array();
63
- for (var i = 0; i < data.bones.length; i++) {
64
- var boneData = data.bones[i];
65
- var bone = void 0;
63
+ for (let i = 0; i < data.bones.length; i++) {
64
+ let boneData = data.bones[i];
65
+ let bone;
66
66
  if (!boneData.parent)
67
67
  bone = new Bone(boneData, this, null);
68
68
  else {
69
- var parent_1 = this.bones[boneData.parent.index];
70
- bone = new Bone(boneData, this, parent_1);
71
- parent_1.children.push(bone);
69
+ let parent = this.bones[boneData.parent.index];
70
+ bone = new Bone(boneData, this, parent);
71
+ parent.children.push(bone);
72
72
  }
73
73
  this.bones.push(bone);
74
74
  }
75
75
  this.slots = new Array();
76
76
  this.drawOrder = new Array();
77
- for (var i = 0; i < data.slots.length; i++) {
78
- var slotData = data.slots[i];
79
- var bone = this.bones[slotData.boneData.index];
80
- var slot = new Slot(slotData, bone);
77
+ for (let i = 0; i < data.slots.length; i++) {
78
+ let slotData = data.slots[i];
79
+ let bone = this.bones[slotData.boneData.index];
80
+ let slot = new Slot(slotData, bone);
81
81
  this.slots.push(slot);
82
82
  this.drawOrder.push(slot);
83
83
  }
84
84
  this.ikConstraints = new Array();
85
- for (var i = 0; i < data.ikConstraints.length; i++) {
86
- var ikConstraintData = data.ikConstraints[i];
85
+ for (let i = 0; i < data.ikConstraints.length; i++) {
86
+ let ikConstraintData = data.ikConstraints[i];
87
87
  this.ikConstraints.push(new IkConstraint(ikConstraintData, this));
88
88
  }
89
89
  this.transformConstraints = new Array();
90
- for (var i = 0; i < data.transformConstraints.length; i++) {
91
- var transformConstraintData = data.transformConstraints[i];
90
+ for (let i = 0; i < data.transformConstraints.length; i++) {
91
+ let transformConstraintData = data.transformConstraints[i];
92
92
  this.transformConstraints.push(new TransformConstraint(transformConstraintData, this));
93
93
  }
94
94
  this.pathConstraints = new Array();
95
- for (var i = 0; i < data.pathConstraints.length; i++) {
96
- var pathConstraintData = data.pathConstraints[i];
95
+ for (let i = 0; i < data.pathConstraints.length; i++) {
96
+ let pathConstraintData = data.pathConstraints[i];
97
97
  this.pathConstraints.push(new PathConstraint(pathConstraintData, this));
98
98
  }
99
99
  this.color = new Color(1, 1, 1, 1);
@@ -101,19 +101,19 @@ var Skeleton = /** @class */ (function () {
101
101
  }
102
102
  /** Caches information about bones and constraints. Must be called if the {@link #getSkin()} is modified or if bones,
103
103
  * constraints, or weighted path attachments are added or removed. */
104
- Skeleton.prototype.updateCache = function () {
105
- var updateCache = this._updateCache;
104
+ updateCache() {
105
+ let updateCache = this._updateCache;
106
106
  updateCache.length = 0;
107
- var bones = this.bones;
108
- for (var i = 0, n = bones.length; i < n; i++) {
109
- var bone = bones[i];
107
+ let bones = this.bones;
108
+ for (let i = 0, n = bones.length; i < n; i++) {
109
+ let bone = bones[i];
110
110
  bone.sorted = bone.data.skinRequired;
111
111
  bone.active = !bone.sorted;
112
112
  }
113
113
  if (this.skin) {
114
- var skinBones = this.skin.bones;
115
- for (var i = 0, n = this.skin.bones.length; i < n; i++) {
116
- var bone = this.bones[skinBones[i].index];
114
+ let skinBones = this.skin.bones;
115
+ for (let i = 0, n = this.skin.bones.length; i < n; i++) {
116
+ let bone = this.bones[skinBones[i].index];
117
117
  do {
118
118
  bone.sorted = false;
119
119
  bone.active = true;
@@ -122,160 +122,160 @@ var Skeleton = /** @class */ (function () {
122
122
  }
123
123
  }
124
124
  // IK first, lowest hierarchy depth first.
125
- var ikConstraints = this.ikConstraints;
126
- var transformConstraints = this.transformConstraints;
127
- var pathConstraints = this.pathConstraints;
128
- var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length;
129
- var constraintCount = ikCount + transformCount + pathCount;
130
- outer: for (var i = 0; i < constraintCount; i++) {
131
- for (var ii = 0; ii < ikCount; ii++) {
132
- var constraint = ikConstraints[ii];
125
+ let ikConstraints = this.ikConstraints;
126
+ let transformConstraints = this.transformConstraints;
127
+ let pathConstraints = this.pathConstraints;
128
+ let ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length;
129
+ let constraintCount = ikCount + transformCount + pathCount;
130
+ outer: for (let i = 0; i < constraintCount; i++) {
131
+ for (let ii = 0; ii < ikCount; ii++) {
132
+ let constraint = ikConstraints[ii];
133
133
  if (constraint.data.order == i) {
134
134
  this.sortIkConstraint(constraint);
135
135
  continue outer;
136
136
  }
137
137
  }
138
- for (var ii = 0; ii < transformCount; ii++) {
139
- var constraint = transformConstraints[ii];
138
+ for (let ii = 0; ii < transformCount; ii++) {
139
+ let constraint = transformConstraints[ii];
140
140
  if (constraint.data.order == i) {
141
141
  this.sortTransformConstraint(constraint);
142
142
  continue outer;
143
143
  }
144
144
  }
145
- for (var ii = 0; ii < pathCount; ii++) {
146
- var constraint = pathConstraints[ii];
145
+ for (let ii = 0; ii < pathCount; ii++) {
146
+ let constraint = pathConstraints[ii];
147
147
  if (constraint.data.order == i) {
148
148
  this.sortPathConstraint(constraint);
149
149
  continue outer;
150
150
  }
151
151
  }
152
152
  }
153
- for (var i = 0, n = bones.length; i < n; i++)
153
+ for (let i = 0, n = bones.length; i < n; i++)
154
154
  this.sortBone(bones[i]);
155
- };
156
- Skeleton.prototype.sortIkConstraint = function (constraint) {
155
+ }
156
+ sortIkConstraint(constraint) {
157
157
  constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));
158
158
  if (!constraint.active)
159
159
  return;
160
- var target = constraint.target;
160
+ let target = constraint.target;
161
161
  this.sortBone(target);
162
- var constrained = constraint.bones;
163
- var parent = constrained[0];
162
+ let constrained = constraint.bones;
163
+ let parent = constrained[0];
164
164
  this.sortBone(parent);
165
165
  if (constrained.length == 1) {
166
166
  this._updateCache.push(constraint);
167
167
  this.sortReset(parent.children);
168
168
  }
169
169
  else {
170
- var child = constrained[constrained.length - 1];
170
+ let child = constrained[constrained.length - 1];
171
171
  this.sortBone(child);
172
172
  this._updateCache.push(constraint);
173
173
  this.sortReset(parent.children);
174
174
  child.sorted = true;
175
175
  }
176
- };
177
- Skeleton.prototype.sortPathConstraint = function (constraint) {
176
+ }
177
+ sortPathConstraint(constraint) {
178
178
  constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));
179
179
  if (!constraint.active)
180
180
  return;
181
- var slot = constraint.target;
182
- var slotIndex = slot.data.index;
183
- var slotBone = slot.bone;
181
+ let slot = constraint.target;
182
+ let slotIndex = slot.data.index;
183
+ let slotBone = slot.bone;
184
184
  if (this.skin)
185
185
  this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);
186
186
  if (this.data.defaultSkin && this.data.defaultSkin != this.skin)
187
187
  this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);
188
- for (var i = 0, n = this.data.skins.length; i < n; i++)
188
+ for (let i = 0, n = this.data.skins.length; i < n; i++)
189
189
  this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);
190
- var attachment = slot.getAttachment();
190
+ let attachment = slot.getAttachment();
191
191
  if (attachment instanceof PathAttachment)
192
192
  this.sortPathConstraintAttachmentWith(attachment, slotBone);
193
- var constrained = constraint.bones;
194
- var boneCount = constrained.length;
195
- for (var i = 0; i < boneCount; i++)
193
+ let constrained = constraint.bones;
194
+ let boneCount = constrained.length;
195
+ for (let i = 0; i < boneCount; i++)
196
196
  this.sortBone(constrained[i]);
197
197
  this._updateCache.push(constraint);
198
- for (var i = 0; i < boneCount; i++)
198
+ for (let i = 0; i < boneCount; i++)
199
199
  this.sortReset(constrained[i].children);
200
- for (var i = 0; i < boneCount; i++)
200
+ for (let i = 0; i < boneCount; i++)
201
201
  constrained[i].sorted = true;
202
- };
203
- Skeleton.prototype.sortTransformConstraint = function (constraint) {
202
+ }
203
+ sortTransformConstraint(constraint) {
204
204
  constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));
205
205
  if (!constraint.active)
206
206
  return;
207
207
  this.sortBone(constraint.target);
208
- var constrained = constraint.bones;
209
- var boneCount = constrained.length;
208
+ let constrained = constraint.bones;
209
+ let boneCount = constrained.length;
210
210
  if (constraint.data.local) {
211
- for (var i = 0; i < boneCount; i++) {
212
- var child = constrained[i];
211
+ for (let i = 0; i < boneCount; i++) {
212
+ let child = constrained[i];
213
213
  this.sortBone(child.parent);
214
214
  this.sortBone(child);
215
215
  }
216
216
  }
217
217
  else {
218
- for (var i = 0; i < boneCount; i++) {
218
+ for (let i = 0; i < boneCount; i++) {
219
219
  this.sortBone(constrained[i]);
220
220
  }
221
221
  }
222
222
  this._updateCache.push(constraint);
223
- for (var i = 0; i < boneCount; i++)
223
+ for (let i = 0; i < boneCount; i++)
224
224
  this.sortReset(constrained[i].children);
225
- for (var i = 0; i < boneCount; i++)
225
+ for (let i = 0; i < boneCount; i++)
226
226
  constrained[i].sorted = true;
227
- };
228
- Skeleton.prototype.sortPathConstraintAttachment = function (skin, slotIndex, slotBone) {
229
- var attachments = skin.attachments[slotIndex];
227
+ }
228
+ sortPathConstraintAttachment(skin, slotIndex, slotBone) {
229
+ let attachments = skin.attachments[slotIndex];
230
230
  if (!attachments)
231
231
  return;
232
- for (var key in attachments) {
232
+ for (let key in attachments) {
233
233
  this.sortPathConstraintAttachmentWith(attachments[key], slotBone);
234
234
  }
235
- };
236
- Skeleton.prototype.sortPathConstraintAttachmentWith = function (attachment, slotBone) {
235
+ }
236
+ sortPathConstraintAttachmentWith(attachment, slotBone) {
237
237
  if (!(attachment instanceof PathAttachment))
238
238
  return;
239
- var pathBones = attachment.bones;
239
+ let pathBones = attachment.bones;
240
240
  if (!pathBones)
241
241
  this.sortBone(slotBone);
242
242
  else {
243
- var bones = this.bones;
244
- for (var i = 0, n = pathBones.length; i < n;) {
245
- var nn = pathBones[i++];
243
+ let bones = this.bones;
244
+ for (let i = 0, n = pathBones.length; i < n;) {
245
+ let nn = pathBones[i++];
246
246
  nn += i;
247
247
  while (i < nn)
248
248
  this.sortBone(bones[pathBones[i++]]);
249
249
  }
250
250
  }
251
- };
252
- Skeleton.prototype.sortBone = function (bone) {
251
+ }
252
+ sortBone(bone) {
253
253
  if (bone.sorted)
254
254
  return;
255
- var parent = bone.parent;
255
+ let parent = bone.parent;
256
256
  if (parent)
257
257
  this.sortBone(parent);
258
258
  bone.sorted = true;
259
259
  this._updateCache.push(bone);
260
- };
261
- Skeleton.prototype.sortReset = function (bones) {
262
- for (var i = 0, n = bones.length; i < n; i++) {
263
- var bone = bones[i];
260
+ }
261
+ sortReset(bones) {
262
+ for (let i = 0, n = bones.length; i < n; i++) {
263
+ let bone = bones[i];
264
264
  if (!bone.active)
265
265
  continue;
266
266
  if (bone.sorted)
267
267
  this.sortReset(bone.children);
268
268
  bone.sorted = false;
269
269
  }
270
- };
270
+ }
271
271
  /** Updates the world transform for each bone and applies all constraints.
272
272
  *
273
273
  * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine
274
274
  * Runtimes Guide. */
275
- Skeleton.prototype.updateWorldTransform = function () {
276
- var bones = this.bones;
277
- for (var i = 0, n = bones.length; i < n; i++) {
278
- var bone = bones[i];
275
+ updateWorldTransform() {
276
+ let bones = this.bones;
277
+ for (let i = 0, n = bones.length; i < n; i++) {
278
+ let bone = bones[i];
279
279
  bone.ax = bone.x;
280
280
  bone.ay = bone.y;
281
281
  bone.arotation = bone.rotation;
@@ -284,56 +284,56 @@ var Skeleton = /** @class */ (function () {
284
284
  bone.ashearX = bone.shearX;
285
285
  bone.ashearY = bone.shearY;
286
286
  }
287
- var updateCache = this._updateCache;
288
- for (var i = 0, n = updateCache.length; i < n; i++)
287
+ let updateCache = this._updateCache;
288
+ for (let i = 0, n = updateCache.length; i < n; i++)
289
289
  updateCache[i].update();
290
- };
291
- Skeleton.prototype.updateWorldTransformWith = function (parent) {
290
+ }
291
+ updateWorldTransformWith(parent) {
292
292
  // Apply the parent bone transform to the root bone. The root bone always inherits scale, rotation and reflection.
293
- var rootBone = this.getRootBone();
294
- var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
293
+ let rootBone = this.getRootBone();
294
+ let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
295
295
  rootBone.worldX = pa * this.x + pb * this.y + parent.worldX;
296
296
  rootBone.worldY = pc * this.x + pd * this.y + parent.worldY;
297
- var rotationY = rootBone.rotation + 90 + rootBone.shearY;
298
- var la = MathUtils.cosDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;
299
- var lb = MathUtils.cosDeg(rotationY) * rootBone.scaleY;
300
- var lc = MathUtils.sinDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;
301
- var ld = MathUtils.sinDeg(rotationY) * rootBone.scaleY;
297
+ let rotationY = rootBone.rotation + 90 + rootBone.shearY;
298
+ let la = MathUtils.cosDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;
299
+ let lb = MathUtils.cosDeg(rotationY) * rootBone.scaleY;
300
+ let lc = MathUtils.sinDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;
301
+ let ld = MathUtils.sinDeg(rotationY) * rootBone.scaleY;
302
302
  rootBone.a = (pa * la + pb * lc) * this.scaleX;
303
303
  rootBone.b = (pa * lb + pb * ld) * this.scaleX;
304
304
  rootBone.c = (pc * la + pd * lc) * this.scaleY;
305
305
  rootBone.d = (pc * lb + pd * ld) * this.scaleY;
306
306
  // Update everything except root bone.
307
- var updateCache = this._updateCache;
308
- for (var i = 0, n = updateCache.length; i < n; i++) {
309
- var updatable = updateCache[i];
307
+ let updateCache = this._updateCache;
308
+ for (let i = 0, n = updateCache.length; i < n; i++) {
309
+ let updatable = updateCache[i];
310
310
  if (updatable != rootBone)
311
311
  updatable.update();
312
312
  }
313
- };
313
+ }
314
314
  /** Sets the bones, constraints, and slots to their setup pose values. */
315
- Skeleton.prototype.setToSetupPose = function () {
315
+ setToSetupPose() {
316
316
  this.setBonesToSetupPose();
317
317
  this.setSlotsToSetupPose();
318
- };
318
+ }
319
319
  /** Sets the bones and constraints to their setup pose values. */
320
- Skeleton.prototype.setBonesToSetupPose = function () {
321
- var bones = this.bones;
322
- for (var i = 0, n = bones.length; i < n; i++)
320
+ setBonesToSetupPose() {
321
+ let bones = this.bones;
322
+ for (let i = 0, n = bones.length; i < n; i++)
323
323
  bones[i].setToSetupPose();
324
- var ikConstraints = this.ikConstraints;
325
- for (var i = 0, n = ikConstraints.length; i < n; i++) {
326
- var constraint = ikConstraints[i];
324
+ let ikConstraints = this.ikConstraints;
325
+ for (let i = 0, n = ikConstraints.length; i < n; i++) {
326
+ let constraint = ikConstraints[i];
327
327
  constraint.mix = constraint.data.mix;
328
328
  constraint.softness = constraint.data.softness;
329
329
  constraint.bendDirection = constraint.data.bendDirection;
330
330
  constraint.compress = constraint.data.compress;
331
331
  constraint.stretch = constraint.data.stretch;
332
332
  }
333
- var transformConstraints = this.transformConstraints;
334
- for (var i = 0, n = transformConstraints.length; i < n; i++) {
335
- var constraint = transformConstraints[i];
336
- var data = constraint.data;
333
+ let transformConstraints = this.transformConstraints;
334
+ for (let i = 0, n = transformConstraints.length; i < n; i++) {
335
+ let constraint = transformConstraints[i];
336
+ let data = constraint.data;
337
337
  constraint.mixRotate = data.mixRotate;
338
338
  constraint.mixX = data.mixX;
339
339
  constraint.mixY = data.mixY;
@@ -341,65 +341,65 @@ var Skeleton = /** @class */ (function () {
341
341
  constraint.mixScaleY = data.mixScaleY;
342
342
  constraint.mixShearY = data.mixShearY;
343
343
  }
344
- var pathConstraints = this.pathConstraints;
345
- for (var i = 0, n = pathConstraints.length; i < n; i++) {
346
- var constraint = pathConstraints[i];
347
- var data = constraint.data;
344
+ let pathConstraints = this.pathConstraints;
345
+ for (let i = 0, n = pathConstraints.length; i < n; i++) {
346
+ let constraint = pathConstraints[i];
347
+ let data = constraint.data;
348
348
  constraint.position = data.position;
349
349
  constraint.spacing = data.spacing;
350
350
  constraint.mixRotate = data.mixRotate;
351
351
  constraint.mixX = data.mixX;
352
352
  constraint.mixY = data.mixY;
353
353
  }
354
- };
354
+ }
355
355
  /** Sets the slots and draw order to their setup pose values. */
356
- Skeleton.prototype.setSlotsToSetupPose = function () {
357
- var slots = this.slots;
356
+ setSlotsToSetupPose() {
357
+ let slots = this.slots;
358
358
  Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);
359
- for (var i = 0, n = slots.length; i < n; i++)
359
+ for (let i = 0, n = slots.length; i < n; i++)
360
360
  slots[i].setToSetupPose();
361
- };
361
+ }
362
362
  /** @returns May return null. */
363
- Skeleton.prototype.getRootBone = function () {
363
+ getRootBone() {
364
364
  if (this.bones.length == 0)
365
365
  return null;
366
366
  return this.bones[0];
367
- };
367
+ }
368
368
  /** @returns May be null. */
369
- Skeleton.prototype.findBone = function (boneName) {
369
+ findBone(boneName) {
370
370
  if (!boneName)
371
371
  throw new Error("boneName cannot be null.");
372
- var bones = this.bones;
373
- for (var i = 0, n = bones.length; i < n; i++) {
374
- var bone = bones[i];
372
+ let bones = this.bones;
373
+ for (let i = 0, n = bones.length; i < n; i++) {
374
+ let bone = bones[i];
375
375
  if (bone.data.name == boneName)
376
376
  return bone;
377
377
  }
378
378
  return null;
379
- };
379
+ }
380
380
  /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it
381
381
  * repeatedly.
382
382
  * @returns May be null. */
383
- Skeleton.prototype.findSlot = function (slotName) {
383
+ findSlot(slotName) {
384
384
  if (!slotName)
385
385
  throw new Error("slotName cannot be null.");
386
- var slots = this.slots;
387
- for (var i = 0, n = slots.length; i < n; i++) {
388
- var slot = slots[i];
386
+ let slots = this.slots;
387
+ for (let i = 0, n = slots.length; i < n; i++) {
388
+ let slot = slots[i];
389
389
  if (slot.data.name == slotName)
390
390
  return slot;
391
391
  }
392
392
  return null;
393
- };
393
+ }
394
394
  /** Sets a skin by name.
395
395
  *
396
396
  * See {@link #setSkin()}. */
397
- Skeleton.prototype.setSkinByName = function (skinName) {
398
- var skin = this.data.findSkin(skinName);
397
+ setSkinByName(skinName) {
398
+ let skin = this.data.findSkin(skinName);
399
399
  if (!skin)
400
400
  throw new Error("Skin not found: " + skinName);
401
401
  this.setSkin(skin);
402
- };
402
+ }
403
403
  /** Sets the skin used to look up attachments before looking in the {@link SkeletonData#defaultSkin default skin}. If the
404
404
  * skin is changed, {@link #updateCache()} is called.
405
405
  *
@@ -410,19 +410,19 @@ var Skeleton = /** @class */ (function () {
410
410
  * {@link #setSlotsToSetupPose()}. Also, often {@link AnimationState#apply()} is called before the next time the
411
411
  * skeleton is rendered to allow any attachment keys in the current animation(s) to hide or show attachments from the new skin.
412
412
  * @param newSkin May be null. */
413
- Skeleton.prototype.setSkin = function (newSkin) {
413
+ setSkin(newSkin) {
414
414
  if (newSkin == this.skin)
415
415
  return;
416
416
  if (newSkin) {
417
417
  if (this.skin)
418
418
  newSkin.attachAll(this, this.skin);
419
419
  else {
420
- var slots = this.slots;
421
- for (var i = 0, n = slots.length; i < n; i++) {
422
- var slot = slots[i];
423
- var name_1 = slot.data.attachmentName;
424
- if (name_1) {
425
- var attachment = newSkin.getAttachment(i, name_1);
420
+ let slots = this.slots;
421
+ for (let i = 0, n = slots.length; i < n; i++) {
422
+ let slot = slots[i];
423
+ let name = slot.data.attachmentName;
424
+ if (name) {
425
+ let attachment = newSkin.getAttachment(i, name);
426
426
  if (attachment)
427
427
  slot.setAttachment(attachment);
428
428
  }
@@ -431,43 +431,43 @@ var Skeleton = /** @class */ (function () {
431
431
  }
432
432
  this.skin = newSkin;
433
433
  this.updateCache();
434
- };
434
+ }
435
435
  /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot name and attachment
436
436
  * name.
437
437
  *
438
438
  * See {@link #getAttachment()}.
439
439
  * @returns May be null. */
440
- Skeleton.prototype.getAttachmentByName = function (slotName, attachmentName) {
440
+ getAttachmentByName(slotName, attachmentName) {
441
441
  return this.getAttachment(this.data.findSlot(slotName).index, attachmentName);
442
- };
442
+ }
443
443
  /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot index and
444
444
  * attachment name. First the skin is checked and if the attachment was not found, the default skin is checked.
445
445
  *
446
446
  * See [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide.
447
447
  * @returns May be null. */
448
- Skeleton.prototype.getAttachment = function (slotIndex, attachmentName) {
448
+ getAttachment(slotIndex, attachmentName) {
449
449
  if (!attachmentName)
450
450
  throw new Error("attachmentName cannot be null.");
451
451
  if (this.skin) {
452
- var attachment = this.skin.getAttachment(slotIndex, attachmentName);
452
+ let attachment = this.skin.getAttachment(slotIndex, attachmentName);
453
453
  if (attachment)
454
454
  return attachment;
455
455
  }
456
456
  if (this.data.defaultSkin)
457
457
  return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
458
458
  return null;
459
- };
459
+ }
460
460
  /** A convenience method to set an attachment by finding the slot with {@link #findSlot()}, finding the attachment with
461
461
  * {@link #getAttachment()}, then setting the slot's {@link Slot#attachment}.
462
462
  * @param attachmentName May be null to clear the slot's attachment. */
463
- Skeleton.prototype.setAttachment = function (slotName, attachmentName) {
463
+ setAttachment(slotName, attachmentName) {
464
464
  if (!slotName)
465
465
  throw new Error("slotName cannot be null.");
466
- var slots = this.slots;
467
- for (var i = 0, n = slots.length; i < n; i++) {
468
- var slot = slots[i];
466
+ let slots = this.slots;
467
+ for (let i = 0, n = slots.length; i < n; i++) {
468
+ let slot = slots[i];
469
469
  if (slot.data.name == slotName) {
470
- var attachment = null;
470
+ let attachment = null;
471
471
  if (attachmentName) {
472
472
  attachment = this.getAttachment(i, attachmentName);
473
473
  if (!attachment)
@@ -478,82 +478,81 @@ var Skeleton = /** @class */ (function () {
478
478
  }
479
479
  }
480
480
  throw new Error("Slot not found: " + slotName);
481
- };
481
+ }
482
482
  /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method
483
483
  * than to call it repeatedly.
484
484
  * @return May be null. */
485
- Skeleton.prototype.findIkConstraint = function (constraintName) {
485
+ findIkConstraint(constraintName) {
486
486
  if (!constraintName)
487
487
  throw new Error("constraintName cannot be null.");
488
- var ikConstraints = this.ikConstraints;
489
- for (var i = 0, n = ikConstraints.length; i < n; i++) {
490
- var ikConstraint = ikConstraints[i];
488
+ let ikConstraints = this.ikConstraints;
489
+ for (let i = 0, n = ikConstraints.length; i < n; i++) {
490
+ let ikConstraint = ikConstraints[i];
491
491
  if (ikConstraint.data.name == constraintName)
492
492
  return ikConstraint;
493
493
  }
494
494
  return null;
495
- };
495
+ }
496
496
  /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of
497
497
  * this method than to call it repeatedly.
498
498
  * @return May be null. */
499
- Skeleton.prototype.findTransformConstraint = function (constraintName) {
499
+ findTransformConstraint(constraintName) {
500
500
  if (!constraintName)
501
501
  throw new Error("constraintName cannot be null.");
502
- var transformConstraints = this.transformConstraints;
503
- for (var i = 0, n = transformConstraints.length; i < n; i++) {
504
- var constraint = transformConstraints[i];
502
+ let transformConstraints = this.transformConstraints;
503
+ for (let i = 0, n = transformConstraints.length; i < n; i++) {
504
+ let constraint = transformConstraints[i];
505
505
  if (constraint.data.name == constraintName)
506
506
  return constraint;
507
507
  }
508
508
  return null;
509
- };
509
+ }
510
510
  /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method
511
511
  * than to call it repeatedly.
512
512
  * @return May be null. */
513
- Skeleton.prototype.findPathConstraint = function (constraintName) {
513
+ findPathConstraint(constraintName) {
514
514
  if (!constraintName)
515
515
  throw new Error("constraintName cannot be null.");
516
- var pathConstraints = this.pathConstraints;
517
- for (var i = 0, n = pathConstraints.length; i < n; i++) {
518
- var constraint = pathConstraints[i];
516
+ let pathConstraints = this.pathConstraints;
517
+ for (let i = 0, n = pathConstraints.length; i < n; i++) {
518
+ let constraint = pathConstraints[i];
519
519
  if (constraint.data.name == constraintName)
520
520
  return constraint;
521
521
  }
522
522
  return null;
523
- };
523
+ }
524
524
  /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose.
525
525
  * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB.
526
526
  * @param size An output value, the width and height of the AABB.
527
527
  * @param temp Working memory to temporarily store attachments' computed world vertices. */
528
- Skeleton.prototype.getBounds = function (offset, size, temp) {
529
- if (temp === void 0) { temp = new Array(2); }
528
+ getBounds(offset, size, temp = new Array(2)) {
530
529
  if (!offset)
531
530
  throw new Error("offset cannot be null.");
532
531
  if (!size)
533
532
  throw new Error("size cannot be null.");
534
- var drawOrder = this.drawOrder;
535
- var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
536
- for (var i = 0, n = drawOrder.length; i < n; i++) {
537
- var slot = drawOrder[i];
533
+ let drawOrder = this.drawOrder;
534
+ let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
535
+ for (let i = 0, n = drawOrder.length; i < n; i++) {
536
+ let slot = drawOrder[i];
538
537
  if (!slot.bone.active)
539
538
  continue;
540
- var verticesLength = 0;
541
- var vertices = null;
542
- var attachment = slot.getAttachment();
539
+ let verticesLength = 0;
540
+ let vertices = null;
541
+ let attachment = slot.getAttachment();
543
542
  if (attachment instanceof RegionAttachment) {
544
543
  verticesLength = 8;
545
544
  vertices = Utils.setArraySize(temp, verticesLength, 0);
546
545
  attachment.computeWorldVertices(slot.bone, vertices, 0, 2);
547
546
  }
548
547
  else if (attachment instanceof MeshAttachment) {
549
- var mesh = attachment;
548
+ let mesh = attachment;
550
549
  verticesLength = mesh.worldVerticesLength;
551
550
  vertices = Utils.setArraySize(temp, verticesLength, 0);
552
551
  mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);
553
552
  }
554
553
  if (vertices) {
555
- for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) {
556
- var x = vertices[ii], y = vertices[ii + 1];
554
+ for (let ii = 0, nn = vertices.length; ii < nn; ii += 2) {
555
+ let x = vertices[ii], y = vertices[ii + 1];
557
556
  minX = Math.min(minX, x);
558
557
  minY = Math.min(minY, y);
559
558
  maxX = Math.max(maxX, x);
@@ -563,12 +562,10 @@ var Skeleton = /** @class */ (function () {
563
562
  }
564
563
  offset.set(minX, minY);
565
564
  size.set(maxX - minX, maxY - minY);
566
- };
565
+ }
567
566
  /** Increments the skeleton's {@link #time}. */
568
- Skeleton.prototype.update = function (delta) {
567
+ update(delta) {
569
568
  this.time += delta;
570
- };
571
- return Skeleton;
572
- }());
573
- export { Skeleton };
574
- //# sourceMappingURL=Skeleton.js.map
569
+ }
570
+ }
571
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM5QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR2xELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUE0QixNQUFNLFNBQVMsQ0FBQztBQUU1RTs7a0lBRWtJO0FBQ2xJLE1BQU0sT0FBTyxRQUFRO0lBa0RwQixZQUFhLElBQWtCO1FBNUIvQiw0SEFBNEg7UUFDNUgsaUJBQVksR0FBRyxJQUFJLEtBQUssRUFBYSxDQUFDO1FBUXRDOztvQ0FFNEI7UUFDNUIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUVUOzJCQUNtQjtRQUNuQixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRVg7MkJBQ21CO1FBQ25CLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFFWCxxRkFBcUY7UUFDckYsTUFBQyxHQUFHLENBQUMsQ0FBQztRQUVOLHFGQUFxRjtRQUNyRixNQUFDLEdBQUcsQ0FBQyxDQUFDO1FBR0wsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixD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