@esotericsoftware/spine-core 4.0.14 → 4.0.15

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 (92) hide show
  1. package/dist/Animation.d.ts +363 -363
  2. package/dist/Animation.js +1949 -1949
  3. package/dist/AnimationState.d.ts +396 -396
  4. package/dist/AnimationState.js +958 -958
  5. package/dist/AnimationStateData.d.ts +51 -51
  6. package/dist/AnimationStateData.js +69 -69
  7. package/dist/AssetManagerBase.d.ts +72 -72
  8. package/dist/AssetManagerBase.js +302 -302
  9. package/dist/AtlasAttachmentLoader.d.ts +51 -51
  10. package/dist/AtlasAttachmentLoader.js +73 -73
  11. package/dist/Bone.d.ts +138 -138
  12. package/dist/Bone.js +333 -333
  13. package/dist/BoneData.d.ts +72 -72
  14. package/dist/BoneData.js +73 -73
  15. package/dist/ConstraintData.d.ts +35 -35
  16. package/dist/ConstraintData.js +36 -36
  17. package/dist/Event.d.ts +44 -44
  18. package/dist/Event.js +41 -41
  19. package/dist/EventData.d.ts +41 -41
  20. package/dist/EventData.js +36 -36
  21. package/dist/IkConstraint.d.ts +64 -64
  22. package/dist/IkConstraint.js +284 -284
  23. package/dist/IkConstraintData.d.ts +54 -54
  24. package/dist/IkConstraintData.js +53 -53
  25. package/dist/PathConstraint.d.ts +71 -71
  26. package/dist/PathConstraint.js +468 -468
  27. package/dist/PathConstraintData.d.ts +80 -80
  28. package/dist/PathConstraintData.js +69 -69
  29. package/dist/Skeleton.d.ts +158 -158
  30. package/dist/Skeleton.js +570 -570
  31. package/dist/SkeletonBinary.d.ts +67 -67
  32. package/dist/SkeletonBinary.js +1093 -1093
  33. package/dist/SkeletonBounds.d.ts +77 -77
  34. package/dist/SkeletonBounds.js +218 -218
  35. package/dist/SkeletonClipping.d.ts +50 -50
  36. package/dist/SkeletonClipping.js +323 -323
  37. package/dist/SkeletonData.d.ts +114 -114
  38. package/dist/SkeletonData.js +166 -166
  39. package/dist/SkeletonJson.d.ts +51 -51
  40. package/dist/SkeletonJson.js +915 -915
  41. package/dist/Skin.d.ts +71 -71
  42. package/dist/Skin.js +200 -200
  43. package/dist/Slot.d.ts +72 -72
  44. package/dist/Slot.js +93 -93
  45. package/dist/SlotData.d.ts +57 -57
  46. package/dist/SlotData.js +54 -54
  47. package/dist/Texture.d.ts +69 -69
  48. package/dist/Texture.js +72 -72
  49. package/dist/TextureAtlas.d.ts +65 -65
  50. package/dist/TextureAtlas.js +245 -245
  51. package/dist/TransformConstraint.d.ts +60 -60
  52. package/dist/TransformConstraint.js +239 -239
  53. package/dist/TransformConstraintData.d.ts +60 -60
  54. package/dist/TransformConstraintData.js +59 -59
  55. package/dist/Triangulator.d.ts +43 -43
  56. package/dist/Triangulator.js +243 -243
  57. package/dist/Updatable.d.ts +37 -37
  58. package/dist/Updatable.js +29 -29
  59. package/dist/Utils.d.ts +168 -168
  60. package/dist/Utils.js +403 -403
  61. package/dist/VertexEffect.d.ts +35 -35
  62. package/dist/VertexEffect.js +29 -29
  63. package/dist/attachments/Attachment.d.ts +71 -71
  64. package/dist/attachments/Attachment.js +139 -139
  65. package/dist/attachments/AttachmentLoader.d.ts +53 -53
  66. package/dist/attachments/AttachmentLoader.js +29 -29
  67. package/dist/attachments/BoundingBoxAttachment.d.ts +40 -40
  68. package/dist/attachments/BoundingBoxAttachment.js +47 -47
  69. package/dist/attachments/ClippingAttachment.d.ts +42 -42
  70. package/dist/attachments/ClippingAttachment.js +47 -47
  71. package/dist/attachments/MeshAttachment.d.ts +74 -74
  72. package/dist/attachments/MeshAttachment.js +159 -159
  73. package/dist/attachments/PathAttachment.d.ts +47 -47
  74. package/dist/attachments/PathAttachment.js +56 -56
  75. package/dist/attachments/PointAttachment.d.ts +48 -48
  76. package/dist/attachments/PointAttachment.js +62 -62
  77. package/dist/attachments/RegionAttachment.d.ts +108 -108
  78. package/dist/attachments/RegionAttachment.js +196 -196
  79. package/dist/attachments/index.d.ts +8 -8
  80. package/dist/attachments/index.js +8 -8
  81. package/dist/iife/spine-core.js +0 -3
  82. package/dist/iife/spine-core.js.map +2 -2
  83. package/dist/iife/spine-core.min.js +1 -1
  84. package/dist/index.d.ts +42 -42
  85. package/dist/index.js +42 -42
  86. package/dist/polyfills.d.ts +29 -29
  87. package/dist/polyfills.js +38 -38
  88. package/dist/vertexeffects/JitterEffect.d.ts +39 -39
  89. package/dist/vertexeffects/JitterEffect.js +45 -45
  90. package/dist/vertexeffects/SwirlEffect.d.ts +44 -44
  91. package/dist/vertexeffects/SwirlEffect.js +60 -60
  92. package/package.json +32 -32
@@ -1,1094 +1,1094 @@
1
- /******************************************************************************
2
- * Spine Runtimes License Agreement
3
- * Last updated January 1, 2020. Replaces all prior versions.
4
- *
5
- * Copyright (c) 2013-2020, 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, RGBA2Timeline, RGB2Timeline, AlphaTimeline, RotateTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PathConstraintMixTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline } from "./Animation";
30
- import { BoneData } from "./BoneData";
31
- import { Event } from "./Event";
32
- import { EventData } from "./EventData";
33
- import { IkConstraintData } from "./IkConstraintData";
34
- import { PathConstraintData, PositionMode, SpacingMode } from "./PathConstraintData";
35
- import { SkeletonData } from "./SkeletonData";
36
- import { Skin } from "./Skin";
37
- import { SlotData } from "./SlotData";
38
- import { TransformConstraintData } from "./TransformConstraintData";
39
- import { Color, Utils } from "./Utils";
40
- /** Loads skeleton data in the Spine binary format.
41
- *
42
- * See [Spine binary format](http://esotericsoftware.com/spine-binary-format) and
43
- * [JSON and binary data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the Spine
44
- * Runtimes Guide. */
45
- export class SkeletonBinary {
46
- constructor(attachmentLoader) {
47
- /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at
48
- * runtime than were used in Spine.
49
- *
50
- * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */
51
- this.scale = 1;
52
- this.linkedMeshes = new Array();
53
- this.attachmentLoader = attachmentLoader;
54
- }
55
- readSkeletonData(binary) {
56
- let scale = this.scale;
57
- let skeletonData = new SkeletonData();
58
- skeletonData.name = ""; // BOZO
59
- let input = new BinaryInput(binary);
60
- let lowHash = input.readInt32();
61
- let highHash = input.readInt32();
62
- skeletonData.hash = highHash == 0 && lowHash == 0 ? null : highHash.toString(16) + lowHash.toString(16);
63
- skeletonData.version = input.readString();
64
- skeletonData.x = input.readFloat();
65
- skeletonData.y = input.readFloat();
66
- skeletonData.width = input.readFloat();
67
- skeletonData.height = input.readFloat();
68
- let nonessential = input.readBoolean();
69
- if (nonessential) {
70
- skeletonData.fps = input.readFloat();
71
- skeletonData.imagesPath = input.readString();
72
- skeletonData.audioPath = input.readString();
73
- }
74
- let n = 0;
75
- // Strings.
76
- n = input.readInt(true);
77
- for (let i = 0; i < n; i++)
78
- input.strings.push(input.readString());
79
- // Bones.
80
- n = input.readInt(true);
81
- for (let i = 0; i < n; i++) {
82
- let name = input.readString();
83
- let parent = i == 0 ? null : skeletonData.bones[input.readInt(true)];
84
- let data = new BoneData(i, name, parent);
85
- data.rotation = input.readFloat();
86
- data.x = input.readFloat() * scale;
87
- data.y = input.readFloat() * scale;
88
- data.scaleX = input.readFloat();
89
- data.scaleY = input.readFloat();
90
- data.shearX = input.readFloat();
91
- data.shearY = input.readFloat();
92
- data.length = input.readFloat() * scale;
93
- data.transformMode = input.readInt(true);
94
- data.skinRequired = input.readBoolean();
95
- if (nonessential)
96
- Color.rgba8888ToColor(data.color, input.readInt32());
97
- skeletonData.bones.push(data);
98
- }
99
- // Slots.
100
- n = input.readInt(true);
101
- for (let i = 0; i < n; i++) {
102
- let slotName = input.readString();
103
- let boneData = skeletonData.bones[input.readInt(true)];
104
- let data = new SlotData(i, slotName, boneData);
105
- Color.rgba8888ToColor(data.color, input.readInt32());
106
- let darkColor = input.readInt32();
107
- if (darkColor != -1)
108
- Color.rgb888ToColor(data.darkColor = new Color(), darkColor);
109
- data.attachmentName = input.readStringRef();
110
- data.blendMode = input.readInt(true);
111
- skeletonData.slots.push(data);
112
- }
113
- // IK constraints.
114
- n = input.readInt(true);
115
- for (let i = 0, nn; i < n; i++) {
116
- let data = new IkConstraintData(input.readString());
117
- data.order = input.readInt(true);
118
- data.skinRequired = input.readBoolean();
119
- nn = input.readInt(true);
120
- for (let ii = 0; ii < nn; ii++)
121
- data.bones.push(skeletonData.bones[input.readInt(true)]);
122
- data.target = skeletonData.bones[input.readInt(true)];
123
- data.mix = input.readFloat();
124
- data.softness = input.readFloat() * scale;
125
- data.bendDirection = input.readByte();
126
- data.compress = input.readBoolean();
127
- data.stretch = input.readBoolean();
128
- data.uniform = input.readBoolean();
129
- skeletonData.ikConstraints.push(data);
130
- }
131
- // Transform constraints.
132
- n = input.readInt(true);
133
- for (let i = 0, nn; i < n; i++) {
134
- let data = new TransformConstraintData(input.readString());
135
- data.order = input.readInt(true);
136
- data.skinRequired = input.readBoolean();
137
- nn = input.readInt(true);
138
- for (let ii = 0; ii < nn; ii++)
139
- data.bones.push(skeletonData.bones[input.readInt(true)]);
140
- data.target = skeletonData.bones[input.readInt(true)];
141
- data.local = input.readBoolean();
142
- data.relative = input.readBoolean();
143
- data.offsetRotation = input.readFloat();
144
- data.offsetX = input.readFloat() * scale;
145
- data.offsetY = input.readFloat() * scale;
146
- data.offsetScaleX = input.readFloat();
147
- data.offsetScaleY = input.readFloat();
148
- data.offsetShearY = input.readFloat();
149
- data.mixRotate = input.readFloat();
150
- data.mixX = input.readFloat();
151
- data.mixY = input.readFloat();
152
- data.mixScaleX = input.readFloat();
153
- data.mixScaleY = input.readFloat();
154
- data.mixShearY = input.readFloat();
155
- skeletonData.transformConstraints.push(data);
156
- }
157
- // Path constraints.
158
- n = input.readInt(true);
159
- for (let i = 0, nn; i < n; i++) {
160
- let data = new PathConstraintData(input.readString());
161
- data.order = input.readInt(true);
162
- data.skinRequired = input.readBoolean();
163
- nn = input.readInt(true);
164
- for (let ii = 0; ii < nn; ii++)
165
- data.bones.push(skeletonData.bones[input.readInt(true)]);
166
- data.target = skeletonData.slots[input.readInt(true)];
167
- data.positionMode = input.readInt(true);
168
- data.spacingMode = input.readInt(true);
169
- data.rotateMode = input.readInt(true);
170
- data.offsetRotation = input.readFloat();
171
- data.position = input.readFloat();
172
- if (data.positionMode == PositionMode.Fixed)
173
- data.position *= scale;
174
- data.spacing = input.readFloat();
175
- if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)
176
- data.spacing *= scale;
177
- data.mixRotate = input.readFloat();
178
- data.mixX = input.readFloat();
179
- data.mixY = input.readFloat();
180
- skeletonData.pathConstraints.push(data);
181
- }
182
- // Default skin.
183
- let defaultSkin = this.readSkin(input, skeletonData, true, nonessential);
184
- if (defaultSkin) {
185
- skeletonData.defaultSkin = defaultSkin;
186
- skeletonData.skins.push(defaultSkin);
187
- }
188
- // Skins.
189
- {
190
- let i = skeletonData.skins.length;
191
- Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true));
192
- for (; i < n; i++)
193
- skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential);
194
- }
195
- // Linked meshes.
196
- n = this.linkedMeshes.length;
197
- for (let i = 0; i < n; i++) {
198
- let linkedMesh = this.linkedMeshes[i];
199
- let skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);
200
- let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);
201
- linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent : linkedMesh.mesh;
202
- linkedMesh.mesh.setParentMesh(parent);
203
- linkedMesh.mesh.updateUVs();
204
- }
205
- this.linkedMeshes.length = 0;
206
- // Events.
207
- n = input.readInt(true);
208
- for (let i = 0; i < n; i++) {
209
- let data = new EventData(input.readStringRef());
210
- data.intValue = input.readInt(false);
211
- data.floatValue = input.readFloat();
212
- data.stringValue = input.readString();
213
- data.audioPath = input.readString();
214
- if (data.audioPath) {
215
- data.volume = input.readFloat();
216
- data.balance = input.readFloat();
217
- }
218
- skeletonData.events.push(data);
219
- }
220
- // Animations.
221
- n = input.readInt(true);
222
- for (let i = 0; i < n; i++)
223
- skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData));
224
- return skeletonData;
225
- }
226
- readSkin(input, skeletonData, defaultSkin, nonessential) {
227
- let skin = null;
228
- let slotCount = 0;
229
- if (defaultSkin) {
230
- slotCount = input.readInt(true);
231
- if (slotCount == 0)
232
- return null;
233
- skin = new Skin("default");
234
- }
235
- else {
236
- skin = new Skin(input.readStringRef());
237
- skin.bones.length = input.readInt(true);
238
- for (let i = 0, n = skin.bones.length; i < n; i++)
239
- skin.bones[i] = skeletonData.bones[input.readInt(true)];
240
- for (let i = 0, n = input.readInt(true); i < n; i++)
241
- skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]);
242
- for (let i = 0, n = input.readInt(true); i < n; i++)
243
- skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]);
244
- for (let i = 0, n = input.readInt(true); i < n; i++)
245
- skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]);
246
- slotCount = input.readInt(true);
247
- }
248
- for (let i = 0; i < slotCount; i++) {
249
- let slotIndex = input.readInt(true);
250
- for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
251
- let name = input.readStringRef();
252
- let attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name, nonessential);
253
- if (attachment)
254
- skin.setAttachment(slotIndex, name, attachment);
255
- }
256
- }
257
- return skin;
258
- }
259
- readAttachment(input, skeletonData, skin, slotIndex, attachmentName, nonessential) {
260
- let scale = this.scale;
261
- let name = input.readStringRef();
262
- if (!name)
263
- name = attachmentName;
264
- switch (input.readByte()) {
265
- case AttachmentType.Region: {
266
- let path = input.readStringRef();
267
- let rotation = input.readFloat();
268
- let x = input.readFloat();
269
- let y = input.readFloat();
270
- let scaleX = input.readFloat();
271
- let scaleY = input.readFloat();
272
- let width = input.readFloat();
273
- let height = input.readFloat();
274
- let color = input.readInt32();
275
- if (!path)
276
- path = name;
277
- let region = this.attachmentLoader.newRegionAttachment(skin, name, path);
278
- if (!region)
279
- return null;
280
- region.path = path;
281
- region.x = x * scale;
282
- region.y = y * scale;
283
- region.scaleX = scaleX;
284
- region.scaleY = scaleY;
285
- region.rotation = rotation;
286
- region.width = width * scale;
287
- region.height = height * scale;
288
- Color.rgba8888ToColor(region.color, color);
289
- region.updateOffset();
290
- return region;
291
- }
292
- case AttachmentType.BoundingBox: {
293
- let vertexCount = input.readInt(true);
294
- let vertices = this.readVertices(input, vertexCount);
295
- let color = nonessential ? input.readInt32() : 0;
296
- let box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);
297
- if (!box)
298
- return null;
299
- box.worldVerticesLength = vertexCount << 1;
300
- box.vertices = vertices.vertices;
301
- box.bones = vertices.bones;
302
- if (nonessential)
303
- Color.rgba8888ToColor(box.color, color);
304
- return box;
305
- }
306
- case AttachmentType.Mesh: {
307
- let path = input.readStringRef();
308
- let color = input.readInt32();
309
- let vertexCount = input.readInt(true);
310
- let uvs = this.readFloatArray(input, vertexCount << 1, 1);
311
- let triangles = this.readShortArray(input);
312
- let vertices = this.readVertices(input, vertexCount);
313
- let hullLength = input.readInt(true);
314
- let edges = null;
315
- let width = 0, height = 0;
316
- if (nonessential) {
317
- edges = this.readShortArray(input);
318
- width = input.readFloat();
319
- height = input.readFloat();
320
- }
321
- if (!path)
322
- path = name;
323
- let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
324
- if (!mesh)
325
- return null;
326
- mesh.path = path;
327
- Color.rgba8888ToColor(mesh.color, color);
328
- mesh.bones = vertices.bones;
329
- mesh.vertices = vertices.vertices;
330
- mesh.worldVerticesLength = vertexCount << 1;
331
- mesh.triangles = triangles;
332
- mesh.regionUVs = uvs;
333
- mesh.updateUVs();
334
- mesh.hullLength = hullLength << 1;
335
- if (nonessential) {
336
- mesh.edges = edges;
337
- mesh.width = width * scale;
338
- mesh.height = height * scale;
339
- }
340
- return mesh;
341
- }
342
- case AttachmentType.LinkedMesh: {
343
- let path = input.readStringRef();
344
- let color = input.readInt32();
345
- let skinName = input.readStringRef();
346
- let parent = input.readStringRef();
347
- let inheritDeform = input.readBoolean();
348
- let width = 0, height = 0;
349
- if (nonessential) {
350
- width = input.readFloat();
351
- height = input.readFloat();
352
- }
353
- if (!path)
354
- path = name;
355
- let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
356
- if (!mesh)
357
- return null;
358
- mesh.path = path;
359
- Color.rgba8888ToColor(mesh.color, color);
360
- if (nonessential) {
361
- mesh.width = width * scale;
362
- mesh.height = height * scale;
363
- }
364
- this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent, inheritDeform));
365
- return mesh;
366
- }
367
- case AttachmentType.Path: {
368
- let closed = input.readBoolean();
369
- let constantSpeed = input.readBoolean();
370
- let vertexCount = input.readInt(true);
371
- let vertices = this.readVertices(input, vertexCount);
372
- let lengths = Utils.newArray(vertexCount / 3, 0);
373
- for (let i = 0, n = lengths.length; i < n; i++)
374
- lengths[i] = input.readFloat() * scale;
375
- let color = nonessential ? input.readInt32() : 0;
376
- let path = this.attachmentLoader.newPathAttachment(skin, name);
377
- if (!path)
378
- return null;
379
- path.closed = closed;
380
- path.constantSpeed = constantSpeed;
381
- path.worldVerticesLength = vertexCount << 1;
382
- path.vertices = vertices.vertices;
383
- path.bones = vertices.bones;
384
- path.lengths = lengths;
385
- if (nonessential)
386
- Color.rgba8888ToColor(path.color, color);
387
- return path;
388
- }
389
- case AttachmentType.Point: {
390
- let rotation = input.readFloat();
391
- let x = input.readFloat();
392
- let y = input.readFloat();
393
- let color = nonessential ? input.readInt32() : 0;
394
- let point = this.attachmentLoader.newPointAttachment(skin, name);
395
- if (!point)
396
- return null;
397
- point.x = x * scale;
398
- point.y = y * scale;
399
- point.rotation = rotation;
400
- if (nonessential)
401
- Color.rgba8888ToColor(point.color, color);
402
- return point;
403
- }
404
- case AttachmentType.Clipping: {
405
- let endSlotIndex = input.readInt(true);
406
- let vertexCount = input.readInt(true);
407
- let vertices = this.readVertices(input, vertexCount);
408
- let color = nonessential ? input.readInt32() : 0;
409
- let clip = this.attachmentLoader.newClippingAttachment(skin, name);
410
- if (!clip)
411
- return null;
412
- clip.endSlot = skeletonData.slots[endSlotIndex];
413
- clip.worldVerticesLength = vertexCount << 1;
414
- clip.vertices = vertices.vertices;
415
- clip.bones = vertices.bones;
416
- if (nonessential)
417
- Color.rgba8888ToColor(clip.color, color);
418
- return clip;
419
- }
420
- }
421
- return null;
422
- }
423
- readVertices(input, vertexCount) {
424
- let scale = this.scale;
425
- let verticesLength = vertexCount << 1;
426
- let vertices = new Vertices();
427
- if (!input.readBoolean()) {
428
- vertices.vertices = this.readFloatArray(input, verticesLength, scale);
429
- return vertices;
430
- }
431
- let weights = new Array();
432
- let bonesArray = new Array();
433
- for (let i = 0; i < vertexCount; i++) {
434
- let boneCount = input.readInt(true);
435
- bonesArray.push(boneCount);
436
- for (let ii = 0; ii < boneCount; ii++) {
437
- bonesArray.push(input.readInt(true));
438
- weights.push(input.readFloat() * scale);
439
- weights.push(input.readFloat() * scale);
440
- weights.push(input.readFloat());
441
- }
442
- }
443
- vertices.vertices = Utils.toFloatArray(weights);
444
- vertices.bones = bonesArray;
445
- return vertices;
446
- }
447
- readFloatArray(input, n, scale) {
448
- let array = new Array(n);
449
- if (scale == 1) {
450
- for (let i = 0; i < n; i++)
451
- array[i] = input.readFloat();
452
- }
453
- else {
454
- for (let i = 0; i < n; i++)
455
- array[i] = input.readFloat() * scale;
456
- }
457
- return array;
458
- }
459
- readShortArray(input) {
460
- let n = input.readInt(true);
461
- let array = new Array(n);
462
- for (let i = 0; i < n; i++)
463
- array[i] = input.readShort();
464
- return array;
465
- }
466
- readAnimation(input, name, skeletonData) {
467
- input.readInt(true); // Number of timelines.
468
- let timelines = new Array();
469
- let scale = this.scale;
470
- let tempColor1 = new Color();
471
- let tempColor2 = new Color();
472
- // Slot timelines.
473
- for (let i = 0, n = input.readInt(true); i < n; i++) {
474
- let slotIndex = input.readInt(true);
475
- for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
476
- let timelineType = input.readByte();
477
- let frameCount = input.readInt(true);
478
- let frameLast = frameCount - 1;
479
- switch (timelineType) {
480
- case SLOT_ATTACHMENT: {
481
- let timeline = new AttachmentTimeline(frameCount, slotIndex);
482
- for (let frame = 0; frame < frameCount; frame++)
483
- timeline.setFrame(frame, input.readFloat(), input.readStringRef());
484
- timelines.push(timeline);
485
- break;
486
- }
487
- case SLOT_RGBA: {
488
- let bezierCount = input.readInt(true);
489
- let timeline = new RGBATimeline(frameCount, bezierCount, slotIndex);
490
- let time = input.readFloat();
491
- let r = input.readUnsignedByte() / 255.0;
492
- let g = input.readUnsignedByte() / 255.0;
493
- let b = input.readUnsignedByte() / 255.0;
494
- let a = input.readUnsignedByte() / 255.0;
495
- for (let frame = 0, bezier = 0;; frame++) {
496
- timeline.setFrame(frame, time, r, g, b, a);
497
- if (frame == frameLast)
498
- break;
499
- let time2 = input.readFloat();
500
- let r2 = input.readUnsignedByte() / 255.0;
501
- let g2 = input.readUnsignedByte() / 255.0;
502
- let b2 = input.readUnsignedByte() / 255.0;
503
- let a2 = input.readUnsignedByte() / 255.0;
504
- switch (input.readByte()) {
505
- case CURVE_STEPPED:
506
- timeline.setStepped(frame);
507
- break;
508
- case CURVE_BEZIER:
509
- setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);
510
- setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);
511
- setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);
512
- setBezier(input, timeline, bezier++, frame, 3, time, time2, a, a2, 1);
513
- }
514
- time = time2;
515
- r = r2;
516
- g = g2;
517
- b = b2;
518
- a = a2;
519
- }
520
- timelines.push(timeline);
521
- break;
522
- }
523
- case SLOT_RGB: {
524
- let bezierCount = input.readInt(true);
525
- let timeline = new RGBTimeline(frameCount, bezierCount, slotIndex);
526
- let time = input.readFloat();
527
- let r = input.readUnsignedByte() / 255.0;
528
- let g = input.readUnsignedByte() / 255.0;
529
- let b = input.readUnsignedByte() / 255.0;
530
- for (let frame = 0, bezier = 0;; frame++) {
531
- timeline.setFrame(frame, time, r, g, b);
532
- if (frame == frameLast)
533
- break;
534
- let time2 = input.readFloat();
535
- let r2 = input.readUnsignedByte() / 255.0;
536
- let g2 = input.readUnsignedByte() / 255.0;
537
- let b2 = input.readUnsignedByte() / 255.0;
538
- switch (input.readByte()) {
539
- case CURVE_STEPPED:
540
- timeline.setStepped(frame);
541
- break;
542
- case CURVE_BEZIER:
543
- setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);
544
- setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);
545
- setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);
546
- }
547
- time = time2;
548
- r = r2;
549
- g = g2;
550
- b = b2;
551
- }
552
- timelines.push(timeline);
553
- break;
554
- }
555
- case SLOT_RGBA2: {
556
- let bezierCount = input.readInt(true);
557
- let timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex);
558
- let time = input.readFloat();
559
- let r = input.readUnsignedByte() / 255.0;
560
- let g = input.readUnsignedByte() / 255.0;
561
- let b = input.readUnsignedByte() / 255.0;
562
- let a = input.readUnsignedByte() / 255.0;
563
- let r2 = input.readUnsignedByte() / 255.0;
564
- let g2 = input.readUnsignedByte() / 255.0;
565
- let b2 = input.readUnsignedByte() / 255.0;
566
- for (let frame = 0, bezier = 0;; frame++) {
567
- timeline.setFrame(frame, time, r, g, b, a, r2, g2, b2);
568
- if (frame == frameLast)
569
- break;
570
- let time2 = input.readFloat();
571
- let nr = input.readUnsignedByte() / 255.0;
572
- let ng = input.readUnsignedByte() / 255.0;
573
- let nb = input.readUnsignedByte() / 255.0;
574
- let na = input.readUnsignedByte() / 255.0;
575
- let nr2 = input.readUnsignedByte() / 255.0;
576
- let ng2 = input.readUnsignedByte() / 255.0;
577
- let nb2 = input.readUnsignedByte() / 255.0;
578
- switch (input.readByte()) {
579
- case CURVE_STEPPED:
580
- timeline.setStepped(frame);
581
- break;
582
- case CURVE_BEZIER:
583
- setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);
584
- setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);
585
- setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);
586
- setBezier(input, timeline, bezier++, frame, 3, time, time2, a, na, 1);
587
- setBezier(input, timeline, bezier++, frame, 4, time, time2, r2, nr2, 1);
588
- setBezier(input, timeline, bezier++, frame, 5, time, time2, g2, ng2, 1);
589
- setBezier(input, timeline, bezier++, frame, 6, time, time2, b2, nb2, 1);
590
- }
591
- time = time2;
592
- r = nr;
593
- g = ng;
594
- b = nb;
595
- a = na;
596
- r2 = nr2;
597
- g2 = ng2;
598
- b2 = nb2;
599
- }
600
- timelines.push(timeline);
601
- break;
602
- }
603
- case SLOT_RGB2: {
604
- let bezierCount = input.readInt(true);
605
- let timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex);
606
- let time = input.readFloat();
607
- let r = input.readUnsignedByte() / 255.0;
608
- let g = input.readUnsignedByte() / 255.0;
609
- let b = input.readUnsignedByte() / 255.0;
610
- let r2 = input.readUnsignedByte() / 255.0;
611
- let g2 = input.readUnsignedByte() / 255.0;
612
- let b2 = input.readUnsignedByte() / 255.0;
613
- for (let frame = 0, bezier = 0;; frame++) {
614
- timeline.setFrame(frame, time, r, g, b, r2, g2, b2);
615
- if (frame == frameLast)
616
- break;
617
- let time2 = input.readFloat();
618
- let nr = input.readUnsignedByte() / 255.0;
619
- let ng = input.readUnsignedByte() / 255.0;
620
- let nb = input.readUnsignedByte() / 255.0;
621
- let nr2 = input.readUnsignedByte() / 255.0;
622
- let ng2 = input.readUnsignedByte() / 255.0;
623
- let nb2 = input.readUnsignedByte() / 255.0;
624
- switch (input.readByte()) {
625
- case CURVE_STEPPED:
626
- timeline.setStepped(frame);
627
- break;
628
- case CURVE_BEZIER:
629
- setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);
630
- setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);
631
- setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);
632
- setBezier(input, timeline, bezier++, frame, 3, time, time2, r2, nr2, 1);
633
- setBezier(input, timeline, bezier++, frame, 4, time, time2, g2, ng2, 1);
634
- setBezier(input, timeline, bezier++, frame, 5, time, time2, b2, nb2, 1);
635
- }
636
- time = time2;
637
- r = nr;
638
- g = ng;
639
- b = nb;
640
- r2 = nr2;
641
- g2 = ng2;
642
- b2 = nb2;
643
- }
644
- timelines.push(timeline);
645
- break;
646
- }
647
- case SLOT_ALPHA: {
648
- let timeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex);
649
- let time = input.readFloat(), a = input.readUnsignedByte() / 255;
650
- for (let frame = 0, bezier = 0;; frame++) {
651
- timeline.setFrame(frame, time, a);
652
- if (frame == frameLast)
653
- break;
654
- let time2 = input.readFloat();
655
- let a2 = input.readUnsignedByte() / 255;
656
- switch (input.readByte()) {
657
- case CURVE_STEPPED:
658
- timeline.setStepped(frame);
659
- break;
660
- case CURVE_BEZIER:
661
- setBezier(input, timeline, bezier++, frame, 0, time, time2, a, a2, 1);
662
- }
663
- time = time2;
664
- a = a2;
665
- }
666
- timelines.push(timeline);
667
- break;
668
- }
669
- }
670
- }
671
- }
672
- // Bone timelines.
673
- for (let i = 0, n = input.readInt(true); i < n; i++) {
674
- let boneIndex = input.readInt(true);
675
- for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
676
- let type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);
677
- switch (type) {
678
- case BONE_ROTATE:
679
- timelines.push(readTimeline1(input, new RotateTimeline(frameCount, bezierCount, boneIndex), 1));
680
- break;
681
- case BONE_TRANSLATE:
682
- timelines.push(readTimeline2(input, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale));
683
- break;
684
- case BONE_TRANSLATEX:
685
- timelines.push(readTimeline1(input, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale));
686
- break;
687
- case BONE_TRANSLATEY:
688
- timelines.push(readTimeline1(input, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale));
689
- break;
690
- case BONE_SCALE:
691
- timelines.push(readTimeline2(input, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1));
692
- break;
693
- case BONE_SCALEX:
694
- timelines.push(readTimeline1(input, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1));
695
- break;
696
- case BONE_SCALEY:
697
- timelines.push(readTimeline1(input, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1));
698
- break;
699
- case BONE_SHEAR:
700
- timelines.push(readTimeline2(input, new ShearTimeline(frameCount, bezierCount, boneIndex), 1));
701
- break;
702
- case BONE_SHEARX:
703
- timelines.push(readTimeline1(input, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1));
704
- break;
705
- case BONE_SHEARY:
706
- timelines.push(readTimeline1(input, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1));
707
- }
708
- }
709
- }
710
- // IK constraint timelines.
711
- for (let i = 0, n = input.readInt(true); i < n; i++) {
712
- let index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;
713
- let timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index);
714
- let time = input.readFloat(), mix = input.readFloat(), softness = input.readFloat() * scale;
715
- for (let frame = 0, bezier = 0;; frame++) {
716
- timeline.setFrame(frame, time, mix, softness, input.readByte(), input.readBoolean(), input.readBoolean());
717
- if (frame == frameLast)
718
- break;
719
- let time2 = input.readFloat(), mix2 = input.readFloat(), softness2 = input.readFloat() * scale;
720
- switch (input.readByte()) {
721
- case CURVE_STEPPED:
722
- timeline.setStepped(frame);
723
- break;
724
- case CURVE_BEZIER:
725
- setBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);
726
- setBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale);
727
- }
728
- time = time2;
729
- mix = mix2;
730
- softness = softness2;
731
- }
732
- timelines.push(timeline);
733
- }
734
- // Transform constraint timelines.
735
- for (let i = 0, n = input.readInt(true); i < n; i++) {
736
- let index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;
737
- let timeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index);
738
- let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat(), mixScaleX = input.readFloat(), mixScaleY = input.readFloat(), mixShearY = input.readFloat();
739
- for (let frame = 0, bezier = 0;; frame++) {
740
- timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);
741
- if (frame == frameLast)
742
- break;
743
- let time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat(), mixScaleX2 = input.readFloat(), mixScaleY2 = input.readFloat(), mixShearY2 = input.readFloat();
744
- switch (input.readByte()) {
745
- case CURVE_STEPPED:
746
- timeline.setStepped(frame);
747
- break;
748
- case CURVE_BEZIER:
749
- setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);
750
- setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);
751
- setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);
752
- setBezier(input, timeline, bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);
753
- setBezier(input, timeline, bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);
754
- setBezier(input, timeline, bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1);
755
- }
756
- time = time2;
757
- mixRotate = mixRotate2;
758
- mixX = mixX2;
759
- mixY = mixY2;
760
- mixScaleX = mixScaleX2;
761
- mixScaleY = mixScaleY2;
762
- mixShearY = mixShearY2;
763
- }
764
- timelines.push(timeline);
765
- }
766
- // Path constraint timelines.
767
- for (let i = 0, n = input.readInt(true); i < n; i++) {
768
- let index = input.readInt(true);
769
- let data = skeletonData.pathConstraints[index];
770
- for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
771
- switch (input.readByte()) {
772
- case PATH_POSITION:
773
- timelines
774
- .push(readTimeline1(input, new PathConstraintPositionTimeline(input.readInt(true), input.readInt(true), index), data.positionMode == PositionMode.Fixed ? scale : 1));
775
- break;
776
- case PATH_SPACING:
777
- timelines
778
- .push(readTimeline1(input, new PathConstraintSpacingTimeline(input.readInt(true), input.readInt(true), index), data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed ? scale : 1));
779
- break;
780
- case PATH_MIX:
781
- let timeline = new PathConstraintMixTimeline(input.readInt(true), input.readInt(true), index);
782
- let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat();
783
- for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {
784
- timeline.setFrame(frame, time, mixRotate, mixX, mixY);
785
- if (frame == frameLast)
786
- break;
787
- let time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat();
788
- switch (input.readByte()) {
789
- case CURVE_STEPPED:
790
- timeline.setStepped(frame);
791
- break;
792
- case CURVE_BEZIER:
793
- setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);
794
- setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);
795
- setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);
796
- }
797
- time = time2;
798
- mixRotate = mixRotate2;
799
- mixX = mixX2;
800
- mixY = mixY2;
801
- }
802
- timelines.push(timeline);
803
- }
804
- }
805
- }
806
- // Deform timelines.
807
- for (let i = 0, n = input.readInt(true); i < n; i++) {
808
- let skin = skeletonData.skins[input.readInt(true)];
809
- for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
810
- let slotIndex = input.readInt(true);
811
- for (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {
812
- let attachmentName = input.readStringRef();
813
- let attachment = skin.getAttachment(slotIndex, attachmentName);
814
- let weighted = attachment.bones;
815
- let vertices = attachment.vertices;
816
- let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
817
- let frameCount = input.readInt(true);
818
- let frameLast = frameCount - 1;
819
- let bezierCount = input.readInt(true);
820
- let timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, attachment);
821
- let time = input.readFloat();
822
- for (let frame = 0, bezier = 0;; frame++) {
823
- let deform;
824
- let end = input.readInt(true);
825
- if (end == 0)
826
- deform = weighted ? Utils.newFloatArray(deformLength) : vertices;
827
- else {
828
- deform = Utils.newFloatArray(deformLength);
829
- let start = input.readInt(true);
830
- end += start;
831
- if (scale == 1) {
832
- for (let v = start; v < end; v++)
833
- deform[v] = input.readFloat();
834
- }
835
- else {
836
- for (let v = start; v < end; v++)
837
- deform[v] = input.readFloat() * scale;
838
- }
839
- if (!weighted) {
840
- for (let v = 0, vn = deform.length; v < vn; v++)
841
- deform[v] += vertices[v];
842
- }
843
- }
844
- timeline.setFrame(frame, time, deform);
845
- if (frame == frameLast)
846
- break;
847
- let time2 = input.readFloat();
848
- switch (input.readByte()) {
849
- case CURVE_STEPPED:
850
- timeline.setStepped(frame);
851
- break;
852
- case CURVE_BEZIER:
853
- setBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1);
854
- }
855
- time = time2;
856
- }
857
- timelines.push(timeline);
858
- }
859
- }
860
- }
861
- // Draw order timeline.
862
- let drawOrderCount = input.readInt(true);
863
- if (drawOrderCount > 0) {
864
- let timeline = new DrawOrderTimeline(drawOrderCount);
865
- let slotCount = skeletonData.slots.length;
866
- for (let i = 0; i < drawOrderCount; i++) {
867
- let time = input.readFloat();
868
- let offsetCount = input.readInt(true);
869
- let drawOrder = Utils.newArray(slotCount, 0);
870
- for (let ii = slotCount - 1; ii >= 0; ii--)
871
- drawOrder[ii] = -1;
872
- let unchanged = Utils.newArray(slotCount - offsetCount, 0);
873
- let originalIndex = 0, unchangedIndex = 0;
874
- for (let ii = 0; ii < offsetCount; ii++) {
875
- let slotIndex = input.readInt(true);
876
- // Collect unchanged items.
877
- while (originalIndex != slotIndex)
878
- unchanged[unchangedIndex++] = originalIndex++;
879
- // Set changed items.
880
- drawOrder[originalIndex + input.readInt(true)] = originalIndex++;
881
- }
882
- // Collect remaining unchanged items.
883
- while (originalIndex < slotCount)
884
- unchanged[unchangedIndex++] = originalIndex++;
885
- // Fill in unchanged items.
886
- for (let ii = slotCount - 1; ii >= 0; ii--)
887
- if (drawOrder[ii] == -1)
888
- drawOrder[ii] = unchanged[--unchangedIndex];
889
- timeline.setFrame(i, time, drawOrder);
890
- }
891
- timelines.push(timeline);
892
- }
893
- // Event timeline.
894
- let eventCount = input.readInt(true);
895
- if (eventCount > 0) {
896
- let timeline = new EventTimeline(eventCount);
897
- for (let i = 0; i < eventCount; i++) {
898
- let time = input.readFloat();
899
- let eventData = skeletonData.events[input.readInt(true)];
900
- let event = new Event(time, eventData);
901
- event.intValue = input.readInt(false);
902
- event.floatValue = input.readFloat();
903
- event.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue;
904
- if (event.data.audioPath) {
905
- event.volume = input.readFloat();
906
- event.balance = input.readFloat();
907
- }
908
- timeline.setFrame(i, event);
909
- }
910
- timelines.push(timeline);
911
- }
912
- let duration = 0;
913
- for (let i = 0, n = timelines.length; i < n; i++)
914
- duration = Math.max(duration, timelines[i].getDuration());
915
- return new Animation(name, timelines, duration);
916
- }
917
- }
918
- export class BinaryInput {
919
- constructor(data, strings = new Array(), index = 0, buffer = new DataView(data.buffer)) {
920
- this.strings = strings;
921
- this.index = index;
922
- this.buffer = buffer;
923
- }
924
- readByte() {
925
- return this.buffer.getInt8(this.index++);
926
- }
927
- readUnsignedByte() {
928
- return this.buffer.getUint8(this.index++);
929
- }
930
- readShort() {
931
- let value = this.buffer.getInt16(this.index);
932
- this.index += 2;
933
- return value;
934
- }
935
- readInt32() {
936
- let value = this.buffer.getInt32(this.index);
937
- this.index += 4;
938
- return value;
939
- }
940
- readInt(optimizePositive) {
941
- let b = this.readByte();
942
- let result = b & 0x7F;
943
- if ((b & 0x80) != 0) {
944
- b = this.readByte();
945
- result |= (b & 0x7F) << 7;
946
- if ((b & 0x80) != 0) {
947
- b = this.readByte();
948
- result |= (b & 0x7F) << 14;
949
- if ((b & 0x80) != 0) {
950
- b = this.readByte();
951
- result |= (b & 0x7F) << 21;
952
- if ((b & 0x80) != 0) {
953
- b = this.readByte();
954
- result |= (b & 0x7F) << 28;
955
- }
956
- }
957
- }
958
- }
959
- return optimizePositive ? result : ((result >>> 1) ^ -(result & 1));
960
- }
961
- readStringRef() {
962
- let index = this.readInt(true);
963
- return index == 0 ? null : this.strings[index - 1];
964
- }
965
- readString() {
966
- let byteCount = this.readInt(true);
967
- switch (byteCount) {
968
- case 0:
969
- return null;
970
- case 1:
971
- return "";
972
- }
973
- byteCount--;
974
- let chars = "";
975
- let charCount = 0;
976
- for (let i = 0; i < byteCount;) {
977
- let b = this.readByte();
978
- switch (b >> 4) {
979
- case 12:
980
- case 13:
981
- chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F));
982
- i += 2;
983
- break;
984
- case 14:
985
- chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F));
986
- i += 3;
987
- break;
988
- default:
989
- chars += String.fromCharCode(b);
990
- i++;
991
- }
992
- }
993
- return chars;
994
- }
995
- readFloat() {
996
- let value = this.buffer.getFloat32(this.index);
997
- this.index += 4;
998
- return value;
999
- }
1000
- readBoolean() {
1001
- return this.readByte() != 0;
1002
- }
1003
- }
1004
- class LinkedMesh {
1005
- constructor(mesh, skin, slotIndex, parent, inheritDeform) {
1006
- this.mesh = mesh;
1007
- this.skin = skin;
1008
- this.slotIndex = slotIndex;
1009
- this.parent = parent;
1010
- this.inheritDeform = inheritDeform;
1011
- }
1012
- }
1013
- class Vertices {
1014
- constructor(bones = null, vertices = null) {
1015
- this.bones = bones;
1016
- this.vertices = vertices;
1017
- }
1018
- }
1019
- var AttachmentType;
1020
- (function (AttachmentType) {
1021
- AttachmentType[AttachmentType["Region"] = 0] = "Region";
1022
- AttachmentType[AttachmentType["BoundingBox"] = 1] = "BoundingBox";
1023
- AttachmentType[AttachmentType["Mesh"] = 2] = "Mesh";
1024
- AttachmentType[AttachmentType["LinkedMesh"] = 3] = "LinkedMesh";
1025
- AttachmentType[AttachmentType["Path"] = 4] = "Path";
1026
- AttachmentType[AttachmentType["Point"] = 5] = "Point";
1027
- AttachmentType[AttachmentType["Clipping"] = 6] = "Clipping";
1028
- })(AttachmentType || (AttachmentType = {}));
1029
- function readTimeline1(input, timeline, scale) {
1030
- let time = input.readFloat(), value = input.readFloat() * scale;
1031
- for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {
1032
- timeline.setFrame(frame, time, value);
1033
- if (frame == frameLast)
1034
- break;
1035
- let time2 = input.readFloat(), value2 = input.readFloat() * scale;
1036
- switch (input.readByte()) {
1037
- case CURVE_STEPPED:
1038
- timeline.setStepped(frame);
1039
- break;
1040
- case CURVE_BEZIER:
1041
- setBezier(input, timeline, bezier++, frame, 0, time, time2, value, value2, scale);
1042
- }
1043
- time = time2;
1044
- value = value2;
1045
- }
1046
- return timeline;
1047
- }
1048
- function readTimeline2(input, timeline, scale) {
1049
- let time = input.readFloat(), value1 = input.readFloat() * scale, value2 = input.readFloat() * scale;
1050
- for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {
1051
- timeline.setFrame(frame, time, value1, value2);
1052
- if (frame == frameLast)
1053
- break;
1054
- let time2 = input.readFloat(), nvalue1 = input.readFloat() * scale, nvalue2 = input.readFloat() * scale;
1055
- switch (input.readByte()) {
1056
- case CURVE_STEPPED:
1057
- timeline.setStepped(frame);
1058
- break;
1059
- case CURVE_BEZIER:
1060
- setBezier(input, timeline, bezier++, frame, 0, time, time2, value1, nvalue1, scale);
1061
- setBezier(input, timeline, bezier++, frame, 1, time, time2, value2, nvalue2, scale);
1062
- }
1063
- time = time2;
1064
- value1 = nvalue1;
1065
- value2 = nvalue2;
1066
- }
1067
- return timeline;
1068
- }
1069
- function setBezier(input, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {
1070
- timeline.setBezier(bezier, frame, value, time1, value1, input.readFloat(), input.readFloat() * scale, input.readFloat(), input.readFloat() * scale, time2, value2);
1071
- }
1072
- const BONE_ROTATE = 0;
1073
- const BONE_TRANSLATE = 1;
1074
- const BONE_TRANSLATEX = 2;
1075
- const BONE_TRANSLATEY = 3;
1076
- const BONE_SCALE = 4;
1077
- const BONE_SCALEX = 5;
1078
- const BONE_SCALEY = 6;
1079
- const BONE_SHEAR = 7;
1080
- const BONE_SHEARX = 8;
1081
- const BONE_SHEARY = 9;
1082
- const SLOT_ATTACHMENT = 0;
1083
- const SLOT_RGBA = 1;
1084
- const SLOT_RGB = 2;
1085
- const SLOT_RGBA2 = 3;
1086
- const SLOT_RGB2 = 4;
1087
- const SLOT_ALPHA = 5;
1088
- const PATH_POSITION = 0;
1089
- const PATH_SPACING = 1;
1090
- const PATH_MIX = 2;
1091
- const CURVE_LINEAR = 0;
1092
- const CURVE_STEPPED = 1;
1093
- const CURVE_BEZIER = 2;
1
+ /******************************************************************************
2
+ * Spine Runtimes License Agreement
3
+ * Last updated January 1, 2020. Replaces all prior versions.
4
+ *
5
+ * Copyright (c) 2013-2020, 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, RGBA2Timeline, RGB2Timeline, AlphaTimeline, RotateTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PathConstraintMixTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline } from "./Animation";
30
+ import { BoneData } from "./BoneData";
31
+ import { Event } from "./Event";
32
+ import { EventData } from "./EventData";
33
+ import { IkConstraintData } from "./IkConstraintData";
34
+ import { PathConstraintData, PositionMode, SpacingMode } from "./PathConstraintData";
35
+ import { SkeletonData } from "./SkeletonData";
36
+ import { Skin } from "./Skin";
37
+ import { SlotData } from "./SlotData";
38
+ import { TransformConstraintData } from "./TransformConstraintData";
39
+ import { Color, Utils } from "./Utils";
40
+ /** Loads skeleton data in the Spine binary format.
41
+ *
42
+ * See [Spine binary format](http://esotericsoftware.com/spine-binary-format) and
43
+ * [JSON and binary data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the Spine
44
+ * Runtimes Guide. */
45
+ export class SkeletonBinary {
46
+ constructor(attachmentLoader) {
47
+ /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at
48
+ * runtime than were used in Spine.
49
+ *
50
+ * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */
51
+ this.scale = 1;
52
+ this.linkedMeshes = new Array();
53
+ this.attachmentLoader = attachmentLoader;
54
+ }
55
+ readSkeletonData(binary) {
56
+ let scale = this.scale;
57
+ let skeletonData = new SkeletonData();
58
+ skeletonData.name = ""; // BOZO
59
+ let input = new BinaryInput(binary);
60
+ let lowHash = input.readInt32();
61
+ let highHash = input.readInt32();
62
+ skeletonData.hash = highHash == 0 && lowHash == 0 ? null : highHash.toString(16) + lowHash.toString(16);
63
+ skeletonData.version = input.readString();
64
+ skeletonData.x = input.readFloat();
65
+ skeletonData.y = input.readFloat();
66
+ skeletonData.width = input.readFloat();
67
+ skeletonData.height = input.readFloat();
68
+ let nonessential = input.readBoolean();
69
+ if (nonessential) {
70
+ skeletonData.fps = input.readFloat();
71
+ skeletonData.imagesPath = input.readString();
72
+ skeletonData.audioPath = input.readString();
73
+ }
74
+ let n = 0;
75
+ // Strings.
76
+ n = input.readInt(true);
77
+ for (let i = 0; i < n; i++)
78
+ input.strings.push(input.readString());
79
+ // Bones.
80
+ n = input.readInt(true);
81
+ for (let i = 0; i < n; i++) {
82
+ let name = input.readString();
83
+ let parent = i == 0 ? null : skeletonData.bones[input.readInt(true)];
84
+ let data = new BoneData(i, name, parent);
85
+ data.rotation = input.readFloat();
86
+ data.x = input.readFloat() * scale;
87
+ data.y = input.readFloat() * scale;
88
+ data.scaleX = input.readFloat();
89
+ data.scaleY = input.readFloat();
90
+ data.shearX = input.readFloat();
91
+ data.shearY = input.readFloat();
92
+ data.length = input.readFloat() * scale;
93
+ data.transformMode = input.readInt(true);
94
+ data.skinRequired = input.readBoolean();
95
+ if (nonessential)
96
+ Color.rgba8888ToColor(data.color, input.readInt32());
97
+ skeletonData.bones.push(data);
98
+ }
99
+ // Slots.
100
+ n = input.readInt(true);
101
+ for (let i = 0; i < n; i++) {
102
+ let slotName = input.readString();
103
+ let boneData = skeletonData.bones[input.readInt(true)];
104
+ let data = new SlotData(i, slotName, boneData);
105
+ Color.rgba8888ToColor(data.color, input.readInt32());
106
+ let darkColor = input.readInt32();
107
+ if (darkColor != -1)
108
+ Color.rgb888ToColor(data.darkColor = new Color(), darkColor);
109
+ data.attachmentName = input.readStringRef();
110
+ data.blendMode = input.readInt(true);
111
+ skeletonData.slots.push(data);
112
+ }
113
+ // IK constraints.
114
+ n = input.readInt(true);
115
+ for (let i = 0, nn; i < n; i++) {
116
+ let data = new IkConstraintData(input.readString());
117
+ data.order = input.readInt(true);
118
+ data.skinRequired = input.readBoolean();
119
+ nn = input.readInt(true);
120
+ for (let ii = 0; ii < nn; ii++)
121
+ data.bones.push(skeletonData.bones[input.readInt(true)]);
122
+ data.target = skeletonData.bones[input.readInt(true)];
123
+ data.mix = input.readFloat();
124
+ data.softness = input.readFloat() * scale;
125
+ data.bendDirection = input.readByte();
126
+ data.compress = input.readBoolean();
127
+ data.stretch = input.readBoolean();
128
+ data.uniform = input.readBoolean();
129
+ skeletonData.ikConstraints.push(data);
130
+ }
131
+ // Transform constraints.
132
+ n = input.readInt(true);
133
+ for (let i = 0, nn; i < n; i++) {
134
+ let data = new TransformConstraintData(input.readString());
135
+ data.order = input.readInt(true);
136
+ data.skinRequired = input.readBoolean();
137
+ nn = input.readInt(true);
138
+ for (let ii = 0; ii < nn; ii++)
139
+ data.bones.push(skeletonData.bones[input.readInt(true)]);
140
+ data.target = skeletonData.bones[input.readInt(true)];
141
+ data.local = input.readBoolean();
142
+ data.relative = input.readBoolean();
143
+ data.offsetRotation = input.readFloat();
144
+ data.offsetX = input.readFloat() * scale;
145
+ data.offsetY = input.readFloat() * scale;
146
+ data.offsetScaleX = input.readFloat();
147
+ data.offsetScaleY = input.readFloat();
148
+ data.offsetShearY = input.readFloat();
149
+ data.mixRotate = input.readFloat();
150
+ data.mixX = input.readFloat();
151
+ data.mixY = input.readFloat();
152
+ data.mixScaleX = input.readFloat();
153
+ data.mixScaleY = input.readFloat();
154
+ data.mixShearY = input.readFloat();
155
+ skeletonData.transformConstraints.push(data);
156
+ }
157
+ // Path constraints.
158
+ n = input.readInt(true);
159
+ for (let i = 0, nn; i < n; i++) {
160
+ let data = new PathConstraintData(input.readString());
161
+ data.order = input.readInt(true);
162
+ data.skinRequired = input.readBoolean();
163
+ nn = input.readInt(true);
164
+ for (let ii = 0; ii < nn; ii++)
165
+ data.bones.push(skeletonData.bones[input.readInt(true)]);
166
+ data.target = skeletonData.slots[input.readInt(true)];
167
+ data.positionMode = input.readInt(true);
168
+ data.spacingMode = input.readInt(true);
169
+ data.rotateMode = input.readInt(true);
170
+ data.offsetRotation = input.readFloat();
171
+ data.position = input.readFloat();
172
+ if (data.positionMode == PositionMode.Fixed)
173
+ data.position *= scale;
174
+ data.spacing = input.readFloat();
175
+ if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)
176
+ data.spacing *= scale;
177
+ data.mixRotate = input.readFloat();
178
+ data.mixX = input.readFloat();
179
+ data.mixY = input.readFloat();
180
+ skeletonData.pathConstraints.push(data);
181
+ }
182
+ // Default skin.
183
+ let defaultSkin = this.readSkin(input, skeletonData, true, nonessential);
184
+ if (defaultSkin) {
185
+ skeletonData.defaultSkin = defaultSkin;
186
+ skeletonData.skins.push(defaultSkin);
187
+ }
188
+ // Skins.
189
+ {
190
+ let i = skeletonData.skins.length;
191
+ Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true));
192
+ for (; i < n; i++)
193
+ skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential);
194
+ }
195
+ // Linked meshes.
196
+ n = this.linkedMeshes.length;
197
+ for (let i = 0; i < n; i++) {
198
+ let linkedMesh = this.linkedMeshes[i];
199
+ let skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);
200
+ let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);
201
+ linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent : linkedMesh.mesh;
202
+ linkedMesh.mesh.setParentMesh(parent);
203
+ linkedMesh.mesh.updateUVs();
204
+ }
205
+ this.linkedMeshes.length = 0;
206
+ // Events.
207
+ n = input.readInt(true);
208
+ for (let i = 0; i < n; i++) {
209
+ let data = new EventData(input.readStringRef());
210
+ data.intValue = input.readInt(false);
211
+ data.floatValue = input.readFloat();
212
+ data.stringValue = input.readString();
213
+ data.audioPath = input.readString();
214
+ if (data.audioPath) {
215
+ data.volume = input.readFloat();
216
+ data.balance = input.readFloat();
217
+ }
218
+ skeletonData.events.push(data);
219
+ }
220
+ // Animations.
221
+ n = input.readInt(true);
222
+ for (let i = 0; i < n; i++)
223
+ skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData));
224
+ return skeletonData;
225
+ }
226
+ readSkin(input, skeletonData, defaultSkin, nonessential) {
227
+ let skin = null;
228
+ let slotCount = 0;
229
+ if (defaultSkin) {
230
+ slotCount = input.readInt(true);
231
+ if (slotCount == 0)
232
+ return null;
233
+ skin = new Skin("default");
234
+ }
235
+ else {
236
+ skin = new Skin(input.readStringRef());
237
+ skin.bones.length = input.readInt(true);
238
+ for (let i = 0, n = skin.bones.length; i < n; i++)
239
+ skin.bones[i] = skeletonData.bones[input.readInt(true)];
240
+ for (let i = 0, n = input.readInt(true); i < n; i++)
241
+ skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]);
242
+ for (let i = 0, n = input.readInt(true); i < n; i++)
243
+ skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]);
244
+ for (let i = 0, n = input.readInt(true); i < n; i++)
245
+ skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]);
246
+ slotCount = input.readInt(true);
247
+ }
248
+ for (let i = 0; i < slotCount; i++) {
249
+ let slotIndex = input.readInt(true);
250
+ for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
251
+ let name = input.readStringRef();
252
+ let attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name, nonessential);
253
+ if (attachment)
254
+ skin.setAttachment(slotIndex, name, attachment);
255
+ }
256
+ }
257
+ return skin;
258
+ }
259
+ readAttachment(input, skeletonData, skin, slotIndex, attachmentName, nonessential) {
260
+ let scale = this.scale;
261
+ let name = input.readStringRef();
262
+ if (!name)
263
+ name = attachmentName;
264
+ switch (input.readByte()) {
265
+ case AttachmentType.Region: {
266
+ let path = input.readStringRef();
267
+ let rotation = input.readFloat();
268
+ let x = input.readFloat();
269
+ let y = input.readFloat();
270
+ let scaleX = input.readFloat();
271
+ let scaleY = input.readFloat();
272
+ let width = input.readFloat();
273
+ let height = input.readFloat();
274
+ let color = input.readInt32();
275
+ if (!path)
276
+ path = name;
277
+ let region = this.attachmentLoader.newRegionAttachment(skin, name, path);
278
+ if (!region)
279
+ return null;
280
+ region.path = path;
281
+ region.x = x * scale;
282
+ region.y = y * scale;
283
+ region.scaleX = scaleX;
284
+ region.scaleY = scaleY;
285
+ region.rotation = rotation;
286
+ region.width = width * scale;
287
+ region.height = height * scale;
288
+ Color.rgba8888ToColor(region.color, color);
289
+ region.updateOffset();
290
+ return region;
291
+ }
292
+ case AttachmentType.BoundingBox: {
293
+ let vertexCount = input.readInt(true);
294
+ let vertices = this.readVertices(input, vertexCount);
295
+ let color = nonessential ? input.readInt32() : 0;
296
+ let box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);
297
+ if (!box)
298
+ return null;
299
+ box.worldVerticesLength = vertexCount << 1;
300
+ box.vertices = vertices.vertices;
301
+ box.bones = vertices.bones;
302
+ if (nonessential)
303
+ Color.rgba8888ToColor(box.color, color);
304
+ return box;
305
+ }
306
+ case AttachmentType.Mesh: {
307
+ let path = input.readStringRef();
308
+ let color = input.readInt32();
309
+ let vertexCount = input.readInt(true);
310
+ let uvs = this.readFloatArray(input, vertexCount << 1, 1);
311
+ let triangles = this.readShortArray(input);
312
+ let vertices = this.readVertices(input, vertexCount);
313
+ let hullLength = input.readInt(true);
314
+ let edges = null;
315
+ let width = 0, height = 0;
316
+ if (nonessential) {
317
+ edges = this.readShortArray(input);
318
+ width = input.readFloat();
319
+ height = input.readFloat();
320
+ }
321
+ if (!path)
322
+ path = name;
323
+ let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
324
+ if (!mesh)
325
+ return null;
326
+ mesh.path = path;
327
+ Color.rgba8888ToColor(mesh.color, color);
328
+ mesh.bones = vertices.bones;
329
+ mesh.vertices = vertices.vertices;
330
+ mesh.worldVerticesLength = vertexCount << 1;
331
+ mesh.triangles = triangles;
332
+ mesh.regionUVs = uvs;
333
+ mesh.updateUVs();
334
+ mesh.hullLength = hullLength << 1;
335
+ if (nonessential) {
336
+ mesh.edges = edges;
337
+ mesh.width = width * scale;
338
+ mesh.height = height * scale;
339
+ }
340
+ return mesh;
341
+ }
342
+ case AttachmentType.LinkedMesh: {
343
+ let path = input.readStringRef();
344
+ let color = input.readInt32();
345
+ let skinName = input.readStringRef();
346
+ let parent = input.readStringRef();
347
+ let inheritDeform = input.readBoolean();
348
+ let width = 0, height = 0;
349
+ if (nonessential) {
350
+ width = input.readFloat();
351
+ height = input.readFloat();
352
+ }
353
+ if (!path)
354
+ path = name;
355
+ let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
356
+ if (!mesh)
357
+ return null;
358
+ mesh.path = path;
359
+ Color.rgba8888ToColor(mesh.color, color);
360
+ if (nonessential) {
361
+ mesh.width = width * scale;
362
+ mesh.height = height * scale;
363
+ }
364
+ this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent, inheritDeform));
365
+ return mesh;
366
+ }
367
+ case AttachmentType.Path: {
368
+ let closed = input.readBoolean();
369
+ let constantSpeed = input.readBoolean();
370
+ let vertexCount = input.readInt(true);
371
+ let vertices = this.readVertices(input, vertexCount);
372
+ let lengths = Utils.newArray(vertexCount / 3, 0);
373
+ for (let i = 0, n = lengths.length; i < n; i++)
374
+ lengths[i] = input.readFloat() * scale;
375
+ let color = nonessential ? input.readInt32() : 0;
376
+ let path = this.attachmentLoader.newPathAttachment(skin, name);
377
+ if (!path)
378
+ return null;
379
+ path.closed = closed;
380
+ path.constantSpeed = constantSpeed;
381
+ path.worldVerticesLength = vertexCount << 1;
382
+ path.vertices = vertices.vertices;
383
+ path.bones = vertices.bones;
384
+ path.lengths = lengths;
385
+ if (nonessential)
386
+ Color.rgba8888ToColor(path.color, color);
387
+ return path;
388
+ }
389
+ case AttachmentType.Point: {
390
+ let rotation = input.readFloat();
391
+ let x = input.readFloat();
392
+ let y = input.readFloat();
393
+ let color = nonessential ? input.readInt32() : 0;
394
+ let point = this.attachmentLoader.newPointAttachment(skin, name);
395
+ if (!point)
396
+ return null;
397
+ point.x = x * scale;
398
+ point.y = y * scale;
399
+ point.rotation = rotation;
400
+ if (nonessential)
401
+ Color.rgba8888ToColor(point.color, color);
402
+ return point;
403
+ }
404
+ case AttachmentType.Clipping: {
405
+ let endSlotIndex = input.readInt(true);
406
+ let vertexCount = input.readInt(true);
407
+ let vertices = this.readVertices(input, vertexCount);
408
+ let color = nonessential ? input.readInt32() : 0;
409
+ let clip = this.attachmentLoader.newClippingAttachment(skin, name);
410
+ if (!clip)
411
+ return null;
412
+ clip.endSlot = skeletonData.slots[endSlotIndex];
413
+ clip.worldVerticesLength = vertexCount << 1;
414
+ clip.vertices = vertices.vertices;
415
+ clip.bones = vertices.bones;
416
+ if (nonessential)
417
+ Color.rgba8888ToColor(clip.color, color);
418
+ return clip;
419
+ }
420
+ }
421
+ return null;
422
+ }
423
+ readVertices(input, vertexCount) {
424
+ let scale = this.scale;
425
+ let verticesLength = vertexCount << 1;
426
+ let vertices = new Vertices();
427
+ if (!input.readBoolean()) {
428
+ vertices.vertices = this.readFloatArray(input, verticesLength, scale);
429
+ return vertices;
430
+ }
431
+ let weights = new Array();
432
+ let bonesArray = new Array();
433
+ for (let i = 0; i < vertexCount; i++) {
434
+ let boneCount = input.readInt(true);
435
+ bonesArray.push(boneCount);
436
+ for (let ii = 0; ii < boneCount; ii++) {
437
+ bonesArray.push(input.readInt(true));
438
+ weights.push(input.readFloat() * scale);
439
+ weights.push(input.readFloat() * scale);
440
+ weights.push(input.readFloat());
441
+ }
442
+ }
443
+ vertices.vertices = Utils.toFloatArray(weights);
444
+ vertices.bones = bonesArray;
445
+ return vertices;
446
+ }
447
+ readFloatArray(input, n, scale) {
448
+ let array = new Array(n);
449
+ if (scale == 1) {
450
+ for (let i = 0; i < n; i++)
451
+ array[i] = input.readFloat();
452
+ }
453
+ else {
454
+ for (let i = 0; i < n; i++)
455
+ array[i] = input.readFloat() * scale;
456
+ }
457
+ return array;
458
+ }
459
+ readShortArray(input) {
460
+ let n = input.readInt(true);
461
+ let array = new Array(n);
462
+ for (let i = 0; i < n; i++)
463
+ array[i] = input.readShort();
464
+ return array;
465
+ }
466
+ readAnimation(input, name, skeletonData) {
467
+ input.readInt(true); // Number of timelines.
468
+ let timelines = new Array();
469
+ let scale = this.scale;
470
+ let tempColor1 = new Color();
471
+ let tempColor2 = new Color();
472
+ // Slot timelines.
473
+ for (let i = 0, n = input.readInt(true); i < n; i++) {
474
+ let slotIndex = input.readInt(true);
475
+ for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
476
+ let timelineType = input.readByte();
477
+ let frameCount = input.readInt(true);
478
+ let frameLast = frameCount - 1;
479
+ switch (timelineType) {
480
+ case SLOT_ATTACHMENT: {
481
+ let timeline = new AttachmentTimeline(frameCount, slotIndex);
482
+ for (let frame = 0; frame < frameCount; frame++)
483
+ timeline.setFrame(frame, input.readFloat(), input.readStringRef());
484
+ timelines.push(timeline);
485
+ break;
486
+ }
487
+ case SLOT_RGBA: {
488
+ let bezierCount = input.readInt(true);
489
+ let timeline = new RGBATimeline(frameCount, bezierCount, slotIndex);
490
+ let time = input.readFloat();
491
+ let r = input.readUnsignedByte() / 255.0;
492
+ let g = input.readUnsignedByte() / 255.0;
493
+ let b = input.readUnsignedByte() / 255.0;
494
+ let a = input.readUnsignedByte() / 255.0;
495
+ for (let frame = 0, bezier = 0;; frame++) {
496
+ timeline.setFrame(frame, time, r, g, b, a);
497
+ if (frame == frameLast)
498
+ break;
499
+ let time2 = input.readFloat();
500
+ let r2 = input.readUnsignedByte() / 255.0;
501
+ let g2 = input.readUnsignedByte() / 255.0;
502
+ let b2 = input.readUnsignedByte() / 255.0;
503
+ let a2 = input.readUnsignedByte() / 255.0;
504
+ switch (input.readByte()) {
505
+ case CURVE_STEPPED:
506
+ timeline.setStepped(frame);
507
+ break;
508
+ case CURVE_BEZIER:
509
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);
510
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);
511
+ setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);
512
+ setBezier(input, timeline, bezier++, frame, 3, time, time2, a, a2, 1);
513
+ }
514
+ time = time2;
515
+ r = r2;
516
+ g = g2;
517
+ b = b2;
518
+ a = a2;
519
+ }
520
+ timelines.push(timeline);
521
+ break;
522
+ }
523
+ case SLOT_RGB: {
524
+ let bezierCount = input.readInt(true);
525
+ let timeline = new RGBTimeline(frameCount, bezierCount, slotIndex);
526
+ let time = input.readFloat();
527
+ let r = input.readUnsignedByte() / 255.0;
528
+ let g = input.readUnsignedByte() / 255.0;
529
+ let b = input.readUnsignedByte() / 255.0;
530
+ for (let frame = 0, bezier = 0;; frame++) {
531
+ timeline.setFrame(frame, time, r, g, b);
532
+ if (frame == frameLast)
533
+ break;
534
+ let time2 = input.readFloat();
535
+ let r2 = input.readUnsignedByte() / 255.0;
536
+ let g2 = input.readUnsignedByte() / 255.0;
537
+ let b2 = input.readUnsignedByte() / 255.0;
538
+ switch (input.readByte()) {
539
+ case CURVE_STEPPED:
540
+ timeline.setStepped(frame);
541
+ break;
542
+ case CURVE_BEZIER:
543
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);
544
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);
545
+ setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);
546
+ }
547
+ time = time2;
548
+ r = r2;
549
+ g = g2;
550
+ b = b2;
551
+ }
552
+ timelines.push(timeline);
553
+ break;
554
+ }
555
+ case SLOT_RGBA2: {
556
+ let bezierCount = input.readInt(true);
557
+ let timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex);
558
+ let time = input.readFloat();
559
+ let r = input.readUnsignedByte() / 255.0;
560
+ let g = input.readUnsignedByte() / 255.0;
561
+ let b = input.readUnsignedByte() / 255.0;
562
+ let a = input.readUnsignedByte() / 255.0;
563
+ let r2 = input.readUnsignedByte() / 255.0;
564
+ let g2 = input.readUnsignedByte() / 255.0;
565
+ let b2 = input.readUnsignedByte() / 255.0;
566
+ for (let frame = 0, bezier = 0;; frame++) {
567
+ timeline.setFrame(frame, time, r, g, b, a, r2, g2, b2);
568
+ if (frame == frameLast)
569
+ break;
570
+ let time2 = input.readFloat();
571
+ let nr = input.readUnsignedByte() / 255.0;
572
+ let ng = input.readUnsignedByte() / 255.0;
573
+ let nb = input.readUnsignedByte() / 255.0;
574
+ let na = input.readUnsignedByte() / 255.0;
575
+ let nr2 = input.readUnsignedByte() / 255.0;
576
+ let ng2 = input.readUnsignedByte() / 255.0;
577
+ let nb2 = input.readUnsignedByte() / 255.0;
578
+ switch (input.readByte()) {
579
+ case CURVE_STEPPED:
580
+ timeline.setStepped(frame);
581
+ break;
582
+ case CURVE_BEZIER:
583
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);
584
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);
585
+ setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);
586
+ setBezier(input, timeline, bezier++, frame, 3, time, time2, a, na, 1);
587
+ setBezier(input, timeline, bezier++, frame, 4, time, time2, r2, nr2, 1);
588
+ setBezier(input, timeline, bezier++, frame, 5, time, time2, g2, ng2, 1);
589
+ setBezier(input, timeline, bezier++, frame, 6, time, time2, b2, nb2, 1);
590
+ }
591
+ time = time2;
592
+ r = nr;
593
+ g = ng;
594
+ b = nb;
595
+ a = na;
596
+ r2 = nr2;
597
+ g2 = ng2;
598
+ b2 = nb2;
599
+ }
600
+ timelines.push(timeline);
601
+ break;
602
+ }
603
+ case SLOT_RGB2: {
604
+ let bezierCount = input.readInt(true);
605
+ let timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex);
606
+ let time = input.readFloat();
607
+ let r = input.readUnsignedByte() / 255.0;
608
+ let g = input.readUnsignedByte() / 255.0;
609
+ let b = input.readUnsignedByte() / 255.0;
610
+ let r2 = input.readUnsignedByte() / 255.0;
611
+ let g2 = input.readUnsignedByte() / 255.0;
612
+ let b2 = input.readUnsignedByte() / 255.0;
613
+ for (let frame = 0, bezier = 0;; frame++) {
614
+ timeline.setFrame(frame, time, r, g, b, r2, g2, b2);
615
+ if (frame == frameLast)
616
+ break;
617
+ let time2 = input.readFloat();
618
+ let nr = input.readUnsignedByte() / 255.0;
619
+ let ng = input.readUnsignedByte() / 255.0;
620
+ let nb = input.readUnsignedByte() / 255.0;
621
+ let nr2 = input.readUnsignedByte() / 255.0;
622
+ let ng2 = input.readUnsignedByte() / 255.0;
623
+ let nb2 = input.readUnsignedByte() / 255.0;
624
+ switch (input.readByte()) {
625
+ case CURVE_STEPPED:
626
+ timeline.setStepped(frame);
627
+ break;
628
+ case CURVE_BEZIER:
629
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);
630
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);
631
+ setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);
632
+ setBezier(input, timeline, bezier++, frame, 3, time, time2, r2, nr2, 1);
633
+ setBezier(input, timeline, bezier++, frame, 4, time, time2, g2, ng2, 1);
634
+ setBezier(input, timeline, bezier++, frame, 5, time, time2, b2, nb2, 1);
635
+ }
636
+ time = time2;
637
+ r = nr;
638
+ g = ng;
639
+ b = nb;
640
+ r2 = nr2;
641
+ g2 = ng2;
642
+ b2 = nb2;
643
+ }
644
+ timelines.push(timeline);
645
+ break;
646
+ }
647
+ case SLOT_ALPHA: {
648
+ let timeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex);
649
+ let time = input.readFloat(), a = input.readUnsignedByte() / 255;
650
+ for (let frame = 0, bezier = 0;; frame++) {
651
+ timeline.setFrame(frame, time, a);
652
+ if (frame == frameLast)
653
+ break;
654
+ let time2 = input.readFloat();
655
+ let a2 = input.readUnsignedByte() / 255;
656
+ switch (input.readByte()) {
657
+ case CURVE_STEPPED:
658
+ timeline.setStepped(frame);
659
+ break;
660
+ case CURVE_BEZIER:
661
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, a, a2, 1);
662
+ }
663
+ time = time2;
664
+ a = a2;
665
+ }
666
+ timelines.push(timeline);
667
+ break;
668
+ }
669
+ }
670
+ }
671
+ }
672
+ // Bone timelines.
673
+ for (let i = 0, n = input.readInt(true); i < n; i++) {
674
+ let boneIndex = input.readInt(true);
675
+ for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
676
+ let type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);
677
+ switch (type) {
678
+ case BONE_ROTATE:
679
+ timelines.push(readTimeline1(input, new RotateTimeline(frameCount, bezierCount, boneIndex), 1));
680
+ break;
681
+ case BONE_TRANSLATE:
682
+ timelines.push(readTimeline2(input, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale));
683
+ break;
684
+ case BONE_TRANSLATEX:
685
+ timelines.push(readTimeline1(input, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale));
686
+ break;
687
+ case BONE_TRANSLATEY:
688
+ timelines.push(readTimeline1(input, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale));
689
+ break;
690
+ case BONE_SCALE:
691
+ timelines.push(readTimeline2(input, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1));
692
+ break;
693
+ case BONE_SCALEX:
694
+ timelines.push(readTimeline1(input, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1));
695
+ break;
696
+ case BONE_SCALEY:
697
+ timelines.push(readTimeline1(input, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1));
698
+ break;
699
+ case BONE_SHEAR:
700
+ timelines.push(readTimeline2(input, new ShearTimeline(frameCount, bezierCount, boneIndex), 1));
701
+ break;
702
+ case BONE_SHEARX:
703
+ timelines.push(readTimeline1(input, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1));
704
+ break;
705
+ case BONE_SHEARY:
706
+ timelines.push(readTimeline1(input, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1));
707
+ }
708
+ }
709
+ }
710
+ // IK constraint timelines.
711
+ for (let i = 0, n = input.readInt(true); i < n; i++) {
712
+ let index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;
713
+ let timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index);
714
+ let time = input.readFloat(), mix = input.readFloat(), softness = input.readFloat() * scale;
715
+ for (let frame = 0, bezier = 0;; frame++) {
716
+ timeline.setFrame(frame, time, mix, softness, input.readByte(), input.readBoolean(), input.readBoolean());
717
+ if (frame == frameLast)
718
+ break;
719
+ let time2 = input.readFloat(), mix2 = input.readFloat(), softness2 = input.readFloat() * scale;
720
+ switch (input.readByte()) {
721
+ case CURVE_STEPPED:
722
+ timeline.setStepped(frame);
723
+ break;
724
+ case CURVE_BEZIER:
725
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);
726
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale);
727
+ }
728
+ time = time2;
729
+ mix = mix2;
730
+ softness = softness2;
731
+ }
732
+ timelines.push(timeline);
733
+ }
734
+ // Transform constraint timelines.
735
+ for (let i = 0, n = input.readInt(true); i < n; i++) {
736
+ let index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;
737
+ let timeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index);
738
+ let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat(), mixScaleX = input.readFloat(), mixScaleY = input.readFloat(), mixShearY = input.readFloat();
739
+ for (let frame = 0, bezier = 0;; frame++) {
740
+ timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);
741
+ if (frame == frameLast)
742
+ break;
743
+ let time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat(), mixScaleX2 = input.readFloat(), mixScaleY2 = input.readFloat(), mixShearY2 = input.readFloat();
744
+ switch (input.readByte()) {
745
+ case CURVE_STEPPED:
746
+ timeline.setStepped(frame);
747
+ break;
748
+ case CURVE_BEZIER:
749
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);
750
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);
751
+ setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);
752
+ setBezier(input, timeline, bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);
753
+ setBezier(input, timeline, bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);
754
+ setBezier(input, timeline, bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1);
755
+ }
756
+ time = time2;
757
+ mixRotate = mixRotate2;
758
+ mixX = mixX2;
759
+ mixY = mixY2;
760
+ mixScaleX = mixScaleX2;
761
+ mixScaleY = mixScaleY2;
762
+ mixShearY = mixShearY2;
763
+ }
764
+ timelines.push(timeline);
765
+ }
766
+ // Path constraint timelines.
767
+ for (let i = 0, n = input.readInt(true); i < n; i++) {
768
+ let index = input.readInt(true);
769
+ let data = skeletonData.pathConstraints[index];
770
+ for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
771
+ switch (input.readByte()) {
772
+ case PATH_POSITION:
773
+ timelines
774
+ .push(readTimeline1(input, new PathConstraintPositionTimeline(input.readInt(true), input.readInt(true), index), data.positionMode == PositionMode.Fixed ? scale : 1));
775
+ break;
776
+ case PATH_SPACING:
777
+ timelines
778
+ .push(readTimeline1(input, new PathConstraintSpacingTimeline(input.readInt(true), input.readInt(true), index), data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed ? scale : 1));
779
+ break;
780
+ case PATH_MIX:
781
+ let timeline = new PathConstraintMixTimeline(input.readInt(true), input.readInt(true), index);
782
+ let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat();
783
+ for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {
784
+ timeline.setFrame(frame, time, mixRotate, mixX, mixY);
785
+ if (frame == frameLast)
786
+ break;
787
+ let time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat();
788
+ switch (input.readByte()) {
789
+ case CURVE_STEPPED:
790
+ timeline.setStepped(frame);
791
+ break;
792
+ case CURVE_BEZIER:
793
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);
794
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);
795
+ setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);
796
+ }
797
+ time = time2;
798
+ mixRotate = mixRotate2;
799
+ mixX = mixX2;
800
+ mixY = mixY2;
801
+ }
802
+ timelines.push(timeline);
803
+ }
804
+ }
805
+ }
806
+ // Deform timelines.
807
+ for (let i = 0, n = input.readInt(true); i < n; i++) {
808
+ let skin = skeletonData.skins[input.readInt(true)];
809
+ for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
810
+ let slotIndex = input.readInt(true);
811
+ for (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {
812
+ let attachmentName = input.readStringRef();
813
+ let attachment = skin.getAttachment(slotIndex, attachmentName);
814
+ let weighted = attachment.bones;
815
+ let vertices = attachment.vertices;
816
+ let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
817
+ let frameCount = input.readInt(true);
818
+ let frameLast = frameCount - 1;
819
+ let bezierCount = input.readInt(true);
820
+ let timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, attachment);
821
+ let time = input.readFloat();
822
+ for (let frame = 0, bezier = 0;; frame++) {
823
+ let deform;
824
+ let end = input.readInt(true);
825
+ if (end == 0)
826
+ deform = weighted ? Utils.newFloatArray(deformLength) : vertices;
827
+ else {
828
+ deform = Utils.newFloatArray(deformLength);
829
+ let start = input.readInt(true);
830
+ end += start;
831
+ if (scale == 1) {
832
+ for (let v = start; v < end; v++)
833
+ deform[v] = input.readFloat();
834
+ }
835
+ else {
836
+ for (let v = start; v < end; v++)
837
+ deform[v] = input.readFloat() * scale;
838
+ }
839
+ if (!weighted) {
840
+ for (let v = 0, vn = deform.length; v < vn; v++)
841
+ deform[v] += vertices[v];
842
+ }
843
+ }
844
+ timeline.setFrame(frame, time, deform);
845
+ if (frame == frameLast)
846
+ break;
847
+ let time2 = input.readFloat();
848
+ switch (input.readByte()) {
849
+ case CURVE_STEPPED:
850
+ timeline.setStepped(frame);
851
+ break;
852
+ case CURVE_BEZIER:
853
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1);
854
+ }
855
+ time = time2;
856
+ }
857
+ timelines.push(timeline);
858
+ }
859
+ }
860
+ }
861
+ // Draw order timeline.
862
+ let drawOrderCount = input.readInt(true);
863
+ if (drawOrderCount > 0) {
864
+ let timeline = new DrawOrderTimeline(drawOrderCount);
865
+ let slotCount = skeletonData.slots.length;
866
+ for (let i = 0; i < drawOrderCount; i++) {
867
+ let time = input.readFloat();
868
+ let offsetCount = input.readInt(true);
869
+ let drawOrder = Utils.newArray(slotCount, 0);
870
+ for (let ii = slotCount - 1; ii >= 0; ii--)
871
+ drawOrder[ii] = -1;
872
+ let unchanged = Utils.newArray(slotCount - offsetCount, 0);
873
+ let originalIndex = 0, unchangedIndex = 0;
874
+ for (let ii = 0; ii < offsetCount; ii++) {
875
+ let slotIndex = input.readInt(true);
876
+ // Collect unchanged items.
877
+ while (originalIndex != slotIndex)
878
+ unchanged[unchangedIndex++] = originalIndex++;
879
+ // Set changed items.
880
+ drawOrder[originalIndex + input.readInt(true)] = originalIndex++;
881
+ }
882
+ // Collect remaining unchanged items.
883
+ while (originalIndex < slotCount)
884
+ unchanged[unchangedIndex++] = originalIndex++;
885
+ // Fill in unchanged items.
886
+ for (let ii = slotCount - 1; ii >= 0; ii--)
887
+ if (drawOrder[ii] == -1)
888
+ drawOrder[ii] = unchanged[--unchangedIndex];
889
+ timeline.setFrame(i, time, drawOrder);
890
+ }
891
+ timelines.push(timeline);
892
+ }
893
+ // Event timeline.
894
+ let eventCount = input.readInt(true);
895
+ if (eventCount > 0) {
896
+ let timeline = new EventTimeline(eventCount);
897
+ for (let i = 0; i < eventCount; i++) {
898
+ let time = input.readFloat();
899
+ let eventData = skeletonData.events[input.readInt(true)];
900
+ let event = new Event(time, eventData);
901
+ event.intValue = input.readInt(false);
902
+ event.floatValue = input.readFloat();
903
+ event.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue;
904
+ if (event.data.audioPath) {
905
+ event.volume = input.readFloat();
906
+ event.balance = input.readFloat();
907
+ }
908
+ timeline.setFrame(i, event);
909
+ }
910
+ timelines.push(timeline);
911
+ }
912
+ let duration = 0;
913
+ for (let i = 0, n = timelines.length; i < n; i++)
914
+ duration = Math.max(duration, timelines[i].getDuration());
915
+ return new Animation(name, timelines, duration);
916
+ }
917
+ }
918
+ export class BinaryInput {
919
+ constructor(data, strings = new Array(), index = 0, buffer = new DataView(data.buffer)) {
920
+ this.strings = strings;
921
+ this.index = index;
922
+ this.buffer = buffer;
923
+ }
924
+ readByte() {
925
+ return this.buffer.getInt8(this.index++);
926
+ }
927
+ readUnsignedByte() {
928
+ return this.buffer.getUint8(this.index++);
929
+ }
930
+ readShort() {
931
+ let value = this.buffer.getInt16(this.index);
932
+ this.index += 2;
933
+ return value;
934
+ }
935
+ readInt32() {
936
+ let value = this.buffer.getInt32(this.index);
937
+ this.index += 4;
938
+ return value;
939
+ }
940
+ readInt(optimizePositive) {
941
+ let b = this.readByte();
942
+ let result = b & 0x7F;
943
+ if ((b & 0x80) != 0) {
944
+ b = this.readByte();
945
+ result |= (b & 0x7F) << 7;
946
+ if ((b & 0x80) != 0) {
947
+ b = this.readByte();
948
+ result |= (b & 0x7F) << 14;
949
+ if ((b & 0x80) != 0) {
950
+ b = this.readByte();
951
+ result |= (b & 0x7F) << 21;
952
+ if ((b & 0x80) != 0) {
953
+ b = this.readByte();
954
+ result |= (b & 0x7F) << 28;
955
+ }
956
+ }
957
+ }
958
+ }
959
+ return optimizePositive ? result : ((result >>> 1) ^ -(result & 1));
960
+ }
961
+ readStringRef() {
962
+ let index = this.readInt(true);
963
+ return index == 0 ? null : this.strings[index - 1];
964
+ }
965
+ readString() {
966
+ let byteCount = this.readInt(true);
967
+ switch (byteCount) {
968
+ case 0:
969
+ return null;
970
+ case 1:
971
+ return "";
972
+ }
973
+ byteCount--;
974
+ let chars = "";
975
+ let charCount = 0;
976
+ for (let i = 0; i < byteCount;) {
977
+ let b = this.readByte();
978
+ switch (b >> 4) {
979
+ case 12:
980
+ case 13:
981
+ chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F));
982
+ i += 2;
983
+ break;
984
+ case 14:
985
+ chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F));
986
+ i += 3;
987
+ break;
988
+ default:
989
+ chars += String.fromCharCode(b);
990
+ i++;
991
+ }
992
+ }
993
+ return chars;
994
+ }
995
+ readFloat() {
996
+ let value = this.buffer.getFloat32(this.index);
997
+ this.index += 4;
998
+ return value;
999
+ }
1000
+ readBoolean() {
1001
+ return this.readByte() != 0;
1002
+ }
1003
+ }
1004
+ class LinkedMesh {
1005
+ constructor(mesh, skin, slotIndex, parent, inheritDeform) {
1006
+ this.mesh = mesh;
1007
+ this.skin = skin;
1008
+ this.slotIndex = slotIndex;
1009
+ this.parent = parent;
1010
+ this.inheritDeform = inheritDeform;
1011
+ }
1012
+ }
1013
+ class Vertices {
1014
+ constructor(bones = null, vertices = null) {
1015
+ this.bones = bones;
1016
+ this.vertices = vertices;
1017
+ }
1018
+ }
1019
+ var AttachmentType;
1020
+ (function (AttachmentType) {
1021
+ AttachmentType[AttachmentType["Region"] = 0] = "Region";
1022
+ AttachmentType[AttachmentType["BoundingBox"] = 1] = "BoundingBox";
1023
+ AttachmentType[AttachmentType["Mesh"] = 2] = "Mesh";
1024
+ AttachmentType[AttachmentType["LinkedMesh"] = 3] = "LinkedMesh";
1025
+ AttachmentType[AttachmentType["Path"] = 4] = "Path";
1026
+ AttachmentType[AttachmentType["Point"] = 5] = "Point";
1027
+ AttachmentType[AttachmentType["Clipping"] = 6] = "Clipping";
1028
+ })(AttachmentType || (AttachmentType = {}));
1029
+ function readTimeline1(input, timeline, scale) {
1030
+ let time = input.readFloat(), value = input.readFloat() * scale;
1031
+ for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {
1032
+ timeline.setFrame(frame, time, value);
1033
+ if (frame == frameLast)
1034
+ break;
1035
+ let time2 = input.readFloat(), value2 = input.readFloat() * scale;
1036
+ switch (input.readByte()) {
1037
+ case CURVE_STEPPED:
1038
+ timeline.setStepped(frame);
1039
+ break;
1040
+ case CURVE_BEZIER:
1041
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, value, value2, scale);
1042
+ }
1043
+ time = time2;
1044
+ value = value2;
1045
+ }
1046
+ return timeline;
1047
+ }
1048
+ function readTimeline2(input, timeline, scale) {
1049
+ let time = input.readFloat(), value1 = input.readFloat() * scale, value2 = input.readFloat() * scale;
1050
+ for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {
1051
+ timeline.setFrame(frame, time, value1, value2);
1052
+ if (frame == frameLast)
1053
+ break;
1054
+ let time2 = input.readFloat(), nvalue1 = input.readFloat() * scale, nvalue2 = input.readFloat() * scale;
1055
+ switch (input.readByte()) {
1056
+ case CURVE_STEPPED:
1057
+ timeline.setStepped(frame);
1058
+ break;
1059
+ case CURVE_BEZIER:
1060
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, value1, nvalue1, scale);
1061
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, value2, nvalue2, scale);
1062
+ }
1063
+ time = time2;
1064
+ value1 = nvalue1;
1065
+ value2 = nvalue2;
1066
+ }
1067
+ return timeline;
1068
+ }
1069
+ function setBezier(input, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {
1070
+ timeline.setBezier(bezier, frame, value, time1, value1, input.readFloat(), input.readFloat() * scale, input.readFloat(), input.readFloat() * scale, time2, value2);
1071
+ }
1072
+ const BONE_ROTATE = 0;
1073
+ const BONE_TRANSLATE = 1;
1074
+ const BONE_TRANSLATEX = 2;
1075
+ const BONE_TRANSLATEY = 3;
1076
+ const BONE_SCALE = 4;
1077
+ const BONE_SCALEX = 5;
1078
+ const BONE_SCALEY = 6;
1079
+ const BONE_SHEAR = 7;
1080
+ const BONE_SHEARX = 8;
1081
+ const BONE_SHEARY = 9;
1082
+ const SLOT_ATTACHMENT = 0;
1083
+ const SLOT_RGBA = 1;
1084
+ const SLOT_RGB = 2;
1085
+ const SLOT_RGBA2 = 3;
1086
+ const SLOT_RGB2 = 4;
1087
+ const SLOT_ALPHA = 5;
1088
+ const PATH_POSITION = 0;
1089
+ const PATH_SPACING = 1;
1090
+ const PATH_MIX = 2;
1091
+ const CURVE_LINEAR = 0;
1092
+ const CURVE_STEPPED = 1;
1093
+ const CURVE_BEZIER = 2;
1094
1094
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25CaW5hcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b25CaW5hcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxTQUFTLEVBQVksa0JBQWtCLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsMkJBQTJCLEVBQUUsOEJBQThCLEVBQUUsNkJBQTZCLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBaUQsTUFBTSxhQUFhLENBQUM7QUFJcGlCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxN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LFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQ0FDdEUsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0NBQ3RFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29DQUN0RSxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQ0FDdEUsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0NBQ3hFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO29DQUN4RSxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQzs2QkFDekU7NEJBQ0QsSUFBSSxHQUFHLEtBQUssQ0FBQzs0QkFD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