@esotericsoftware/spine-canvas 4.0.7 → 4.0.11

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.
@@ -26,31 +26,11 @@
26
26
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
- var __extends = (this && this.__extends) || (function () {
30
- var extendStatics = function (d, b) {
31
- extendStatics = Object.setPrototypeOf ||
32
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
33
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
34
- return extendStatics(d, b);
35
- };
36
- return function (d, b) {
37
- if (typeof b !== "function" && b !== null)
38
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
39
- extendStatics(d, b);
40
- function __() { this.constructor = d; }
41
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
42
- };
43
- })();
44
29
  import { AssetManagerBase } from "@esotericsoftware/spine-core";
45
30
  import { CanvasTexture } from "./CanvasTexture";
46
- var AssetManager = /** @class */ (function (_super) {
47
- __extends(AssetManager, _super);
48
- function AssetManager(pathPrefix, downloader) {
49
- if (pathPrefix === void 0) { pathPrefix = ""; }
50
- if (downloader === void 0) { downloader = null; }
51
- return _super.call(this, function (image) { return new CanvasTexture(image); }, pathPrefix, downloader) || this;
31
+ export class AssetManager extends AssetManagerBase {
32
+ constructor(pathPrefix = "", downloader = null) {
33
+ super((image) => { return new CanvasTexture(image); }, pathPrefix, downloader);
52
34
  }
53
- return AssetManager;
54
- }(AssetManagerBase));
55
- export { AssetManager };
56
- //# sourceMappingURL=AssetManager.js.map
35
+ }
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNzZXRNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Fzc2V0TWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFjLE1BQU0sOEJBQThCLENBQUE7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE1BQU0sT0FBTyxZQUFhLFNBQVEsZ0JBQWdCO0lBQ2pELFlBQWEsYUFBcUIsRUFBRSxFQUFFLGFBQXlCLElBQUk7UUFDbEUsS0FBSyxDQUFDLENBQUMsS0FBdUIsRUFBRSxFQUFFLEdBQUcsT0FBTyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbEcsQ0FBQztDQUNEIn0=
@@ -26,31 +26,13 @@
26
26
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
- var __extends = (this && this.__extends) || (function () {
30
- var extendStatics = function (d, b) {
31
- extendStatics = Object.setPrototypeOf ||
32
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
33
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
34
- return extendStatics(d, b);
35
- };
36
- return function (d, b) {
37
- if (typeof b !== "function" && b !== null)
38
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
39
- extendStatics(d, b);
40
- function __() { this.constructor = d; }
41
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
42
- };
43
- })();
44
29
  import { Texture } from "@esotericsoftware/spine-core";
45
- var CanvasTexture = /** @class */ (function (_super) {
46
- __extends(CanvasTexture, _super);
47
- function CanvasTexture(image) {
48
- return _super.call(this, image) || this;
30
+ export class CanvasTexture extends Texture {
31
+ constructor(image) {
32
+ super(image);
49
33
  }
50
- CanvasTexture.prototype.setFilters = function (minFilter, magFilter) { };
51
- CanvasTexture.prototype.setWraps = function (uWrap, vWrap) { };
52
- CanvasTexture.prototype.dispose = function () { };
53
- return CanvasTexture;
54
- }(Texture));
55
- export { CanvasTexture };
56
- //# sourceMappingURL=CanvasTexture.js.map
34
+ setFilters(minFilter, magFilter) { }
35
+ setWraps(uWrap, vWrap) { }
36
+ dispose() { }
37
+ }
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FudmFzVGV4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9DYW52YXNUZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUUvRSxPQUFPLEVBQUUsT0FBTyxFQUE4QixNQUFNLDhCQUE4QixDQUFDO0FBRW5GLE1BQU0sT0FBTyxhQUFjLFNBQVEsT0FBTztJQUN6QyxZQUFhLEtBQXVCO1FBQ25DLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRCxVQUFVLENBQUUsU0FBd0IsRUFBRSxTQUF3QixJQUFJLENBQUM7SUFDbkUsUUFBUSxDQUFFLEtBQWtCLEVBQUUsS0FBa0IsSUFBSSxDQUFDO0lBQ3JELE9BQU8sS0FBTSxDQUFDO0NBQ2QifQ==
@@ -27,50 +27,50 @@
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
29
  import { Utils, Color, RegionAttachment, MeshAttachment } from "@esotericsoftware/spine-core";
30
- var SkeletonRenderer = /** @class */ (function () {
31
- function SkeletonRenderer(context) {
30
+ export class SkeletonRenderer {
31
+ constructor(context) {
32
32
  this.triangleRendering = false;
33
33
  this.debugRendering = false;
34
34
  this.vertices = Utils.newFloatArray(8 * 1024);
35
35
  this.tempColor = new Color();
36
36
  this.ctx = context;
37
37
  }
38
- SkeletonRenderer.prototype.draw = function (skeleton) {
38
+ draw(skeleton) {
39
39
  if (this.triangleRendering)
40
40
  this.drawTriangles(skeleton);
41
41
  else
42
42
  this.drawImages(skeleton);
43
- };
44
- SkeletonRenderer.prototype.drawImages = function (skeleton) {
45
- var ctx = this.ctx;
46
- var color = this.tempColor;
47
- var skeletonColor = skeleton.color;
48
- var drawOrder = skeleton.drawOrder;
43
+ }
44
+ drawImages(skeleton) {
45
+ let ctx = this.ctx;
46
+ let color = this.tempColor;
47
+ let skeletonColor = skeleton.color;
48
+ let drawOrder = skeleton.drawOrder;
49
49
  if (this.debugRendering)
50
50
  ctx.strokeStyle = "green";
51
- for (var i = 0, n = drawOrder.length; i < n; i++) {
52
- var slot = drawOrder[i];
53
- var bone = slot.bone;
51
+ for (let i = 0, n = drawOrder.length; i < n; i++) {
52
+ let slot = drawOrder[i];
53
+ let bone = slot.bone;
54
54
  if (!bone.active)
55
55
  continue;
56
- var attachment = slot.getAttachment();
56
+ let attachment = slot.getAttachment();
57
57
  if (!(attachment instanceof RegionAttachment))
58
58
  continue;
59
- var region = attachment.region;
60
- var image = region.page.texture.getImage();
61
- var slotColor = slot.color;
62
- var regionColor = attachment.color;
59
+ let region = attachment.region;
60
+ let image = region.page.texture.getImage();
61
+ let slotColor = slot.color;
62
+ let regionColor = attachment.color;
63
63
  color.set(skeletonColor.r * slotColor.r * regionColor.r, skeletonColor.g * slotColor.g * regionColor.g, skeletonColor.b * slotColor.b * regionColor.b, skeletonColor.a * slotColor.a * regionColor.a);
64
64
  ctx.save();
65
65
  ctx.transform(bone.a, bone.c, bone.b, bone.d, bone.worldX, bone.worldY);
66
66
  ctx.translate(attachment.offset[0], attachment.offset[1]);
67
67
  ctx.rotate(attachment.rotation * Math.PI / 180);
68
- var atlasScale = attachment.width / region.originalWidth;
68
+ let atlasScale = attachment.width / region.originalWidth;
69
69
  ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY);
70
- var w = region.width, h = region.height;
70
+ let w = region.width, h = region.height;
71
71
  ctx.translate(w / 2, h / 2);
72
72
  if (attachment.region.degrees == 90) {
73
- var t = w;
73
+ let t = w;
74
74
  w = h;
75
75
  h = t;
76
76
  ctx.rotate(-Math.PI / 2);
@@ -89,29 +89,29 @@ var SkeletonRenderer = /** @class */ (function () {
89
89
  ctx.strokeRect(0, 0, w, h);
90
90
  ctx.restore();
91
91
  }
92
- };
93
- SkeletonRenderer.prototype.drawTriangles = function (skeleton) {
94
- var ctx = this.ctx;
95
- var color = this.tempColor;
96
- var skeletonColor = skeleton.color;
97
- var drawOrder = skeleton.drawOrder;
98
- var blendMode = null;
99
- var vertices = this.vertices;
100
- var triangles = null;
101
- for (var i = 0, n = drawOrder.length; i < n; i++) {
102
- var slot = drawOrder[i];
103
- var attachment = slot.getAttachment();
104
- var texture = void 0;
105
- var region = void 0;
92
+ }
93
+ drawTriangles(skeleton) {
94
+ let ctx = this.ctx;
95
+ let color = this.tempColor;
96
+ let skeletonColor = skeleton.color;
97
+ let drawOrder = skeleton.drawOrder;
98
+ let blendMode = null;
99
+ let vertices = this.vertices;
100
+ let triangles = null;
101
+ for (let i = 0, n = drawOrder.length; i < n; i++) {
102
+ let slot = drawOrder[i];
103
+ let attachment = slot.getAttachment();
104
+ let texture;
105
+ let region;
106
106
  if (attachment instanceof RegionAttachment) {
107
- var regionAttachment = attachment;
107
+ let regionAttachment = attachment;
108
108
  vertices = this.computeRegionVertices(slot, regionAttachment, false);
109
109
  triangles = SkeletonRenderer.QUAD_TRIANGLES;
110
110
  region = regionAttachment.region;
111
111
  texture = region.page.texture.getImage();
112
112
  }
113
113
  else if (attachment instanceof MeshAttachment) {
114
- var mesh = attachment;
114
+ let mesh = attachment;
115
115
  vertices = this.computeMeshVertices(slot, mesh, false);
116
116
  triangles = mesh.triangles;
117
117
  texture = mesh.region.renderObject.page.texture.getImage();
@@ -121,8 +121,8 @@ var SkeletonRenderer = /** @class */ (function () {
121
121
  if (texture) {
122
122
  if (slot.data.blendMode != blendMode)
123
123
  blendMode = slot.data.blendMode;
124
- var slotColor = slot.color;
125
- var attachmentColor = attachment.color;
124
+ let slotColor = slot.color;
125
+ let attachmentColor = attachment.color;
126
126
  color.set(skeletonColor.r * slotColor.r * attachmentColor.r, skeletonColor.g * slotColor.g * attachmentColor.g, skeletonColor.b * slotColor.b * attachmentColor.b, skeletonColor.a * slotColor.a * attachmentColor.a);
127
127
  if (color.r != 1 || color.g != 1 || color.b != 1 || color.a != 1) {
128
128
  ctx.globalAlpha = color.a;
@@ -132,10 +132,10 @@ var SkeletonRenderer = /** @class */ (function () {
132
132
  // ctx.fillRect(0, 0, w, h);
133
133
  }
134
134
  for (var j = 0; j < triangles.length; j += 3) {
135
- var t1 = triangles[j] * 8, t2 = triangles[j + 1] * 8, t3 = triangles[j + 2] * 8;
136
- var x0 = vertices[t1], y0 = vertices[t1 + 1], u0 = vertices[t1 + 6], v0 = vertices[t1 + 7];
137
- var x1 = vertices[t2], y1 = vertices[t2 + 1], u1 = vertices[t2 + 6], v1 = vertices[t2 + 7];
138
- var x2 = vertices[t3], y2 = vertices[t3 + 1], u2 = vertices[t3 + 6], v2 = vertices[t3 + 7];
135
+ let t1 = triangles[j] * 8, t2 = triangles[j + 1] * 8, t3 = triangles[j + 2] * 8;
136
+ let x0 = vertices[t1], y0 = vertices[t1 + 1], u0 = vertices[t1 + 6], v0 = vertices[t1 + 7];
137
+ let x1 = vertices[t2], y1 = vertices[t2 + 1], u1 = vertices[t2 + 6], v1 = vertices[t2 + 7];
138
+ let x2 = vertices[t3], y2 = vertices[t3 + 1], u2 = vertices[t3 + 6], v2 = vertices[t3 + 7];
139
139
  this.drawTriangle(texture, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2);
140
140
  if (this.debugRendering) {
141
141
  ctx.strokeStyle = "green";
@@ -150,11 +150,11 @@ var SkeletonRenderer = /** @class */ (function () {
150
150
  }
151
151
  }
152
152
  this.ctx.globalAlpha = 1;
153
- };
153
+ }
154
154
  // Adapted from http://extremelysatisfactorytotalitarianism.com/blog/?p=2120
155
155
  // Apache 2 licensed
156
- SkeletonRenderer.prototype.drawTriangle = function (img, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2) {
157
- var ctx = this.ctx;
156
+ drawTriangle(img, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2) {
157
+ let ctx = this.ctx;
158
158
  u0 *= img.width;
159
159
  v0 *= img.height;
160
160
  u1 *= img.width;
@@ -184,18 +184,18 @@ var SkeletonRenderer = /** @class */ (function () {
184
184
  ctx.clip();
185
185
  ctx.drawImage(img, 0, 0);
186
186
  ctx.restore();
187
- };
188
- SkeletonRenderer.prototype.computeRegionVertices = function (slot, region, pma) {
189
- var skeletonColor = slot.bone.skeleton.color;
190
- var slotColor = slot.color;
191
- var regionColor = region.color;
192
- var alpha = skeletonColor.a * slotColor.a * regionColor.a;
193
- var multiplier = pma ? alpha : 1;
194
- var color = this.tempColor;
187
+ }
188
+ computeRegionVertices(slot, region, pma) {
189
+ let skeletonColor = slot.bone.skeleton.color;
190
+ let slotColor = slot.color;
191
+ let regionColor = region.color;
192
+ let alpha = skeletonColor.a * slotColor.a * regionColor.a;
193
+ let multiplier = pma ? alpha : 1;
194
+ let color = this.tempColor;
195
195
  color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha);
196
196
  region.computeWorldVertices(slot.bone, this.vertices, 0, SkeletonRenderer.VERTEX_SIZE);
197
- var vertices = this.vertices;
198
- var uvs = region.uvs;
197
+ let vertices = this.vertices;
198
+ let uvs = region.uvs;
199
199
  vertices[RegionAttachment.C1R] = color.r;
200
200
  vertices[RegionAttachment.C1G] = color.g;
201
201
  vertices[RegionAttachment.C1B] = color.b;
@@ -221,22 +221,22 @@ var SkeletonRenderer = /** @class */ (function () {
221
221
  vertices[RegionAttachment.U4] = uvs[6];
222
222
  vertices[RegionAttachment.V4] = uvs[7];
223
223
  return vertices;
224
- };
225
- SkeletonRenderer.prototype.computeMeshVertices = function (slot, mesh, pma) {
226
- var skeletonColor = slot.bone.skeleton.color;
227
- var slotColor = slot.color;
228
- var regionColor = mesh.color;
229
- var alpha = skeletonColor.a * slotColor.a * regionColor.a;
230
- var multiplier = pma ? alpha : 1;
231
- var color = this.tempColor;
224
+ }
225
+ computeMeshVertices(slot, mesh, pma) {
226
+ let skeletonColor = slot.bone.skeleton.color;
227
+ let slotColor = slot.color;
228
+ let regionColor = mesh.color;
229
+ let alpha = skeletonColor.a * slotColor.a * regionColor.a;
230
+ let multiplier = pma ? alpha : 1;
231
+ let color = this.tempColor;
232
232
  color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha);
233
- var vertexCount = mesh.worldVerticesLength / 2;
234
- var vertices = this.vertices;
233
+ let vertexCount = mesh.worldVerticesLength / 2;
234
+ let vertices = this.vertices;
235
235
  if (vertices.length < mesh.worldVerticesLength)
236
236
  this.vertices = vertices = Utils.newFloatArray(mesh.worldVerticesLength);
237
237
  mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, SkeletonRenderer.VERTEX_SIZE);
238
- var uvs = mesh.uvs;
239
- for (var i = 0, u = 0, v = 2; i < vertexCount; i++) {
238
+ let uvs = mesh.uvs;
239
+ for (let i = 0, u = 0, v = 2; i < vertexCount; i++) {
240
240
  vertices[v++] = color.r;
241
241
  vertices[v++] = color.g;
242
242
  vertices[v++] = color.b;
@@ -246,10 +246,8 @@ var SkeletonRenderer = /** @class */ (function () {
246
246
  v += 2;
247
247
  }
248
248
  return vertices;
249
- };
250
- SkeletonRenderer.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];
251
- SkeletonRenderer.VERTEX_SIZE = 2 + 2 + 4;
252
- return SkeletonRenderer;
253
- }());
254
- export { SkeletonRenderer };
255
- //# sourceMappingURL=SkeletonRenderer.js.map
249
+ }
250
+ }
251
+ SkeletonRenderer.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];
252
+ SkeletonRenderer.VERTEX_SIZE = 2 + 2 + 4;
253
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25SZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ta2VsZXRvblJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUUvRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBWSxnQkFBZ0IsRUFBaUMsY0FBYyxFQUFRLE1BQU0sOEJBQThCLENBQUM7QUFHN0ksTUFBTSxPQUFPLGdCQUFnQjtJQVc1QixZQUFhLE9BQWlDO1FBTHZDLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN0QixhQUFRLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDekMsY0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFHL0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksQ0FBRSxRQUFrQjtRQUN2QixJQUFJLElBQUksQ0FBQyxpQkFBaUI7WUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztZQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyxVQUFVLENBQUUsUUFBa0I7UUFDckMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUNuQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzNCLElBQUksYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDbkMsSUFBSSxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUVuQyxJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsR0FBRyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7UUFFbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUs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Z0JBQWdCLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsUUFB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
@@ -1031,10 +1031,8 @@ var spine = (() => {
1031
1031
  bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;
1032
1032
  break;
1033
1033
  case 3:
1034
- bx = bone.scaleX;
1035
- by = bone.scaleY;
1036
- bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bone.data.scaleX) * alpha;
1037
- bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - bone.data.scaleY) * alpha;
1034
+ bone.scaleX = (x - bone.data.scaleX) * alpha;
1035
+ bone.scaleY = (y - bone.data.scaleY) * alpha;
1038
1036
  }
1039
1037
  } else {
1040
1038
  switch (blend) {
@@ -1052,10 +1050,8 @@ var spine = (() => {
1052
1050
  bone.scaleY = by + (y - by) * alpha;
1053
1051
  break;
1054
1052
  case 3:
1055
- bx = MathUtils.signum(x);
1056
- by = MathUtils.signum(y);
1057
- bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha;
1058
- bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha;
1053
+ bone.scaleX += (x - bone.data.scaleX) * alpha;
1054
+ bone.scaleY += (y - bone.data.scaleY) * alpha;
1059
1055
  }
1060
1056
  }
1061
1057
  }
@@ -1102,8 +1098,7 @@ var spine = (() => {
1102
1098
  bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;
1103
1099
  break;
1104
1100
  case 3:
1105
- bx = bone.scaleX;
1106
- bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bone.data.scaleX) * alpha;
1101
+ bone.scaleX = (x - bone.data.scaleX) * alpha;
1107
1102
  }
1108
1103
  } else {
1109
1104
  switch (blend) {
@@ -1117,8 +1112,7 @@ var spine = (() => {
1117
1112
  bone.scaleX = bx + (x - bx) * alpha;
1118
1113
  break;
1119
1114
  case 3:
1120
- bx = MathUtils.signum(x);
1121
- bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha;
1115
+ bone.scaleX += (x - bone.data.scaleX) * alpha;
1122
1116
  }
1123
1117
  }
1124
1118
  }
@@ -1165,8 +1159,7 @@ var spine = (() => {
1165
1159
  bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;
1166
1160
  break;
1167
1161
  case 3:
1168
- by = bone.scaleY;
1169
- bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - bone.data.scaleY) * alpha;
1162
+ bone.scaleY = (y - bone.data.scaleY) * alpha;
1170
1163
  }
1171
1164
  } else {
1172
1165
  switch (blend) {
@@ -1180,8 +1173,7 @@ var spine = (() => {
1180
1173
  bone.scaleY = by + (y - by) * alpha;
1181
1174
  break;
1182
1175
  case 3:
1183
- by = MathUtils.signum(y);
1184
- bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha;
1176
+ bone.scaleY += (y - bone.data.scaleY) * alpha;
1185
1177
  }
1186
1178
  }
1187
1179
  }
@@ -4005,8 +3997,8 @@ var spine = (() => {
4005
3997
  updateAppliedTransform() {
4006
3998
  let parent = this.parent;
4007
3999
  if (!parent) {
4008
- this.ax = this.worldX;
4009
- this.ay = this.worldY;
4000
+ this.ax = this.worldX - this.skeleton.x;
4001
+ this.ay = this.worldY - this.skeleton.y;
4010
4002
  this.arotation = Math.atan2(this.c, this.a) * MathUtils.radDeg;
4011
4003
  this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c);
4012
4004
  this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d);
@@ -4247,11 +4239,49 @@ var spine = (() => {
4247
4239
  this.callbacks = {};
4248
4240
  this.rawDataUris = {};
4249
4241
  }
4242
+ dataUriToString(dataUri) {
4243
+ if (!dataUri.startsWith("data:")) {
4244
+ throw new Error("Not a data URI.");
4245
+ }
4246
+ let base64Idx = dataUri.indexOf("base64,");
4247
+ if (base64Idx != -1) {
4248
+ base64Idx += "base64,".length;
4249
+ return atob(dataUri.substr(base64Idx));
4250
+ } else {
4251
+ return dataUri.substr(dataUri.indexOf(",") + 1);
4252
+ }
4253
+ }
4254
+ base64ToArrayBuffer(base64) {
4255
+ var binary_string = window.atob(base64);
4256
+ var len = binary_string.length;
4257
+ var bytes = new Uint8Array(len);
4258
+ for (var i = 0; i < len; i++) {
4259
+ bytes[i] = binary_string.charCodeAt(i);
4260
+ }
4261
+ return bytes.buffer;
4262
+ }
4263
+ dataUriToUint8Array(dataUri) {
4264
+ if (!dataUri.startsWith("data:")) {
4265
+ throw new Error("Not a data URI.");
4266
+ }
4267
+ let base64Idx = dataUri.indexOf("base64,");
4268
+ if (base64Idx == -1)
4269
+ throw new Error("Not a binary data URI.");
4270
+ base64Idx += "base64,".length;
4271
+ return this.base64ToArrayBuffer(dataUri.substr(base64Idx));
4272
+ }
4250
4273
  downloadText(url, success, error) {
4251
- if (this.rawDataUris[url])
4252
- url = this.rawDataUris[url];
4253
4274
  if (this.start(url, success, error))
4254
4275
  return;
4276
+ if (this.rawDataUris[url]) {
4277
+ try {
4278
+ let dataUri = this.rawDataUris[url];
4279
+ this.finish(url, 200, this.dataUriToString(dataUri));
4280
+ } catch (e) {
4281
+ this.finish(url, 400, JSON.stringify(e));
4282
+ }
4283
+ return;
4284
+ }
4255
4285
  let request = new XMLHttpRequest();
4256
4286
  request.overrideMimeType("text/html");
4257
4287
  request.open("GET", url, true);
@@ -4268,10 +4298,17 @@ var spine = (() => {
4268
4298
  }, error);
4269
4299
  }
4270
4300
  downloadBinary(url, success, error) {
4271
- if (this.rawDataUris[url])
4272
- url = this.rawDataUris[url];
4273
4301
  if (this.start(url, success, error))
4274
4302
  return;
4303
+ if (this.rawDataUris[url]) {
4304
+ try {
4305
+ let dataUri = this.rawDataUris[url];
4306
+ this.finish(url, 200, this.dataUriToUint8Array(dataUri));
4307
+ } catch (e) {
4308
+ this.finish(url, 400, JSON.stringify(e));
4309
+ }
4310
+ return;
4311
+ }
4275
4312
  let request = new XMLHttpRequest();
4276
4313
  request.open("GET", url, true);
4277
4314
  request.responseType = "arraybuffer";
@@ -5591,15 +5628,6 @@ var spine = (() => {
5591
5628
  }
5592
5629
  return null;
5593
5630
  }
5594
- findBoneIndex(boneName) {
5595
- if (!boneName)
5596
- throw new Error("boneName cannot be null.");
5597
- let bones = this.bones;
5598
- for (let i = 0, n = bones.length; i < n; i++)
5599
- if (bones[i].data.name == boneName)
5600
- return i;
5601
- return -1;
5602
- }
5603
5631
  findSlot(slotName) {
5604
5632
  if (!slotName)
5605
5633
  throw new Error("slotName cannot be null.");
@@ -5611,15 +5639,6 @@ var spine = (() => {
5611
5639
  }
5612
5640
  return null;
5613
5641
  }
5614
- findSlotIndex(slotName) {
5615
- if (!slotName)
5616
- throw new Error("slotName cannot be null.");
5617
- let slots = this.slots;
5618
- for (let i = 0, n = slots.length; i < n; i++)
5619
- if (slots[i].data.name == slotName)
5620
- return i;
5621
- return -1;
5622
- }
5623
5642
  setSkinByName(skinName) {
5624
5643
  let skin = this.data.findSkin(skinName);
5625
5644
  if (!skin)
@@ -5649,7 +5668,7 @@ var spine = (() => {
5649
5668
  this.updateCache();
5650
5669
  }
5651
5670
  getAttachmentByName(slotName, attachmentName) {
5652
- return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName);
5671
+ return this.getAttachment(this.data.findSlot(slotName).index, attachmentName);
5653
5672
  }
5654
5673
  getAttachment(slotIndex, attachmentName) {
5655
5674
  if (!attachmentName)
@@ -5781,15 +5800,6 @@ var spine = (() => {
5781
5800
  }
5782
5801
  return null;
5783
5802
  }
5784
- findBoneIndex(boneName) {
5785
- if (!boneName)
5786
- throw new Error("boneName cannot be null.");
5787
- let bones = this.bones;
5788
- for (let i = 0, n = bones.length; i < n; i++)
5789
- if (bones[i].name == boneName)
5790
- return i;
5791
- return -1;
5792
- }
5793
5803
  findSlot(slotName) {
5794
5804
  if (!slotName)
5795
5805
  throw new Error("slotName cannot be null.");
@@ -5801,15 +5811,6 @@ var spine = (() => {
5801
5811
  }
5802
5812
  return null;
5803
5813
  }
5804
- findSlotIndex(slotName) {
5805
- if (!slotName)
5806
- throw new Error("slotName cannot be null.");
5807
- let slots = this.slots;
5808
- for (let i = 0, n = slots.length; i < n; i++)
5809
- if (slots[i].name == slotName)
5810
- return i;
5811
- return -1;
5812
- }
5813
5814
  findSkin(skinName) {
5814
5815
  if (!skinName)
5815
5816
  throw new Error("skinName cannot be null.");
@@ -8094,20 +8095,21 @@ var spine = (() => {
8094
8095
  if (map.slots) {
8095
8096
  for (let slotName in map.slots) {
8096
8097
  let slotMap = map.slots[slotName];
8097
- let slotIndex = skeletonData.findSlotIndex(slotName);
8098
+ let slotIndex = skeletonData.findSlot(slotName).index;
8098
8099
  for (let timelineName in slotMap) {
8099
8100
  let timelineMap = slotMap[timelineName];
8100
8101
  if (!timelineMap)
8101
8102
  continue;
8103
+ let frames = timelineMap.length;
8102
8104
  if (timelineName == "attachment") {
8103
- let timeline = new AttachmentTimeline(timelineMap.length, slotIndex);
8104
- for (let frame = 0; frame < timelineMap.length; frame++) {
8105
+ let timeline = new AttachmentTimeline(frames, slotIndex);
8106
+ for (let frame = 0; frame < frames; frame++) {
8105
8107
  let keyMap = timelineMap[frame];
8106
8108
  timeline.setFrame(frame, getValue(keyMap, "time", 0), keyMap.name);
8107
8109
  }
8108
8110
  timelines.push(timeline);
8109
8111
  } else if (timelineName == "rgba") {
8110
- let timeline = new RGBATimeline(timelineMap.length, timelineMap.length << 2, slotIndex);
8112
+ let timeline = new RGBATimeline(frames, frames << 2, slotIndex);
8111
8113
  let keyMap = timelineMap[0];
8112
8114
  let time = getValue(keyMap, "time", 0);
8113
8115
  let color = Color.fromString(keyMap.color);
@@ -8133,7 +8135,7 @@ var spine = (() => {
8133
8135
  }
8134
8136
  timelines.push(timeline);
8135
8137
  } else if (timelineName == "rgb") {
8136
- let timeline = new RGBTimeline(timelineMap.length, timelineMap.length * 3, slotIndex);
8138
+ let timeline = new RGBTimeline(frames, frames * 3, slotIndex);
8137
8139
  let keyMap = timelineMap[0];
8138
8140
  let time = getValue(keyMap, "time", 0);
8139
8141
  let color = Color.fromString(keyMap.color);
@@ -8158,9 +8160,9 @@ var spine = (() => {
8158
8160
  }
8159
8161
  timelines.push(timeline);
8160
8162
  } else if (timelineName == "alpha") {
8161
- timelines.push(readTimeline12(timelineMap, new AlphaTimeline(timelineMap.length, timelineMap.length, slotIndex), 0, 1));
8163
+ timelines.push(readTimeline12(timelineMap, new AlphaTimeline(frames, frames, slotIndex), 0, 1));
8162
8164
  } else if (timelineName == "rgba2") {
8163
- let timeline = new RGBA2Timeline(timelineMap.length, timelineMap.length * 7, slotIndex);
8165
+ let timeline = new RGBA2Timeline(frames, frames * 7, slotIndex);
8164
8166
  let keyMap = timelineMap[0];
8165
8167
  let time = getValue(keyMap, "time", 0);
8166
8168
  let color = Color.fromString(keyMap.light);
@@ -8192,7 +8194,7 @@ var spine = (() => {
8192
8194
  }
8193
8195
  timelines.push(timeline);
8194
8196
  } else if (timelineName == "rgb2") {
8195
- let timeline = new RGB2Timeline(timelineMap.length, timelineMap.length * 6, slotIndex);
8197
+ let timeline = new RGB2Timeline(frames, frames * 6, slotIndex);
8196
8198
  let keyMap = timelineMap[0];
8197
8199
  let time = getValue(keyMap, "time", 0);
8198
8200
  let color = Color.fromString(keyMap.light);
@@ -8229,39 +8231,40 @@ var spine = (() => {
8229
8231
  if (map.bones) {
8230
8232
  for (let boneName in map.bones) {
8231
8233
  let boneMap = map.bones[boneName];
8232
- let boneIndex = skeletonData.findBoneIndex(boneName);
8234
+ let boneIndex = skeletonData.findBone(boneName).index;
8233
8235
  for (let timelineName in boneMap) {
8234
8236
  let timelineMap = boneMap[timelineName];
8235
- if (timelineMap.length == 0)
8237
+ let frames = timelineMap.length;
8238
+ if (frames == 0)
8236
8239
  continue;
8237
8240
  if (timelineName === "rotate") {
8238
- timelines.push(readTimeline12(timelineMap, new RotateTimeline(timelineMap.length, timelineMap.length, boneIndex), 0, 1));
8241
+ timelines.push(readTimeline12(timelineMap, new RotateTimeline(frames, frames, boneIndex), 0, 1));
8239
8242
  } else if (timelineName === "translate") {
8240
- let timeline = new TranslateTimeline(timelineMap.length, timelineMap.length << 1, boneIndex);
8243
+ let timeline = new TranslateTimeline(frames, frames << 1, boneIndex);
8241
8244
  timelines.push(readTimeline22(timelineMap, timeline, "x", "y", 0, scale));
8242
8245
  } else if (timelineName === "translatex") {
8243
- let timeline = new TranslateXTimeline(timelineMap.length, timelineMap.length, boneIndex);
8246
+ let timeline = new TranslateXTimeline(frames, frames, boneIndex);
8244
8247
  timelines.push(readTimeline12(timelineMap, timeline, 0, scale));
8245
8248
  } else if (timelineName === "translatey") {
8246
- let timeline = new TranslateYTimeline(timelineMap.length, timelineMap.length, boneIndex);
8249
+ let timeline = new TranslateYTimeline(frames, frames, boneIndex);
8247
8250
  timelines.push(readTimeline12(timelineMap, timeline, 0, scale));
8248
8251
  } else if (timelineName === "scale") {
8249
- let timeline = new ScaleTimeline(timelineMap.length, timelineMap.length << 1, boneIndex);
8252
+ let timeline = new ScaleTimeline(frames, frames << 1, boneIndex);
8250
8253
  timelines.push(readTimeline22(timelineMap, timeline, "x", "y", 1, 1));
8251
8254
  } else if (timelineName === "scalex") {
8252
- let timeline = new ScaleXTimeline(timelineMap.length, timelineMap.length, boneIndex);
8255
+ let timeline = new ScaleXTimeline(frames, frames, boneIndex);
8253
8256
  timelines.push(readTimeline12(timelineMap, timeline, 1, 1));
8254
8257
  } else if (timelineName === "scaley") {
8255
- let timeline = new ScaleYTimeline(timelineMap.length, timelineMap.length, boneIndex);
8258
+ let timeline = new ScaleYTimeline(frames, frames, boneIndex);
8256
8259
  timelines.push(readTimeline12(timelineMap, timeline, 1, 1));
8257
8260
  } else if (timelineName === "shear") {
8258
- let timeline = new ShearTimeline(timelineMap.length, timelineMap.length << 1, boneIndex);
8261
+ let timeline = new ShearTimeline(frames, frames << 1, boneIndex);
8259
8262
  timelines.push(readTimeline22(timelineMap, timeline, "x", "y", 0, 1));
8260
8263
  } else if (timelineName === "shearx") {
8261
- let timeline = new ShearXTimeline(timelineMap.length, timelineMap.length, boneIndex);
8264
+ let timeline = new ShearXTimeline(frames, frames, boneIndex);
8262
8265
  timelines.push(readTimeline12(timelineMap, timeline, 0, 1));
8263
8266
  } else if (timelineName === "sheary") {
8264
- let timeline = new ShearYTimeline(timelineMap.length, timelineMap.length, boneIndex);
8267
+ let timeline = new ShearYTimeline(frames, frames, boneIndex);
8265
8268
  timelines.push(readTimeline12(timelineMap, timeline, 0, 1));
8266
8269
  }
8267
8270
  }
@@ -8310,7 +8313,7 @@ var spine = (() => {
8310
8313
  continue;
8311
8314
  let constraint = skeletonData.findTransformConstraint(constraintName);
8312
8315
  let constraintIndex = skeletonData.transformConstraints.indexOf(constraint);
8313
- let timeline = new TransformConstraintTimeline(timelineMap.length, timelineMap.length << 2, constraintIndex);
8316
+ let timeline = new TransformConstraintTimeline(timelineMap.length, timelineMap.length * 6, constraintIndex);
8314
8317
  let time = getValue(keyMap, "time", 0);
8315
8318
  let mixRotate = getValue(keyMap, "mixRotate", 1);
8316
8319
  let mixX = getValue(keyMap, "mixX", 1);
@@ -8363,14 +8366,15 @@ var spine = (() => {
8363
8366
  let keyMap = timelineMap[0];
8364
8367
  if (!keyMap)
8365
8368
  continue;
8369
+ let frames = timelineMap.length;
8366
8370
  if (timelineName === "position") {
8367
- let timeline = new PathConstraintPositionTimeline(timelineMap.length, timelineMap.length, constraintIndex);
8371
+ let timeline = new PathConstraintPositionTimeline(frames, frames, constraintIndex);
8368
8372
  timelines.push(readTimeline12(timelineMap, timeline, 0, constraint.positionMode == PositionMode.Fixed ? scale : 1));
8369
8373
  } else if (timelineName === "spacing") {
8370
- let timeline = new PathConstraintSpacingTimeline(timelineMap.length, timelineMap.length, constraintIndex);
8374
+ let timeline = new PathConstraintSpacingTimeline(frames, frames, constraintIndex);
8371
8375
  timelines.push(readTimeline12(timelineMap, timeline, 0, constraint.spacingMode == SpacingMode.Length || constraint.spacingMode == SpacingMode.Fixed ? scale : 1));
8372
8376
  } else if (timelineName === "mix") {
8373
- let timeline = new PathConstraintMixTimeline(timelineMap.size, timelineMap.size * 3, constraintIndex);
8377
+ let timeline = new PathConstraintMixTimeline(frames, frames * 3, constraintIndex);
8374
8378
  let time = getValue(keyMap, "time", 0);
8375
8379
  let mixRotate = getValue(keyMap, "mixRotate", 1);
8376
8380
  let mixX = getValue(keyMap, "mixX", 1);
@@ -8409,7 +8413,7 @@ var spine = (() => {
8409
8413
  let skin = skeletonData.findSkin(deformName);
8410
8414
  for (let slotName in deformMap) {
8411
8415
  let slotMap = deformMap[slotName];
8412
- let slotIndex = skeletonData.findSlotIndex(slotName);
8416
+ let slotIndex = skeletonData.findSlot(slotName).index;
8413
8417
  for (let timelineName in slotMap) {
8414
8418
  let timelineMap = slotMap[timelineName];
8415
8419
  let keyMap = timelineMap[0];
@@ -8471,7 +8475,7 @@ var spine = (() => {
8471
8475
  let originalIndex = 0, unchangedIndex = 0;
8472
8476
  for (let ii = 0; ii < offsets.length; ii++) {
8473
8477
  let offsetMap = offsets[ii];
8474
- let slotIndex = skeletonData.findSlotIndex(offsetMap.slot);
8478
+ let slotIndex = skeletonData.findSlot(offsetMap.slot).index;
8475
8479
  while (originalIndex != slotIndex)
8476
8480
  unchanged[unchangedIndex++] = originalIndex++;
8477
8481
  drawOrder[originalIndex + offsetMap.offset] = originalIndex++;