@esotericsoftware/spine-core 4.1.24 → 4.1.25

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 (90) hide show
  1. package/package.json +1 -1
  2. package/dist/Animation.d.ts +0 -382
  3. package/dist/Animation.js +0 -2052
  4. package/dist/AnimationState.d.ts +0 -398
  5. package/dist/AnimationState.js +0 -1096
  6. package/dist/AnimationStateData.d.ts +0 -51
  7. package/dist/AnimationStateData.js +0 -70
  8. package/dist/AssetManagerBase.d.ts +0 -75
  9. package/dist/AssetManagerBase.js +0 -320
  10. package/dist/AtlasAttachmentLoader.d.ts +0 -53
  11. package/dist/AtlasAttachmentLoader.js +0 -95
  12. package/dist/Bone.d.ts +0 -138
  13. package/dist/Bone.js +0 -336
  14. package/dist/BoneData.d.ts +0 -72
  15. package/dist/BoneData.js +0 -80
  16. package/dist/ConstraintData.d.ts +0 -35
  17. package/dist/ConstraintData.js +0 -37
  18. package/dist/Event.d.ts +0 -44
  19. package/dist/Event.js +0 -48
  20. package/dist/EventData.d.ts +0 -41
  21. package/dist/EventData.js +0 -43
  22. package/dist/IkConstraint.d.ts +0 -64
  23. package/dist/IkConstraint.js +0 -296
  24. package/dist/IkConstraintData.d.ts +0 -56
  25. package/dist/IkConstraintData.js +0 -63
  26. package/dist/PathConstraint.d.ts +0 -71
  27. package/dist/PathConstraint.js +0 -476
  28. package/dist/PathConstraintData.d.ts +0 -82
  29. package/dist/PathConstraintData.js +0 -91
  30. package/dist/Skeleton.d.ts +0 -160
  31. package/dist/Skeleton.js +0 -580
  32. package/dist/SkeletonBinary.d.ts +0 -68
  33. package/dist/SkeletonBinary.js +0 -1172
  34. package/dist/SkeletonBounds.d.ts +0 -77
  35. package/dist/SkeletonBounds.js +0 -219
  36. package/dist/SkeletonClipping.d.ts +0 -50
  37. package/dist/SkeletonClipping.js +0 -326
  38. package/dist/SkeletonData.d.ts +0 -114
  39. package/dist/SkeletonData.js +0 -190
  40. package/dist/SkeletonJson.d.ts +0 -53
  41. package/dist/SkeletonJson.js +0 -1027
  42. package/dist/Skin.d.ts +0 -71
  43. package/dist/Skin.js +0 -201
  44. package/dist/Slot.d.ts +0 -69
  45. package/dist/Slot.js +0 -93
  46. package/dist/SlotData.d.ts +0 -57
  47. package/dist/SlotData.js +0 -64
  48. package/dist/Texture.d.ts +0 -69
  49. package/dist/Texture.js +0 -73
  50. package/dist/TextureAtlas.d.ts +0 -67
  51. package/dist/TextureAtlas.js +0 -263
  52. package/dist/TransformConstraint.d.ts +0 -60
  53. package/dist/TransformConstraint.js +0 -247
  54. package/dist/TransformConstraintData.d.ts +0 -62
  55. package/dist/TransformConstraintData.js +0 -69
  56. package/dist/Triangulator.d.ts +0 -43
  57. package/dist/Triangulator.js +0 -244
  58. package/dist/Updatable.d.ts +0 -37
  59. package/dist/Updatable.js +0 -30
  60. package/dist/Utils.d.ts +0 -168
  61. package/dist/Utils.js +0 -404
  62. package/dist/attachments/Attachment.d.ts +0 -72
  63. package/dist/attachments/Attachment.js +0 -147
  64. package/dist/attachments/AttachmentLoader.d.ts +0 -54
  65. package/dist/attachments/AttachmentLoader.js +0 -30
  66. package/dist/attachments/BoundingBoxAttachment.d.ts +0 -40
  67. package/dist/attachments/BoundingBoxAttachment.js +0 -48
  68. package/dist/attachments/ClippingAttachment.d.ts +0 -42
  69. package/dist/attachments/ClippingAttachment.js +0 -51
  70. package/dist/attachments/HasTextureRegion.d.ts +0 -44
  71. package/dist/attachments/HasTextureRegion.js +0 -30
  72. package/dist/attachments/MeshAttachment.d.ts +0 -79
  73. package/dist/attachments/MeshAttachment.js +0 -188
  74. package/dist/attachments/PathAttachment.d.ts +0 -47
  75. package/dist/attachments/PathAttachment.js +0 -59
  76. package/dist/attachments/PointAttachment.d.ts +0 -48
  77. package/dist/attachments/PointAttachment.js +0 -66
  78. package/dist/attachments/RegionAttachment.d.ts +0 -111
  79. package/dist/attachments/RegionAttachment.js +0 -215
  80. package/dist/attachments/Sequence.d.ts +0 -55
  81. package/dist/attachments/Sequence.js +0 -91
  82. package/dist/attachments/index.d.ts +0 -8
  83. package/dist/attachments/index.js +0 -9
  84. package/dist/iife/spine-core.js +0 -9192
  85. package/dist/iife/spine-core.js.map +0 -7
  86. package/dist/iife/spine-core.min.js +0 -2
  87. package/dist/index.d.ts +0 -39
  88. package/dist/index.js +0 -40
  89. package/dist/polyfills.d.ts +0 -29
  90. package/dist/polyfills.js +0 -39
@@ -1,1027 +0,0 @@
1
- /******************************************************************************
2
- * Spine Runtimes License Agreement
3
- * Last updated September 24, 2021. Replaces all prior versions.
4
- *
5
- * Copyright (c) 2013-2021, Esoteric Software LLC
6
- *
7
- * Integration of the Spine Runtimes into software or otherwise creating
8
- * derivative works of the Spine Runtimes is permitted under the terms and
9
- * conditions of Section 2 of the Spine Editor License Agreement:
10
- * http://esotericsoftware.com/spine-editor-license
11
- *
12
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
13
- * or otherwise create derivative works of the Spine Runtimes (collectively,
14
- * "Products"), provided that each user of the Products must obtain their own
15
- * Spine Editor license and redistribution of the Products in any form must
16
- * include this license and copyright notice.
17
- *
18
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
19
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
22
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
24
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
25
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
- *****************************************************************************/
29
- import { Animation, AttachmentTimeline, RGBATimeline, RGBTimeline, AlphaTimeline, RGBA2Timeline, RGB2Timeline, RotateTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PathConstraintMixTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline } from "./Animation";
30
- import { BoneData, TransformMode } from "./BoneData";
31
- import { EventData } from "./EventData";
32
- import { Event } from "./Event";
33
- import { IkConstraintData } from "./IkConstraintData";
34
- import { PathConstraintData, PositionMode, SpacingMode, RotateMode } from "./PathConstraintData";
35
- import { SkeletonData } from "./SkeletonData";
36
- import { Skin } from "./Skin";
37
- import { SlotData, BlendMode } from "./SlotData";
38
- import { TransformConstraintData } from "./TransformConstraintData";
39
- import { Utils, Color } from "./Utils";
40
- import { Sequence, SequenceMode } from "./attachments/Sequence";
41
- import { SequenceTimeline } from "./Animation";
42
- /** Loads skeleton data in the Spine JSON format.
43
- *
44
- * See [Spine JSON format](http://esotericsoftware.com/spine-json-format) and
45
- * [JSON and binary data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the Spine
46
- * Runtimes Guide. */
47
- export class SkeletonJson {
48
- constructor(attachmentLoader) {
49
- /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at
50
- * runtime than were used in Spine.
51
- *
52
- * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */
53
- this.scale = 1;
54
- this.linkedMeshes = new Array();
55
- this.attachmentLoader = attachmentLoader;
56
- }
57
- readSkeletonData(json) {
58
- let scale = this.scale;
59
- let skeletonData = new SkeletonData();
60
- let root = typeof (json) === "string" ? JSON.parse(json) : json;
61
- // Skeleton
62
- let skeletonMap = root.skeleton;
63
- if (skeletonMap) {
64
- skeletonData.hash = skeletonMap.hash;
65
- skeletonData.version = skeletonMap.spine;
66
- skeletonData.x = skeletonMap.x;
67
- skeletonData.y = skeletonMap.y;
68
- skeletonData.width = skeletonMap.width;
69
- skeletonData.height = skeletonMap.height;
70
- skeletonData.fps = skeletonMap.fps;
71
- skeletonData.imagesPath = skeletonMap.images;
72
- }
73
- // Bones
74
- if (root.bones) {
75
- for (let i = 0; i < root.bones.length; i++) {
76
- let boneMap = root.bones[i];
77
- let parent = null;
78
- let parentName = getValue(boneMap, "parent", null);
79
- if (parentName)
80
- parent = skeletonData.findBone(parentName);
81
- let data = new BoneData(skeletonData.bones.length, boneMap.name, parent);
82
- data.length = getValue(boneMap, "length", 0) * scale;
83
- data.x = getValue(boneMap, "x", 0) * scale;
84
- data.y = getValue(boneMap, "y", 0) * scale;
85
- data.rotation = getValue(boneMap, "rotation", 0);
86
- data.scaleX = getValue(boneMap, "scaleX", 1);
87
- data.scaleY = getValue(boneMap, "scaleY", 1);
88
- data.shearX = getValue(boneMap, "shearX", 0);
89
- data.shearY = getValue(boneMap, "shearY", 0);
90
- data.transformMode = Utils.enumValue(TransformMode, getValue(boneMap, "transform", "Normal"));
91
- data.skinRequired = getValue(boneMap, "skin", false);
92
- let color = getValue(boneMap, "color", null);
93
- if (color)
94
- data.color.setFromString(color);
95
- skeletonData.bones.push(data);
96
- }
97
- }
98
- // Slots.
99
- if (root.slots) {
100
- for (let i = 0; i < root.slots.length; i++) {
101
- let slotMap = root.slots[i];
102
- let boneData = skeletonData.findBone(slotMap.bone);
103
- if (!boneData)
104
- throw new Error(`Couldn't find bone ${slotMap.bone} for slot ${slotMap.name}`);
105
- let data = new SlotData(skeletonData.slots.length, slotMap.name, boneData);
106
- let color = getValue(slotMap, "color", null);
107
- if (color)
108
- data.color.setFromString(color);
109
- let dark = getValue(slotMap, "dark", null);
110
- if (dark)
111
- data.darkColor = Color.fromString(dark);
112
- data.attachmentName = getValue(slotMap, "attachment", null);
113
- data.blendMode = Utils.enumValue(BlendMode, getValue(slotMap, "blend", "normal"));
114
- skeletonData.slots.push(data);
115
- }
116
- }
117
- // IK constraints
118
- if (root.ik) {
119
- for (let i = 0; i < root.ik.length; i++) {
120
- let constraintMap = root.ik[i];
121
- let data = new IkConstraintData(constraintMap.name);
122
- data.order = getValue(constraintMap, "order", 0);
123
- data.skinRequired = getValue(constraintMap, "skin", false);
124
- for (let ii = 0; ii < constraintMap.bones.length; ii++) {
125
- let bone = skeletonData.findBone(constraintMap.bones[ii]);
126
- if (!bone)
127
- throw new Error(`Couldn't find bone ${constraintMap.bones[ii]} for IK constraint ${constraintMap.name}.`);
128
- data.bones.push(bone);
129
- }
130
- let target = skeletonData.findBone(constraintMap.target);
131
- ;
132
- if (!target)
133
- throw new Error(`Couldn't find target bone ${constraintMap.target} for IK constraint ${constraintMap.name}.`);
134
- data.target = target;
135
- data.mix = getValue(constraintMap, "mix", 1);
136
- data.softness = getValue(constraintMap, "softness", 0) * scale;
137
- data.bendDirection = getValue(constraintMap, "bendPositive", true) ? 1 : -1;
138
- data.compress = getValue(constraintMap, "compress", false);
139
- data.stretch = getValue(constraintMap, "stretch", false);
140
- data.uniform = getValue(constraintMap, "uniform", false);
141
- skeletonData.ikConstraints.push(data);
142
- }
143
- }
144
- // Transform constraints.
145
- if (root.transform) {
146
- for (let i = 0; i < root.transform.length; i++) {
147
- let constraintMap = root.transform[i];
148
- let data = new TransformConstraintData(constraintMap.name);
149
- data.order = getValue(constraintMap, "order", 0);
150
- data.skinRequired = getValue(constraintMap, "skin", false);
151
- for (let ii = 0; ii < constraintMap.bones.length; ii++) {
152
- let boneName = constraintMap.bones[ii];
153
- let bone = skeletonData.findBone(boneName);
154
- if (!bone)
155
- throw new Error(`Couldn't find bone ${boneName} for transform constraint ${constraintMap.name}.`);
156
- data.bones.push(bone);
157
- }
158
- let targetName = constraintMap.target;
159
- let target = skeletonData.findBone(targetName);
160
- if (!target)
161
- throw new Error(`Couldn't find target bone ${targetName} for transform constraint ${constraintMap.name}.`);
162
- data.target = target;
163
- data.local = getValue(constraintMap, "local", false);
164
- data.relative = getValue(constraintMap, "relative", false);
165
- data.offsetRotation = getValue(constraintMap, "rotation", 0);
166
- data.offsetX = getValue(constraintMap, "x", 0) * scale;
167
- data.offsetY = getValue(constraintMap, "y", 0) * scale;
168
- data.offsetScaleX = getValue(constraintMap, "scaleX", 0);
169
- data.offsetScaleY = getValue(constraintMap, "scaleY", 0);
170
- data.offsetShearY = getValue(constraintMap, "shearY", 0);
171
- data.mixRotate = getValue(constraintMap, "mixRotate", 1);
172
- data.mixX = getValue(constraintMap, "mixX", 1);
173
- data.mixY = getValue(constraintMap, "mixY", data.mixX);
174
- data.mixScaleX = getValue(constraintMap, "mixScaleX", 1);
175
- data.mixScaleY = getValue(constraintMap, "mixScaleY", data.mixScaleX);
176
- data.mixShearY = getValue(constraintMap, "mixShearY", 1);
177
- skeletonData.transformConstraints.push(data);
178
- }
179
- }
180
- // Path constraints.
181
- if (root.path) {
182
- for (let i = 0; i < root.path.length; i++) {
183
- let constraintMap = root.path[i];
184
- let data = new PathConstraintData(constraintMap.name);
185
- data.order = getValue(constraintMap, "order", 0);
186
- data.skinRequired = getValue(constraintMap, "skin", false);
187
- for (let ii = 0; ii < constraintMap.bones.length; ii++) {
188
- let boneName = constraintMap.bones[ii];
189
- let bone = skeletonData.findBone(boneName);
190
- if (!bone)
191
- throw new Error(`Couldn't find bone ${boneName} for path constraint ${constraintMap.name}.`);
192
- data.bones.push(bone);
193
- }
194
- let targetName = constraintMap.target;
195
- let target = skeletonData.findSlot(targetName);
196
- if (!target)
197
- throw new Error(`Couldn't find target slot ${targetName} for path constraint ${constraintMap.name}.`);
198
- data.target = target;
199
- data.positionMode = Utils.enumValue(PositionMode, getValue(constraintMap, "positionMode", "Percent"));
200
- data.spacingMode = Utils.enumValue(SpacingMode, getValue(constraintMap, "spacingMode", "Length"));
201
- data.rotateMode = Utils.enumValue(RotateMode, getValue(constraintMap, "rotateMode", "Tangent"));
202
- data.offsetRotation = getValue(constraintMap, "rotation", 0);
203
- data.position = getValue(constraintMap, "position", 0);
204
- if (data.positionMode == PositionMode.Fixed)
205
- data.position *= scale;
206
- data.spacing = getValue(constraintMap, "spacing", 0);
207
- if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)
208
- data.spacing *= scale;
209
- data.mixRotate = getValue(constraintMap, "mixRotate", 1);
210
- data.mixX = getValue(constraintMap, "mixX", 1);
211
- data.mixY = getValue(constraintMap, "mixY", data.mixX);
212
- skeletonData.pathConstraints.push(data);
213
- }
214
- }
215
- // Skins.
216
- if (root.skins) {
217
- for (let i = 0; i < root.skins.length; i++) {
218
- let skinMap = root.skins[i];
219
- let skin = new Skin(skinMap.name);
220
- if (skinMap.bones) {
221
- for (let ii = 0; ii < skinMap.bones.length; ii++) {
222
- let boneName = skinMap.bones[ii];
223
- let bone = skeletonData.findBone(boneName);
224
- if (!bone)
225
- throw new Error(`Couldn't find bone ${boneName} for skin ${skinMap.name}.`);
226
- skin.bones.push(bone);
227
- }
228
- }
229
- if (skinMap.ik) {
230
- for (let ii = 0; ii < skinMap.ik.length; ii++) {
231
- let constraintName = skinMap.ik[ii];
232
- let constraint = skeletonData.findIkConstraint(constraintName);
233
- if (!constraint)
234
- throw new Error(`Couldn't find IK constraint ${constraintName} for skin ${skinMap.name}.`);
235
- skin.constraints.push(constraint);
236
- }
237
- }
238
- if (skinMap.transform) {
239
- for (let ii = 0; ii < skinMap.transform.length; ii++) {
240
- let constraintName = skinMap.transform[ii];
241
- let constraint = skeletonData.findTransformConstraint(constraintName);
242
- if (!constraint)
243
- throw new Error(`Couldn't find transform constraint ${constraintName} for skin ${skinMap.name}.`);
244
- skin.constraints.push(constraint);
245
- }
246
- }
247
- if (skinMap.path) {
248
- for (let ii = 0; ii < skinMap.path.length; ii++) {
249
- let constraintName = skinMap.path[ii];
250
- let constraint = skeletonData.findPathConstraint(constraintName);
251
- if (!constraint)
252
- throw new Error(`Couldn't find path constraint ${constraintName} for skin ${skinMap.name}.`);
253
- skin.constraints.push(constraint);
254
- }
255
- }
256
- for (let slotName in skinMap.attachments) {
257
- let slot = skeletonData.findSlot(slotName);
258
- if (!slot)
259
- throw new Error(`Couldn't find slot ${slotName} for skin ${skinMap.name}.`);
260
- let slotMap = skinMap.attachments[slotName];
261
- for (let entryName in slotMap) {
262
- let attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData);
263
- if (attachment)
264
- skin.setAttachment(slot.index, entryName, attachment);
265
- }
266
- }
267
- skeletonData.skins.push(skin);
268
- if (skin.name == "default")
269
- skeletonData.defaultSkin = skin;
270
- }
271
- }
272
- // Linked meshes.
273
- for (let i = 0, n = this.linkedMeshes.length; i < n; i++) {
274
- let linkedMesh = this.linkedMeshes[i];
275
- let skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);
276
- if (!skin)
277
- throw new Error(`Skin not found: ${linkedMesh.skin}`);
278
- let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);
279
- if (!parent)
280
- throw new Error(`Parent mesh not found: ${linkedMesh.parent}`);
281
- linkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimeline ? parent : linkedMesh.mesh;
282
- linkedMesh.mesh.setParentMesh(parent);
283
- if (linkedMesh.mesh.region != null)
284
- linkedMesh.mesh.updateRegion();
285
- }
286
- this.linkedMeshes.length = 0;
287
- // Events.
288
- if (root.events) {
289
- for (let eventName in root.events) {
290
- let eventMap = root.events[eventName];
291
- let data = new EventData(eventName);
292
- data.intValue = getValue(eventMap, "int", 0);
293
- data.floatValue = getValue(eventMap, "float", 0);
294
- data.stringValue = getValue(eventMap, "string", "");
295
- data.audioPath = getValue(eventMap, "audio", null);
296
- if (data.audioPath) {
297
- data.volume = getValue(eventMap, "volume", 1);
298
- data.balance = getValue(eventMap, "balance", 0);
299
- }
300
- skeletonData.events.push(data);
301
- }
302
- }
303
- // Animations.
304
- if (root.animations) {
305
- for (let animationName in root.animations) {
306
- let animationMap = root.animations[animationName];
307
- this.readAnimation(animationMap, animationName, skeletonData);
308
- }
309
- }
310
- return skeletonData;
311
- }
312
- readAttachment(map, skin, slotIndex, name, skeletonData) {
313
- let scale = this.scale;
314
- name = getValue(map, "name", name);
315
- switch (getValue(map, "type", "region")) {
316
- case "region": {
317
- let path = getValue(map, "path", name);
318
- let sequence = this.readSequence(getValue(map, "sequence", null));
319
- let region = this.attachmentLoader.newRegionAttachment(skin, name, path, sequence);
320
- if (!region)
321
- return null;
322
- region.path = path;
323
- region.x = getValue(map, "x", 0) * scale;
324
- region.y = getValue(map, "y", 0) * scale;
325
- region.scaleX = getValue(map, "scaleX", 1);
326
- region.scaleY = getValue(map, "scaleY", 1);
327
- region.rotation = getValue(map, "rotation", 0);
328
- region.width = map.width * scale;
329
- region.height = map.height * scale;
330
- region.sequence = sequence;
331
- let color = getValue(map, "color", null);
332
- if (color)
333
- region.color.setFromString(color);
334
- if (region.region != null)
335
- region.updateRegion();
336
- return region;
337
- }
338
- case "boundingbox": {
339
- let box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);
340
- if (!box)
341
- return null;
342
- this.readVertices(map, box, map.vertexCount << 1);
343
- let color = getValue(map, "color", null);
344
- if (color)
345
- box.color.setFromString(color);
346
- return box;
347
- }
348
- case "mesh":
349
- case "linkedmesh": {
350
- let path = getValue(map, "path", name);
351
- let sequence = this.readSequence(getValue(map, "sequence", null));
352
- let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);
353
- if (!mesh)
354
- return null;
355
- mesh.path = path;
356
- let color = getValue(map, "color", null);
357
- if (color)
358
- mesh.color.setFromString(color);
359
- mesh.width = getValue(map, "width", 0) * scale;
360
- mesh.height = getValue(map, "height", 0) * scale;
361
- mesh.sequence = sequence;
362
- let parent = getValue(map, "parent", null);
363
- if (parent) {
364
- this.linkedMeshes.push(new LinkedMesh(mesh, getValue(map, "skin", null), slotIndex, parent, getValue(map, "timelines", true)));
365
- return mesh;
366
- }
367
- let uvs = map.uvs;
368
- this.readVertices(map, mesh, uvs.length);
369
- mesh.triangles = map.triangles;
370
- mesh.regionUVs = uvs;
371
- if (mesh.region != null)
372
- mesh.updateRegion();
373
- mesh.edges = getValue(map, "edges", null);
374
- mesh.hullLength = getValue(map, "hull", 0) * 2;
375
- return mesh;
376
- }
377
- case "path": {
378
- let path = this.attachmentLoader.newPathAttachment(skin, name);
379
- if (!path)
380
- return null;
381
- path.closed = getValue(map, "closed", false);
382
- path.constantSpeed = getValue(map, "constantSpeed", true);
383
- let vertexCount = map.vertexCount;
384
- this.readVertices(map, path, vertexCount << 1);
385
- let lengths = Utils.newArray(vertexCount / 3, 0);
386
- for (let i = 0; i < map.lengths.length; i++)
387
- lengths[i] = map.lengths[i] * scale;
388
- path.lengths = lengths;
389
- let color = getValue(map, "color", null);
390
- if (color)
391
- path.color.setFromString(color);
392
- return path;
393
- }
394
- case "point": {
395
- let point = this.attachmentLoader.newPointAttachment(skin, name);
396
- if (!point)
397
- return null;
398
- point.x = getValue(map, "x", 0) * scale;
399
- point.y = getValue(map, "y", 0) * scale;
400
- point.rotation = getValue(map, "rotation", 0);
401
- let color = getValue(map, "color", null);
402
- if (color)
403
- point.color.setFromString(color);
404
- return point;
405
- }
406
- case "clipping": {
407
- let clip = this.attachmentLoader.newClippingAttachment(skin, name);
408
- if (!clip)
409
- return null;
410
- let end = getValue(map, "end", null);
411
- if (end)
412
- clip.endSlot = skeletonData.findSlot(end);
413
- let vertexCount = map.vertexCount;
414
- this.readVertices(map, clip, vertexCount << 1);
415
- let color = getValue(map, "color", null);
416
- if (color)
417
- clip.color.setFromString(color);
418
- return clip;
419
- }
420
- }
421
- return null;
422
- }
423
- readSequence(map) {
424
- if (map == null)
425
- return null;
426
- let sequence = new Sequence(getValue(map, "count", 0));
427
- sequence.start = getValue(map, "start", 1);
428
- sequence.digits = getValue(map, "digits", 0);
429
- sequence.setupIndex = getValue(map, "setup", 0);
430
- return sequence;
431
- }
432
- readVertices(map, attachment, verticesLength) {
433
- let scale = this.scale;
434
- attachment.worldVerticesLength = verticesLength;
435
- let vertices = map.vertices;
436
- if (verticesLength == vertices.length) {
437
- let scaledVertices = Utils.toFloatArray(vertices);
438
- if (scale != 1) {
439
- for (let i = 0, n = vertices.length; i < n; i++)
440
- scaledVertices[i] *= scale;
441
- }
442
- attachment.vertices = scaledVertices;
443
- return;
444
- }
445
- let weights = new Array();
446
- let bones = new Array();
447
- for (let i = 0, n = vertices.length; i < n;) {
448
- let boneCount = vertices[i++];
449
- bones.push(boneCount);
450
- for (let nn = i + boneCount * 4; i < nn; i += 4) {
451
- bones.push(vertices[i]);
452
- weights.push(vertices[i + 1] * scale);
453
- weights.push(vertices[i + 2] * scale);
454
- weights.push(vertices[i + 3]);
455
- }
456
- }
457
- attachment.bones = bones;
458
- attachment.vertices = Utils.toFloatArray(weights);
459
- }
460
- readAnimation(map, name, skeletonData) {
461
- let scale = this.scale;
462
- let timelines = new Array();
463
- // Slot timelines.
464
- if (map.slots) {
465
- for (let slotName in map.slots) {
466
- let slotMap = map.slots[slotName];
467
- let slot = skeletonData.findSlot(slotName);
468
- if (!slot)
469
- throw new Error("Slot not found: " + slotName);
470
- let slotIndex = slot.index;
471
- for (let timelineName in slotMap) {
472
- let timelineMap = slotMap[timelineName];
473
- if (!timelineMap)
474
- continue;
475
- let frames = timelineMap.length;
476
- if (timelineName == "attachment") {
477
- let timeline = new AttachmentTimeline(frames, slotIndex);
478
- for (let frame = 0; frame < frames; frame++) {
479
- let keyMap = timelineMap[frame];
480
- timeline.setFrame(frame, getValue(keyMap, "time", 0), getValue(keyMap, "name", null));
481
- }
482
- timelines.push(timeline);
483
- }
484
- else if (timelineName == "rgba") {
485
- let timeline = new RGBATimeline(frames, frames << 2, slotIndex);
486
- let keyMap = timelineMap[0];
487
- let time = getValue(keyMap, "time", 0);
488
- let color = Color.fromString(keyMap.color);
489
- for (let frame = 0, bezier = 0;; frame++) {
490
- timeline.setFrame(frame, time, color.r, color.g, color.b, color.a);
491
- let nextMap = timelineMap[frame + 1];
492
- if (!nextMap) {
493
- timeline.shrink(bezier);
494
- break;
495
- }
496
- let time2 = getValue(nextMap, "time", 0);
497
- let newColor = Color.fromString(nextMap.color);
498
- let curve = keyMap.curve;
499
- if (curve) {
500
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);
501
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);
502
- bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);
503
- bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);
504
- }
505
- time = time2;
506
- color = newColor;
507
- keyMap = nextMap;
508
- }
509
- timelines.push(timeline);
510
- }
511
- else if (timelineName == "rgb") {
512
- let timeline = new RGBTimeline(frames, frames * 3, slotIndex);
513
- let keyMap = timelineMap[0];
514
- let time = getValue(keyMap, "time", 0);
515
- let color = Color.fromString(keyMap.color);
516
- for (let frame = 0, bezier = 0;; frame++) {
517
- timeline.setFrame(frame, time, color.r, color.g, color.b);
518
- let nextMap = timelineMap[frame + 1];
519
- if (!nextMap) {
520
- timeline.shrink(bezier);
521
- break;
522
- }
523
- let time2 = getValue(nextMap, "time", 0);
524
- let newColor = Color.fromString(nextMap.color);
525
- let curve = keyMap.curve;
526
- if (curve) {
527
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);
528
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);
529
- bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);
530
- }
531
- time = time2;
532
- color = newColor;
533
- keyMap = nextMap;
534
- }
535
- timelines.push(timeline);
536
- }
537
- else if (timelineName == "alpha") {
538
- timelines.push(readTimeline1(timelineMap, new AlphaTimeline(frames, frames, slotIndex), 0, 1));
539
- }
540
- else if (timelineName == "rgba2") {
541
- let timeline = new RGBA2Timeline(frames, frames * 7, slotIndex);
542
- let keyMap = timelineMap[0];
543
- let time = getValue(keyMap, "time", 0);
544
- let color = Color.fromString(keyMap.light);
545
- let color2 = Color.fromString(keyMap.dark);
546
- for (let frame = 0, bezier = 0;; frame++) {
547
- timeline.setFrame(frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b);
548
- let nextMap = timelineMap[frame + 1];
549
- if (!nextMap) {
550
- timeline.shrink(bezier);
551
- break;
552
- }
553
- let time2 = getValue(nextMap, "time", 0);
554
- let newColor = Color.fromString(nextMap.light);
555
- let newColor2 = Color.fromString(nextMap.dark);
556
- let curve = keyMap.curve;
557
- if (curve) {
558
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);
559
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);
560
- bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);
561
- bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);
562
- bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.r, newColor2.r, 1);
563
- bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.g, newColor2.g, 1);
564
- bezier = readCurve(curve, timeline, bezier, frame, 6, time, time2, color2.b, newColor2.b, 1);
565
- }
566
- time = time2;
567
- color = newColor;
568
- color2 = newColor2;
569
- keyMap = nextMap;
570
- }
571
- timelines.push(timeline);
572
- }
573
- else if (timelineName == "rgb2") {
574
- let timeline = new RGB2Timeline(frames, frames * 6, slotIndex);
575
- let keyMap = timelineMap[0];
576
- let time = getValue(keyMap, "time", 0);
577
- let color = Color.fromString(keyMap.light);
578
- let color2 = Color.fromString(keyMap.dark);
579
- for (let frame = 0, bezier = 0;; frame++) {
580
- timeline.setFrame(frame, time, color.r, color.g, color.b, color2.r, color2.g, color2.b);
581
- let nextMap = timelineMap[frame + 1];
582
- if (!nextMap) {
583
- timeline.shrink(bezier);
584
- break;
585
- }
586
- let time2 = getValue(nextMap, "time", 0);
587
- let newColor = Color.fromString(nextMap.light);
588
- let newColor2 = Color.fromString(nextMap.dark);
589
- let curve = keyMap.curve;
590
- if (curve) {
591
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);
592
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);
593
- bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);
594
- bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.r, newColor2.r, 1);
595
- bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.g, newColor2.g, 1);
596
- bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.b, newColor2.b, 1);
597
- }
598
- time = time2;
599
- color = newColor;
600
- color2 = newColor2;
601
- keyMap = nextMap;
602
- }
603
- timelines.push(timeline);
604
- }
605
- }
606
- }
607
- }
608
- // Bone timelines.
609
- if (map.bones) {
610
- for (let boneName in map.bones) {
611
- let boneMap = map.bones[boneName];
612
- let bone = skeletonData.findBone(boneName);
613
- if (!bone)
614
- throw new Error("Bone not found: " + boneName);
615
- let boneIndex = bone.index;
616
- for (let timelineName in boneMap) {
617
- let timelineMap = boneMap[timelineName];
618
- let frames = timelineMap.length;
619
- if (frames == 0)
620
- continue;
621
- if (timelineName === "rotate") {
622
- timelines.push(readTimeline1(timelineMap, new RotateTimeline(frames, frames, boneIndex), 0, 1));
623
- }
624
- else if (timelineName === "translate") {
625
- let timeline = new TranslateTimeline(frames, frames << 1, boneIndex);
626
- timelines.push(readTimeline2(timelineMap, timeline, "x", "y", 0, scale));
627
- }
628
- else if (timelineName === "translatex") {
629
- let timeline = new TranslateXTimeline(frames, frames, boneIndex);
630
- timelines.push(readTimeline1(timelineMap, timeline, 0, scale));
631
- }
632
- else if (timelineName === "translatey") {
633
- let timeline = new TranslateYTimeline(frames, frames, boneIndex);
634
- timelines.push(readTimeline1(timelineMap, timeline, 0, scale));
635
- }
636
- else if (timelineName === "scale") {
637
- let timeline = new ScaleTimeline(frames, frames << 1, boneIndex);
638
- timelines.push(readTimeline2(timelineMap, timeline, "x", "y", 1, 1));
639
- }
640
- else if (timelineName === "scalex") {
641
- let timeline = new ScaleXTimeline(frames, frames, boneIndex);
642
- timelines.push(readTimeline1(timelineMap, timeline, 1, 1));
643
- }
644
- else if (timelineName === "scaley") {
645
- let timeline = new ScaleYTimeline(frames, frames, boneIndex);
646
- timelines.push(readTimeline1(timelineMap, timeline, 1, 1));
647
- }
648
- else if (timelineName === "shear") {
649
- let timeline = new ShearTimeline(frames, frames << 1, boneIndex);
650
- timelines.push(readTimeline2(timelineMap, timeline, "x", "y", 0, 1));
651
- }
652
- else if (timelineName === "shearx") {
653
- let timeline = new ShearXTimeline(frames, frames, boneIndex);
654
- timelines.push(readTimeline1(timelineMap, timeline, 0, 1));
655
- }
656
- else if (timelineName === "sheary") {
657
- let timeline = new ShearYTimeline(frames, frames, boneIndex);
658
- timelines.push(readTimeline1(timelineMap, timeline, 0, 1));
659
- }
660
- }
661
- }
662
- }
663
- // IK constraint timelines.
664
- if (map.ik) {
665
- for (let constraintName in map.ik) {
666
- let constraintMap = map.ik[constraintName];
667
- let keyMap = constraintMap[0];
668
- if (!keyMap)
669
- continue;
670
- let constraint = skeletonData.findIkConstraint(constraintName);
671
- if (!constraint)
672
- throw new Error("IK Constraint not found: " + constraintName);
673
- let constraintIndex = skeletonData.ikConstraints.indexOf(constraint);
674
- let timeline = new IkConstraintTimeline(constraintMap.length, constraintMap.length << 1, constraintIndex);
675
- let time = getValue(keyMap, "time", 0);
676
- let mix = getValue(keyMap, "mix", 1);
677
- let softness = getValue(keyMap, "softness", 0) * scale;
678
- for (let frame = 0, bezier = 0;; frame++) {
679
- timeline.setFrame(frame, time, mix, softness, getValue(keyMap, "bendPositive", true) ? 1 : -1, getValue(keyMap, "compress", false), getValue(keyMap, "stretch", false));
680
- let nextMap = constraintMap[frame + 1];
681
- if (!nextMap) {
682
- timeline.shrink(bezier);
683
- break;
684
- }
685
- let time2 = getValue(nextMap, "time", 0);
686
- let mix2 = getValue(nextMap, "mix", 1);
687
- let softness2 = getValue(nextMap, "softness", 0) * scale;
688
- let curve = keyMap.curve;
689
- if (curve) {
690
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mix, mix2, 1);
691
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, softness, softness2, scale);
692
- }
693
- time = time2;
694
- mix = mix2;
695
- softness = softness2;
696
- keyMap = nextMap;
697
- }
698
- timelines.push(timeline);
699
- }
700
- }
701
- // Transform constraint timelines.
702
- if (map.transform) {
703
- for (let constraintName in map.transform) {
704
- let timelineMap = map.transform[constraintName];
705
- let keyMap = timelineMap[0];
706
- if (!keyMap)
707
- continue;
708
- let constraint = skeletonData.findTransformConstraint(constraintName);
709
- if (!constraint)
710
- throw new Error("Transform constraint not found: " + constraintName);
711
- let constraintIndex = skeletonData.transformConstraints.indexOf(constraint);
712
- let timeline = new TransformConstraintTimeline(timelineMap.length, timelineMap.length * 6, constraintIndex);
713
- let time = getValue(keyMap, "time", 0);
714
- let mixRotate = getValue(keyMap, "mixRotate", 1);
715
- let mixX = getValue(keyMap, "mixX", 1);
716
- let mixY = getValue(keyMap, "mixY", mixX);
717
- let mixScaleX = getValue(keyMap, "mixScaleX", 1);
718
- let mixScaleY = getValue(keyMap, "mixScaleY", mixScaleX);
719
- let mixShearY = getValue(keyMap, "mixShearY", 1);
720
- for (let frame = 0, bezier = 0;; frame++) {
721
- timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);
722
- let nextMap = timelineMap[frame + 1];
723
- if (!nextMap) {
724
- timeline.shrink(bezier);
725
- break;
726
- }
727
- let time2 = getValue(nextMap, "time", 0);
728
- let mixRotate2 = getValue(nextMap, "mixRotate", 1);
729
- let mixX2 = getValue(nextMap, "mixX", 1);
730
- let mixY2 = getValue(nextMap, "mixY", mixX2);
731
- let mixScaleX2 = getValue(nextMap, "mixScaleX", 1);
732
- let mixScaleY2 = getValue(nextMap, "mixScaleY", mixScaleX2);
733
- let mixShearY2 = getValue(nextMap, "mixShearY", 1);
734
- let curve = keyMap.curve;
735
- if (curve) {
736
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);
737
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);
738
- bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);
739
- bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);
740
- bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);
741
- bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1);
742
- }
743
- time = time2;
744
- mixRotate = mixRotate2;
745
- mixX = mixX2;
746
- mixY = mixY2;
747
- mixScaleX = mixScaleX2;
748
- mixScaleY = mixScaleY2;
749
- mixScaleX = mixScaleX2;
750
- keyMap = nextMap;
751
- }
752
- timelines.push(timeline);
753
- }
754
- }
755
- // Path constraint timelines.
756
- if (map.path) {
757
- for (let constraintName in map.path) {
758
- let constraintMap = map.path[constraintName];
759
- let constraint = skeletonData.findPathConstraint(constraintName);
760
- if (!constraint)
761
- throw new Error("Path constraint not found: " + constraintName);
762
- let constraintIndex = skeletonData.pathConstraints.indexOf(constraint);
763
- for (let timelineName in constraintMap) {
764
- let timelineMap = constraintMap[timelineName];
765
- let keyMap = timelineMap[0];
766
- if (!keyMap)
767
- continue;
768
- let frames = timelineMap.length;
769
- if (timelineName === "position") {
770
- let timeline = new PathConstraintPositionTimeline(frames, frames, constraintIndex);
771
- timelines.push(readTimeline1(timelineMap, timeline, 0, constraint.positionMode == PositionMode.Fixed ? scale : 1));
772
- }
773
- else if (timelineName === "spacing") {
774
- let timeline = new PathConstraintSpacingTimeline(frames, frames, constraintIndex);
775
- timelines.push(readTimeline1(timelineMap, timeline, 0, constraint.spacingMode == SpacingMode.Length || constraint.spacingMode == SpacingMode.Fixed ? scale : 1));
776
- }
777
- else if (timelineName === "mix") {
778
- let timeline = new PathConstraintMixTimeline(frames, frames * 3, constraintIndex);
779
- let time = getValue(keyMap, "time", 0);
780
- let mixRotate = getValue(keyMap, "mixRotate", 1);
781
- let mixX = getValue(keyMap, "mixX", 1);
782
- let mixY = getValue(keyMap, "mixY", mixX);
783
- for (let frame = 0, bezier = 0;; frame++) {
784
- timeline.setFrame(frame, time, mixRotate, mixX, mixY);
785
- let nextMap = timelineMap[frame + 1];
786
- if (!nextMap) {
787
- timeline.shrink(bezier);
788
- break;
789
- }
790
- let time2 = getValue(nextMap, "time", 0);
791
- let mixRotate2 = getValue(nextMap, "mixRotate", 1);
792
- let mixX2 = getValue(nextMap, "mixX", 1);
793
- let mixY2 = getValue(nextMap, "mixY", mixX2);
794
- let curve = keyMap.curve;
795
- if (curve) {
796
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);
797
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);
798
- bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);
799
- }
800
- time = time2;
801
- mixRotate = mixRotate2;
802
- mixX = mixX2;
803
- mixY = mixY2;
804
- keyMap = nextMap;
805
- }
806
- timelines.push(timeline);
807
- }
808
- }
809
- }
810
- }
811
- // Attachment timelines.
812
- if (map.attachments) {
813
- for (let attachmentsName in map.attachments) {
814
- let attachmentsMap = map.attachments[attachmentsName];
815
- let skin = skeletonData.findSkin(attachmentsName);
816
- if (!skin)
817
- throw new Error("Skin not found: " + attachmentsName);
818
- for (let slotMapName in attachmentsMap) {
819
- let slotMap = attachmentsMap[slotMapName];
820
- let slot = skeletonData.findSlot(slotMapName);
821
- if (!slot)
822
- throw new Error("Slot not found: " + slotMapName);
823
- let slotIndex = slot.index;
824
- for (let attachmentMapName in slotMap) {
825
- let attachmentMap = slotMap[attachmentMapName];
826
- let attachment = skin.getAttachment(slotIndex, attachmentMapName);
827
- for (let timelineMapName in attachmentMap) {
828
- let timelineMap = attachmentMap[timelineMapName];
829
- let keyMap = timelineMap[0];
830
- if (!keyMap)
831
- continue;
832
- if (timelineMapName == "deform") {
833
- let weighted = attachment.bones;
834
- let vertices = attachment.vertices;
835
- let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
836
- let timeline = new DeformTimeline(timelineMap.length, timelineMap.length, slotIndex, attachment);
837
- let time = getValue(keyMap, "time", 0);
838
- for (let frame = 0, bezier = 0;; frame++) {
839
- let deform;
840
- let verticesValue = getValue(keyMap, "vertices", null);
841
- if (!verticesValue)
842
- deform = weighted ? Utils.newFloatArray(deformLength) : vertices;
843
- else {
844
- deform = Utils.newFloatArray(deformLength);
845
- let start = getValue(keyMap, "offset", 0);
846
- Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);
847
- if (scale != 1) {
848
- for (let i = start, n = i + verticesValue.length; i < n; i++)
849
- deform[i] *= scale;
850
- }
851
- if (!weighted) {
852
- for (let i = 0; i < deformLength; i++)
853
- deform[i] += vertices[i];
854
- }
855
- }
856
- timeline.setFrame(frame, time, deform);
857
- let nextMap = timelineMap[frame + 1];
858
- if (!nextMap) {
859
- timeline.shrink(bezier);
860
- break;
861
- }
862
- let time2 = getValue(nextMap, "time", 0);
863
- let curve = keyMap.curve;
864
- if (curve)
865
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1);
866
- time = time2;
867
- keyMap = nextMap;
868
- }
869
- timelines.push(timeline);
870
- }
871
- else if (timelineMapName == "sequence") {
872
- let timeline = new SequenceTimeline(timelineMap.length, slotIndex, attachment);
873
- let lastDelay = 0;
874
- for (let frame = 0; frame < timelineMap.length; frame++) {
875
- let delay = getValue(keyMap, "delay", lastDelay);
876
- let time = getValue(keyMap, "time", 0);
877
- let mode = SequenceMode[getValue(keyMap, "mode", "hold")];
878
- let index = getValue(keyMap, "index", 0);
879
- timeline.setFrame(frame, time, mode, index, delay);
880
- lastDelay = delay;
881
- keyMap = timelineMap[frame + 1];
882
- }
883
- timelines.push(timeline);
884
- }
885
- }
886
- }
887
- }
888
- }
889
- }
890
- // Draw order timelines.
891
- if (map.drawOrder) {
892
- let timeline = new DrawOrderTimeline(map.drawOrder.length);
893
- let slotCount = skeletonData.slots.length;
894
- let frame = 0;
895
- for (let i = 0; i < map.drawOrder.length; i++, frame++) {
896
- let drawOrderMap = map.drawOrder[i];
897
- let drawOrder = null;
898
- let offsets = getValue(drawOrderMap, "offsets", null);
899
- if (offsets) {
900
- drawOrder = Utils.newArray(slotCount, -1);
901
- let unchanged = Utils.newArray(slotCount - offsets.length, 0);
902
- let originalIndex = 0, unchangedIndex = 0;
903
- for (let ii = 0; ii < offsets.length; ii++) {
904
- let offsetMap = offsets[ii];
905
- let slot = skeletonData.findSlot(offsetMap.slot);
906
- if (!slot)
907
- throw new Error("Slot not found: " + slot);
908
- let slotIndex = slot.index;
909
- // Collect unchanged items.
910
- while (originalIndex != slotIndex)
911
- unchanged[unchangedIndex++] = originalIndex++;
912
- // Set changed items.
913
- drawOrder[originalIndex + offsetMap.offset] = originalIndex++;
914
- }
915
- // Collect remaining unchanged items.
916
- while (originalIndex < slotCount)
917
- unchanged[unchangedIndex++] = originalIndex++;
918
- // Fill in unchanged items.
919
- for (let ii = slotCount - 1; ii >= 0; ii--)
920
- if (drawOrder[ii] == -1)
921
- drawOrder[ii] = unchanged[--unchangedIndex];
922
- }
923
- timeline.setFrame(frame, getValue(drawOrderMap, "time", 0), drawOrder);
924
- }
925
- timelines.push(timeline);
926
- }
927
- // Event timelines.
928
- if (map.events) {
929
- let timeline = new EventTimeline(map.events.length);
930
- let frame = 0;
931
- for (let i = 0; i < map.events.length; i++, frame++) {
932
- let eventMap = map.events[i];
933
- let eventData = skeletonData.findEvent(eventMap.name);
934
- if (!eventData)
935
- throw new Error("Event not found: " + eventMap.name);
936
- let event = new Event(Utils.toSinglePrecision(getValue(eventMap, "time", 0)), eventData);
937
- event.intValue = getValue(eventMap, "int", eventData.intValue);
938
- event.floatValue = getValue(eventMap, "float", eventData.floatValue);
939
- event.stringValue = getValue(eventMap, "string", eventData.stringValue);
940
- if (event.data.audioPath) {
941
- event.volume = getValue(eventMap, "volume", 1);
942
- event.balance = getValue(eventMap, "balance", 0);
943
- }
944
- timeline.setFrame(frame, event);
945
- }
946
- timelines.push(timeline);
947
- }
948
- let duration = 0;
949
- for (let i = 0, n = timelines.length; i < n; i++)
950
- duration = Math.max(duration, timelines[i].getDuration());
951
- skeletonData.animations.push(new Animation(name, timelines, duration));
952
- }
953
- }
954
- class LinkedMesh {
955
- constructor(mesh, skin, slotIndex, parent, inheritDeform) {
956
- this.mesh = mesh;
957
- this.skin = skin;
958
- this.slotIndex = slotIndex;
959
- this.parent = parent;
960
- this.inheritTimeline = inheritDeform;
961
- }
962
- }
963
- function readTimeline1(keys, timeline, defaultValue, scale) {
964
- let keyMap = keys[0];
965
- let time = getValue(keyMap, "time", 0);
966
- let value = getValue(keyMap, "value", defaultValue) * scale;
967
- let bezier = 0;
968
- for (let frame = 0;; frame++) {
969
- timeline.setFrame(frame, time, value);
970
- let nextMap = keys[frame + 1];
971
- if (!nextMap) {
972
- timeline.shrink(bezier);
973
- return timeline;
974
- }
975
- let time2 = getValue(nextMap, "time", 0);
976
- let value2 = getValue(nextMap, "value", defaultValue) * scale;
977
- if (keyMap.curve)
978
- bezier = readCurve(keyMap.curve, timeline, bezier, frame, 0, time, time2, value, value2, scale);
979
- time = time2;
980
- value = value2;
981
- keyMap = nextMap;
982
- }
983
- }
984
- function readTimeline2(keys, timeline, name1, name2, defaultValue, scale) {
985
- let keyMap = keys[0];
986
- let time = getValue(keyMap, "time", 0);
987
- let value1 = getValue(keyMap, name1, defaultValue) * scale;
988
- let value2 = getValue(keyMap, name2, defaultValue) * scale;
989
- let bezier = 0;
990
- for (let frame = 0;; frame++) {
991
- timeline.setFrame(frame, time, value1, value2);
992
- let nextMap = keys[frame + 1];
993
- if (!nextMap) {
994
- timeline.shrink(bezier);
995
- return timeline;
996
- }
997
- let time2 = getValue(nextMap, "time", 0);
998
- let nvalue1 = getValue(nextMap, name1, defaultValue) * scale;
999
- let nvalue2 = getValue(nextMap, name2, defaultValue) * scale;
1000
- let curve = keyMap.curve;
1001
- if (curve) {
1002
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale);
1003
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale);
1004
- }
1005
- time = time2;
1006
- value1 = nvalue1;
1007
- value2 = nvalue2;
1008
- keyMap = nextMap;
1009
- }
1010
- }
1011
- function readCurve(curve, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {
1012
- if (curve == "stepped") {
1013
- timeline.setStepped(frame);
1014
- return bezier;
1015
- }
1016
- let i = value << 2;
1017
- let cx1 = curve[i];
1018
- let cy1 = curve[i + 1] * scale;
1019
- let cx2 = curve[i + 2];
1020
- let cy2 = curve[i + 3] * scale;
1021
- timeline.setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2);
1022
- return bezier + 1;
1023
- }
1024
- function getValue(map, property, defaultValue) {
1025
- return map[property] !== undefined ? map[property] : defaultValue;
1026
- }
1027
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25Kc29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NrZWxldG9uSnNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLFNBQVMsRUFBWSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSwyQkFBMkIsRUFBRSw4QkFBOEIsRUFBRSw2QkFBNkIsRUFBRSx5QkFBeUIsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFpRCxNQUFNLGFBQWEsQ0FBQztBQUlwaUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BFLE9BQU8s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R0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzdGLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ25GLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ25GLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzdGLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQzdGLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQzdGO29CQUVELElBQUksR0FBRyxLQUFLLENBQUM7b0JBQ2IsU0FBUyxHQUFHLFVBQVUsQ0FBQztvQkFDdkIsSUFBSSxHQUFHLEtBQUssQ0FBQztvQkFDYixJQUFJLEdBQUcsS0FBSyxDQUFDO29CQUNiLFNB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