bezierCount (specified in the constructor) was larger
- * than the actual number of Bezier curves. */
- CurveTimeline.prototype.shrink = function (bezierCount) {
- var size = this.getFrameCount() + bezierCount * 18 /*BEZIER_SIZE*/;
- if (this.curves.length > size) {
- var newCurves = Utils.newFloatArray(size);
- Utils.arrayCopy(this.curves, 0, newCurves, 0, size);
- this.curves = newCurves;
- }
- };
- /** Stores the segments for the specified Bezier curve. For timelines that modify multiple values, there may be more than
- * one curve per frame.
- * @param bezier The ordinal of this Bezier curve for this timeline, between 0 and bezierCount - 1 (specified
- * in the constructor), inclusive.
- * @param frame Between 0 and frameCount - 1, inclusive.
- * @param value The index of the value for this frame that this curve is used for.
- * @param time1 The time for the first key.
- * @param value1 The value for the first key.
- * @param cx1 The time for the first Bezier handle.
- * @param cy1 The value for the first Bezier handle.
- * @param cx2 The time of the second Bezier handle.
- * @param cy2 The value for the second Bezier handle.
- * @param time2 The time for the second key.
- * @param value2 The value for the second key. */
- CurveTimeline.prototype.setBezier = function (bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) {
- var curves = this.curves;
- var i = this.getFrameCount() + bezier * 18 /*BEZIER_SIZE*/;
- if (value == 0)
- curves[frame] = 2 /*BEZIER*/ + i;
- var tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = (value1 - cy1 * 2 + cy2) * 0.03;
- var dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006, dddy = ((cy1 - cy2) * 3 - value1 + value2) * 0.006;
- var ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy;
- var dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = (cy1 - value1) * 0.3 + tmpy + dddy * 0.16666667;
- var x = time1 + dx, y = value1 + dy;
- for (var n = i + 18 /*BEZIER_SIZE*/; i < n; i += 2) {
- curves[i] = x;
- curves[i + 1] = y;
- dx += ddx;
- dy += ddy;
- ddx += dddx;
- ddy += dddy;
- x += dx;
- y += dy;
- }
- };
- /** Returns the Bezier interpolated value for the specified time.
- * @param frameIndex The index into {@link #getFrames()} for the values of the frame before time.
- * @param valueOffset The offset from frameIndex to the value this curve is used for.
- * @param i The index of the Bezier segments. See {@link #getCurveType(int)}. */
- CurveTimeline.prototype.getBezierValue = function (time, frameIndex, valueOffset, i) {
- var curves = this.curves;
- if (curves[i] > time) {
- var x_1 = this.frames[frameIndex], y_1 = this.frames[frameIndex + valueOffset];
- return y_1 + (time - x_1) / (curves[i] - x_1) * (curves[i + 1] - y_1);
- }
- var n = i + 18 /*BEZIER_SIZE*/;
- for (i += 2; i < n; i += 2) {
- if (curves[i] >= time) {
- var x_2 = curves[i - 2], y_2 = curves[i - 1];
- return y_2 + (time - x_2) / (curves[i] - x_2) * (curves[i + 1] - y_2);
- }
- }
- frameIndex += this.getFrameEntries();
- var x = curves[n - 2], y = curves[n - 1];
- return y + (time - x) / (this.frames[frameIndex] - x) * (this.frames[frameIndex + valueOffset] - y);
- };
- return CurveTimeline;
- }(Timeline));
- var CurveTimeline1 = /** @class */ (function (_super) {
- __extends$d(CurveTimeline1, _super);
- function CurveTimeline1(frameCount, bezierCount, propertyId) {
- return _super.call(this, frameCount, bezierCount, [propertyId]) || this;
+ }
+ }
+ copyTo(attachment) {
+ if (this.bones) {
+ attachment.bones = new Array(this.bones.length);
+ Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length);
+ } else
+ attachment.bones = null;
+ if (this.vertices) {
+ attachment.vertices = Utils.newFloatArray(this.vertices.length);
+ Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length);
+ } else
+ attachment.vertices = null;
+ attachment.worldVerticesLength = this.worldVerticesLength;
+ attachment.deformAttachment = this.deformAttachment;
+ }
+ };
+ var VertexAttachment = _VertexAttachment;
+ VertexAttachment.nextID = 0;
+
+ // spine-core/src/Animation.ts
+ var Animation = class {
+ constructor(name, timelines, duration) {
+ if (!name)
+ throw new Error("name cannot be null.");
+ this.name = name;
+ this.setTimelines(timelines);
+ this.duration = duration;
+ }
+ setTimelines(timelines) {
+ if (!timelines)
+ throw new Error("timelines cannot be null.");
+ this.timelines = timelines;
+ this.timelineIds = new StringSet();
+ for (var i = 0; i < timelines.length; i++)
+ this.timelineIds.addAll(timelines[i].getPropertyIds());
+ }
+ hasTimeline(ids) {
+ for (let i = 0; i < ids.length; i++)
+ if (this.timelineIds.contains(ids[i]))
+ return true;
+ return false;
+ }
+ apply(skeleton, lastTime, time, loop, events, alpha, blend, direction) {
+ if (!skeleton)
+ throw new Error("skeleton cannot be null.");
+ if (loop && this.duration != 0) {
+ time %= this.duration;
+ if (lastTime > 0)
+ lastTime %= this.duration;
+ }
+ let timelines = this.timelines;
+ for (let i = 0, n = timelines.length; i < n; i++)
+ timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction);
+ }
+ };
+ var MixBlend;
+ (function(MixBlend2) {
+ MixBlend2[MixBlend2["setup"] = 0] = "setup";
+ MixBlend2[MixBlend2["first"] = 1] = "first";
+ MixBlend2[MixBlend2["replace"] = 2] = "replace";
+ MixBlend2[MixBlend2["add"] = 3] = "add";
+ })(MixBlend || (MixBlend = {}));
+ var MixDirection;
+ (function(MixDirection2) {
+ MixDirection2[MixDirection2["mixIn"] = 0] = "mixIn";
+ MixDirection2[MixDirection2["mixOut"] = 1] = "mixOut";
+ })(MixDirection || (MixDirection = {}));
+ var Property = {
+ rotate: 0,
+ x: 1,
+ y: 2,
+ scaleX: 3,
+ scaleY: 4,
+ shearX: 5,
+ shearY: 6,
+ rgb: 7,
+ alpha: 8,
+ rgb2: 9,
+ attachment: 10,
+ deform: 11,
+ event: 12,
+ drawOrder: 13,
+ ikConstraint: 14,
+ transformConstraint: 15,
+ pathConstraintPosition: 16,
+ pathConstraintSpacing: 17,
+ pathConstraintMix: 18
+ };
+ var Timeline = class {
+ constructor(frameCount, propertyIds) {
+ this.propertyIds = propertyIds;
+ this.frames = Utils.newFloatArray(frameCount * this.getFrameEntries());
+ }
+ getPropertyIds() {
+ return this.propertyIds;
+ }
+ getFrameEntries() {
+ return 1;
+ }
+ getFrameCount() {
+ return this.frames.length / this.getFrameEntries();
+ }
+ getDuration() {
+ return this.frames[this.frames.length - this.getFrameEntries()];
+ }
+ static search1(frames, time) {
+ let n = frames.length;
+ for (let i = 1; i < n; i++)
+ if (frames[i] > time)
+ return i - 1;
+ return n - 1;
+ }
+ static search(frames, time, step) {
+ let n = frames.length;
+ for (let i = step; i < n; i += step)
+ if (frames[i] > time)
+ return i - step;
+ return n - step;
+ }
+ };
+ var CurveTimeline = class extends Timeline {
+ constructor(frameCount, bezierCount, propertyIds) {
+ super(frameCount, propertyIds);
+ this.curves = Utils.newFloatArray(frameCount + bezierCount * 18);
+ this.curves[frameCount - 1] = 1;
+ }
+ setLinear(frame) {
+ this.curves[frame] = 0;
+ }
+ setStepped(frame) {
+ this.curves[frame] = 1;
+ }
+ shrink(bezierCount) {
+ let size = this.getFrameCount() + bezierCount * 18;
+ if (this.curves.length > size) {
+ let newCurves = Utils.newFloatArray(size);
+ Utils.arrayCopy(this.curves, 0, newCurves, 0, size);
+ this.curves = newCurves;
+ }
+ }
+ setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) {
+ let curves = this.curves;
+ let i = this.getFrameCount() + bezier * 18;
+ if (value == 0)
+ curves[frame] = 2 + i;
+ let tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = (value1 - cy1 * 2 + cy2) * 0.03;
+ let dddx = ((cx1 - cx2) * 3 - time1 + time2) * 6e-3, dddy = ((cy1 - cy2) * 3 - value1 + value2) * 6e-3;
+ let ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy;
+ let dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = (cy1 - value1) * 0.3 + tmpy + dddy * 0.16666667;
+ let x = time1 + dx, y = value1 + dy;
+ for (let n = i + 18; i < n; i += 2) {
+ curves[i] = x;
+ curves[i + 1] = y;
+ dx += ddx;
+ dy += ddy;
+ ddx += dddx;
+ ddy += dddy;
+ x += dx;
+ y += dy;
+ }
+ }
+ getBezierValue(time, frameIndex, valueOffset, i) {
+ let curves = this.curves;
+ if (curves[i] > time) {
+ let x2 = this.frames[frameIndex], y2 = this.frames[frameIndex + valueOffset];
+ return y2 + (time - x2) / (curves[i] - x2) * (curves[i + 1] - y2);
+ }
+ let n = i + 18;
+ for (i += 2; i < n; i += 2) {
+ if (curves[i] >= time) {
+ let x2 = curves[i - 2], y2 = curves[i - 1];
+ return y2 + (time - x2) / (curves[i] - x2) * (curves[i + 1] - y2);
}
- CurveTimeline1.prototype.getFrameEntries = function () {
- return 2 /*ENTRIES*/;
- };
- /** Sets the time and value for the specified frame.
- * @param frame Between 0 and frameCount, inclusive.
- * @param time The frame time in seconds. */
- CurveTimeline1.prototype.setFrame = function (frame, time, value) {
- frame <<= 1;
- this.frames[frame] = time;
- this.frames[frame + 1 /*VALUE*/] = value;
- };
- /** Returns the interpolated value for the specified time. */
- CurveTimeline1.prototype.getCurveValue = function (time) {
- var frames = this.frames;
- var i = frames.length - 2;
- for (var ii = 2; ii <= i; ii += 2) {
- if (frames[ii] > time) {
- i = ii - 2;
- break;
- }
- }
- var curveType = this.curves[i >> 1];
- switch (curveType) {
- case 0 /*LINEAR*/:
- var before = frames[i], value = frames[i + 1 /*VALUE*/];
- return value + (time - before) / (frames[i + 2 /*ENTRIES*/] - before) * (frames[i + 2 /*ENTRIES*/ + 1 /*VALUE*/] - value);
- case 1 /*STEPPED*/:
- return frames[i + 1 /*VALUE*/];
- }
- return this.getBezierValue(time, i, 1 /*VALUE*/, curveType - 2 /*BEZIER*/);
- };
- return CurveTimeline1;
- }(CurveTimeline));
- /** The base class for a {@link CurveTimeline} which sets two properties. */
- var CurveTimeline2 = /** @class */ (function (_super) {
- __extends$d(CurveTimeline2, _super);
- /** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(int)}.
- * @param propertyIds Unique identifiers for the properties the timeline modifies. */
- function CurveTimeline2(frameCount, bezierCount, propertyId1, propertyId2) {
- return _super.call(this, frameCount, bezierCount, [propertyId1, propertyId2]) || this;
+ }
+ frameIndex += this.getFrameEntries();
+ let x = curves[n - 2], y = curves[n - 1];
+ return y + (time - x) / (this.frames[frameIndex] - x) * (this.frames[frameIndex + valueOffset] - y);
+ }
+ };
+ var CurveTimeline1 = class extends CurveTimeline {
+ constructor(frameCount, bezierCount, propertyId) {
+ super(frameCount, bezierCount, [propertyId]);
+ }
+ getFrameEntries() {
+ return 2;
+ }
+ setFrame(frame, time, value) {
+ frame <<= 1;
+ this.frames[frame] = time;
+ this.frames[frame + 1] = value;
+ }
+ getCurveValue(time) {
+ let frames = this.frames;
+ let i = frames.length - 2;
+ for (let ii = 2; ii <= i; ii += 2) {
+ if (frames[ii] > time) {
+ i = ii - 2;
+ break;
}
- CurveTimeline2.prototype.getFrameEntries = function () {
- return 3 /*ENTRIES*/;
- };
- /** Sets the time and values for the specified frame.
- * @param frame Between 0 and frameCount, inclusive.
- * @param time The frame time in seconds. */
- CurveTimeline2.prototype.setFrame = function (frame, time, value1, value2) {
- frame *= 3 /*ENTRIES*/;
- this.frames[frame] = time;
- this.frames[frame + 1 /*VALUE1*/] = value1;
- this.frames[frame + 2 /*VALUE2*/] = value2;
- };
- return CurveTimeline2;
- }(CurveTimeline));
- /** Changes a bone's local {@link Bone#rotation}. */
- var RotateTimeline = /** @class */ (function (_super) {
- __extends$d(RotateTimeline, _super);
- function RotateTimeline(frameCount, bezierCount, boneIndex) {
- var _this = _super.call(this, frameCount, bezierCount, Property.rotate + "|" + boneIndex) || this;
- _this.boneIndex = 0;
- _this.boneIndex = boneIndex;
- return _this;
+ }
+ let curveType = this.curves[i >> 1];
+ switch (curveType) {
+ case 0:
+ let before = frames[i], value = frames[i + 1];
+ return value + (time - before) / (frames[i + 2] - before) * (frames[i + 2 + 1] - value);
+ case 1:
+ return frames[i + 1];
+ }
+ return this.getBezierValue(time, i, 1, curveType - 2);
+ }
+ };
+ var CurveTimeline2 = class extends CurveTimeline {
+ constructor(frameCount, bezierCount, propertyId1, propertyId2) {
+ super(frameCount, bezierCount, [propertyId1, propertyId2]);
+ }
+ getFrameEntries() {
+ return 3;
+ }
+ setFrame(frame, time, value1, value2) {
+ frame *= 3;
+ this.frames[frame] = time;
+ this.frames[frame + 1] = value1;
+ this.frames[frame + 2] = value2;
+ }
+ };
+ var RotateTimeline = class extends CurveTimeline1 {
+ constructor(frameCount, bezierCount, boneIndex) {
+ super(frameCount, bezierCount, Property.rotate + "|" + boneIndex);
+ this.boneIndex = 0;
+ this.boneIndex = boneIndex;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let bone = skeleton.bones[this.boneIndex];
+ if (!bone.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ bone.rotation = bone.data.rotation;
+ return;
+ case 1:
+ bone.rotation += (bone.data.rotation - bone.rotation) * alpha;
}
- RotateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var bone = skeleton.bones[this.boneIndex];
- if (!bone.active)
- return;
- var frames = this.frames;
- if (time < frames[0]) {
- switch (blend) {
- case exports.MixBlend.setup:
- bone.rotation = bone.data.rotation;
- return;
- case exports.MixBlend.first:
- bone.rotation += (bone.data.rotation - bone.rotation) * alpha;
- }
- return;
- }
- var r = this.getCurveValue(time);
- switch (blend) {
- case exports.MixBlend.setup:
- bone.rotation = bone.data.rotation + r * alpha;
- break;
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- r += bone.data.rotation - bone.rotation;
- case exports.MixBlend.add:
- bone.rotation += r * alpha;
- }
- };
- return RotateTimeline;
- }(CurveTimeline1));
- /** Changes a bone's local {@link Bone#x} and {@link Bone#y}. */
- var TranslateTimeline = /** @class */ (function (_super) {
- __extends$d(TranslateTimeline, _super);
- function TranslateTimeline(frameCount, bezierCount, boneIndex) {
- var _this = _super.call(this, frameCount, bezierCount, Property.x + "|" + boneIndex, Property.y + "|" + boneIndex) || this;
- _this.boneIndex = 0;
- _this.boneIndex = boneIndex;
- return _this;
+ return;
+ }
+ let r = this.getCurveValue(time);
+ switch (blend) {
+ case 0:
+ bone.rotation = bone.data.rotation + r * alpha;
+ break;
+ case 1:
+ case 2:
+ r += bone.data.rotation - bone.rotation;
+ case 3:
+ bone.rotation += r * alpha;
+ }
+ }
+ };
+ var TranslateTimeline = class extends CurveTimeline2 {
+ constructor(frameCount, bezierCount, boneIndex) {
+ super(frameCount, bezierCount, Property.x + "|" + boneIndex, Property.y + "|" + boneIndex);
+ this.boneIndex = 0;
+ this.boneIndex = boneIndex;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let bone = skeleton.bones[this.boneIndex];
+ if (!bone.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ bone.x = bone.data.x;
+ bone.y = bone.data.y;
+ return;
+ case 1:
+ bone.x += (bone.data.x - bone.x) * alpha;
+ bone.y += (bone.data.y - bone.y) * alpha;
}
- TranslateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var bone = skeleton.bones[this.boneIndex];
- if (!bone.active)
- return;
- var frames = this.frames;
- if (time < frames[0]) {
- switch (blend) {
- case exports.MixBlend.setup:
- bone.x = bone.data.x;
- bone.y = bone.data.y;
- return;
- case exports.MixBlend.first:
- bone.x += (bone.data.x - bone.x) * alpha;
- bone.y += (bone.data.y - bone.y) * alpha;
- }
- return;
- }
- var x = 0, y = 0;
- var i = Timeline.search(frames, time, 3 /*ENTRIES*/);
- var curveType = this.curves[i / 3 /*ENTRIES*/];
- switch (curveType) {
- case 0 /*LINEAR*/:
- var before = frames[i];
- x = frames[i + 1 /*VALUE1*/];
- y = frames[i + 2 /*VALUE2*/];
- var t = (time - before) / (frames[i + 3 /*ENTRIES*/] - before);
- x += (frames[i + 3 /*ENTRIES*/ + 1 /*VALUE1*/] - x) * t;
- y += (frames[i + 3 /*ENTRIES*/ + 2 /*VALUE2*/] - y) * t;
- break;
- case 1 /*STEPPED*/:
- x = frames[i + 1 /*VALUE1*/];
- y = frames[i + 2 /*VALUE2*/];
- break;
- default:
- x = this.getBezierValue(time, i, 1 /*VALUE1*/, curveType - 2 /*BEZIER*/);
- y = this.getBezierValue(time, i, 2 /*VALUE2*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);
- }
- switch (blend) {
- case exports.MixBlend.setup:
- bone.x = bone.data.x + x * alpha;
- bone.y = bone.data.y + y * alpha;
- break;
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- bone.x += (bone.data.x + x - bone.x) * alpha;
- bone.y += (bone.data.y + y - bone.y) * alpha;
- break;
- case exports.MixBlend.add:
- bone.x += x * alpha;
- bone.y += y * alpha;
- }
- };
- return TranslateTimeline;
- }(CurveTimeline2));
- /** Changes a bone's local {@link Bone#x}. */
- var TranslateXTimeline = /** @class */ (function (_super) {
- __extends$d(TranslateXTimeline, _super);
- function TranslateXTimeline(frameCount, bezierCount, boneIndex) {
- var _this = _super.call(this, frameCount, bezierCount, Property.x + "|" + boneIndex) || this;
- _this.boneIndex = 0;
- _this.boneIndex = boneIndex;
- return _this;
+ return;
+ }
+ let x = 0, y = 0;
+ let i = Timeline.search(frames, time, 3);
+ let curveType = this.curves[i / 3];
+ switch (curveType) {
+ case 0:
+ let before = frames[i];
+ x = frames[i + 1];
+ y = frames[i + 2];
+ let t = (time - before) / (frames[i + 3] - before);
+ x += (frames[i + 3 + 1] - x) * t;
+ y += (frames[i + 3 + 2] - y) * t;
+ break;
+ case 1:
+ x = frames[i + 1];
+ y = frames[i + 2];
+ break;
+ default:
+ x = this.getBezierValue(time, i, 1, curveType - 2);
+ y = this.getBezierValue(time, i, 2, curveType + 18 - 2);
+ }
+ switch (blend) {
+ case 0:
+ bone.x = bone.data.x + x * alpha;
+ bone.y = bone.data.y + y * alpha;
+ break;
+ case 1:
+ case 2:
+ bone.x += (bone.data.x + x - bone.x) * alpha;
+ bone.y += (bone.data.y + y - bone.y) * alpha;
+ break;
+ case 3:
+ bone.x += x * alpha;
+ bone.y += y * alpha;
+ }
+ }
+ };
+ var TranslateXTimeline = class extends CurveTimeline1 {
+ constructor(frameCount, bezierCount, boneIndex) {
+ super(frameCount, bezierCount, Property.x + "|" + boneIndex);
+ this.boneIndex = 0;
+ this.boneIndex = boneIndex;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let bone = skeleton.bones[this.boneIndex];
+ if (!bone.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ bone.x = bone.data.x;
+ return;
+ case 1:
+ bone.x += (bone.data.x - bone.x) * alpha;
}
- TranslateXTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var bone = skeleton.bones[this.boneIndex];
- if (!bone.active)
- return;
- var frames = this.frames;
- if (time < frames[0]) {
- switch (blend) {
- case exports.MixBlend.setup:
- bone.x = bone.data.x;
- return;
- case exports.MixBlend.first:
- bone.x += (bone.data.x - bone.x) * alpha;
- }
- return;
- }
- var x = this.getCurveValue(time);
- switch (blend) {
- case exports.MixBlend.setup:
- bone.x = bone.data.x + x * alpha;
- break;
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- bone.x += (bone.data.x + x - bone.x) * alpha;
- break;
- case exports.MixBlend.add:
- bone.x += x * alpha;
- }
- };
- return TranslateXTimeline;
- }(CurveTimeline1));
- /** Changes a bone's local {@link Bone#x}. */
- var TranslateYTimeline = /** @class */ (function (_super) {
- __extends$d(TranslateYTimeline, _super);
- function TranslateYTimeline(frameCount, bezierCount, boneIndex) {
- var _this = _super.call(this, frameCount, bezierCount, Property.y + "|" + boneIndex) || this;
- _this.boneIndex = 0;
- _this.boneIndex = boneIndex;
- return _this;
+ return;
+ }
+ let x = this.getCurveValue(time);
+ switch (blend) {
+ case 0:
+ bone.x = bone.data.x + x * alpha;
+ break;
+ case 1:
+ case 2:
+ bone.x += (bone.data.x + x - bone.x) * alpha;
+ break;
+ case 3:
+ bone.x += x * alpha;
+ }
+ }
+ };
+ var TranslateYTimeline = class extends CurveTimeline1 {
+ constructor(frameCount, bezierCount, boneIndex) {
+ super(frameCount, bezierCount, Property.y + "|" + boneIndex);
+ this.boneIndex = 0;
+ this.boneIndex = boneIndex;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let bone = skeleton.bones[this.boneIndex];
+ if (!bone.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ bone.y = bone.data.y;
+ return;
+ case 1:
+ bone.y += (bone.data.y - bone.y) * alpha;
}
- TranslateYTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var bone = skeleton.bones[this.boneIndex];
- if (!bone.active)
- return;
- var frames = this.frames;
- if (time < frames[0]) {
- switch (blend) {
- case exports.MixBlend.setup:
- bone.y = bone.data.y;
- return;
- case exports.MixBlend.first:
- bone.y += (bone.data.y - bone.y) * alpha;
- }
- return;
- }
- var y = this.getCurveValue(time);
- switch (blend) {
- case exports.MixBlend.setup:
- bone.y = bone.data.y + y * alpha;
- break;
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- bone.y += (bone.data.y + y - bone.y) * alpha;
- break;
- case exports.MixBlend.add:
- bone.y += y * alpha;
- }
- };
- return TranslateYTimeline;
- }(CurveTimeline1));
- /** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}. */
- var ScaleTimeline = /** @class */ (function (_super) {
- __extends$d(ScaleTimeline, _super);
- function ScaleTimeline(frameCount, bezierCount, boneIndex) {
- var _this = _super.call(this, frameCount, bezierCount, Property.scaleX + "|" + boneIndex, Property.scaleY + "|" + boneIndex) || this;
- _this.boneIndex = 0;
- _this.boneIndex = boneIndex;
- return _this;
+ return;
+ }
+ let y = this.getCurveValue(time);
+ switch (blend) {
+ case 0:
+ bone.y = bone.data.y + y * alpha;
+ break;
+ case 1:
+ case 2:
+ bone.y += (bone.data.y + y - bone.y) * alpha;
+ break;
+ case 3:
+ bone.y += y * alpha;
+ }
+ }
+ };
+ var ScaleTimeline = class extends CurveTimeline2 {
+ constructor(frameCount, bezierCount, boneIndex) {
+ super(frameCount, bezierCount, Property.scaleX + "|" + boneIndex, Property.scaleY + "|" + boneIndex);
+ this.boneIndex = 0;
+ this.boneIndex = boneIndex;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let bone = skeleton.bones[this.boneIndex];
+ if (!bone.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ bone.scaleX = bone.data.scaleX;
+ bone.scaleY = bone.data.scaleY;
+ return;
+ case 1:
+ bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;
+ bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;
}
- ScaleTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var bone = skeleton.bones[this.boneIndex];
- if (!bone.active)
- return;
- var frames = this.frames;
- if (time < frames[0]) {
- switch (blend) {
- case exports.MixBlend.setup:
- bone.scaleX = bone.data.scaleX;
- bone.scaleY = bone.data.scaleY;
- return;
- case exports.MixBlend.first:
- bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;
- bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;
- }
- return;
- }
- var x, y;
- var i = Timeline.search(frames, time, 3 /*ENTRIES*/);
- var curveType = this.curves[i / 3 /*ENTRIES*/];
- switch (curveType) {
- case 0 /*LINEAR*/:
- var before = frames[i];
- x = frames[i + 1 /*VALUE1*/];
- y = frames[i + 2 /*VALUE2*/];
- var t = (time - before) / (frames[i + 3 /*ENTRIES*/] - before);
- x += (frames[i + 3 /*ENTRIES*/ + 1 /*VALUE1*/] - x) * t;
- y += (frames[i + 3 /*ENTRIES*/ + 2 /*VALUE2*/] - y) * t;
- break;
- case 1 /*STEPPED*/:
- x = frames[i + 1 /*VALUE1*/];
- y = frames[i + 2 /*VALUE2*/];
- break;
- default:
- x = this.getBezierValue(time, i, 1 /*VALUE1*/, curveType - 2 /*BEZIER*/);
- y = this.getBezierValue(time, i, 2 /*VALUE2*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);
- }
- x *= bone.data.scaleX;
- y *= bone.data.scaleY;
+ return;
+ }
+ let x, y;
+ let i = Timeline.search(frames, time, 3);
+ let curveType = this.curves[i / 3];
+ switch (curveType) {
+ case 0:
+ let before = frames[i];
+ x = frames[i + 1];
+ y = frames[i + 2];
+ let t = (time - before) / (frames[i + 3] - before);
+ x += (frames[i + 3 + 1] - x) * t;
+ y += (frames[i + 3 + 2] - y) * t;
+ break;
+ case 1:
+ x = frames[i + 1];
+ y = frames[i + 2];
+ break;
+ default:
+ x = this.getBezierValue(time, i, 1, curveType - 2);
+ y = this.getBezierValue(time, i, 2, curveType + 18 - 2);
+ }
+ x *= bone.data.scaleX;
+ y *= bone.data.scaleY;
+ if (alpha == 1) {
+ if (blend == 3) {
+ bone.scaleX += x - bone.data.scaleX;
+ bone.scaleY += y - bone.data.scaleY;
+ } else {
+ bone.scaleX = x;
+ bone.scaleY = y;
+ }
+ } else {
+ let bx = 0, by = 0;
+ if (direction == 1) {
+ switch (blend) {
+ case 0:
+ bx = bone.data.scaleX;
+ by = bone.data.scaleY;
+ bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;
+ bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;
+ break;
+ case 1:
+ case 2:
+ bx = bone.scaleX;
+ by = bone.scaleY;
+ bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;
+ bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;
+ break;
+ case 3:
+ bx = bone.scaleX;
+ by = bone.scaleY;
+ bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bone.data.scaleX) * alpha;
+ bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - bone.data.scaleY) * alpha;
+ }
+ } else {
+ switch (blend) {
+ case 0:
+ bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x);
+ by = Math.abs(bone.data.scaleY) * MathUtils.signum(y);
+ bone.scaleX = bx + (x - bx) * alpha;
+ bone.scaleY = by + (y - by) * alpha;
+ break;
+ case 1:
+ case 2:
+ bx = Math.abs(bone.scaleX) * MathUtils.signum(x);
+ by = Math.abs(bone.scaleY) * MathUtils.signum(y);
+ bone.scaleX = bx + (x - bx) * alpha;
+ bone.scaleY = by + (y - by) * alpha;
+ break;
+ case 3:
+ bx = MathUtils.signum(x);
+ by = MathUtils.signum(y);
+ bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha;
+ bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha;
+ }
+ }
+ }
+ }
+ };
+ var ScaleXTimeline = class extends CurveTimeline1 {
+ constructor(frameCount, bezierCount, boneIndex) {
+ super(frameCount, bezierCount, Property.scaleX + "|" + boneIndex);
+ this.boneIndex = 0;
+ this.boneIndex = boneIndex;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let bone = skeleton.bones[this.boneIndex];
+ if (!bone.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ bone.scaleX = bone.data.scaleX;
+ return;
+ case 1:
+ bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;
+ }
+ return;
+ }
+ let x = this.getCurveValue(time) * bone.data.scaleX;
+ if (alpha == 1) {
+ if (blend == 3)
+ bone.scaleX += x - bone.data.scaleX;
+ else
+ bone.scaleX = x;
+ } else {
+ let bx = 0;
+ if (direction == 1) {
+ switch (blend) {
+ case 0:
+ bx = bone.data.scaleX;
+ bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;
+ break;
+ case 1:
+ case 2:
+ bx = bone.scaleX;
+ bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;
+ break;
+ case 3:
+ bx = bone.scaleX;
+ bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bone.data.scaleX) * alpha;
+ }
+ } else {
+ switch (blend) {
+ case 0:
+ bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x);
+ bone.scaleX = bx + (x - bx) * alpha;
+ break;
+ case 1:
+ case 2:
+ bx = Math.abs(bone.scaleX) * MathUtils.signum(x);
+ bone.scaleX = bx + (x - bx) * alpha;
+ break;
+ case 3:
+ bx = MathUtils.signum(x);
+ bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha;
+ }
+ }
+ }
+ }
+ };
+ var ScaleYTimeline = class extends CurveTimeline1 {
+ constructor(frameCount, bezierCount, boneIndex) {
+ super(frameCount, bezierCount, Property.scaleY + "|" + boneIndex);
+ this.boneIndex = 0;
+ this.boneIndex = boneIndex;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let bone = skeleton.bones[this.boneIndex];
+ if (!bone.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ bone.scaleY = bone.data.scaleY;
+ return;
+ case 1:
+ bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;
+ }
+ return;
+ }
+ let y = this.getCurveValue(time) * bone.data.scaleY;
+ if (alpha == 1) {
+ if (blend == 3)
+ bone.scaleY += y - bone.data.scaleY;
+ else
+ bone.scaleY = y;
+ } else {
+ let by = 0;
+ if (direction == 1) {
+ switch (blend) {
+ case 0:
+ by = bone.data.scaleY;
+ bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;
+ break;
+ case 1:
+ case 2:
+ by = bone.scaleY;
+ bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;
+ break;
+ case 3:
+ by = bone.scaleY;
+ bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - bone.data.scaleY) * alpha;
+ }
+ } else {
+ switch (blend) {
+ case 0:
+ by = Math.abs(bone.data.scaleY) * MathUtils.signum(y);
+ bone.scaleY = by + (y - by) * alpha;
+ break;
+ case 1:
+ case 2:
+ by = Math.abs(bone.scaleY) * MathUtils.signum(y);
+ bone.scaleY = by + (y - by) * alpha;
+ break;
+ case 3:
+ by = MathUtils.signum(y);
+ bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha;
+ }
+ }
+ }
+ }
+ };
+ var ShearTimeline = class extends CurveTimeline2 {
+ constructor(frameCount, bezierCount, boneIndex) {
+ super(frameCount, bezierCount, Property.shearX + "|" + boneIndex, Property.shearY + "|" + boneIndex);
+ this.boneIndex = 0;
+ this.boneIndex = boneIndex;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let bone = skeleton.bones[this.boneIndex];
+ if (!bone.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ bone.shearX = bone.data.shearX;
+ bone.shearY = bone.data.shearY;
+ return;
+ case 1:
+ bone.shearX += (bone.data.shearX - bone.shearX) * alpha;
+ bone.shearY += (bone.data.shearY - bone.shearY) * alpha;
+ }
+ return;
+ }
+ let x = 0, y = 0;
+ let i = Timeline.search(frames, time, 3);
+ let curveType = this.curves[i / 3];
+ switch (curveType) {
+ case 0:
+ let before = frames[i];
+ x = frames[i + 1];
+ y = frames[i + 2];
+ let t = (time - before) / (frames[i + 3] - before);
+ x += (frames[i + 3 + 1] - x) * t;
+ y += (frames[i + 3 + 2] - y) * t;
+ break;
+ case 1:
+ x = frames[i + 1];
+ y = frames[i + 2];
+ break;
+ default:
+ x = this.getBezierValue(time, i, 1, curveType - 2);
+ y = this.getBezierValue(time, i, 2, curveType + 18 - 2);
+ }
+ switch (blend) {
+ case 0:
+ bone.shearX = bone.data.shearX + x * alpha;
+ bone.shearY = bone.data.shearY + y * alpha;
+ break;
+ case 1:
+ case 2:
+ bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;
+ bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;
+ break;
+ case 3:
+ bone.shearX += x * alpha;
+ bone.shearY += y * alpha;
+ }
+ }
+ };
+ var ShearXTimeline = class extends CurveTimeline1 {
+ constructor(frameCount, bezierCount, boneIndex) {
+ super(frameCount, bezierCount, Property.shearX + "|" + boneIndex);
+ this.boneIndex = 0;
+ this.boneIndex = boneIndex;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let bone = skeleton.bones[this.boneIndex];
+ if (!bone.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ bone.shearX = bone.data.shearX;
+ return;
+ case 1:
+ bone.shearX += (bone.data.shearX - bone.shearX) * alpha;
+ }
+ return;
+ }
+ let x = this.getCurveValue(time);
+ switch (blend) {
+ case 0:
+ bone.shearX = bone.data.shearX + x * alpha;
+ break;
+ case 1:
+ case 2:
+ bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;
+ break;
+ case 3:
+ bone.shearX += x * alpha;
+ }
+ }
+ };
+ var ShearYTimeline = class extends CurveTimeline1 {
+ constructor(frameCount, bezierCount, boneIndex) {
+ super(frameCount, bezierCount, Property.shearY + "|" + boneIndex);
+ this.boneIndex = 0;
+ this.boneIndex = boneIndex;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let bone = skeleton.bones[this.boneIndex];
+ if (!bone.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ bone.shearY = bone.data.shearY;
+ return;
+ case 1:
+ bone.shearY += (bone.data.shearY - bone.shearY) * alpha;
+ }
+ return;
+ }
+ let y = this.getCurveValue(time);
+ switch (blend) {
+ case 0:
+ bone.shearY = bone.data.shearY + y * alpha;
+ break;
+ case 1:
+ case 2:
+ bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;
+ break;
+ case 3:
+ bone.shearY += y * alpha;
+ }
+ }
+ };
+ var RGBATimeline = class extends CurveTimeline {
+ constructor(frameCount, bezierCount, slotIndex) {
+ super(frameCount, bezierCount, [
+ Property.rgb + "|" + slotIndex,
+ Property.alpha + "|" + slotIndex
+ ]);
+ this.slotIndex = 0;
+ this.slotIndex = slotIndex;
+ }
+ getFrameEntries() {
+ return 5;
+ }
+ setFrame(frame, time, r, g, b, a) {
+ frame *= 5;
+ this.frames[frame] = time;
+ this.frames[frame + 1] = r;
+ this.frames[frame + 2] = g;
+ this.frames[frame + 3] = b;
+ this.frames[frame + 4] = a;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let slot = skeleton.slots[this.slotIndex];
+ if (!slot.bone.active)
+ return;
+ let frames = this.frames;
+ let color = slot.color;
+ if (time < frames[0]) {
+ let setup = slot.data.color;
+ switch (blend) {
+ case 0:
+ color.setFromColor(setup);
+ return;
+ case 1:
+ color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha);
+ }
+ return;
+ }
+ let r = 0, g = 0, b = 0, a = 0;
+ let i = Timeline.search(frames, time, 5);
+ let curveType = this.curves[i / 5];
+ switch (curveType) {
+ case 0:
+ let before = frames[i];
+ r = frames[i + 1];
+ g = frames[i + 2];
+ b = frames[i + 3];
+ a = frames[i + 4];
+ let t = (time - before) / (frames[i + 5] - before);
+ r += (frames[i + 5 + 1] - r) * t;
+ g += (frames[i + 5 + 2] - g) * t;
+ b += (frames[i + 5 + 3] - b) * t;
+ a += (frames[i + 5 + 4] - a) * t;
+ break;
+ case 1:
+ r = frames[i + 1];
+ g = frames[i + 2];
+ b = frames[i + 3];
+ a = frames[i + 4];
+ break;
+ default:
+ r = this.getBezierValue(time, i, 1, curveType - 2);
+ g = this.getBezierValue(time, i, 2, curveType + 18 - 2);
+ b = this.getBezierValue(time, i, 3, curveType + 18 * 2 - 2);
+ a = this.getBezierValue(time, i, 4, curveType + 18 * 3 - 2);
+ }
+ if (alpha == 1)
+ color.set(r, g, b, a);
+ else {
+ if (blend == 0)
+ color.setFromColor(slot.data.color);
+ color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha);
+ }
+ }
+ };
+ var RGBTimeline = class extends CurveTimeline {
+ constructor(frameCount, bezierCount, slotIndex) {
+ super(frameCount, bezierCount, [
+ Property.rgb + "|" + slotIndex
+ ]);
+ this.slotIndex = 0;
+ this.slotIndex = slotIndex;
+ }
+ getFrameEntries() {
+ return 4;
+ }
+ setFrame(frame, time, r, g, b) {
+ frame <<= 2;
+ this.frames[frame] = time;
+ this.frames[frame + 1] = r;
+ this.frames[frame + 2] = g;
+ this.frames[frame + 3] = b;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let slot = skeleton.slots[this.slotIndex];
+ if (!slot.bone.active)
+ return;
+ let frames = this.frames;
+ let color = slot.color;
+ if (time < frames[0]) {
+ let setup = slot.data.color;
+ switch (blend) {
+ case 0:
+ color.r = setup.r;
+ color.g = setup.g;
+ color.b = setup.b;
+ return;
+ case 1:
+ color.r += (setup.r - color.r) * alpha;
+ color.g += (setup.g - color.g) * alpha;
+ color.b += (setup.b - color.b) * alpha;
+ }
+ return;
+ }
+ let r = 0, g = 0, b = 0;
+ let i = Timeline.search(frames, time, 4);
+ let curveType = this.curves[i >> 2];
+ switch (curveType) {
+ case 0:
+ let before = frames[i];
+ r = frames[i + 1];
+ g = frames[i + 2];
+ b = frames[i + 3];
+ let t = (time - before) / (frames[i + 4] - before);
+ r += (frames[i + 4 + 1] - r) * t;
+ g += (frames[i + 4 + 2] - g) * t;
+ b += (frames[i + 4 + 3] - b) * t;
+ break;
+ case 1:
+ r = frames[i + 1];
+ g = frames[i + 2];
+ b = frames[i + 3];
+ break;
+ default:
+ r = this.getBezierValue(time, i, 1, curveType - 2);
+ g = this.getBezierValue(time, i, 2, curveType + 18 - 2);
+ b = this.getBezierValue(time, i, 3, curveType + 18 * 2 - 2);
+ }
+ if (alpha == 1) {
+ color.r = r;
+ color.g = g;
+ color.b = b;
+ } else {
+ if (blend == 0) {
+ let setup = slot.data.color;
+ color.r = setup.r;
+ color.g = setup.g;
+ color.b = setup.b;
+ }
+ color.r += (r - color.r) * alpha;
+ color.g += (g - color.g) * alpha;
+ color.b += (b - color.b) * alpha;
+ }
+ }
+ };
+ var AlphaTimeline = class extends CurveTimeline1 {
+ constructor(frameCount, bezierCount, slotIndex) {
+ super(frameCount, bezierCount, Property.alpha + "|" + slotIndex);
+ this.slotIndex = 0;
+ this.slotIndex = slotIndex;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let slot = skeleton.slots[this.slotIndex];
+ if (!slot.bone.active)
+ return;
+ let color = slot.color;
+ if (time < this.frames[0]) {
+ let setup = slot.data.color;
+ switch (blend) {
+ case 0:
+ color.a = setup.a;
+ return;
+ case 1:
+ color.a += (setup.a - color.a) * alpha;
+ }
+ return;
+ }
+ let a = this.getCurveValue(time);
+ if (alpha == 1)
+ color.a = a;
+ else {
+ if (blend == 0)
+ color.a = slot.data.color.a;
+ color.a += (a - color.a) * alpha;
+ }
+ }
+ };
+ var RGBA2Timeline = class extends CurveTimeline {
+ constructor(frameCount, bezierCount, slotIndex) {
+ super(frameCount, bezierCount, [
+ Property.rgb + "|" + slotIndex,
+ Property.alpha + "|" + slotIndex,
+ Property.rgb2 + "|" + slotIndex
+ ]);
+ this.slotIndex = 0;
+ this.slotIndex = slotIndex;
+ }
+ getFrameEntries() {
+ return 8;
+ }
+ setFrame(frame, time, r, g, b, a, r2, g2, b2) {
+ frame <<= 3;
+ this.frames[frame] = time;
+ this.frames[frame + 1] = r;
+ this.frames[frame + 2] = g;
+ this.frames[frame + 3] = b;
+ this.frames[frame + 4] = a;
+ this.frames[frame + 5] = r2;
+ this.frames[frame + 6] = g2;
+ this.frames[frame + 7] = b2;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let slot = skeleton.slots[this.slotIndex];
+ if (!slot.bone.active)
+ return;
+ let frames = this.frames;
+ let light = slot.color, dark = slot.darkColor;
+ if (time < frames[0]) {
+ let setupLight = slot.data.color, setupDark = slot.data.darkColor;
+ switch (blend) {
+ case 0:
+ light.setFromColor(setupLight);
+ dark.r = setupDark.r;
+ dark.g = setupDark.g;
+ dark.b = setupDark.b;
+ return;
+ case 1:
+ light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha);
+ dark.r += (setupDark.r - dark.r) * alpha;
+ dark.g += (setupDark.g - dark.g) * alpha;
+ dark.b += (setupDark.b - dark.b) * alpha;
+ }
+ return;
+ }
+ let r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0;
+ let i = Timeline.search(frames, time, 8);
+ let curveType = this.curves[i >> 3];
+ switch (curveType) {
+ case 0:
+ let before = frames[i];
+ r = frames[i + 1];
+ g = frames[i + 2];
+ b = frames[i + 3];
+ a = frames[i + 4];
+ r2 = frames[i + 5];
+ g2 = frames[i + 6];
+ b2 = frames[i + 7];
+ let t = (time - before) / (frames[i + 8] - before);
+ r += (frames[i + 8 + 1] - r) * t;
+ g += (frames[i + 8 + 2] - g) * t;
+ b += (frames[i + 8 + 3] - b) * t;
+ a += (frames[i + 8 + 4] - a) * t;
+ r2 += (frames[i + 8 + 5] - r2) * t;
+ g2 += (frames[i + 8 + 6] - g2) * t;
+ b2 += (frames[i + 8 + 7] - b2) * t;
+ break;
+ case 1:
+ r = frames[i + 1];
+ g = frames[i + 2];
+ b = frames[i + 3];
+ a = frames[i + 4];
+ r2 = frames[i + 5];
+ g2 = frames[i + 6];
+ b2 = frames[i + 7];
+ break;
+ default:
+ r = this.getBezierValue(time, i, 1, curveType - 2);
+ g = this.getBezierValue(time, i, 2, curveType + 18 - 2);
+ b = this.getBezierValue(time, i, 3, curveType + 18 * 2 - 2);
+ a = this.getBezierValue(time, i, 4, curveType + 18 * 3 - 2);
+ r2 = this.getBezierValue(time, i, 5, curveType + 18 * 4 - 2);
+ g2 = this.getBezierValue(time, i, 6, curveType + 18 * 5 - 2);
+ b2 = this.getBezierValue(time, i, 7, curveType + 18 * 6 - 2);
+ }
+ if (alpha == 1) {
+ light.set(r, g, b, a);
+ dark.r = r2;
+ dark.g = g2;
+ dark.b = b2;
+ } else {
+ if (blend == 0) {
+ light.setFromColor(slot.data.color);
+ let setupDark = slot.data.darkColor;
+ dark.r = setupDark.r;
+ dark.g = setupDark.g;
+ dark.b = setupDark.b;
+ }
+ light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);
+ dark.r += (r2 - dark.r) * alpha;
+ dark.g += (g2 - dark.g) * alpha;
+ dark.b += (b2 - dark.b) * alpha;
+ }
+ }
+ };
+ var RGB2Timeline = class extends CurveTimeline {
+ constructor(frameCount, bezierCount, slotIndex) {
+ super(frameCount, bezierCount, [
+ Property.rgb + "|" + slotIndex,
+ Property.rgb2 + "|" + slotIndex
+ ]);
+ this.slotIndex = 0;
+ this.slotIndex = slotIndex;
+ }
+ getFrameEntries() {
+ return 7;
+ }
+ setFrame(frame, time, r, g, b, r2, g2, b2) {
+ frame *= 7;
+ this.frames[frame] = time;
+ this.frames[frame + 1] = r;
+ this.frames[frame + 2] = g;
+ this.frames[frame + 3] = b;
+ this.frames[frame + 4] = r2;
+ this.frames[frame + 5] = g2;
+ this.frames[frame + 6] = b2;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let slot = skeleton.slots[this.slotIndex];
+ if (!slot.bone.active)
+ return;
+ let frames = this.frames;
+ let light = slot.color, dark = slot.darkColor;
+ if (time < frames[0]) {
+ let setupLight = slot.data.color, setupDark = slot.data.darkColor;
+ switch (blend) {
+ case 0:
+ light.r = setupLight.r;
+ light.g = setupLight.g;
+ light.b = setupLight.b;
+ dark.r = setupDark.r;
+ dark.g = setupDark.g;
+ dark.b = setupDark.b;
+ return;
+ case 1:
+ light.r += (setupLight.r - light.r) * alpha;
+ light.g += (setupLight.g - light.g) * alpha;
+ light.b += (setupLight.b - light.b) * alpha;
+ dark.r += (setupDark.r - dark.r) * alpha;
+ dark.g += (setupDark.g - dark.g) * alpha;
+ dark.b += (setupDark.b - dark.b) * alpha;
+ }
+ return;
+ }
+ let r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0;
+ let i = Timeline.search(frames, time, 7);
+ let curveType = this.curves[i / 7];
+ switch (curveType) {
+ case 0:
+ let before = frames[i];
+ r = frames[i + 1];
+ g = frames[i + 2];
+ b = frames[i + 3];
+ r2 = frames[i + 4];
+ g2 = frames[i + 5];
+ b2 = frames[i + 6];
+ let t = (time - before) / (frames[i + 7] - before);
+ r += (frames[i + 7 + 1] - r) * t;
+ g += (frames[i + 7 + 2] - g) * t;
+ b += (frames[i + 7 + 3] - b) * t;
+ r2 += (frames[i + 7 + 4] - r2) * t;
+ g2 += (frames[i + 7 + 5] - g2) * t;
+ b2 += (frames[i + 7 + 6] - b2) * t;
+ break;
+ case 1:
+ r = frames[i + 1];
+ g = frames[i + 2];
+ b = frames[i + 3];
+ r2 = frames[i + 4];
+ g2 = frames[i + 5];
+ b2 = frames[i + 6];
+ break;
+ default:
+ r = this.getBezierValue(time, i, 1, curveType - 2);
+ g = this.getBezierValue(time, i, 2, curveType + 18 - 2);
+ b = this.getBezierValue(time, i, 3, curveType + 18 * 2 - 2);
+ r2 = this.getBezierValue(time, i, 4, curveType + 18 * 3 - 2);
+ g2 = this.getBezierValue(time, i, 5, curveType + 18 * 4 - 2);
+ b2 = this.getBezierValue(time, i, 6, curveType + 18 * 5 - 2);
+ }
+ if (alpha == 1) {
+ light.r = r;
+ light.g = g;
+ light.b = b;
+ dark.r = r2;
+ dark.g = g2;
+ dark.b = b2;
+ } else {
+ if (blend == 0) {
+ let setupLight = slot.data.color, setupDark = slot.data.darkColor;
+ light.r = setupLight.r;
+ light.g = setupLight.g;
+ light.b = setupLight.b;
+ dark.r = setupDark.r;
+ dark.g = setupDark.g;
+ dark.b = setupDark.b;
+ }
+ light.r += (r - light.r) * alpha;
+ light.g += (g - light.g) * alpha;
+ light.b += (b - light.b) * alpha;
+ dark.r += (r2 - dark.r) * alpha;
+ dark.g += (g2 - dark.g) * alpha;
+ dark.b += (b2 - dark.b) * alpha;
+ }
+ }
+ };
+ var AttachmentTimeline = class extends Timeline {
+ constructor(frameCount, slotIndex) {
+ super(frameCount, [
+ Property.attachment + "|" + slotIndex
+ ]);
+ this.slotIndex = 0;
+ this.slotIndex = slotIndex;
+ this.attachmentNames = new Array(frameCount);
+ }
+ getFrameCount() {
+ return this.frames.length;
+ }
+ setFrame(frame, time, attachmentName) {
+ this.frames[frame] = time;
+ this.attachmentNames[frame] = attachmentName;
+ }
+ apply(skeleton, lastTime, time, events, alpha, blend, direction) {
+ let slot = skeleton.slots[this.slotIndex];
+ if (!slot.bone.active)
+ return;
+ if (direction == 1) {
+ if (blend == 0)
+ this.setAttachment(skeleton, slot, slot.data.attachmentName);
+ return;
+ }
+ if (time < this.frames[0]) {
+ if (blend == 0 || blend == 1)
+ this.setAttachment(skeleton, slot, slot.data.attachmentName);
+ return;
+ }
+ this.setAttachment(skeleton, slot, this.attachmentNames[Timeline.search1(this.frames, time)]);
+ }
+ setAttachment(skeleton, slot, attachmentName) {
+ slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName));
+ }
+ };
+ var DeformTimeline = class extends CurveTimeline {
+ constructor(frameCount, bezierCount, slotIndex, attachment) {
+ super(frameCount, bezierCount, [
+ Property.deform + "|" + slotIndex + "|" + attachment.id
+ ]);
+ this.slotIndex = 0;
+ this.slotIndex = slotIndex;
+ this.attachment = attachment;
+ this.vertices = new Array(frameCount);
+ }
+ getFrameCount() {
+ return this.frames.length;
+ }
+ setFrame(frame, time, vertices) {
+ this.frames[frame] = time;
+ this.vertices[frame] = vertices;
+ }
+ setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) {
+ let curves = this.curves;
+ let i = this.getFrameCount() + bezier * 18;
+ if (value == 0)
+ curves[frame] = 2 + i;
+ let tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = cy2 * 0.03 - cy1 * 0.06;
+ let dddx = ((cx1 - cx2) * 3 - time1 + time2) * 6e-3, dddy = (cy1 - cy2 + 0.33333333) * 0.018;
+ let ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy;
+ let dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = cy1 * 0.3 + tmpy + dddy * 0.16666667;
+ let x = time1 + dx, y = dy;
+ for (let n = i + 18; i < n; i += 2) {
+ curves[i] = x;
+ curves[i + 1] = y;
+ dx += ddx;
+ dy += ddy;
+ ddx += dddx;
+ ddy += dddy;
+ x += dx;
+ y += dy;
+ }
+ }
+ getCurvePercent(time, frame) {
+ let curves = this.curves;
+ let i = curves[frame];
+ switch (i) {
+ case 0:
+ let x2 = this.frames[frame];
+ return (time - x2) / (this.frames[frame + this.getFrameEntries()] - x2);
+ case 1:
+ return 0;
+ }
+ i -= 2;
+ if (curves[i] > time) {
+ let x2 = this.frames[frame];
+ return curves[i + 1] * (time - x2) / (curves[i] - x2);
+ }
+ let n = i + 18;
+ for (i += 2; i < n; i += 2) {
+ if (curves[i] >= time) {
+ let x2 = curves[i - 2], y2 = curves[i - 1];
+ return y2 + (time - x2) / (curves[i] - x2) * (curves[i + 1] - y2);
+ }
+ }
+ let x = curves[n - 2], y = curves[n - 1];
+ return y + (1 - y) * (time - x) / (this.frames[frame + this.getFrameEntries()] - x);
+ }
+ apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
+ let slot = skeleton.slots[this.slotIndex];
+ if (!slot.bone.active)
+ return;
+ let slotAttachment = slot.getAttachment();
+ if (!(slotAttachment instanceof VertexAttachment) || slotAttachment.deformAttachment != this.attachment)
+ return;
+ let deform = slot.deform;
+ if (deform.length == 0)
+ blend = 0;
+ let vertices = this.vertices;
+ let vertexCount = vertices[0].length;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ let vertexAttachment = slotAttachment;
+ switch (blend) {
+ case 0:
+ deform.length = 0;
+ return;
+ case 1:
if (alpha == 1) {
- if (blend == exports.MixBlend.add) {
- bone.scaleX += x - bone.data.scaleX;
- bone.scaleY += y - bone.data.scaleY;
- }
- else {
- bone.scaleX = x;
- bone.scaleY = y;
- }
- }
- else {
- var bx = 0, by = 0;
- if (direction == exports.MixDirection.mixOut) {
- switch (blend) {
- case exports.MixBlend.setup:
- bx = bone.data.scaleX;
- by = bone.data.scaleY;
- bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;
- bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;
- break;
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- bx = bone.scaleX;
- by = bone.scaleY;
- bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;
- bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;
- break;
- case exports.MixBlend.add:
- bx = bone.scaleX;
- by = bone.scaleY;
- bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bone.data.scaleX) * alpha;
- bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - bone.data.scaleY) * alpha;
- }
- }
- else {
- switch (blend) {
- case exports.MixBlend.setup:
- bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x);
- by = Math.abs(bone.data.scaleY) * MathUtils.signum(y);
- bone.scaleX = bx + (x - bx) * alpha;
- bone.scaleY = by + (y - by) * alpha;
- break;
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- bx = Math.abs(bone.scaleX) * MathUtils.signum(x);
- by = Math.abs(bone.scaleY) * MathUtils.signum(y);
- bone.scaleX = bx + (x - bx) * alpha;
- bone.scaleY = by + (y - by) * alpha;
- break;
- case exports.MixBlend.add:
- bx = MathUtils.signum(x);
- by = MathUtils.signum(y);
- bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha;
- bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha;
- }
- }
- }
- };
- return ScaleTimeline;
- }(CurveTimeline2));
- /** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}. */
- var ScaleXTimeline = /** @class */ (function (_super) {
- __extends$d(ScaleXTimeline, _super);
- function ScaleXTimeline(frameCount, bezierCount, boneIndex) {
- var _this = _super.call(this, frameCount, bezierCount, Property.scaleX + "|" + boneIndex) || this;
- _this.boneIndex = 0;
- _this.boneIndex = boneIndex;
- return _this;
- }
- ScaleXTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var bone = skeleton.bones[this.boneIndex];
- if (!bone.active)
- return;
- var frames = this.frames;
- if (time < frames[0]) {
- switch (blend) {
- case exports.MixBlend.setup:
- bone.scaleX = bone.data.scaleX;
- return;
- case exports.MixBlend.first:
- bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;
- }
- return;
- }
- var x = this.getCurveValue(time) * bone.data.scaleX;
- if (alpha == 1) {
- if (blend == exports.MixBlend.add)
- bone.scaleX += x - bone.data.scaleX;
- else
- bone.scaleX = x;
- }
- else {
- // Mixing out uses sign of setup or current pose, else use sign of key.
- var bx = 0;
- if (direction == exports.MixDirection.mixOut) {
- switch (blend) {
- case exports.MixBlend.setup:
- bx = bone.data.scaleX;
- bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;
- break;
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- bx = bone.scaleX;
- bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;
- break;
- case exports.MixBlend.add:
- bx = bone.scaleX;
- bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bone.data.scaleX) * alpha;
- }
- }
- else {
- switch (blend) {
- case exports.MixBlend.setup:
- bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x);
- bone.scaleX = bx + (x - bx) * alpha;
- break;
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- bx = Math.abs(bone.scaleX) * MathUtils.signum(x);
- bone.scaleX = bx + (x - bx) * alpha;
- break;
- case exports.MixBlend.add:
- bx = MathUtils.signum(x);
- bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha;
- }
- }
- }
- };
- return ScaleXTimeline;
- }(CurveTimeline1));
- /** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}. */
- var ScaleYTimeline = /** @class */ (function (_super) {
- __extends$d(ScaleYTimeline, _super);
- function ScaleYTimeline(frameCount, bezierCount, boneIndex) {
- var _this = _super.call(this, frameCount, bezierCount, Property.scaleY + "|" + boneIndex) || this;
- _this.boneIndex = 0;
- _this.boneIndex = boneIndex;
- return _this;
- }
- ScaleYTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var bone = skeleton.bones[this.boneIndex];
- if (!bone.active)
- return;
- var frames = this.frames;
- if (time < frames[0]) {
- switch (blend) {
- case exports.MixBlend.setup:
- bone.scaleY = bone.data.scaleY;
- return;
- case exports.MixBlend.first:
- bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;
- }
- return;
- }
- var y = this.getCurveValue(time) * bone.data.scaleY;
- if (alpha == 1) {
- if (blend == exports.MixBlend.add)
- bone.scaleY += y - bone.data.scaleY;
- else
- bone.scaleY = y;
- }
- else {
- // Mixing out uses sign of setup or current pose, else use sign of key.
- var by = 0;
- if (direction == exports.MixDirection.mixOut) {
- switch (blend) {
- case exports.MixBlend.setup:
- by = bone.data.scaleY;
- bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;
- break;
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- by = bone.scaleY;
- bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;
- break;
- case exports.MixBlend.add:
- by = bone.scaleY;
- bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - bone.data.scaleY) * alpha;
- }
- }
- else {
- switch (blend) {
- case exports.MixBlend.setup:
- by = Math.abs(bone.data.scaleY) * MathUtils.signum(y);
- bone.scaleY = by + (y - by) * alpha;
- break;
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- by = Math.abs(bone.scaleY) * MathUtils.signum(y);
- bone.scaleY = by + (y - by) * alpha;
- break;
- case exports.MixBlend.add:
- by = MathUtils.signum(y);
- bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha;
- }
- }
- }
- };
- return ScaleYTimeline;
- }(CurveTimeline1));
- /** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */
- var ShearTimeline = /** @class */ (function (_super) {
- __extends$d(ShearTimeline, _super);
- function ShearTimeline(frameCount, bezierCount, boneIndex) {
- var _this = _super.call(this, frameCount, bezierCount, Property.shearX + "|" + boneIndex, Property.shearY + "|" + boneIndex) || this;
- _this.boneIndex = 0;
- _this.boneIndex = boneIndex;
- return _this;
- }
- ShearTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var bone = skeleton.bones[this.boneIndex];
- if (!bone.active)
- return;
- var frames = this.frames;
- if (time < frames[0]) {
- switch (blend) {
- case exports.MixBlend.setup:
- bone.shearX = bone.data.shearX;
- bone.shearY = bone.data.shearY;
- return;
- case exports.MixBlend.first:
- bone.shearX += (bone.data.shearX - bone.shearX) * alpha;
- bone.shearY += (bone.data.shearY - bone.shearY) * alpha;
- }
- return;
- }
- var x = 0, y = 0;
- var i = Timeline.search(frames, time, 3 /*ENTRIES*/);
- var curveType = this.curves[i / 3 /*ENTRIES*/];
- switch (curveType) {
- case 0 /*LINEAR*/:
- var before = frames[i];
- x = frames[i + 1 /*VALUE1*/];
- y = frames[i + 2 /*VALUE2*/];
- var t = (time - before) / (frames[i + 3 /*ENTRIES*/] - before);
- x += (frames[i + 3 /*ENTRIES*/ + 1 /*VALUE1*/] - x) * t;
- y += (frames[i + 3 /*ENTRIES*/ + 2 /*VALUE2*/] - y) * t;
- break;
- case 1 /*STEPPED*/:
- x = frames[i + 1 /*VALUE1*/];
- y = frames[i + 2 /*VALUE2*/];
- break;
- default:
- x = this.getBezierValue(time, i, 1 /*VALUE1*/, curveType - 2 /*BEZIER*/);
- y = this.getBezierValue(time, i, 2 /*VALUE2*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);
- }
- switch (blend) {
- case exports.MixBlend.setup:
- bone.shearX = bone.data.shearX + x * alpha;
- bone.shearY = bone.data.shearY + y * alpha;
- break;
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;
- bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;
- break;
- case exports.MixBlend.add:
- bone.shearX += x * alpha;
- bone.shearY += y * alpha;
- }
- };
- return ShearTimeline;
- }(CurveTimeline2));
- /** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */
- var ShearXTimeline = /** @class */ (function (_super) {
- __extends$d(ShearXTimeline, _super);
- function ShearXTimeline(frameCount, bezierCount, boneIndex) {
- var _this = _super.call(this, frameCount, bezierCount, Property.shearX + "|" + boneIndex) || this;
- _this.boneIndex = 0;
- _this.boneIndex = boneIndex;
- return _this;
- }
- ShearXTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var bone = skeleton.bones[this.boneIndex];
- if (!bone.active)
- return;
- var frames = this.frames;
- if (time < frames[0]) {
- switch (blend) {
- case exports.MixBlend.setup:
- bone.shearX = bone.data.shearX;
- return;
- case exports.MixBlend.first:
- bone.shearX += (bone.data.shearX - bone.shearX) * alpha;
- }
- return;
- }
- var x = this.getCurveValue(time);
- switch (blend) {
- case exports.MixBlend.setup:
- bone.shearX = bone.data.shearX + x * alpha;
- break;
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;
- break;
- case exports.MixBlend.add:
- bone.shearX += x * alpha;
- }
- };
- return ShearXTimeline;
- }(CurveTimeline1));
- /** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */
- var ShearYTimeline = /** @class */ (function (_super) {
- __extends$d(ShearYTimeline, _super);
- function ShearYTimeline(frameCount, bezierCount, boneIndex) {
- var _this = _super.call(this, frameCount, bezierCount, Property.shearY + "|" + boneIndex) || this;
- _this.boneIndex = 0;
- _this.boneIndex = boneIndex;
- return _this;
- }
- ShearYTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var bone = skeleton.bones[this.boneIndex];
- if (!bone.active)
- return;
- var frames = this.frames;
- if (time < frames[0]) {
- switch (blend) {
- case exports.MixBlend.setup:
- bone.shearY = bone.data.shearY;
- return;
- case exports.MixBlend.first:
- bone.shearY += (bone.data.shearY - bone.shearY) * alpha;
- }
- return;
- }
- var y = this.getCurveValue(time);
- switch (blend) {
- case exports.MixBlend.setup:
- bone.shearY = bone.data.shearY + y * alpha;
- break;
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;
- break;
- case exports.MixBlend.add:
- bone.shearY += y * alpha;
- }
- };
- return ShearYTimeline;
- }(CurveTimeline1));
- /** Changes a slot's {@link Slot#color}. */
- var RGBATimeline = /** @class */ (function (_super) {
- __extends$d(RGBATimeline, _super);
- function RGBATimeline(frameCount, bezierCount, slotIndex) {
- var _this = _super.call(this, frameCount, bezierCount, [
- Property.rgb + "|" + slotIndex,
- Property.alpha + "|" + slotIndex
- ]) || this;
- _this.slotIndex = 0;
- _this.slotIndex = slotIndex;
- return _this;
- }
- RGBATimeline.prototype.getFrameEntries = function () {
- return 5 /*ENTRIES*/;
- };
- /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */
- RGBATimeline.prototype.setFrame = function (frame, time, r, g, b, a) {
- frame *= 5 /*ENTRIES*/;
- this.frames[frame] = time;
- this.frames[frame + 1 /*R*/] = r;
- this.frames[frame + 2 /*G*/] = g;
- this.frames[frame + 3 /*B*/] = b;
- this.frames[frame + 4 /*A*/] = a;
- };
- RGBATimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var slot = skeleton.slots[this.slotIndex];
- if (!slot.bone.active)
- return;
- var frames = this.frames;
- var color = slot.color;
- if (time < frames[0]) {
- var setup = slot.data.color;
- switch (blend) {
- case exports.MixBlend.setup:
- color.setFromColor(setup);
- return;
- case exports.MixBlend.first:
- color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha);
- }
- return;
- }
- var r = 0, g = 0, b = 0, a = 0;
- var i = Timeline.search(frames, time, 5 /*ENTRIES*/);
- var curveType = this.curves[i / 5 /*ENTRIES*/];
- switch (curveType) {
- case 0 /*LINEAR*/:
- var before = frames[i];
- r = frames[i + 1 /*R*/];
- g = frames[i + 2 /*G*/];
- b = frames[i + 3 /*B*/];
- a = frames[i + 4 /*A*/];
- var t = (time - before) / (frames[i + 5 /*ENTRIES*/] - before);
- r += (frames[i + 5 /*ENTRIES*/ + 1 /*R*/] - r) * t;
- g += (frames[i + 5 /*ENTRIES*/ + 2 /*G*/] - g) * t;
- b += (frames[i + 5 /*ENTRIES*/ + 3 /*B*/] - b) * t;
- a += (frames[i + 5 /*ENTRIES*/ + 4 /*A*/] - a) * t;
- break;
- case 1 /*STEPPED*/:
- r = frames[i + 1 /*R*/];
- g = frames[i + 2 /*G*/];
- b = frames[i + 3 /*B*/];
- a = frames[i + 4 /*A*/];
- break;
- default:
- r = this.getBezierValue(time, i, 1 /*R*/, curveType - 2 /*BEZIER*/);
- g = this.getBezierValue(time, i, 2 /*G*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);
- b = this.getBezierValue(time, i, 3 /*B*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);
- a = this.getBezierValue(time, i, 4 /*A*/, curveType + 18 /*BEZIER_SIZE*/ * 3 - 2 /*BEZIER*/);
- }
- if (alpha == 1)
- color.set(r, g, b, a);
- else {
- if (blend == exports.MixBlend.setup)
- color.setFromColor(slot.data.color);
- color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha);
- }
- };
- return RGBATimeline;
- }(CurveTimeline));
- /** Changes a slot's {@link Slot#color}. */
- var RGBTimeline = /** @class */ (function (_super) {
- __extends$d(RGBTimeline, _super);
- function RGBTimeline(frameCount, bezierCount, slotIndex) {
- var _this = _super.call(this, frameCount, bezierCount, [
- Property.rgb + "|" + slotIndex
- ]) || this;
- _this.slotIndex = 0;
- _this.slotIndex = slotIndex;
- return _this;
- }
- RGBTimeline.prototype.getFrameEntries = function () {
- return 4 /*ENTRIES*/;
- };
- /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */
- RGBTimeline.prototype.setFrame = function (frame, time, r, g, b) {
- frame <<= 2;
- this.frames[frame] = time;
- this.frames[frame + 1 /*R*/] = r;
- this.frames[frame + 2 /*G*/] = g;
- this.frames[frame + 3 /*B*/] = b;
- };
- RGBTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var slot = skeleton.slots[this.slotIndex];
- if (!slot.bone.active)
- return;
- var frames = this.frames;
- var color = slot.color;
- if (time < frames[0]) {
- var setup = slot.data.color;
- switch (blend) {
- case exports.MixBlend.setup:
- color.r = setup.r;
- color.g = setup.g;
- color.b = setup.b;
- return;
- case exports.MixBlend.first:
- color.r += (setup.r - color.r) * alpha;
- color.g += (setup.g - color.g) * alpha;
- color.b += (setup.b - color.b) * alpha;
- }
- return;
- }
- var r = 0, g = 0, b = 0;
- var i = Timeline.search(frames, time, 4 /*ENTRIES*/);
- var curveType = this.curves[i >> 2];
- switch (curveType) {
- case 0 /*LINEAR*/:
- var before = frames[i];
- r = frames[i + 1 /*R*/];
- g = frames[i + 2 /*G*/];
- b = frames[i + 3 /*B*/];
- var t = (time - before) / (frames[i + 4 /*ENTRIES*/] - before);
- r += (frames[i + 4 /*ENTRIES*/ + 1 /*R*/] - r) * t;
- g += (frames[i + 4 /*ENTRIES*/ + 2 /*G*/] - g) * t;
- b += (frames[i + 4 /*ENTRIES*/ + 3 /*B*/] - b) * t;
- break;
- case 1 /*STEPPED*/:
- r = frames[i + 1 /*R*/];
- g = frames[i + 2 /*G*/];
- b = frames[i + 3 /*B*/];
- break;
- default:
- r = this.getBezierValue(time, i, 1 /*R*/, curveType - 2 /*BEZIER*/);
- g = this.getBezierValue(time, i, 2 /*G*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);
- b = this.getBezierValue(time, i, 3 /*B*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);
- }
- if (alpha == 1) {
- color.r = r;
- color.g = g;
- color.b = b;
- }
- else {
- if (blend == exports.MixBlend.setup) {
- var setup = slot.data.color;
- color.r = setup.r;
- color.g = setup.g;
- color.b = setup.b;
- }
- color.r += (r - color.r) * alpha;
- color.g += (g - color.g) * alpha;
- color.b += (b - color.b) * alpha;
- }
- };
- return RGBTimeline;
- }(CurveTimeline));
- /** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */
- var AlphaTimeline = /** @class */ (function (_super) {
- __extends$d(AlphaTimeline, _super);
- function AlphaTimeline(frameCount, bezierCount, slotIndex) {
- var _this = _super.call(this, frameCount, bezierCount, Property.alpha + "|" + slotIndex) || this;
- _this.slotIndex = 0;
- _this.slotIndex = slotIndex;
- return _this;
- }
- AlphaTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var slot = skeleton.slots[this.slotIndex];
- if (!slot.bone.active)
- return;
- var color = slot.color;
- if (time < this.frames[0]) { // Time is before first frame.
- var setup = slot.data.color;
- switch (blend) {
- case exports.MixBlend.setup:
- color.a = setup.a;
- return;
- case exports.MixBlend.first:
- color.a += (setup.a - color.a) * alpha;
- }
- return;
- }
- var a = this.getCurveValue(time);
- if (alpha == 1)
- color.a = a;
- else {
- if (blend == exports.MixBlend.setup)
- color.a = slot.data.color.a;
- color.a += (a - color.a) * alpha;
- }
- };
- return AlphaTimeline;
- }(CurveTimeline1));
- /** Changes a slot's {@link Slot#color} and {@link Slot#darkColor} for two color tinting. */
- var RGBA2Timeline = /** @class */ (function (_super) {
- __extends$d(RGBA2Timeline, _super);
- function RGBA2Timeline(frameCount, bezierCount, slotIndex) {
- var _this = _super.call(this, frameCount, bezierCount, [
- Property.rgb + "|" + slotIndex,
- Property.alpha + "|" + slotIndex,
- Property.rgb2 + "|" + slotIndex
- ]) || this;
- _this.slotIndex = 0;
- _this.slotIndex = slotIndex;
- return _this;
- }
- RGBA2Timeline.prototype.getFrameEntries = function () {
- return 8 /*ENTRIES*/;
- };
- /** Sets the time in seconds, light, and dark colors for the specified key frame. */
- RGBA2Timeline.prototype.setFrame = function (frame, time, r, g, b, a, r2, g2, b2) {
- frame <<= 3;
- this.frames[frame] = time;
- this.frames[frame + 1 /*R*/] = r;
- this.frames[frame + 2 /*G*/] = g;
- this.frames[frame + 3 /*B*/] = b;
- this.frames[frame + 4 /*A*/] = a;
- this.frames[frame + 5 /*R2*/] = r2;
- this.frames[frame + 6 /*G2*/] = g2;
- this.frames[frame + 7 /*B2*/] = b2;
- };
- RGBA2Timeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var slot = skeleton.slots[this.slotIndex];
- if (!slot.bone.active)
- return;
- var frames = this.frames;
- var light = slot.color, dark = slot.darkColor;
- if (time < frames[0]) {
- var setupLight = slot.data.color, setupDark = slot.data.darkColor;
- switch (blend) {
- case exports.MixBlend.setup:
- light.setFromColor(setupLight);
- dark.r = setupDark.r;
- dark.g = setupDark.g;
- dark.b = setupDark.b;
- return;
- case exports.MixBlend.first:
- light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha);
- dark.r += (setupDark.r - dark.r) * alpha;
- dark.g += (setupDark.g - dark.g) * alpha;
- dark.b += (setupDark.b - dark.b) * alpha;
- }
- return;
- }
- var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0;
- var i = Timeline.search(frames, time, 8 /*ENTRIES*/);
- var curveType = this.curves[i >> 3];
- switch (curveType) {
- case 0 /*LINEAR*/:
- var before = frames[i];
- r = frames[i + 1 /*R*/];
- g = frames[i + 2 /*G*/];
- b = frames[i + 3 /*B*/];
- a = frames[i + 4 /*A*/];
- r2 = frames[i + 5 /*R2*/];
- g2 = frames[i + 6 /*G2*/];
- b2 = frames[i + 7 /*B2*/];
- var t = (time - before) / (frames[i + 8 /*ENTRIES*/] - before);
- r += (frames[i + 8 /*ENTRIES*/ + 1 /*R*/] - r) * t;
- g += (frames[i + 8 /*ENTRIES*/ + 2 /*G*/] - g) * t;
- b += (frames[i + 8 /*ENTRIES*/ + 3 /*B*/] - b) * t;
- a += (frames[i + 8 /*ENTRIES*/ + 4 /*A*/] - a) * t;
- r2 += (frames[i + 8 /*ENTRIES*/ + 5 /*R2*/] - r2) * t;
- g2 += (frames[i + 8 /*ENTRIES*/ + 6 /*G2*/] - g2) * t;
- b2 += (frames[i + 8 /*ENTRIES*/ + 7 /*B2*/] - b2) * t;
- break;
- case 1 /*STEPPED*/:
- r = frames[i + 1 /*R*/];
- g = frames[i + 2 /*G*/];
- b = frames[i + 3 /*B*/];
- a = frames[i + 4 /*A*/];
- r2 = frames[i + 5 /*R2*/];
- g2 = frames[i + 6 /*G2*/];
- b2 = frames[i + 7 /*B2*/];
- break;
- default:
- r = this.getBezierValue(time, i, 1 /*R*/, curveType - 2 /*BEZIER*/);
- g = this.getBezierValue(time, i, 2 /*G*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);
- b = this.getBezierValue(time, i, 3 /*B*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);
- a = this.getBezierValue(time, i, 4 /*A*/, curveType + 18 /*BEZIER_SIZE*/ * 3 - 2 /*BEZIER*/);
- r2 = this.getBezierValue(time, i, 5 /*R2*/, curveType + 18 /*BEZIER_SIZE*/ * 4 - 2 /*BEZIER*/);
- g2 = this.getBezierValue(time, i, 6 /*G2*/, curveType + 18 /*BEZIER_SIZE*/ * 5 - 2 /*BEZIER*/);
- b2 = this.getBezierValue(time, i, 7 /*B2*/, curveType + 18 /*BEZIER_SIZE*/ * 6 - 2 /*BEZIER*/);
- }
- if (alpha == 1) {
- light.set(r, g, b, a);
- dark.r = r2;
- dark.g = g2;
- dark.b = b2;
- }
- else {
- if (blend == exports.MixBlend.setup) {
- light.setFromColor(slot.data.color);
- var setupDark = slot.data.darkColor;
- dark.r = setupDark.r;
- dark.g = setupDark.g;
- dark.b = setupDark.b;
- }
- light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);
- dark.r += (r2 - dark.r) * alpha;
- dark.g += (g2 - dark.g) * alpha;
- dark.b += (b2 - dark.b) * alpha;
- }
- };
- return RGBA2Timeline;
- }(CurveTimeline));
- /** Changes a slot's {@link Slot#color} and {@link Slot#darkColor} for two color tinting. */
- var RGB2Timeline = /** @class */ (function (_super) {
- __extends$d(RGB2Timeline, _super);
- function RGB2Timeline(frameCount, bezierCount, slotIndex) {
- var _this = _super.call(this, frameCount, bezierCount, [
- Property.rgb + "|" + slotIndex,
- Property.rgb2 + "|" + slotIndex
- ]) || this;
- _this.slotIndex = 0;
- _this.slotIndex = slotIndex;
- return _this;
- }
- RGB2Timeline.prototype.getFrameEntries = function () {
- return 7 /*ENTRIES*/;
- };
- /** Sets the time in seconds, light, and dark colors for the specified key frame. */
- RGB2Timeline.prototype.setFrame = function (frame, time, r, g, b, r2, g2, b2) {
- frame *= 7 /*ENTRIES*/;
- this.frames[frame] = time;
- this.frames[frame + 1 /*R*/] = r;
- this.frames[frame + 2 /*G*/] = g;
- this.frames[frame + 3 /*B*/] = b;
- this.frames[frame + 4 /*R2*/] = r2;
- this.frames[frame + 5 /*G2*/] = g2;
- this.frames[frame + 6 /*B2*/] = b2;
- };
- RGB2Timeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var slot = skeleton.slots[this.slotIndex];
- if (!slot.bone.active)
- return;
- var frames = this.frames;
- var light = slot.color, dark = slot.darkColor;
- if (time < frames[0]) {
- var setupLight = slot.data.color, setupDark = slot.data.darkColor;
- switch (blend) {
- case exports.MixBlend.setup:
- light.r = setupLight.r;
- light.g = setupLight.g;
- light.b = setupLight.b;
- dark.r = setupDark.r;
- dark.g = setupDark.g;
- dark.b = setupDark.b;
- return;
- case exports.MixBlend.first:
- light.r += (setupLight.r - light.r) * alpha;
- light.g += (setupLight.g - light.g) * alpha;
- light.b += (setupLight.b - light.b) * alpha;
- dark.r += (setupDark.r - dark.r) * alpha;
- dark.g += (setupDark.g - dark.g) * alpha;
- dark.b += (setupDark.b - dark.b) * alpha;
- }
- return;
- }
- var r = 0, g = 0, b = 0, r2 = 0, g2 = 0, b2 = 0;
- var i = Timeline.search(frames, time, 7 /*ENTRIES*/);
- var curveType = this.curves[i / 7 /*ENTRIES*/];
- switch (curveType) {
- case 0 /*LINEAR*/:
- var before = frames[i];
- r = frames[i + 1 /*R*/];
- g = frames[i + 2 /*G*/];
- b = frames[i + 3 /*B*/];
- r2 = frames[i + 4 /*R2*/];
- g2 = frames[i + 5 /*G2*/];
- b2 = frames[i + 6 /*B2*/];
- var t = (time - before) / (frames[i + 7 /*ENTRIES*/] - before);
- r += (frames[i + 7 /*ENTRIES*/ + 1 /*R*/] - r) * t;
- g += (frames[i + 7 /*ENTRIES*/ + 2 /*G*/] - g) * t;
- b += (frames[i + 7 /*ENTRIES*/ + 3 /*B*/] - b) * t;
- r2 += (frames[i + 7 /*ENTRIES*/ + 4 /*R2*/] - r2) * t;
- g2 += (frames[i + 7 /*ENTRIES*/ + 5 /*G2*/] - g2) * t;
- b2 += (frames[i + 7 /*ENTRIES*/ + 6 /*B2*/] - b2) * t;
- break;
- case 1 /*STEPPED*/:
- r = frames[i + 1 /*R*/];
- g = frames[i + 2 /*G*/];
- b = frames[i + 3 /*B*/];
- r2 = frames[i + 4 /*R2*/];
- g2 = frames[i + 5 /*G2*/];
- b2 = frames[i + 6 /*B2*/];
- break;
- default:
- r = this.getBezierValue(time, i, 1 /*R*/, curveType - 2 /*BEZIER*/);
- g = this.getBezierValue(time, i, 2 /*G*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);
- b = this.getBezierValue(time, i, 3 /*B*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);
- r2 = this.getBezierValue(time, i, 4 /*R2*/, curveType + 18 /*BEZIER_SIZE*/ * 3 - 2 /*BEZIER*/);
- g2 = this.getBezierValue(time, i, 5 /*G2*/, curveType + 18 /*BEZIER_SIZE*/ * 4 - 2 /*BEZIER*/);
- b2 = this.getBezierValue(time, i, 6 /*B2*/, curveType + 18 /*BEZIER_SIZE*/ * 5 - 2 /*BEZIER*/);
- }
- if (alpha == 1) {
- light.r = r;
- light.g = g;
- light.b = b;
- dark.r = r2;
- dark.g = g2;
- dark.b = b2;
- }
- else {
- if (blend == exports.MixBlend.setup) {
- var setupLight = slot.data.color, setupDark = slot.data.darkColor;
- light.r = setupLight.r;
- light.g = setupLight.g;
- light.b = setupLight.b;
- dark.r = setupDark.r;
- dark.g = setupDark.g;
- dark.b = setupDark.b;
- }
- light.r += (r - light.r) * alpha;
- light.g += (g - light.g) * alpha;
- light.b += (b - light.b) * alpha;
- dark.r += (r2 - dark.r) * alpha;
- dark.g += (g2 - dark.g) * alpha;
- dark.b += (b2 - dark.b) * alpha;
- }
- };
- return RGB2Timeline;
- }(CurveTimeline));
- /** Changes a slot's {@link Slot#attachment}. */
- var AttachmentTimeline = /** @class */ (function (_super) {
- __extends$d(AttachmentTimeline, _super);
- function AttachmentTimeline(frameCount, slotIndex) {
- var _this = _super.call(this, frameCount, [
- Property.attachment + "|" + slotIndex
- ]) || this;
- _this.slotIndex = 0;
- _this.slotIndex = slotIndex;
- _this.attachmentNames = new Array(frameCount);
- return _this;
- }
- AttachmentTimeline.prototype.getFrameCount = function () {
- return this.frames.length;
- };
- /** Sets the time in seconds and the attachment name for the specified key frame. */
- AttachmentTimeline.prototype.setFrame = function (frame, time, attachmentName) {
- this.frames[frame] = time;
- this.attachmentNames[frame] = attachmentName;
- };
- AttachmentTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {
- var slot = skeleton.slots[this.slotIndex];
- if (!slot.bone.active)
- return;
- if (direction == exports.MixDirection.mixOut) {
- if (blend == exports.MixBlend.setup)
- this.setAttachment(skeleton, slot, slot.data.attachmentName);
- return;
- }
- if (time < this.frames[0]) {
- if (blend == exports.MixBlend.setup || blend == exports.MixBlend.first)
- this.setAttachment(skeleton, slot, slot.data.attachmentName);
- return;
- }
- this.setAttachment(skeleton, slot, this.attachmentNames[Timeline.search1(this.frames, time)]);
- };
- AttachmentTimeline.prototype.setAttachment = function (skeleton, slot, attachmentName) {
- slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName));
- };
- return AttachmentTimeline;
- }(Timeline));
- /** Changes a slot's {@link Slot#deform} to deform a {@link VertexAttachment}. */
- var DeformTimeline = /** @class */ (function (_super) {
- __extends$d(DeformTimeline, _super);
- function DeformTimeline(frameCount, bezierCount, slotIndex, attachment) {
- var _this = _super.call(this, frameCount, bezierCount, [
- Property.deform + "|" + slotIndex + "|" + attachment.id
- ]) || this;
- _this.slotIndex = 0;
- _this.slotIndex = slotIndex;
- _this.attachment = attachment;
- _this.vertices = new Array(frameCount);
- return _this;
- }
- DeformTimeline.prototype.getFrameCount = function () {
- return this.frames.length;
- };
- /** Sets the time in seconds and the vertices for the specified key frame.
- * @param vertices Vertex positions for an unweighted VertexAttachment, or deform offsets if it has weights. */
- DeformTimeline.prototype.setFrame = function (frame, time, vertices) {
- this.frames[frame] = time;
- this.vertices[frame] = vertices;
- };
- /** @param value1 Ignored (0 is used for a deform timeline).
- * @param value2 Ignored (1 is used for a deform timeline). */
- DeformTimeline.prototype.setBezier = function (bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) {
- var curves = this.curves;
- var i = this.getFrameCount() + bezier * 18 /*BEZIER_SIZE*/;
- if (value == 0)
- curves[frame] = 2 /*BEZIER*/ + i;
- var tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = cy2 * 0.03 - cy1 * 0.06;
- var dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006, dddy = (cy1 - cy2 + 0.33333333) * 0.018;
- var ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy;
- var dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = cy1 * 0.3 + tmpy + dddy * 0.16666667;
- var x = time1 + dx, y = dy;
- for (var n = i + 18 /*BEZIER_SIZE*/; i < n; i += 2) {
- curves[i] = x;
- curves[i + 1] = y;
- dx += ddx;
- dy += ddy;
- ddx += dddx;
- ddy += dddy;
- x += dx;
- y += dy;
- }
- };
- DeformTimeline.prototype.getCurvePercent = function (time, frame) {
- var curves = this.curves;
- var i = curves[frame];
- switch (i) {
- case 0 /*LINEAR*/:
- var x_3 = this.frames[frame];
- return (time - x_3) / (this.frames[frame + this.getFrameEntries()] - x_3);
- case 1 /*STEPPED*/:
- return 0;
- }
- i -= 2 /*BEZIER*/;
- if (curves[i] > time) {
- var x_4 = this.frames[frame];
- return curves[i + 1] * (time - x_4) / (curves[i] - x_4);
- }
- var n = i + 18 /*BEZIER_SIZE*/;
- for (i += 2; i < n; i += 2) {
- if (curves[i] >= time) {
- var x_5 = curves[i - 2], y_3 = curves[i - 1];
- return y_3 + (time - x_5) / (curves[i] - x_5) * (curves[i + 1] - y_3);
- }
- }
- var x = curves[n - 2], y = curves[n - 1];
- return y + (1 - y) * (time - x) / (this.frames[frame + this.getFrameEntries()] - x);
- };
- DeformTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
- var slot = skeleton.slots[this.slotIndex];
- if (!slot.bone.active)
- return;
- var slotAttachment = slot.getAttachment();
- if (!(slotAttachment instanceof VertexAttachment) || slotAttachment.deformAttachment != this.attachment)
- return;
- var deform = slot.deform;
- if (deform.length == 0)
- blend = exports.MixBlend.setup;
- var vertices = this.vertices;
- var vertexCount = vertices[0].length;
- var frames = this.frames;
- if (time < frames[0]) {
- var vertexAttachment = slotAttachment;
- switch (blend) {
- case exports.MixBlend.setup:
- deform.length = 0;
- return;
- case exports.MixBlend.first:
- if (alpha == 1) {
- deform.length = 0;
- return;
- }
- deform.length = vertexCount;
- if (!vertexAttachment.bones) {
- // Unweighted vertex positions.
- var setupVertices = vertexAttachment.vertices;
- for (var i = 0; i < vertexCount; i++)
- deform[i] += (setupVertices[i] - deform[i]) * alpha;
- }
- else {
- // Weighted deform offsets.
- alpha = 1 - alpha;
- for (var i = 0; i < vertexCount; i++)
- deform[i] *= alpha;
- }
- }
- return;
+ deform.length = 0;
+ return;
}
deform.length = vertexCount;
- if (time >= frames[frames.length - 1]) { // Time is after last frame.
- var lastVertices = vertices[frames.length - 1];
- if (alpha == 1) {
- if (blend == exports.MixBlend.add) {
- var vertexAttachment = slotAttachment;
- if (!vertexAttachment.bones) {
- // Unweighted vertex positions, with alpha.
- var setupVertices = vertexAttachment.vertices;
- for (var i_1 = 0; i_1 < vertexCount; i_1++)
- deform[i_1] += lastVertices[i_1] - setupVertices[i_1];
- }
- else {
- // Weighted deform offsets, with alpha.
- for (var i_2 = 0; i_2 < vertexCount; i_2++)
- deform[i_2] += lastVertices[i_2];
- }
- }
- else
- Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount);
- }
- else {
- switch (blend) {
- case exports.MixBlend.setup: {
- var vertexAttachment_1 = slotAttachment;
- if (!vertexAttachment_1.bones) {
- // Unweighted vertex positions, with alpha.
- var setupVertices = vertexAttachment_1.vertices;
- for (var i_3 = 0; i_3 < vertexCount; i_3++) {
- var setup = setupVertices[i_3];
- deform[i_3] = setup + (lastVertices[i_3] - setup) * alpha;
- }
- }
- else {
- // Weighted deform offsets, with alpha.
- for (var i_4 = 0; i_4 < vertexCount; i_4++)
- deform[i_4] = lastVertices[i_4] * alpha;
- }
- break;
- }
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- for (var i_5 = 0; i_5 < vertexCount; i_5++)
- deform[i_5] += (lastVertices[i_5] - deform[i_5]) * alpha;
- break;
- case exports.MixBlend.add:
- var vertexAttachment = slotAttachment;
- if (!vertexAttachment.bones) {
- // Unweighted vertex positions, with alpha.
- var setupVertices = vertexAttachment.vertices;
- for (var i_6 = 0; i_6 < vertexCount; i_6++)
- deform[i_6] += (lastVertices[i_6] - setupVertices[i_6]) * alpha;
- }
- else {
- // Weighted deform offsets, with alpha.
- for (var i_7 = 0; i_7 < vertexCount; i_7++)
- deform[i_7] += lastVertices[i_7] * alpha;
- }
- }
- }
- return;
+ if (!vertexAttachment.bones) {
+ let setupVertices = vertexAttachment.vertices;
+ for (var i = 0; i < vertexCount; i++)
+ deform[i] += (setupVertices[i] - deform[i]) * alpha;
+ } else {
+ alpha = 1 - alpha;
+ for (var i = 0; i < vertexCount; i++)
+ deform[i] *= alpha;
}
- // Interpolate between the previous frame and the current frame.
- var frame = Timeline.search1(frames, time);
- var percent = this.getCurvePercent(time, frame);
- var prevVertices = vertices[frame];
- var nextVertices = vertices[frame + 1];
- if (alpha == 1) {
- if (blend == exports.MixBlend.add) {
- var vertexAttachment = slotAttachment;
- if (!vertexAttachment.bones) {
- // Unweighted vertex positions, with alpha.
- var setupVertices = vertexAttachment.vertices;
- for (var i_8 = 0; i_8 < vertexCount; i_8++) {
- var prev = prevVertices[i_8];
- deform[i_8] += prev + (nextVertices[i_8] - prev) * percent - setupVertices[i_8];
- }
- }
- else {
- // Weighted deform offsets, with alpha.
- for (var i_9 = 0; i_9 < vertexCount; i_9++) {
- var prev = prevVertices[i_9];
- deform[i_9] += prev + (nextVertices[i_9] - prev) * percent;
- }
- }
- }
- else {
- for (var i_10 = 0; i_10 < vertexCount; i_10++) {
- var prev = prevVertices[i_10];
- deform[i_10] = prev + (nextVertices[i_10] - prev) * percent;
- }
- }
- }
- else {
- switch (blend) {
- case exports.MixBlend.setup: {
- var vertexAttachment_2 = slotAttachment;
- if (!vertexAttachment_2.bones) {
- // Unweighted vertex positions, with alpha.
- var setupVertices = vertexAttachment_2.vertices;
- for (var i_11 = 0; i_11 < vertexCount; i_11++) {
- var prev = prevVertices[i_11], setup = setupVertices[i_11];
- deform[i_11] = setup + (prev + (nextVertices[i_11] - prev) * percent - setup) * alpha;
- }
- }
- else {
- // Weighted deform offsets, with alpha.
- for (var i_12 = 0; i_12 < vertexCount; i_12++) {
- var prev = prevVertices[i_12];
- deform[i_12] = (prev + (nextVertices[i_12] - prev) * percent) * alpha;
- }
- }
- break;
- }
- case exports.MixBlend.first:
- case exports.MixBlend.replace:
- for (var i_13 = 0; i_13 < vertexCount; i_13++) {
- var prev = prevVertices[i_13];
- deform[i_13] += (prev + (nextVertices[i_13] - prev) * percent - deform[i_13]) * alpha;
- }
- break;
- case exports.MixBlend.add:
- var vertexAttachment = slotAttachment;
- if (!vertexAttachment.bones) {
- // Unweighted vertex positions, with alpha.
- var setupVertices = vertexAttachment.vertices;
- for (var i_14 = 0; i_14 < vertexCount; i_14++) {
- var prev = prevVertices[i_14];
- deform[i_14] += (prev + (nextVertices[i_14] - prev) * percent - setupVertices[i_14]) * alpha;
- }
- }
- else {
- // Weighted deform offsets, with alpha.
- for (var i_15 = 0; i_15 < vertexCount; i_15++) {
- var prev = prevVertices[i_15];
- deform[i_15] += (prev + (nextVertices[i_15] - prev) * percent) * alpha;
- }
- }
- }
- }
- };
- return DeformTimeline;
- }(CurveTimeline));
- /** Fires an {@link Event} when specific animation times are reached. */
- var EventTimeline = /** @class */ (function (_super) {
- __extends$d(EventTimeline, _super);
- function EventTimeline(frameCount) {
- var _this = _super.call(this, frameCount, EventTimeline.propertyIds) || this;
- _this.events = new Array(frameCount);
- return _this;
}
- EventTimeline.prototype.getFrameCount = function () {
- return this.frames.length;
- };
- /** Sets the time in seconds and the event for the specified key frame. */
- EventTimeline.prototype.setFrame = function (frame, event) {
- this.frames[frame] = event.time;
- this.events[frame] = event;
- };
- /** Fires events for frames > `lastTime` and <= `time`. */
- EventTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
- if (!firedEvents)
- return;
- var frames = this.frames;
- var frameCount = this.frames.length;
- if (lastTime > time) { // Fire events after last time for looped animations.
- this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction);
- lastTime = -1;
+ return;
+ }
+ deform.length = vertexCount;
+ if (time >= frames[frames.length - 1]) {
+ let lastVertices = vertices[frames.length - 1];
+ if (alpha == 1) {
+ if (blend == 3) {
+ let vertexAttachment = slotAttachment;
+ if (!vertexAttachment.bones) {
+ let setupVertices = vertexAttachment.vertices;
+ for (let i2 = 0; i2 < vertexCount; i2++)
+ deform[i2] += lastVertices[i2] - setupVertices[i2];
+ } else {
+ for (let i2 = 0; i2 < vertexCount; i2++)
+ deform[i2] += lastVertices[i2];
}
- else if (lastTime >= frames[frameCount - 1]) // Last time is after last frame.
- return;
- if (time < frames[0])
- return; // Time is before first frame.
- var i = 0;
- if (lastTime < frames[0])
- i = 0;
- else {
- i = Timeline.search1(frames, lastTime) + 1;
- var frameTime = frames[i];
- while (i > 0) { // Fire multiple events with the same frame.
- if (frames[i - 1] != frameTime)
- break;
- i--;
+ } else
+ Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount);
+ } else {
+ switch (blend) {
+ case 0: {
+ let vertexAttachment2 = slotAttachment;
+ if (!vertexAttachment2.bones) {
+ let setupVertices = vertexAttachment2.vertices;
+ for (let i2 = 0; i2 < vertexCount; i2++) {
+ let setup = setupVertices[i2];
+ deform[i2] = setup + (lastVertices[i2] - setup) * alpha;
}
+ } else {
+ for (let i2 = 0; i2 < vertexCount; i2++)
+ deform[i2] = lastVertices[i2] * alpha;
+ }
+ break;
}
- for (; i < frameCount && time >= frames[i]; i++)
- firedEvents.push(this.events[i]);
- };
- EventTimeline.propertyIds = ["" + Property.event];
- return EventTimeline;
- }(Timeline));
- /** Changes a skeleton's {@link Skeleton#drawOrder}. */
- var DrawOrderTimeline = /** @class */ (function (_super) {
- __extends$d(DrawOrderTimeline, _super);
- function DrawOrderTimeline(frameCount) {
- var _this = _super.call(this, frameCount, DrawOrderTimeline.propertyIds) || this;
- _this.drawOrders = new Array(frameCount);
- return _this;
+ case 1:
+ case 2:
+ for (let i2 = 0; i2 < vertexCount; i2++)
+ deform[i2] += (lastVertices[i2] - deform[i2]) * alpha;
+ break;
+ case 3:
+ let vertexAttachment = slotAttachment;
+ if (!vertexAttachment.bones) {
+ let setupVertices = vertexAttachment.vertices;
+ for (let i2 = 0; i2 < vertexCount; i2++)
+ deform[i2] += (lastVertices[i2] - setupVertices[i2]) * alpha;
+ } else {
+ for (let i2 = 0; i2 < vertexCount; i2++)
+ deform[i2] += lastVertices[i2] * alpha;
+ }
+ }
}
- DrawOrderTimeline.prototype.getFrameCount = function () {
- return this.frames.length;
- };
- /** Sets the time in seconds and the draw order for the specified key frame.
- * @param drawOrder For each slot in {@link Skeleton#slots}, the index of the new draw order. May be null to use setup pose
- * draw order. */
- DrawOrderTimeline.prototype.setFrame = function (frame, time, drawOrder) {
- this.frames[frame] = time;
- this.drawOrders[frame] = drawOrder;
- };
- DrawOrderTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
- if (direction == exports.MixDirection.mixOut) {
- if (blend == exports.MixBlend.setup)
- Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);
- return;
+ return;
+ }
+ let frame = Timeline.search1(frames, time);
+ let percent = this.getCurvePercent(time, frame);
+ let prevVertices = vertices[frame];
+ let nextVertices = vertices[frame + 1];
+ if (alpha == 1) {
+ if (blend == 3) {
+ let vertexAttachment = slotAttachment;
+ if (!vertexAttachment.bones) {
+ let setupVertices = vertexAttachment.vertices;
+ for (let i2 = 0; i2 < vertexCount; i2++) {
+ let prev = prevVertices[i2];
+ deform[i2] += prev + (nextVertices[i2] - prev) * percent - setupVertices[i2];
}
- if (time < this.frames[0]) {
- if (blend == exports.MixBlend.setup || blend == exports.MixBlend.first)
- Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);
- return;
+ } else {
+ for (let i2 = 0; i2 < vertexCount; i2++) {
+ let prev = prevVertices[i2];
+ deform[i2] += prev + (nextVertices[i2] - prev) * percent;
}
- var drawOrderToSetupIndex = this.drawOrders[Timeline.search1(this.frames, time)];
- if (!drawOrderToSetupIndex)
- Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);
- else {
- var drawOrder = skeleton.drawOrder;
- var slots = skeleton.slots;
- for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++)
- drawOrder[i] = slots[drawOrderToSetupIndex[i]];
- }
- };
- DrawOrderTimeline.propertyIds = ["" + Property.drawOrder];
- return DrawOrderTimeline;
- }(Timeline));
- /** Changes an IK constraint's {@link IkConstraint#mix}, {@link IkConstraint#softness},
- * {@link IkConstraint#bendDirection}, {@link IkConstraint#stretch}, and {@link IkConstraint#compress}. */
- var IkConstraintTimeline = /** @class */ (function (_super) {
- __extends$d(IkConstraintTimeline, _super);
- function IkConstraintTimeline(frameCount, bezierCount, ikConstraintIndex) {
- var _this = _super.call(this, frameCount, bezierCount, [
- Property.ikConstraint + "|" + ikConstraintIndex
- ]) || this;
- _this.ikConstraintIndex = ikConstraintIndex;
- return _this;
+ }
+ } else {
+ for (let i2 = 0; i2 < vertexCount; i2++) {
+ let prev = prevVertices[i2];
+ deform[i2] = prev + (nextVertices[i2] - prev) * percent;
+ }
}
- IkConstraintTimeline.prototype.getFrameEntries = function () {
- return 6 /*ENTRIES*/;
- };
- /** Sets the time in seconds, mix, softness, bend direction, compress, and stretch for the specified key frame. */
- IkConstraintTimeline.prototype.setFrame = function (frame, time, mix, softness, bendDirection, compress, stretch) {
- frame *= 6 /*ENTRIES*/;
- this.frames[frame] = time;
- this.frames[frame + 1 /*MIX*/] = mix;
- this.frames[frame + 2 /*SOFTNESS*/] = softness;
- this.frames[frame + 3 /*BEND_DIRECTION*/] = bendDirection;
- this.frames[frame + 4 /*COMPRESS*/] = compress ? 1 : 0;
- this.frames[frame + 5 /*STRETCH*/] = stretch ? 1 : 0;
- };
- IkConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
- var constraint = skeleton.ikConstraints[this.ikConstraintIndex];
- if (!constraint.active)
- return;
- var frames = this.frames;
- if (time < frames[0]) {
- switch (blend) {
- case exports.MixBlend.setup:
- constraint.mix = constraint.data.mix;
- constraint.softness = constraint.data.softness;
- constraint.bendDirection = constraint.data.bendDirection;
- constraint.compress = constraint.data.compress;
- constraint.stretch = constraint.data.stretch;
- return;
- case exports.MixBlend.first:
- constraint.mix += (constraint.data.mix - constraint.mix) * alpha;
- constraint.softness += (constraint.data.softness - constraint.softness) * alpha;
- constraint.bendDirection = constraint.data.bendDirection;
- constraint.compress = constraint.data.compress;
- constraint.stretch = constraint.data.stretch;
- }
- return;
+ } else {
+ switch (blend) {
+ case 0: {
+ let vertexAttachment2 = slotAttachment;
+ if (!vertexAttachment2.bones) {
+ let setupVertices = vertexAttachment2.vertices;
+ for (let i2 = 0; i2 < vertexCount; i2++) {
+ let prev = prevVertices[i2], setup = setupVertices[i2];
+ deform[i2] = setup + (prev + (nextVertices[i2] - prev) * percent - setup) * alpha;
+ }
+ } else {
+ for (let i2 = 0; i2 < vertexCount; i2++) {
+ let prev = prevVertices[i2];
+ deform[i2] = (prev + (nextVertices[i2] - prev) * percent) * alpha;
+ }
}
- var mix = 0, softness = 0;
- var i = Timeline.search(frames, time, 6 /*ENTRIES*/);
- var curveType = this.curves[i / 6 /*ENTRIES*/];
- switch (curveType) {
- case 0 /*LINEAR*/:
- var before = frames[i];
- mix = frames[i + 1 /*MIX*/];
- softness = frames[i + 2 /*SOFTNESS*/];
- var t = (time - before) / (frames[i + 6 /*ENTRIES*/] - before);
- mix += (frames[i + 6 /*ENTRIES*/ + 1 /*MIX*/] - mix) * t;
- softness += (frames[i + 6 /*ENTRIES*/ + 2 /*SOFTNESS*/] - softness) * t;
- break;
- case 1 /*STEPPED*/:
- mix = frames[i + 1 /*MIX*/];
- softness = frames[i + 2 /*SOFTNESS*/];
- break;
- default:
- mix = this.getBezierValue(time, i, 1 /*MIX*/, curveType - 2 /*BEZIER*/);
- softness = this.getBezierValue(time, i, 2 /*SOFTNESS*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);
+ break;
+ }
+ case 1:
+ case 2:
+ for (let i2 = 0; i2 < vertexCount; i2++) {
+ let prev = prevVertices[i2];
+ deform[i2] += (prev + (nextVertices[i2] - prev) * percent - deform[i2]) * alpha;
}
- if (blend == exports.MixBlend.setup) {
- constraint.mix = constraint.data.mix + (mix - constraint.data.mix) * alpha;
- constraint.softness = constraint.data.softness + (softness - constraint.data.softness) * alpha;
- if (direction == exports.MixDirection.mixOut) {
- constraint.bendDirection = constraint.data.bendDirection;
- constraint.compress = constraint.data.compress;
- constraint.stretch = constraint.data.stretch;
- }
- else {
- constraint.bendDirection = frames[i + 3 /*BEND_DIRECTION*/];
- constraint.compress = frames[i + 4 /*COMPRESS*/] != 0;
- constraint.stretch = frames[i + 5 /*STRETCH*/] != 0;
- }
+ break;
+ case 3:
+ let vertexAttachment = slotAttachment;
+ if (!vertexAttachment.bones) {
+ let setupVertices = vertexAttachment.vertices;
+ for (let i2 = 0; i2 < vertexCount; i2++) {
+ let prev = prevVertices[i2];
+ deform[i2] += (prev + (nextVertices[i2] - prev) * percent - setupVertices[i2]) * alpha;
+ }
+ } else {
+ for (let i2 = 0; i2 < vertexCount; i2++) {
+ let prev = prevVertices[i2];
+ deform[i2] += (prev + (nextVertices[i2] - prev) * percent) * alpha;
+ }
}
- else {
- constraint.mix += (mix - constraint.mix) * alpha;
- constraint.softness += (softness - constraint.softness) * alpha;
- if (direction == exports.MixDirection.mixIn) {
- constraint.bendDirection = frames[i + 3 /*BEND_DIRECTION*/];
- constraint.compress = frames[i + 4 /*COMPRESS*/] != 0;
- constraint.stretch = frames[i + 5 /*STRETCH*/] != 0;
- }
- }
- };
- return IkConstraintTimeline;
- }(CurveTimeline));
- /** Changes a transform constraint's {@link TransformConstraint#rotateMix}, {@link TransformConstraint#translateMix},
- * {@link TransformConstraint#scaleMix}, and {@link TransformConstraint#shearMix}. */
- var TransformConstraintTimeline = /** @class */ (function (_super) {
- __extends$d(TransformConstraintTimeline, _super);
- function TransformConstraintTimeline(frameCount, bezierCount, transformConstraintIndex) {
- var _this = _super.call(this, frameCount, bezierCount, [
- Property.transformConstraint + "|" + transformConstraintIndex
- ]) || this;
- _this.transformConstraintIndex = transformConstraintIndex;
- return _this;
}
- TransformConstraintTimeline.prototype.getFrameEntries = function () {
- return 7 /*ENTRIES*/;
- };
- /** The time in seconds, rotate mix, translate mix, scale mix, and shear mix for the specified key frame. */
- TransformConstraintTimeline.prototype.setFrame = function (frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY) {
- var frames = this.frames;
- frame *= 7 /*ENTRIES*/;
- frames[frame] = time;
- frames[frame + 1 /*ROTATE*/] = mixRotate;
- frames[frame + 2 /*X*/] = mixX;
- frames[frame + 3 /*Y*/] = mixY;
- frames[frame + 4 /*SCALEX*/] = mixScaleX;
- frames[frame + 5 /*SCALEY*/] = mixScaleY;
- frames[frame + 6 /*SHEARY*/] = mixShearY;
- };
- TransformConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
- var constraint = skeleton.transformConstraints[this.transformConstraintIndex];
- if (!constraint.active)
- return;
- var frames = this.frames;
- if (time < frames[0]) {
- var data = constraint.data;
- switch (blend) {
- case exports.MixBlend.setup:
- constraint.mixRotate = data.mixRotate;
- constraint.mixX = data.mixX;
- constraint.mixY = data.mixY;
- constraint.mixScaleX = data.mixScaleX;
- constraint.mixScaleY = data.mixScaleY;
- constraint.mixShearY = data.mixShearY;
- return;
- case exports.MixBlend.first:
- constraint.mixRotate += (data.mixRotate - constraint.mixRotate) * alpha;
- constraint.mixX += (data.mixX - constraint.mixX) * alpha;
- constraint.mixY += (data.mixY - constraint.mixY) * alpha;
- constraint.mixScaleX += (data.mixScaleX - constraint.mixScaleX) * alpha;
- constraint.mixScaleY += (data.mixScaleY - constraint.mixScaleY) * alpha;
- constraint.mixShearY += (data.mixShearY - constraint.mixShearY) * alpha;
- }
- return;
- }
- var rotate, x, y, scaleX, scaleY, shearY;
- var i = Timeline.search(frames, time, 7 /*ENTRIES*/);
- var curveType = this.curves[i / 7 /*ENTRIES*/];
- switch (curveType) {
- case 0 /*LINEAR*/:
- var before = frames[i];
- rotate = frames[i + 1 /*ROTATE*/];
- x = frames[i + 2 /*X*/];
- y = frames[i + 3 /*Y*/];
- scaleX = frames[i + 4 /*SCALEX*/];
- scaleY = frames[i + 5 /*SCALEY*/];
- shearY = frames[i + 6 /*SHEARY*/];
- var t = (time - before) / (frames[i + 7 /*ENTRIES*/] - before);
- rotate += (frames[i + 7 /*ENTRIES*/ + 1 /*ROTATE*/] - rotate) * t;
- x += (frames[i + 7 /*ENTRIES*/ + 2 /*X*/] - x) * t;
- y += (frames[i + 7 /*ENTRIES*/ + 3 /*Y*/] - y) * t;
- scaleX += (frames[i + 7 /*ENTRIES*/ + 4 /*SCALEX*/] - scaleX) * t;
- scaleY += (frames[i + 7 /*ENTRIES*/ + 5 /*SCALEY*/] - scaleY) * t;
- shearY += (frames[i + 7 /*ENTRIES*/ + 6 /*SHEARY*/] - shearY) * t;
- break;
- case 1 /*STEPPED*/:
- rotate = frames[i + 1 /*ROTATE*/];
- x = frames[i + 2 /*X*/];
- y = frames[i + 3 /*Y*/];
- scaleX = frames[i + 4 /*SCALEX*/];
- scaleY = frames[i + 5 /*SCALEY*/];
- shearY = frames[i + 6 /*SHEARY*/];
- break;
- default:
- rotate = this.getBezierValue(time, i, 1 /*ROTATE*/, curveType - 2 /*BEZIER*/);
- x = this.getBezierValue(time, i, 2 /*X*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);
- y = this.getBezierValue(time, i, 3 /*Y*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);
- scaleX = this.getBezierValue(time, i, 4 /*SCALEX*/, curveType + 18 /*BEZIER_SIZE*/ * 3 - 2 /*BEZIER*/);
- scaleY = this.getBezierValue(time, i, 5 /*SCALEY*/, curveType + 18 /*BEZIER_SIZE*/ * 4 - 2 /*BEZIER*/);
- shearY = this.getBezierValue(time, i, 6 /*SHEARY*/, curveType + 18 /*BEZIER_SIZE*/ * 5 - 2 /*BEZIER*/);
- }
- if (blend == exports.MixBlend.setup) {
- var data = constraint.data;
- constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha;
- constraint.mixX = data.mixX + (x - data.mixX) * alpha;
- constraint.mixY = data.mixY + (y - data.mixY) * alpha;
- constraint.mixScaleX = data.mixScaleX + (scaleX - data.mixScaleX) * alpha;
- constraint.mixScaleY = data.mixScaleY + (scaleY - data.mixScaleY) * alpha;
- constraint.mixShearY = data.mixShearY + (shearY - data.mixShearY) * alpha;
- }
- else {
- constraint.mixRotate += (rotate - constraint.mixRotate) * alpha;
- constraint.mixX += (x - constraint.mixX) * alpha;
- constraint.mixY += (y - constraint.mixY) * alpha;
- constraint.mixScaleX += (scaleX - constraint.mixScaleX) * alpha;
- constraint.mixScaleY += (scaleY - constraint.mixScaleY) * alpha;
- constraint.mixShearY += (shearY - constraint.mixShearY) * alpha;
- }
- };
- return TransformConstraintTimeline;
- }(CurveTimeline));
- /** Changes a path constraint's {@link PathConstraint#position}. */
- var PathConstraintPositionTimeline = /** @class */ (function (_super) {
- __extends$d(PathConstraintPositionTimeline, _super);
- function PathConstraintPositionTimeline(frameCount, bezierCount, pathConstraintIndex) {
- var _this = _super.call(this, frameCount, bezierCount, Property.pathConstraintPosition + "|" + pathConstraintIndex) || this;
- _this.pathConstraintIndex = pathConstraintIndex;
- return _this;
+ }
+ }
+ };
+ var _EventTimeline = class extends Timeline {
+ constructor(frameCount) {
+ super(frameCount, _EventTimeline.propertyIds);
+ this.events = new Array(frameCount);
+ }
+ getFrameCount() {
+ return this.frames.length;
+ }
+ setFrame(frame, event) {
+ this.frames[frame] = event.time;
+ this.events[frame] = event;
+ }
+ apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
+ if (!firedEvents)
+ return;
+ let frames = this.frames;
+ let frameCount = this.frames.length;
+ if (lastTime > time) {
+ this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction);
+ lastTime = -1;
+ } else if (lastTime >= frames[frameCount - 1])
+ return;
+ if (time < frames[0])
+ return;
+ let i = 0;
+ if (lastTime < frames[0])
+ i = 0;
+ else {
+ i = Timeline.search1(frames, lastTime) + 1;
+ let frameTime = frames[i];
+ while (i > 0) {
+ if (frames[i - 1] != frameTime)
+ break;
+ i--;
}
- PathConstraintPositionTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
- var constraint = skeleton.pathConstraints[this.pathConstraintIndex];
- if (!constraint.active)
- return;
- var frames = this.frames;
- if (time < frames[0]) {
- switch (blend) {
- case exports.MixBlend.setup:
- constraint.position = constraint.data.position;
- return;
- case exports.MixBlend.first:
- constraint.position += (constraint.data.position - constraint.position) * alpha;
- }
- return;
+ }
+ for (; i < frameCount && time >= frames[i]; i++)
+ firedEvents.push(this.events[i]);
+ }
+ };
+ var EventTimeline = _EventTimeline;
+ EventTimeline.propertyIds = ["" + Property.event];
+ var _DrawOrderTimeline = class extends Timeline {
+ constructor(frameCount) {
+ super(frameCount, _DrawOrderTimeline.propertyIds);
+ this.drawOrders = new Array(frameCount);
+ }
+ getFrameCount() {
+ return this.frames.length;
+ }
+ setFrame(frame, time, drawOrder) {
+ this.frames[frame] = time;
+ this.drawOrders[frame] = drawOrder;
+ }
+ apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
+ if (direction == 1) {
+ if (blend == 0)
+ Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);
+ return;
+ }
+ if (time < this.frames[0]) {
+ if (blend == 0 || blend == 1)
+ Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);
+ return;
+ }
+ let drawOrderToSetupIndex = this.drawOrders[Timeline.search1(this.frames, time)];
+ if (!drawOrderToSetupIndex)
+ Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);
+ else {
+ let drawOrder = skeleton.drawOrder;
+ let slots = skeleton.slots;
+ for (let i = 0, n = drawOrderToSetupIndex.length; i < n; i++)
+ drawOrder[i] = slots[drawOrderToSetupIndex[i]];
+ }
+ }
+ };
+ var DrawOrderTimeline = _DrawOrderTimeline;
+ DrawOrderTimeline.propertyIds = ["" + Property.drawOrder];
+ var IkConstraintTimeline = class extends CurveTimeline {
+ constructor(frameCount, bezierCount, ikConstraintIndex) {
+ super(frameCount, bezierCount, [
+ Property.ikConstraint + "|" + ikConstraintIndex
+ ]);
+ this.ikConstraintIndex = ikConstraintIndex;
+ }
+ getFrameEntries() {
+ return 6;
+ }
+ setFrame(frame, time, mix, softness, bendDirection, compress, stretch) {
+ frame *= 6;
+ this.frames[frame] = time;
+ this.frames[frame + 1] = mix;
+ this.frames[frame + 2] = softness;
+ this.frames[frame + 3] = bendDirection;
+ this.frames[frame + 4] = compress ? 1 : 0;
+ this.frames[frame + 5] = stretch ? 1 : 0;
+ }
+ apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
+ let constraint = skeleton.ikConstraints[this.ikConstraintIndex];
+ if (!constraint.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ constraint.mix = constraint.data.mix;
+ constraint.softness = constraint.data.softness;
+ constraint.bendDirection = constraint.data.bendDirection;
+ constraint.compress = constraint.data.compress;
+ constraint.stretch = constraint.data.stretch;
+ return;
+ case 1:
+ constraint.mix += (constraint.data.mix - constraint.mix) * alpha;
+ constraint.softness += (constraint.data.softness - constraint.softness) * alpha;
+ constraint.bendDirection = constraint.data.bendDirection;
+ constraint.compress = constraint.data.compress;
+ constraint.stretch = constraint.data.stretch;
+ }
+ return;
+ }
+ let mix = 0, softness = 0;
+ let i = Timeline.search(frames, time, 6);
+ let curveType = this.curves[i / 6];
+ switch (curveType) {
+ case 0:
+ let before = frames[i];
+ mix = frames[i + 1];
+ softness = frames[i + 2];
+ let t = (time - before) / (frames[i + 6] - before);
+ mix += (frames[i + 6 + 1] - mix) * t;
+ softness += (frames[i + 6 + 2] - softness) * t;
+ break;
+ case 1:
+ mix = frames[i + 1];
+ softness = frames[i + 2];
+ break;
+ default:
+ mix = this.getBezierValue(time, i, 1, curveType - 2);
+ softness = this.getBezierValue(time, i, 2, curveType + 18 - 2);
+ }
+ if (blend == 0) {
+ constraint.mix = constraint.data.mix + (mix - constraint.data.mix) * alpha;
+ constraint.softness = constraint.data.softness + (softness - constraint.data.softness) * alpha;
+ if (direction == 1) {
+ constraint.bendDirection = constraint.data.bendDirection;
+ constraint.compress = constraint.data.compress;
+ constraint.stretch = constraint.data.stretch;
+ } else {
+ constraint.bendDirection = frames[i + 3];
+ constraint.compress = frames[i + 4] != 0;
+ constraint.stretch = frames[i + 5] != 0;
+ }
+ } else {
+ constraint.mix += (mix - constraint.mix) * alpha;
+ constraint.softness += (softness - constraint.softness) * alpha;
+ if (direction == 0) {
+ constraint.bendDirection = frames[i + 3];
+ constraint.compress = frames[i + 4] != 0;
+ constraint.stretch = frames[i + 5] != 0;
+ }
+ }
+ }
+ };
+ var TransformConstraintTimeline = class extends CurveTimeline {
+ constructor(frameCount, bezierCount, transformConstraintIndex) {
+ super(frameCount, bezierCount, [
+ Property.transformConstraint + "|" + transformConstraintIndex
+ ]);
+ this.transformConstraintIndex = transformConstraintIndex;
+ }
+ getFrameEntries() {
+ return 7;
+ }
+ setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY) {
+ let frames = this.frames;
+ frame *= 7;
+ frames[frame] = time;
+ frames[frame + 1] = mixRotate;
+ frames[frame + 2] = mixX;
+ frames[frame + 3] = mixY;
+ frames[frame + 4] = mixScaleX;
+ frames[frame + 5] = mixScaleY;
+ frames[frame + 6] = mixShearY;
+ }
+ apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
+ let constraint = skeleton.transformConstraints[this.transformConstraintIndex];
+ if (!constraint.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ let data = constraint.data;
+ switch (blend) {
+ case 0:
+ constraint.mixRotate = data.mixRotate;
+ constraint.mixX = data.mixX;
+ constraint.mixY = data.mixY;
+ constraint.mixScaleX = data.mixScaleX;
+ constraint.mixScaleY = data.mixScaleY;
+ constraint.mixShearY = data.mixShearY;
+ return;
+ case 1:
+ constraint.mixRotate += (data.mixRotate - constraint.mixRotate) * alpha;
+ constraint.mixX += (data.mixX - constraint.mixX) * alpha;
+ constraint.mixY += (data.mixY - constraint.mixY) * alpha;
+ constraint.mixScaleX += (data.mixScaleX - constraint.mixScaleX) * alpha;
+ constraint.mixScaleY += (data.mixScaleY - constraint.mixScaleY) * alpha;
+ constraint.mixShearY += (data.mixShearY - constraint.mixShearY) * alpha;
+ }
+ return;
+ }
+ let rotate, x, y, scaleX, scaleY, shearY;
+ let i = Timeline.search(frames, time, 7);
+ let curveType = this.curves[i / 7];
+ switch (curveType) {
+ case 0:
+ let before = frames[i];
+ rotate = frames[i + 1];
+ x = frames[i + 2];
+ y = frames[i + 3];
+ scaleX = frames[i + 4];
+ scaleY = frames[i + 5];
+ shearY = frames[i + 6];
+ let t = (time - before) / (frames[i + 7] - before);
+ rotate += (frames[i + 7 + 1] - rotate) * t;
+ x += (frames[i + 7 + 2] - x) * t;
+ y += (frames[i + 7 + 3] - y) * t;
+ scaleX += (frames[i + 7 + 4] - scaleX) * t;
+ scaleY += (frames[i + 7 + 5] - scaleY) * t;
+ shearY += (frames[i + 7 + 6] - shearY) * t;
+ break;
+ case 1:
+ rotate = frames[i + 1];
+ x = frames[i + 2];
+ y = frames[i + 3];
+ scaleX = frames[i + 4];
+ scaleY = frames[i + 5];
+ shearY = frames[i + 6];
+ break;
+ default:
+ rotate = this.getBezierValue(time, i, 1, curveType - 2);
+ x = this.getBezierValue(time, i, 2, curveType + 18 - 2);
+ y = this.getBezierValue(time, i, 3, curveType + 18 * 2 - 2);
+ scaleX = this.getBezierValue(time, i, 4, curveType + 18 * 3 - 2);
+ scaleY = this.getBezierValue(time, i, 5, curveType + 18 * 4 - 2);
+ shearY = this.getBezierValue(time, i, 6, curveType + 18 * 5 - 2);
+ }
+ if (blend == 0) {
+ let data = constraint.data;
+ constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha;
+ constraint.mixX = data.mixX + (x - data.mixX) * alpha;
+ constraint.mixY = data.mixY + (y - data.mixY) * alpha;
+ constraint.mixScaleX = data.mixScaleX + (scaleX - data.mixScaleX) * alpha;
+ constraint.mixScaleY = data.mixScaleY + (scaleY - data.mixScaleY) * alpha;
+ constraint.mixShearY = data.mixShearY + (shearY - data.mixShearY) * alpha;
+ } else {
+ constraint.mixRotate += (rotate - constraint.mixRotate) * alpha;
+ constraint.mixX += (x - constraint.mixX) * alpha;
+ constraint.mixY += (y - constraint.mixY) * alpha;
+ constraint.mixScaleX += (scaleX - constraint.mixScaleX) * alpha;
+ constraint.mixScaleY += (scaleY - constraint.mixScaleY) * alpha;
+ constraint.mixShearY += (shearY - constraint.mixShearY) * alpha;
+ }
+ }
+ };
+ var PathConstraintPositionTimeline = class extends CurveTimeline1 {
+ constructor(frameCount, bezierCount, pathConstraintIndex) {
+ super(frameCount, bezierCount, Property.pathConstraintPosition + "|" + pathConstraintIndex);
+ this.pathConstraintIndex = pathConstraintIndex;
+ }
+ apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
+ let constraint = skeleton.pathConstraints[this.pathConstraintIndex];
+ if (!constraint.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ constraint.position = constraint.data.position;
+ return;
+ case 1:
+ constraint.position += (constraint.data.position - constraint.position) * alpha;
+ }
+ return;
+ }
+ let position = this.getCurveValue(time);
+ if (blend == 0)
+ constraint.position = constraint.data.position + (position - constraint.data.position) * alpha;
+ else
+ constraint.position += (position - constraint.position) * alpha;
+ }
+ };
+ var PathConstraintSpacingTimeline = class extends CurveTimeline1 {
+ constructor(frameCount, bezierCount, pathConstraintIndex) {
+ super(frameCount, bezierCount, Property.pathConstraintSpacing + "|" + pathConstraintIndex);
+ this.pathConstraintIndex = 0;
+ this.pathConstraintIndex = pathConstraintIndex;
+ }
+ apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
+ let constraint = skeleton.pathConstraints[this.pathConstraintIndex];
+ if (!constraint.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ constraint.spacing = constraint.data.spacing;
+ return;
+ case 1:
+ constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha;
+ }
+ return;
+ }
+ let spacing = this.getCurveValue(time);
+ if (blend == 0)
+ constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha;
+ else
+ constraint.spacing += (spacing - constraint.spacing) * alpha;
+ }
+ };
+ var PathConstraintMixTimeline = class extends CurveTimeline {
+ constructor(frameCount, bezierCount, pathConstraintIndex) {
+ super(frameCount, bezierCount, [
+ Property.pathConstraintMix + "|" + pathConstraintIndex
+ ]);
+ this.pathConstraintIndex = 0;
+ this.pathConstraintIndex = pathConstraintIndex;
+ }
+ getFrameEntries() {
+ return 4;
+ }
+ setFrame(frame, time, mixRotate, mixX, mixY) {
+ let frames = this.frames;
+ frame <<= 2;
+ frames[frame] = time;
+ frames[frame + 1] = mixRotate;
+ frames[frame + 2] = mixX;
+ frames[frame + 3] = mixY;
+ }
+ apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {
+ let constraint = skeleton.pathConstraints[this.pathConstraintIndex];
+ if (!constraint.active)
+ return;
+ let frames = this.frames;
+ if (time < frames[0]) {
+ switch (blend) {
+ case 0:
+ constraint.mixRotate = constraint.data.mixRotate;
+ constraint.mixX = constraint.data.mixX;
+ constraint.mixY = constraint.data.mixY;
+ return;
+ case 1:
+ constraint.mixRotate += (constraint.data.mixRotate - constraint.mixRotate) * alpha;
+ constraint.mixX += (constraint.data.mixX - constraint.mixX) * alpha;
+ constraint.mixY += (constraint.data.mixY - constraint.mixY) * alpha;
+ }
+ return;
+ }
+ let rotate, x, y;
+ let i = Timeline.search(frames, time, 4);
+ let curveType = this.curves[i >> 2];
+ switch (curveType) {
+ case 0:
+ let before = frames[i];
+ rotate = frames[i + 1];
+ x = frames[i + 2];
+ y = frames[i + 3];
+ let t = (time - before) / (frames[i + 4] - before);
+ rotate += (frames[i + 4 + 1] - rotate) * t;
+ x += (frames[i + 4 + 2] - x) * t;
+ y += (frames[i + 4 + 3] - y) * t;
+ break;
+ case 1:
+ rotate = frames[i + 1];
+ x = frames[i + 2];
+ y = frames[i + 3];
+ break;
+ default:
+ rotate = this.getBezierValue(time, i, 1, curveType - 2);
+ x = this.getBezierValue(time, i, 2, curveType + 18 - 2);
+ y = this.getBezierValue(time, i, 3, curveType + 18 * 2 - 2);
+ }
+ if (blend == 0) {
+ let data = constraint.data;
+ constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha;
+ constraint.mixX = data.mixX + (x - data.mixX) * alpha;
+ constraint.mixY = data.mixY + (y - data.mixY) * alpha;
+ } else {
+ constraint.mixRotate += (rotate - constraint.mixRotate) * alpha;
+ constraint.mixX += (x - constraint.mixX) * alpha;
+ constraint.mixY += (y - constraint.mixY) * alpha;
+ }
+ }
+ };
+
+ // spine-core/src/AnimationState.ts
+ var AnimationState = class {
+ constructor(data) {
+ this.tracks = new Array();
+ this.timeScale = 1;
+ this.unkeyedState = 0;
+ this.events = new Array();
+ this.listeners = new Array();
+ this.queue = new EventQueue(this);
+ this.propertyIDs = new StringSet();
+ this.animationsChanged = false;
+ this.trackEntryPool = new Pool(() => new TrackEntry());
+ this.data = data;
+ }
+ static emptyAnimation() {
+ if (!_emptyAnimation)
+ _emptyAnimation = new Animation("x,y values that is the local position of the vertex.
- *
- * See {@link #updateOffset()}. */
- _this.offset = Utils.newFloatArray(8);
- _this.uvs = Utils.newFloatArray(8);
- _this.tempColor = new Color(1, 1, 1, 1);
- return _this;
- }
- /** Calculates the {@link #offset} using the region settings. Must be called after changing region settings. */
- RegionAttachment.prototype.updateOffset = function () {
- this.region;
- var regionScaleX = this.width / this.region.originalWidth * this.scaleX;
- var regionScaleY = this.height / this.region.originalHeight * this.scaleY;
- var localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX;
- var localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY;
- var localX2 = localX + this.region.width * regionScaleX;
- var localY2 = localY + this.region.height * regionScaleY;
- var radians = this.rotation * Math.PI / 180;
- var cos = Math.cos(radians);
- var sin = Math.sin(radians);
- var x = this.x, y = this.y;
- var localXCos = localX * cos + x;
- var localXSin = localX * sin;
- var localYCos = localY * cos + y;
- var localYSin = localY * sin;
- var localX2Cos = localX2 * cos + x;
- var localX2Sin = localX2 * sin;
- var localY2Cos = localY2 * cos + y;
- var localY2Sin = localY2 * sin;
- var offset = this.offset;
- offset[0] = localXCos - localYSin;
- offset[1] = localYCos + localXSin;
- offset[2] = localXCos - localY2Sin;
- offset[3] = localY2Cos + localXSin;
- offset[4] = localX2Cos - localY2Sin;
- offset[5] = localY2Cos + localX2Sin;
- offset[6] = localX2Cos - localYSin;
- offset[7] = localYCos + localX2Sin;
- };
- RegionAttachment.prototype.setRegion = function (region) {
- this.region = region;
- var uvs = this.uvs;
- if (region.degrees == 90) {
- uvs[2] = region.u;
- uvs[3] = region.v2;
- uvs[4] = region.u;
- uvs[5] = region.v;
- uvs[6] = region.u2;
- uvs[7] = region.v;
- uvs[0] = region.u2;
- uvs[1] = region.v2;
- }
- else {
- uvs[0] = region.u;
- uvs[1] = region.v2;
- uvs[2] = region.u;
- uvs[3] = region.v;
- uvs[4] = region.u2;
- uvs[5] = region.v;
- uvs[6] = region.u2;
- uvs[7] = region.v2;
- }
- };
- /** Transforms the attachment's four vertices to world coordinates.
- *
- * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine
- * Runtimes Guide.
- * @param worldVertices The output world vertices. Must have a length >= `offset` + 8.
- * @param offset The `worldVertices` index to begin writing values.
- * @param stride The number of `worldVertices` entries between the value pairs written. */
- RegionAttachment.prototype.computeWorldVertices = function (bone, worldVertices, offset, stride) {
- var vertexOffset = this.offset;
- var x = bone.worldX, y = bone.worldY;
- var a = bone.a, b = bone.b, c = bone.c, d = bone.d;
- var offsetX = 0, offsetY = 0;
- offsetX = vertexOffset[0];
- offsetY = vertexOffset[1];
- worldVertices[offset] = offsetX * a + offsetY * b + x; // br
- worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
- offset += stride;
- offsetX = vertexOffset[2];
- offsetY = vertexOffset[3];
- worldVertices[offset] = offsetX * a + offsetY * b + x; // bl
- worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
- offset += stride;
- offsetX = vertexOffset[4];
- offsetY = vertexOffset[5];
- worldVertices[offset] = offsetX * a + offsetY * b + x; // ul
- worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
- offset += stride;
- offsetX = vertexOffset[6];
- offsetY = vertexOffset[7];
- worldVertices[offset] = offsetX * a + offsetY * b + x; // ur
- worldVertices[offset + 1] = offsetX * c + offsetY * d + y;
- };
- RegionAttachment.prototype.copy = function () {
- var copy = new RegionAttachment(this.name);
- copy.region = this.region;
- copy.rendererObject = this.rendererObject;
- copy.path = this.path;
- copy.x = this.x;
- copy.y = this.y;
- copy.scaleX = this.scaleX;
- copy.scaleY = this.scaleY;
- copy.rotation = this.rotation;
- copy.width = this.width;
- copy.height = this.height;
- Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8);
- Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8);
- copy.color.setFromColor(this.color);
- return copy;
- };
- RegionAttachment.X1 = 0;
- RegionAttachment.Y1 = 1;
- RegionAttachment.C1R = 2;
- RegionAttachment.C1G = 3;
- RegionAttachment.C1B = 4;
- RegionAttachment.C1A = 5;
- RegionAttachment.U1 = 6;
- RegionAttachment.V1 = 7;
- RegionAttachment.X2 = 8;
- RegionAttachment.Y2 = 9;
- RegionAttachment.C2R = 10;
- RegionAttachment.C2G = 11;
- RegionAttachment.C2B = 12;
- RegionAttachment.C2A = 13;
- RegionAttachment.U2 = 14;
- RegionAttachment.V2 = 15;
- RegionAttachment.X3 = 16;
- RegionAttachment.Y3 = 17;
- RegionAttachment.C3R = 18;
- RegionAttachment.C3G = 19;
- RegionAttachment.C3B = 20;
- RegionAttachment.C3A = 21;
- RegionAttachment.U3 = 22;
- RegionAttachment.V3 = 23;
- RegionAttachment.X4 = 24;
- RegionAttachment.Y4 = 25;
- RegionAttachment.C4R = 26;
- RegionAttachment.C4G = 27;
- RegionAttachment.C4B = 28;
- RegionAttachment.C4A = 29;
- RegionAttachment.U4 = 30;
- RegionAttachment.V4 = 31;
- return RegionAttachment;
- }(Attachment));
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- /** An {@link AttachmentLoader} that configures attachments using texture regions from an {@link TextureAtlas}.
- *
- * See [Loading skeleton data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the
- * Spine Runtimes Guide. */
- var AtlasAttachmentLoader = /** @class */ (function () {
- function AtlasAttachmentLoader(atlas) {
- this.atlas = atlas;
- }
- AtlasAttachmentLoader.prototype.newRegionAttachment = function (skin, name, path) {
- var region = this.atlas.findRegion(path);
- if (!region)
- throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")");
- region.renderObject = region;
- var attachment = new RegionAttachment(name);
- attachment.setRegion(region);
- return attachment;
- };
- AtlasAttachmentLoader.prototype.newMeshAttachment = function (skin, name, path) {
- var region = this.atlas.findRegion(path);
- if (!region)
- throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")");
- region.renderObject = region;
- var attachment = new MeshAttachment(name);
- attachment.region = region;
- return attachment;
- };
- AtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function (skin, name) {
- return new BoundingBoxAttachment(name);
- };
- AtlasAttachmentLoader.prototype.newPathAttachment = function (skin, name) {
- return new PathAttachment(name);
- };
- AtlasAttachmentLoader.prototype.newPointAttachment = function (skin, name) {
- return new PointAttachment(name);
- };
- AtlasAttachmentLoader.prototype.newClippingAttachment = function (skin, name) {
- return new ClippingAttachment(name);
- };
- return AtlasAttachmentLoader;
- }());
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- /** Stores the setup pose for a {@link Bone}. */
- var BoneData = /** @class */ (function () {
- function BoneData(index, name, parent) {
- /** The local x translation. */
- this.x = 0;
- /** The local y translation. */
- this.y = 0;
- /** The local rotation. */
- this.rotation = 0;
- /** The local scaleX. */
- this.scaleX = 1;
- /** The local scaleY. */
- this.scaleY = 1;
- /** The local shearX. */
- this.shearX = 0;
- /** The local shearX. */
- this.shearY = 0;
- /** The transform mode for how parent world transforms affect this bone. */
- this.transformMode = exports.TransformMode.Normal;
- /** When true, {@link Skeleton#updateWorldTransform()} only updates this bone if the {@link Skeleton#skin} contains this
- * bone.
- * @see Skin#bones */
- this.skinRequired = false;
- /** The color of the bone as it was in Spine. Available only when nonessential data was exported. Bones are not usually
- * rendered at runtime. */
- this.color = new Color();
- if (index < 0)
- throw new Error("index must be >= 0.");
- if (!name)
- throw new Error("name cannot be null.");
- this.index = index;
- this.name = name;
- this.parent = parent;
- }
- return BoneData;
- }());
- /** Determines how a bone inherits world transforms from parent bones. */
- exports.TransformMode = void 0;
- (function (TransformMode) {
- TransformMode[TransformMode["Normal"] = 0] = "Normal";
- TransformMode[TransformMode["OnlyTranslation"] = 1] = "OnlyTranslation";
- TransformMode[TransformMode["NoRotationOrReflection"] = 2] = "NoRotationOrReflection";
- TransformMode[TransformMode["NoScale"] = 3] = "NoScale";
- TransformMode[TransformMode["NoScaleOrReflection"] = 4] = "NoScaleOrReflection";
- })(exports.TransformMode || (exports.TransformMode = {}));
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- /** Stores a bone's current pose.
- *
- * A bone has a local transform which is used to compute its world transform. A bone also has an applied transform, which is a
- * local transform that can be applied to compute the world transform. The local transform and applied transform may differ if a
- * constraint or application code modifies the world transform after it was computed from the local transform. */
- var Bone = /** @class */ (function () {
- /** @param parent May be null. */
- function Bone(data, skeleton, parent) {
- /** The immediate children of this bone. */
- this.children = new Array();
- /** The local x translation. */
- this.x = 0;
- /** The local y translation. */
- this.y = 0;
- /** The local rotation in degrees, counter clockwise. */
- this.rotation = 0;
- /** The local scaleX. */
- this.scaleX = 0;
- /** The local scaleY. */
- this.scaleY = 0;
- /** The local shearX. */
- this.shearX = 0;
- /** The local shearY. */
- this.shearY = 0;
- /** The applied local x translation. */
- this.ax = 0;
- /** The applied local y translation. */
- this.ay = 0;
- /** The applied local rotation in degrees, counter clockwise. */
- this.arotation = 0;
- /** The applied local scaleX. */
- this.ascaleX = 0;
- /** The applied local scaleY. */
- this.ascaleY = 0;
- /** The applied local shearX. */
- this.ashearX = 0;
- /** The applied local shearY. */
- this.ashearY = 0;
- /** Part of the world transform matrix for the X axis. If changed, {@link #updateAppliedTransform()} should be called. */
- this.a = 0;
- /** Part of the world transform matrix for the Y axis. If changed, {@link #updateAppliedTransform()} should be called. */
- this.b = 0;
- /** Part of the world transform matrix for the X axis. If changed, {@link #updateAppliedTransform()} should be called. */
- this.c = 0;
- /** Part of the world transform matrix for the Y axis. If changed, {@link #updateAppliedTransform()} should be called. */
- this.d = 0;
- /** The world X position. If changed, {@link #updateAppliedTransform()} should be called. */
- this.worldY = 0;
- /** The world Y position. If changed, {@link #updateAppliedTransform()} should be called. */
- this.worldX = 0;
- this.sorted = false;
- this.active = false;
- if (!data)
- throw new Error("data cannot be null.");
- if (!skeleton)
- throw new Error("skeleton cannot be null.");
- this.data = data;
- this.skeleton = skeleton;
- this.parent = parent;
- this.setToSetupPose();
- }
- /** Returns false when the bone has not been computed because {@link BoneData#skinRequired} is true and the
- * {@link Skeleton#skin active skin} does not {@link Skin#bones contain} this bone. */
- Bone.prototype.isActive = function () {
- return this.active;
- };
- /** Computes the world transform using the parent bone and this bone's local applied transform. */
- Bone.prototype.update = function () {
- this.updateWorldTransformWith(this.ax, this.ay, this.arotation, this.ascaleX, this.ascaleY, this.ashearX, this.ashearY);
- };
- /** Computes the world transform using the parent bone and this bone's local transform.
- *
- * See {@link #updateWorldTransformWith()}. */
- Bone.prototype.updateWorldTransform = function () {
- this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);
- };
- /** Computes the world transform using the parent bone and the specified local transform. The applied transform is set to the
- * specified local transform. Child bones are not updated.
- *
- * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine
- * Runtimes Guide. */
- Bone.prototype.updateWorldTransformWith = function (x, y, rotation, scaleX, scaleY, shearX, shearY) {
- this.ax = x;
- this.ay = y;
- this.arotation = rotation;
- this.ascaleX = scaleX;
- this.ascaleY = scaleY;
- this.ashearX = shearX;
- this.ashearY = shearY;
- var parent = this.parent;
- if (!parent) { // Root bone.
- var skeleton = this.skeleton;
- var rotationY = rotation + 90 + shearY;
- var sx = skeleton.scaleX;
- var sy = skeleton.scaleY;
- this.a = MathUtils.cosDeg(rotation + shearX) * scaleX * sx;
- this.b = MathUtils.cosDeg(rotationY) * scaleY * sx;
- this.c = MathUtils.sinDeg(rotation + shearX) * scaleX * sy;
- this.d = MathUtils.sinDeg(rotationY) * scaleY * sy;
- this.worldX = x * sx + skeleton.x;
- this.worldY = y * sy + skeleton.y;
- return;
- }
- var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
- this.worldX = pa * x + pb * y + parent.worldX;
- this.worldY = pc * x + pd * y + parent.worldY;
- switch (this.data.transformMode) {
- case exports.TransformMode.Normal: {
- var rotationY = rotation + 90 + shearY;
- var la = MathUtils.cosDeg(rotation + shearX) * scaleX;
- var lb = MathUtils.cosDeg(rotationY) * scaleY;
- var lc = MathUtils.sinDeg(rotation + shearX) * scaleX;
- var ld = MathUtils.sinDeg(rotationY) * scaleY;
- this.a = pa * la + pb * lc;
- this.b = pa * lb + pb * ld;
- this.c = pc * la + pd * lc;
- this.d = pc * lb + pd * ld;
- return;
- }
- case exports.TransformMode.OnlyTranslation: {
- var rotationY = rotation + 90 + shearY;
- this.a = MathUtils.cosDeg(rotation + shearX) * scaleX;
- this.b = MathUtils.cosDeg(rotationY) * scaleY;
- this.c = MathUtils.sinDeg(rotation + shearX) * scaleX;
- this.d = MathUtils.sinDeg(rotationY) * scaleY;
- break;
- }
- case exports.TransformMode.NoRotationOrReflection: {
- var s = pa * pa + pc * pc;
- var prx = 0;
- if (s > 0.0001) {
- s = Math.abs(pa * pd - pb * pc) / s;
- pa /= this.skeleton.scaleX;
- pc /= this.skeleton.scaleY;
- pb = pc * s;
- pd = pa * s;
- prx = Math.atan2(pc, pa) * MathUtils.radDeg;
- }
- else {
- pa = 0;
- pc = 0;
- prx = 90 - Math.atan2(pd, pb) * MathUtils.radDeg;
- }
- var rx = rotation + shearX - prx;
- var ry = rotation + shearY - prx + 90;
- var la = MathUtils.cosDeg(rx) * scaleX;
- var lb = MathUtils.cosDeg(ry) * scaleY;
- var lc = MathUtils.sinDeg(rx) * scaleX;
- var ld = MathUtils.sinDeg(ry) * scaleY;
- this.a = pa * la - pb * lc;
- this.b = pa * lb - pb * ld;
- this.c = pc * la + pd * lc;
- this.d = pc * lb + pd * ld;
- break;
- }
- case exports.TransformMode.NoScale:
- case exports.TransformMode.NoScaleOrReflection: {
- var cos = MathUtils.cosDeg(rotation);
- var sin = MathUtils.sinDeg(rotation);
- var za = (pa * cos + pb * sin) / this.skeleton.scaleX;
- var zc = (pc * cos + pd * sin) / this.skeleton.scaleY;
- var s = Math.sqrt(za * za + zc * zc);
- if (s > 0.00001)
- s = 1 / s;
- za *= s;
- zc *= s;
- s = Math.sqrt(za * za + zc * zc);
- if (this.data.transformMode == exports.TransformMode.NoScale
- && (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0))
- s = -s;
- var r = Math.PI / 2 + Math.atan2(zc, za);
- var zb = Math.cos(r) * s;
- var zd = Math.sin(r) * s;
- var la = MathUtils.cosDeg(shearX) * scaleX;
- var lb = MathUtils.cosDeg(90 + shearY) * scaleY;
- var lc = MathUtils.sinDeg(shearX) * scaleX;
- var ld = MathUtils.sinDeg(90 + shearY) * scaleY;
- this.a = za * la + zb * lc;
- this.b = za * lb + zb * ld;
- this.c = zc * la + zd * lc;
- this.d = zc * lb + zd * ld;
- break;
- }
- }
- this.a *= this.skeleton.scaleX;
- this.b *= this.skeleton.scaleX;
- this.c *= this.skeleton.scaleY;
- this.d *= this.skeleton.scaleY;
- };
- /** Sets this bone's local transform to the setup pose. */
- Bone.prototype.setToSetupPose = function () {
- var data = this.data;
- this.x = data.x;
- this.y = data.y;
- this.rotation = data.rotation;
- this.scaleX = data.scaleX;
- this.scaleY = data.scaleY;
- this.shearX = data.shearX;
- this.shearY = data.shearY;
- };
- /** The world rotation for the X axis, calculated using {@link #a} and {@link #c}. */
- Bone.prototype.getWorldRotationX = function () {
- return Math.atan2(this.c, this.a) * MathUtils.radDeg;
- };
- /** The world rotation for the Y axis, calculated using {@link #b} and {@link #d}. */
- Bone.prototype.getWorldRotationY = function () {
- return Math.atan2(this.d, this.b) * MathUtils.radDeg;
- };
- /** The magnitude (always positive) of the world scale X, calculated using {@link #a} and {@link #c}. */
- Bone.prototype.getWorldScaleX = function () {
- return Math.sqrt(this.a * this.a + this.c * this.c);
- };
- /** The magnitude (always positive) of the world scale Y, calculated using {@link #b} and {@link #d}. */
- Bone.prototype.getWorldScaleY = function () {
- return Math.sqrt(this.b * this.b + this.d * this.d);
- };
- /** Computes the applied transform values from the world transform.
- *
- * If the world transform is modified (by a constraint, {@link #rotateWorld(float)}, etc) then this method should be called so
- * the applied transform matches the world transform. The applied transform may be needed by other code (eg to apply other
- * constraints).
- *
- * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The applied transform after
- * calling this method is equivalent to the local transform used to compute the world transform, but may not be identical. */
- Bone.prototype.updateAppliedTransform = function () {
- var parent = this.parent;
- if (!parent) {
- this.ax = this.worldX;
- this.ay = this.worldY;
- this.arotation = Math.atan2(this.c, this.a) * MathUtils.radDeg;
- this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c);
- this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d);
- this.ashearX = 0;
- this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * MathUtils.radDeg;
- return;
- }
- var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
- var pid = 1 / (pa * pd - pb * pc);
- var dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;
- this.ax = (dx * pd * pid - dy * pb * pid);
- this.ay = (dy * pa * pid - dx * pc * pid);
- var ia = pid * pd;
- var id = pid * pa;
- var ib = pid * pb;
- var ic = pid * pc;
- var ra = ia * this.a - ib * this.c;
- var rb = ia * this.b - ib * this.d;
- var rc = id * this.c - ic * this.a;
- var rd = id * this.d - ic * this.b;
- this.ashearX = 0;
- this.ascaleX = Math.sqrt(ra * ra + rc * rc);
- if (this.ascaleX > 0.0001) {
- var det = ra * rd - rb * rc;
- this.ascaleY = det / this.ascaleX;
- this.ashearY = Math.atan2(ra * rb + rc * rd, det) * MathUtils.radDeg;
- this.arotation = Math.atan2(rc, ra) * MathUtils.radDeg;
- }
- else {
- this.ascaleX = 0;
- this.ascaleY = Math.sqrt(rb * rb + rd * rd);
- this.ashearY = 0;
- this.arotation = 90 - Math.atan2(rd, rb) * MathUtils.radDeg;
- }
- };
- /** Transforms a point from world coordinates to the bone's local coordinates. */
- Bone.prototype.worldToLocal = function (world) {
- var invDet = 1 / (this.a * this.d - this.b * this.c);
- var x = world.x - this.worldX, y = world.y - this.worldY;
- world.x = x * this.d * invDet - y * this.b * invDet;
- world.y = y * this.a * invDet - x * this.c * invDet;
- return world;
- };
- /** Transforms a point from the bone's local coordinates to world coordinates. */
- Bone.prototype.localToWorld = function (local) {
- var x = local.x, y = local.y;
- local.x = x * this.a + y * this.b + this.worldX;
- local.y = x * this.c + y * this.d + this.worldY;
- return local;
- };
- /** Transforms a world rotation to a local rotation. */
- Bone.prototype.worldToLocalRotation = function (worldRotation) {
- var sin = MathUtils.sinDeg(worldRotation), cos = MathUtils.cosDeg(worldRotation);
- return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * MathUtils.radDeg + this.rotation - this.shearX;
- };
- /** Transforms a local rotation to a world rotation. */
- Bone.prototype.localToWorldRotation = function (localRotation) {
- localRotation -= this.rotation - this.shearX;
- var sin = MathUtils.sinDeg(localRotation), cos = MathUtils.cosDeg(localRotation);
- return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * MathUtils.radDeg;
- };
- /** Rotates the world transform the specified amount.
- * - * After changes are made to the world transform, {@link #updateAppliedTransform()} should be called and {@link #update()} will - * need to be called on any child bones, recursively. */ - Bone.prototype.rotateWorld = function (degrees) { - var a = this.a, b = this.b, c = this.c, d = this.d; - var cos = MathUtils.cosDeg(degrees), sin = MathUtils.sinDeg(degrees); - this.a = cos * a - sin * c; - this.b = cos * b - sin * d; - this.c = sin * a + cos * c; - this.d = sin * b + cos * d; - }; - return Bone; - }()); - - /****************************************************************************** - * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. - * - * Copyright (c) 2013-2020, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - /** The base class for all constraint datas. */ - var ConstraintData = /** @class */ (function () { - function ConstraintData(name, order, skinRequired) { - this.name = name; - this.order = order; - this.skinRequired = skinRequired; - } - return ConstraintData; - }()); - - /****************************************************************************** - * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. - * - * Copyright (c) 2013-2020, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - var AssetManagerBase = /** @class */ (function () { - function AssetManagerBase(textureLoader, pathPrefix, downloader) { - if (pathPrefix === void 0) { pathPrefix = ""; } - if (downloader === void 0) { downloader = null; } - this.assets = {}; - this.errors = {}; - this.toLoad = 0; - this.loaded = 0; - this.textureLoader = textureLoader; - this.pathPrefix = pathPrefix; - this.downloader = downloader || new Downloader(); - } - AssetManagerBase.prototype.start = function (path) { - this.toLoad++; - return this.pathPrefix + path; - }; - AssetManagerBase.prototype.success = function (callback, path, asset) { - this.toLoad--; - this.loaded++; - this.assets[path] = asset; - if (callback) - callback(path, asset); - }; - AssetManagerBase.prototype.error = function (callback, path, message) { - this.toLoad--; - this.loaded++; - this.errors[path] = message; - if (callback) - callback(path, message); - }; - AssetManagerBase.prototype.setRawDataURI = function (path, data) { - this.downloader.rawDataUris[this.pathPrefix + path] = data; - }; - AssetManagerBase.prototype.loadBinary = function (path, success, error) { - var _this = this; - if (success === void 0) { success = null; } - if (error === void 0) { error = null; } - path = this.start(path); - this.downloader.downloadBinary(path, function (data) { - _this.success(success, path, data); - }, function (status, responseText) { - _this.error(error, path, "Couldn't load binary " + path + ": status " + status + ", " + responseText); + if (this.downloader.rawDataUris[path]) + path = this.downloader.rawDataUris[path]; + image.src = path; + } + } + loadTextureAtlas(path, success = null, error = null) { + let index = path.lastIndexOf("/"); + let parent = index >= 0 ? path.substring(0, index + 1) : ""; + path = this.start(path); + this.downloader.downloadText(path, (atlasText) => { + try { + let atlas = new TextureAtlas(atlasText); + let toLoad = atlas.pages.length, abort = false; + for (let page of atlas.pages) { + this.loadTexture(parent + page.name, (imagePath, texture) => { + if (!abort) { + page.setTexture(texture); + if (--toLoad == 0) + this.success(success, path, atlas); + } + }, (imagePath, message) => { + if (!abort) + this.error(error, path, `Couldn't load texture atlas ${path} page image: ${imagePath}`); + abort = true; }); - }; - AssetManagerBase.prototype.loadText = function (path, success, error) { - var _this = this; - if (success === void 0) { success = null; } - if (error === void 0) { error = null; } - path = this.start(path); - this.downloader.downloadText(path, function (data) { - _this.success(success, path, data); - }, function (status, responseText) { - _this.error(error, path, "Couldn't load text " + path + ": status " + status + ", " + responseText); - }); - }; - AssetManagerBase.prototype.loadJson = function (path, success, error) { - var _this = this; - if (success === void 0) { success = null; } - if (error === void 0) { error = null; } - path = this.start(path); - this.downloader.downloadJson(path, function (data) { - _this.success(success, path, data); - }, function (status, responseText) { - _this.error(error, path, "Couldn't load JSON " + path + ": status " + status + ", " + responseText); - }); - }; - AssetManagerBase.prototype.loadTexture = function (path, success, error) { - var _this = this; - if (success === void 0) { success = null; } - if (error === void 0) { error = null; } - path = this.start(path); - var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document); - var isWebWorker = !isBrowser; // && typeof importScripts !== 'undefined'; - if (isWebWorker) { - fetch(path, { mode: "cors" }).then(function (response) { - if (response.ok) - return response.blob(); - _this.error(error, path, "Couldn't load image: " + path); - return null; - }).then(function (blob) { - return blob ? createImageBitmap(blob, { premultiplyAlpha: "none", colorSpaceConversion: "none" }) : null; - }).then(function (bitmap) { - if (bitmap) - _this.success(success, path, _this.textureLoader(bitmap)); - }); - } - else { - var image_1 = new Image(); - image_1.crossOrigin = "anonymous"; - image_1.onload = function () { - _this.success(success, path, _this.textureLoader(image_1)); - }; - image_1.onerror = function () { - _this.error(error, path, "Couldn't load image: " + path); - }; - if (this.downloader.rawDataUris[path]) - path = this.downloader.rawDataUris[path]; - image_1.src = path; - } - }; - AssetManagerBase.prototype.loadTextureAtlas = function (path, success, error) { - var _this = this; - if (success === void 0) { success = null; } - if (error === void 0) { error = null; } - var index = path.lastIndexOf("/"); - var parent = index >= 0 ? path.substring(0, index + 1) : ""; - path = this.start(path); - this.downloader.downloadText(path, function (atlasText) { - try { - var atlas_1 = new TextureAtlas(atlasText); - var toLoad_1 = atlas_1.pages.length, abort_1 = false; - var _loop_1 = function (page) { - _this.loadTexture(parent + page.name, function (imagePath, texture) { - if (!abort_1) { - page.setTexture(texture); - if (--toLoad_1 == 0) - _this.success(success, path, atlas_1); - } - }, function (imagePath, message) { - if (!abort_1) - _this.error(error, path, "Couldn't load texture atlas " + path + " page image: " + imagePath); - abort_1 = true; - }); - }; - for (var _i = 0, _a = atlas_1.pages; _i < _a.length; _i++) { - var page = _a[_i]; - _loop_1(page); - } - } - catch (e) { - _this.error(error, path, "Couldn't parse texture atlas " + path + ": " + e.message); - } - }, function (status, responseText) { - _this.error(error, path, "Couldn't load texture atlas " + path + ": status " + status + ", " + responseText); - }); - }; - AssetManagerBase.prototype.get = function (path) { - return this.assets[this.pathPrefix + path]; - }; - AssetManagerBase.prototype.require = function (path) { - path = this.pathPrefix + path; - var asset = this.assets[path]; - if (asset) - return asset; - var error = this.errors[path]; - throw Error("Asset not found: " + path + (error ? "\n" + error : "")); - }; - AssetManagerBase.prototype.remove = function (path) { - path = this.pathPrefix + path; - var asset = this.assets[path]; - if (asset.dispose) - asset.dispose(); - delete this.assets[path]; - return asset; - }; - AssetManagerBase.prototype.removeAll = function () { - for (var key in this.assets) { - var asset = this.assets[key]; - if (asset.dispose) - asset.dispose(); - } - this.assets = {}; - }; - AssetManagerBase.prototype.isLoadingComplete = function () { - return this.toLoad == 0; - }; - AssetManagerBase.prototype.getToLoad = function () { - return this.toLoad; - }; - AssetManagerBase.prototype.getLoaded = function () { - return this.loaded; - }; - AssetManagerBase.prototype.dispose = function () { - this.removeAll(); - }; - AssetManagerBase.prototype.hasErrors = function () { - return Object.keys(this.errors).length > 0; - }; - AssetManagerBase.prototype.getErrors = function () { - return this.errors; - }; - return AssetManagerBase; - }()); - var Downloader = /** @class */ (function () { - function Downloader() { - this.callbacks = {}; - this.rawDataUris = {}; + } + } catch (e) { + this.error(error, path, `Couldn't parse texture atlas ${path}: ${e.message}`); } - Downloader.prototype.downloadText = function (url, success, error) { - var _this = this; - if (this.rawDataUris[url]) - url = this.rawDataUris[url]; - if (this.start(url, success, error)) - return; - var request = new XMLHttpRequest(); - request.overrideMimeType("text/html"); - request.open("GET", url, true); - var done = function () { - _this.finish(url, request.status, request.responseText); - }; - request.onload = done; - request.onerror = done; - request.send(); - }; - Downloader.prototype.downloadJson = function (url, success, error) { - this.downloadText(url, function (data) { - success(JSON.parse(data)); - }, error); - }; - Downloader.prototype.downloadBinary = function (url, success, error) { - var _this = this; - if (this.rawDataUris[url]) - url = this.rawDataUris[url]; - if (this.start(url, success, error)) - return; - var request = new XMLHttpRequest(); - request.open("GET", url, true); - request.responseType = "arraybuffer"; - var onerror = function () { - _this.finish(url, request.status, request.responseText); - }; - request.onload = function () { - if (request.status == 200) - _this.finish(url, 200, new Uint8Array(request.response)); - else - onerror(); - }; - request.onerror = onerror; - request.send(); - }; - Downloader.prototype.start = function (url, success, error) { - var callbacks = this.callbacks[url]; - try { - if (callbacks) - return true; - this.callbacks[url] = callbacks = []; - } - finally { - callbacks.push(success, error); - } - }; - Downloader.prototype.finish = function (url, status, data) { - var callbacks = this.callbacks[url]; - delete this.callbacks[url]; - var args = status == 200 ? [data] : [status, data]; - for (var i = args.length - 1, n = callbacks.length; i < n; i += 2) - callbacks[i].apply(null, args); - }; - return Downloader; - }()); + }, (status, responseText) => { + this.error(error, path, `Couldn't load texture atlas ${path}: status ${status}, ${responseText}`); + }); + } + get(path) { + return this.assets[this.pathPrefix + path]; + } + require(path) { + path = this.pathPrefix + path; + let asset = this.assets[path]; + if (asset) + return asset; + let error = this.errors[path]; + throw Error("Asset not found: " + path + (error ? "\n" + error : "")); + } + remove(path) { + path = this.pathPrefix + path; + let asset = this.assets[path]; + if (asset.dispose) + asset.dispose(); + delete this.assets[path]; + return asset; + } + removeAll() { + for (let key in this.assets) { + let asset = this.assets[key]; + if (asset.dispose) + asset.dispose(); + } + this.assets = {}; + } + isLoadingComplete() { + return this.toLoad == 0; + } + getToLoad() { + return this.toLoad; + } + getLoaded() { + return this.loaded; + } + dispose() { + this.removeAll(); + } + hasErrors() { + return Object.keys(this.errors).length > 0; + } + getErrors() { + return this.errors; + } + }; + var Downloader = class { + constructor() { + this.callbacks = {}; + this.rawDataUris = {}; + } + downloadText(url, success, error) { + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + if (this.start(url, success, error)) + return; + let request = new XMLHttpRequest(); + request.overrideMimeType("text/html"); + request.open("GET", url, true); + let done = () => { + this.finish(url, request.status, request.responseText); + }; + request.onload = done; + request.onerror = done; + request.send(); + } + downloadJson(url, success, error) { + this.downloadText(url, (data) => { + success(JSON.parse(data)); + }, error); + } + downloadBinary(url, success, error) { + if (this.rawDataUris[url]) + url = this.rawDataUris[url]; + if (this.start(url, success, error)) + return; + let request = new XMLHttpRequest(); + request.open("GET", url, true); + request.responseType = "arraybuffer"; + let onerror = () => { + this.finish(url, request.status, request.responseText); + }; + request.onload = () => { + if (request.status == 200) + this.finish(url, 200, new Uint8Array(request.response)); + else + onerror(); + }; + request.onerror = onerror; + request.send(); + } + start(url, success, error) { + let callbacks = this.callbacks[url]; + try { + if (callbacks) + return true; + this.callbacks[url] = callbacks = []; + } finally { + callbacks.push(success, error); + } + } + finish(url, status, data) { + let callbacks = this.callbacks[url]; + delete this.callbacks[url]; + let args = status == 200 ? [data] : [status, data]; + for (let i = args.length - 1, n = callbacks.length; i < n; i += 2) + callbacks[i].apply(null, args); + } + }; - /****************************************************************************** - * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. - * - * Copyright (c) 2013-2020, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - /** Stores the current pose values for an {@link Event}. - * - * See Timeline {@link Timeline#apply()}, - * AnimationStateListener {@link AnimationStateListener#event()}, and - * [Events](http://esotericsoftware.com/spine-events) in the Spine User Guide. */ - var Event = /** @class */ (function () { - function Event(time, data) { - if (!data) - throw new Error("data cannot be null."); - this.time = time; - this.data = data; - } - return Event; - }()); + // spine-core/src/Event.ts + var Event = class { + constructor(time, data) { + if (!data) + throw new Error("data cannot be null."); + this.time = time; + this.data = data; + } + }; - /****************************************************************************** - * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. - * - * Copyright (c) 2013-2020, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - /** Stores the setup pose values for an {@link Event}. - * - * See [Events](http://esotericsoftware.com/spine-events) in the Spine User Guide. */ - var EventData = /** @class */ (function () { - function EventData(name) { - this.name = name; - } - return EventData; - }()); + // spine-core/src/EventData.ts + var EventData = class { + constructor(name) { + this.name = name; + } + }; - /****************************************************************************** - * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. - * - * Copyright (c) 2013-2020, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - /** Stores the current pose for an IK constraint. An IK constraint adjusts the rotation of 1 or 2 constrained bones so the tip of - * the last bone is as close to the target bone as possible. - * - * See [IK constraints](http://esotericsoftware.com/spine-ik-constraints) in the Spine User Guide. */ - var IkConstraint = /** @class */ (function () { - function IkConstraint(data, skeleton) { - /** Controls the bend direction of the IK bones, either 1 or -1. */ - this.bendDirection = 0; - /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */ - this.compress = false; - /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained - * and the parent bone has local nonuniform scale, stretch is not applied. */ - this.stretch = false; - /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */ - this.mix = 1; - /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */ - this.softness = 0; - this.active = false; - if (!data) - throw new Error("data cannot be null."); - if (!skeleton) - throw new Error("skeleton cannot be null."); - this.data = data; - this.mix = data.mix; - this.softness = data.softness; - this.bendDirection = data.bendDirection; - this.compress = data.compress; - this.stretch = data.stretch; - this.bones = new Array(); - for (var i = 0; i < data.bones.length; i++) - this.bones.push(skeleton.findBone(data.bones[i].name)); - this.target = skeleton.findBone(data.target.name); + // spine-core/src/IkConstraint.ts + var IkConstraint = class { + constructor(data, skeleton) { + this.bendDirection = 0; + this.compress = false; + this.stretch = false; + this.mix = 1; + this.softness = 0; + this.active = false; + if (!data) + throw new Error("data cannot be null."); + if (!skeleton) + throw new Error("skeleton cannot be null."); + this.data = data; + this.mix = data.mix; + this.softness = data.softness; + this.bendDirection = data.bendDirection; + this.compress = data.compress; + this.stretch = data.stretch; + this.bones = new Array(); + for (let i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + isActive() { + return this.active; + } + update() { + if (this.mix == 0) + return; + let target = this.target; + let bones = this.bones; + switch (bones.length) { + case 1: + this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix); + break; + case 2: + this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.data.uniform, this.softness, this.mix); + break; + } + } + apply1(bone, targetX, targetY, compress, stretch, uniform, alpha) { + let p = bone.parent; + let pa = p.a, pb = p.b, pc = p.c, pd = p.d; + let rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0; + switch (bone.data.transformMode) { + case TransformMode.OnlyTranslation: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; + break; + case TransformMode.NoRotationOrReflection: + let s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); + let sa = pa / bone.skeleton.scaleX; + let sc = pc / bone.skeleton.scaleY; + pb = -sc * s * bone.skeleton.scaleX; + pd = sa * s * bone.skeleton.scaleY; + rotationIK += Math.atan2(sc, sa) * MathUtils.radDeg; + default: + let x = targetX - p.worldX, y = targetY - p.worldY; + let d = pa * pd - pb * pc; + tx = (x * pd - y * pb) / d - bone.ax; + ty = (y * pa - x * pc) / d - bone.ay; + } + rotationIK += Math.atan2(ty, tx) * MathUtils.radDeg; + if (bone.ascaleX < 0) + rotationIK += 180; + if (rotationIK > 180) + rotationIK -= 360; + else if (rotationIK < -180) + rotationIK += 360; + let sx = bone.ascaleX, sy = bone.ascaleY; + if (compress || stretch) { + switch (bone.data.transformMode) { + case TransformMode.NoScale: + case TransformMode.NoScaleOrReflection: + tx = targetX - bone.worldX; + ty = targetY - bone.worldY; } - IkConstraint.prototype.isActive = function () { - return this.active; - }; - IkConstraint.prototype.update = function () { - if (this.mix == 0) - return; - var target = this.target; - var bones = this.bones; - switch (bones.length) { - case 1: - this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix); - break; - case 2: - this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.data.uniform, this.softness, this.mix); - break; + let b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty); + if (compress && dd < b || stretch && dd > b && b > 1e-4) { + let s = (dd / b - 1) * alpha + 1; + sx *= s; + if (uniform) + sy *= s; + } + } + bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); + } + apply2(parent, child, targetX, targetY, bendDir, stretch, uniform, softness, alpha) { + let px = parent.ax, py = parent.ay, psx = parent.ascaleX, psy = parent.ascaleY, sx = psx, sy = psy, csx = child.ascaleX; + let os1 = 0, os2 = 0, s2 = 0; + if (psx < 0) { + psx = -psx; + os1 = 180; + s2 = -1; + } else { + os1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + if (csx < 0) { + csx = -csx; + os2 = 180; + } else + os2 = 0; + let cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d; + let u = Math.abs(psx - psy) <= 1e-4; + if (!u || stretch) { + cy = 0; + cwx = a * cx + parent.worldX; + cwy = c * cx + parent.worldY; + } else { + cy = child.ay; + cwx = a * cx + b * cy + parent.worldX; + cwy = c * cx + d * cy + parent.worldY; + } + let pp = parent.parent; + a = pp.a; + b = pp.b; + c = pp.c; + d = pp.d; + let id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY; + let dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; + let l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; + if (l1 < 1e-4) { + this.apply1(parent, targetX, targetY, false, stretch, false, alpha); + child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + return; + } + x = targetX - pp.worldX; + y = targetY - pp.worldY; + let tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; + let dd = tx * tx + ty * ty; + if (softness != 0) { + softness *= psx * (csx + 1) * 0.5; + let td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness; + if (sd > 0) { + let p = Math.min(1, sd / (softness * 2)) - 1; + p = (sd - softness * (1 - p * p)) / td; + tx -= p * tx; + ty -= p * ty; + dd = tx * tx + ty * ty; + } + } + outer: + if (u) { + l2 *= psx; + let cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cos < -1) { + cos = -1; + a2 = Math.PI * bendDir; + } else if (cos > 1) { + cos = 1; + a2 = 0; + if (stretch) { + a = (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1; + sx *= a; + if (uniform) + sy *= a; } - }; - /** Applies 1 bone IK. The target is specified in the world coordinate system. */ - IkConstraint.prototype.apply1 = function (bone, targetX, targetY, compress, stretch, uniform, alpha) { - var p = bone.parent; - var pa = p.a, pb = p.b, pc = p.c, pd = p.d; - var rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0; - switch (bone.data.transformMode) { - case exports.TransformMode.OnlyTranslation: - tx = targetX - bone.worldX; - ty = targetY - bone.worldY; - break; - case exports.TransformMode.NoRotationOrReflection: - var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc); - var sa = pa / bone.skeleton.scaleX; - var sc = pc / bone.skeleton.scaleY; - pb = -sc * s * bone.skeleton.scaleX; - pd = sa * s * bone.skeleton.scaleY; - rotationIK += Math.atan2(sc, sa) * MathUtils.radDeg; - // Fall through - default: - var x = targetX - p.worldX, y = targetY - p.worldY; - var d = pa * pd - pb * pc; - tx = (x * pd - y * pb) / d - bone.ax; - ty = (y * pa - x * pc) / d - bone.ay; + } else + a2 = Math.acos(cos) * bendDir; + a = l1 + l2 * cos; + b = l2 * Math.sin(a2); + a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); + } else { + a = psx * l2; + b = psy * l2; + let aa = a * a, bb = b * b, ta = Math.atan2(ty, tx); + c = bb * l1 * l1 + aa * dd - aa * bb; + let c1 = -2 * bb * l1, c2 = bb - aa; + d = c1 * c1 - 4 * c2 * c; + if (d >= 0) { + let q = Math.sqrt(d); + if (c1 < 0) + q = -q; + q = -(c1 + q) * 0.5; + let r0 = q / c2, r1 = c / q; + let r = Math.abs(r0) < Math.abs(r1) ? r0 : r1; + if (r * r <= dd) { + y = Math.sqrt(dd - r * r) * bendDir; + a1 = ta - Math.atan2(y, r); + a2 = Math.atan2(y / psy, (r - l1) / psx); + break outer; } - rotationIK += Math.atan2(ty, tx) * MathUtils.radDeg; - if (bone.ascaleX < 0) - rotationIK += 180; - if (rotationIK > 180) - rotationIK -= 360; - else if (rotationIK < -180) - rotationIK += 360; - var sx = bone.ascaleX, sy = bone.ascaleY; - if (compress || stretch) { - switch (bone.data.transformMode) { - case exports.TransformMode.NoScale: - case exports.TransformMode.NoScaleOrReflection: - tx = targetX - bone.worldX; - ty = targetY - bone.worldY; - } - var b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty); - if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001) { - var s = (dd / b - 1) * alpha + 1; - sx *= s; - if (uniform) - sy *= s; - } + } + let minAngle = MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0; + let maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; + c = -a * l1 / (aa - bb); + if (c >= -1 && c <= 1) { + c = Math.acos(c); + x = a * Math.cos(c) + l1; + y = b * Math.sin(c); + d = x * x + y * y; + if (d < minDist) { + minAngle = c; + minDist = d; + minX = x; + minY = y; } - bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY); - }; - /** Applies 2 bone IK. The target is specified in the world coordinate system. - * @param child A direct descendant of the parent bone. */ - IkConstraint.prototype.apply2 = function (parent, child, targetX, targetY, bendDir, stretch, uniform, softness, alpha) { - var px = parent.ax, py = parent.ay, psx = parent.ascaleX, psy = parent.ascaleY, sx = psx, sy = psy, csx = child.ascaleX; - var os1 = 0, os2 = 0, s2 = 0; - if (psx < 0) { - psx = -psx; - os1 = 180; - s2 = -1; + if (d > maxDist) { + maxAngle = c; + maxDist = d; + maxX = x; + maxY = y; } - else { - os1 = 0; - s2 = 1; - } - if (psy < 0) { - psy = -psy; - s2 = -s2; - } - if (csx < 0) { - csx = -csx; - os2 = 180; - } - else - os2 = 0; - var cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d; - var u = Math.abs(psx - psy) <= 0.0001; - if (!u || stretch) { - cy = 0; - cwx = a * cx + parent.worldX; - cwy = c * cx + parent.worldY; - } - else { - cy = child.ay; - cwx = a * cx + b * cy + parent.worldX; - cwy = c * cx + d * cy + parent.worldY; - } - var pp = parent.parent; - a = pp.a; - b = pp.b; - c = pp.c; - d = pp.d; - var id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY; - var dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py; - var l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; - if (l1 < 0.0001) { - this.apply1(parent, targetX, targetY, false, stretch, false, alpha); - child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); - return; - } - x = targetX - pp.worldX; - y = targetY - pp.worldY; - var tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py; - var dd = tx * tx + ty * ty; - if (softness != 0) { - softness *= psx * (csx + 1) * 0.5; - var td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness; - if (sd > 0) { - var p = Math.min(1, sd / (softness * 2)) - 1; - p = (sd - softness * (1 - p * p)) / td; - tx -= p * tx; - ty -= p * ty; - dd = tx * tx + ty * ty; - } - } - outer: if (u) { - l2 *= psx; - var cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); - if (cos < -1) { - cos = -1; - a2 = Math.PI * bendDir; - } - else if (cos > 1) { - cos = 1; - a2 = 0; - if (stretch) { - a = (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1; - sx *= a; - if (uniform) - sy *= a; - } - } - else - a2 = Math.acos(cos) * bendDir; - a = l1 + l2 * cos; - b = l2 * Math.sin(a2); - a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b); - } - else { - a = psx * l2; - b = psy * l2; - var aa = a * a, bb = b * b, ta = Math.atan2(ty, tx); - c = bb * l1 * l1 + aa * dd - aa * bb; - var c1 = -2 * bb * l1, c2 = bb - aa; - d = c1 * c1 - 4 * c2 * c; - if (d >= 0) { - var q = Math.sqrt(d); - if (c1 < 0) - q = -q; - q = -(c1 + q) * 0.5; - var r0 = q / c2, r1 = c / q; - var r = Math.abs(r0) < Math.abs(r1) ? r0 : r1; - if (r * r <= dd) { - y = Math.sqrt(dd - r * r) * bendDir; - a1 = ta - Math.atan2(y, r); - a2 = Math.atan2(y / psy, (r - l1) / psx); - break outer; - } - } - var minAngle = MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0; - var maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; - c = -a * l1 / (aa - bb); - if (c >= -1 && c <= 1) { - c = Math.acos(c); - x = a * Math.cos(c) + l1; - y = b * Math.sin(c); - d = x * x + y * y; - if (d < minDist) { - minAngle = c; - minDist = d; - minX = x; - minY = y; - } - if (d > maxDist) { - maxAngle = c; - maxDist = d; - maxX = x; - maxY = y; - } - } - if (dd <= (minDist + maxDist) * 0.5) { - a1 = ta - Math.atan2(minY * bendDir, minX); - a2 = minAngle * bendDir; - } - else { - a1 = ta - Math.atan2(maxY * bendDir, maxX); - a2 = maxAngle * bendDir; - } - } - var os = Math.atan2(cy, cx) * s2; - var rotation = parent.arotation; - a1 = (a1 - os) * MathUtils.radDeg + os1 - rotation; - if (a1 > 180) - a1 -= 360; - else if (a1 < -180) // - a1 += 360; - parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, sy, 0, 0); - rotation = child.arotation; - a2 = ((a2 + os) * MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation; - if (a2 > 180) - a2 -= 360; - else if (a2 < -180) // - a2 += 360; - child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); - }; - return IkConstraint; - }()); + } + if (dd <= (minDist + maxDist) * 0.5) { + a1 = ta - Math.atan2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } else { + a1 = ta - Math.atan2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + let os = Math.atan2(cy, cx) * s2; + let rotation = parent.arotation; + a1 = (a1 - os) * MathUtils.radDeg + os1 - rotation; + if (a1 > 180) + a1 -= 360; + else if (a1 < -180) + a1 += 360; + parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, sy, 0, 0); + rotation = child.arotation; + a2 = ((a2 + os) * MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation; + if (a2 > 180) + a2 -= 360; + else if (a2 < -180) + a2 += 360; + child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY); + } + }; - /****************************************************************************** - * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. - * - * Copyright (c) 2013-2020, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - var __extends$4 = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - })(); - /** Stores the setup pose for an {@link IkConstraint}. - *
- * See [IK constraints](http://esotericsoftware.com/spine-ik-constraints) in the Spine User Guide. */ - var IkConstraintData = /** @class */ (function (_super) { - __extends$4(IkConstraintData, _super); - function IkConstraintData(name) { - var _this = _super.call(this, name, 0, false) || this; - /** The bones that are constrained by this IK constraint. */ - _this.bones = new Array(); - /** Controls the bend direction of the IK bones, either 1 or -1. */ - _this.bendDirection = 1; - /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */ - _this.compress = false; - /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained - * and the parent bone has local nonuniform scale, stretch is not applied. */ - _this.stretch = false; - /** When true, only a single bone is being constrained, and {@link #getCompress()} or {@link #getStretch()} is used, the bone - * is scaled on both the X and Y axes. */ - _this.uniform = false; - /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */ - _this.mix = 1; - /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */ - _this.softness = 0; - return _this; - } - return IkConstraintData; - }(ConstraintData)); + // spine-core/src/IkConstraintData.ts + var IkConstraintData = class extends ConstraintData { + constructor(name) { + super(name, 0, false); + this.bones = new Array(); + this.bendDirection = 1; + this.compress = false; + this.stretch = false; + this.uniform = false; + this.mix = 1; + this.softness = 0; + } + }; - /****************************************************************************** - * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. - * - * Copyright (c) 2013-2020, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - var __extends$3 = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; - })(); - /** Stores the setup pose for a {@link PathConstraint}. - * - * See [path constraints](http://esotericsoftware.com/spine-path-constraints) in the Spine User Guide. */ - var PathConstraintData = /** @class */ (function (_super) { - __extends$3(PathConstraintData, _super); - function PathConstraintData(name) { - var _this = _super.call(this, name, 0, false) || this; - /** The bones that will be modified by this path constraint. */ - _this.bones = new Array(); - _this.mixRotate = 0; - _this.mixX = 0; - _this.mixY = 0; - return _this; - } - return PathConstraintData; - }(ConstraintData)); - /** Controls how the first bone is positioned along the path. - * - * See [position](http://esotericsoftware.com/spine-path-constraints#Position) in the Spine User Guide. */ - exports.PositionMode = void 0; - (function (PositionMode) { - PositionMode[PositionMode["Fixed"] = 0] = "Fixed"; - PositionMode[PositionMode["Percent"] = 1] = "Percent"; - })(exports.PositionMode || (exports.PositionMode = {})); - /** Controls how bones after the first bone are positioned along the path. - * - * See [spacing](http://esotericsoftware.com/spine-path-constraints#Spacing) in the Spine User Guide. */ - exports.SpacingMode = void 0; - (function (SpacingMode) { - SpacingMode[SpacingMode["Length"] = 0] = "Length"; - SpacingMode[SpacingMode["Fixed"] = 1] = "Fixed"; - SpacingMode[SpacingMode["Percent"] = 2] = "Percent"; - SpacingMode[SpacingMode["Proportional"] = 3] = "Proportional"; - })(exports.SpacingMode || (exports.SpacingMode = {})); - /** Controls how bones are rotated, translated, and scaled to match the path. - * - * See [rotate mix](http://esotericsoftware.com/spine-path-constraints#Rotate-mix) in the Spine User Guide. */ - exports.RotateMode = void 0; - (function (RotateMode) { - RotateMode[RotateMode["Tangent"] = 0] = "Tangent"; - RotateMode[RotateMode["Chain"] = 1] = "Chain"; - RotateMode[RotateMode["ChainScale"] = 2] = "ChainScale"; - })(exports.RotateMode || (exports.RotateMode = {})); + // spine-core/src/PathConstraintData.ts + var PathConstraintData = class extends ConstraintData { + constructor(name) { + super(name, 0, false); + this.bones = new Array(); + this.mixRotate = 0; + this.mixX = 0; + this.mixY = 0; + } + }; + var PositionMode; + (function(PositionMode2) { + PositionMode2[PositionMode2["Fixed"] = 0] = "Fixed"; + PositionMode2[PositionMode2["Percent"] = 1] = "Percent"; + })(PositionMode || (PositionMode = {})); + var SpacingMode; + (function(SpacingMode2) { + SpacingMode2[SpacingMode2["Length"] = 0] = "Length"; + SpacingMode2[SpacingMode2["Fixed"] = 1] = "Fixed"; + SpacingMode2[SpacingMode2["Percent"] = 2] = "Percent"; + SpacingMode2[SpacingMode2["Proportional"] = 3] = "Proportional"; + })(SpacingMode || (SpacingMode = {})); + var RotateMode; + (function(RotateMode2) { + RotateMode2[RotateMode2["Tangent"] = 0] = "Tangent"; + RotateMode2[RotateMode2["Chain"] = 1] = "Chain"; + RotateMode2[RotateMode2["ChainScale"] = 2] = "ChainScale"; + })(RotateMode || (RotateMode = {})); - /****************************************************************************** - * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. - * - * Copyright (c) 2013-2020, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - /** Stores the current pose for a path constraint. A path constraint adjusts the rotation, translation, and scale of the - * constrained bones so they follow a {@link PathAttachment}. - * - * See [Path constraints](http://esotericsoftware.com/spine-path-constraints) in the Spine User Guide. */ - var PathConstraint = /** @class */ (function () { - function PathConstraint(data, skeleton) { - /** The position along the path. */ - this.position = 0; - /** The spacing between bones. */ - this.spacing = 0; - this.mixRotate = 0; - this.mixX = 0; - this.mixY = 0; - this.spaces = new Array(); - this.positions = new Array(); - this.world = new Array(); - this.curves = new Array(); - this.lengths = new Array(); - this.segments = new Array(); - this.active = false; - if (!data) - throw new Error("data cannot be null."); - if (!skeleton) - throw new Error("skeleton cannot be null."); - this.data = data; - this.bones = new Array(); - for (var i = 0, n = data.bones.length; i < n; i++) - this.bones.push(skeleton.findBone(data.bones[i].name)); - this.target = skeleton.findSlot(data.target.name); - this.position = data.position; - this.spacing = data.spacing; - this.mixRotate = data.mixRotate; - this.mixX = data.mixX; - this.mixY = data.mixY; + // spine-core/src/PathConstraint.ts + var _PathConstraint = class { + constructor(data, skeleton) { + this.position = 0; + this.spacing = 0; + this.mixRotate = 0; + this.mixX = 0; + this.mixY = 0; + this.spaces = new Array(); + this.positions = new Array(); + this.world = new Array(); + this.curves = new Array(); + this.lengths = new Array(); + this.segments = new Array(); + this.active = false; + if (!data) + throw new Error("data cannot be null."); + if (!skeleton) + throw new Error("skeleton cannot be null."); + this.data = data; + this.bones = new Array(); + for (let i = 0, n = data.bones.length; i < n; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findSlot(data.target.name); + this.position = data.position; + this.spacing = data.spacing; + this.mixRotate = data.mixRotate; + this.mixX = data.mixX; + this.mixY = data.mixY; + } + isActive() { + return this.active; + } + update() { + let attachment = this.target.getAttachment(); + if (!(attachment instanceof PathAttachment)) + return; + let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY; + if (mixRotate == 0 && mixX == 0 && mixY == 0) + return; + let data = this.data; + let tangents = data.rotateMode == RotateMode.Tangent, scale = data.rotateMode == RotateMode.ChainScale; + let bones = this.bones; + let boneCount = bones.length, spacesCount = tangents ? boneCount : boneCount + 1; + let spaces = Utils.setArraySize(this.spaces, spacesCount), lengths = scale ? this.lengths = Utils.setArraySize(this.lengths, boneCount) : null; + let spacing = this.spacing; + switch (data.spacingMode) { + case SpacingMode.Percent: + if (scale) { + for (let i = 0, n = spacesCount - 1; i < n; i++) { + let bone = bones[i]; + let setupLength = bone.data.length; + if (setupLength < _PathConstraint.epsilon) + lengths[i] = 0; + else { + let x = setupLength * bone.a, y = setupLength * bone.c; + lengths[i] = Math.sqrt(x * x + y * y); + } + } + } + Utils.arrayFill(spaces, 1, spacesCount, spacing); + break; + case SpacingMode.Proportional: + let sum = 0; + for (let i = 0, n = spacesCount - 1; i < n; ) { + let bone = bones[i]; + let setupLength = bone.data.length; + if (setupLength < _PathConstraint.epsilon) { + if (scale) + lengths[i] = 0; + spaces[++i] = spacing; + } else { + let x = setupLength * bone.a, y = setupLength * bone.c; + let length = Math.sqrt(x * x + y * y); + if (scale) + lengths[i] = length; + spaces[++i] = length; + sum += length; + } + } + if (sum > 0) { + sum = spacesCount / sum * spacing; + for (let i = 1; i < spacesCount; i++) + spaces[i] *= sum; + } + break; + default: + let lengthSpacing = data.spacingMode == SpacingMode.Length; + for (let i = 0, n = spacesCount - 1; i < n; ) { + let bone = bones[i]; + let setupLength = bone.data.length; + if (setupLength < _PathConstraint.epsilon) { + if (scale) + lengths[i] = 0; + spaces[++i] = spacing; + } else { + let x = setupLength * bone.a, y = setupLength * bone.c; + let length = Math.sqrt(x * x + y * y); + if (scale) + lengths[i] = length; + spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength; + } + } + } + let positions = this.computeWorldPositions(attachment, spacesCount, tangents); + let boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; + let tip = false; + if (offsetRotation == 0) + tip = data.rotateMode == RotateMode.Chain; + else { + tip = false; + let p = this.target.bone; + offsetRotation *= p.a * p.d - p.b * p.c > 0 ? MathUtils.degRad : -MathUtils.degRad; + } + for (let i = 0, p = 3; i < boneCount; i++, p += 3) { + let bone = bones[i]; + bone.worldX += (boneX - bone.worldX) * mixX; + bone.worldY += (boneY - bone.worldY) * mixY; + let x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; + if (scale) { + let length = lengths[i]; + if (length != 0) { + let s = (Math.sqrt(dx * dx + dy * dy) / length - 1) * mixRotate + 1; + bone.a *= s; + bone.c *= s; + } } - PathConstraint.prototype.isActive = function () { - return this.active; - }; - PathConstraint.prototype.update = function () { - var attachment = this.target.getAttachment(); - if (!(attachment instanceof PathAttachment)) - return; - var mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY; - if (mixRotate == 0 && mixX == 0 && mixY == 0) - return; - var data = this.data; - var tangents = data.rotateMode == exports.RotateMode.Tangent, scale = data.rotateMode == exports.RotateMode.ChainScale; - var bones = this.bones; - var boneCount = bones.length, spacesCount = tangents ? boneCount : boneCount + 1; - var spaces = Utils.setArraySize(this.spaces, spacesCount), lengths = scale ? this.lengths = Utils.setArraySize(this.lengths, boneCount) : null; - var spacing = this.spacing; - switch (data.spacingMode) { - case exports.SpacingMode.Percent: - if (scale) { - for (var i = 0, n = spacesCount - 1; i < n; i++) { - var bone = bones[i]; - var setupLength = bone.data.length; - if (setupLength < PathConstraint.epsilon) - lengths[i] = 0; - else { - var x = setupLength * bone.a, y = setupLength * bone.c; - lengths[i] = Math.sqrt(x * x + y * y); - } - } - } - Utils.arrayFill(spaces, 1, spacesCount, spacing); - break; - case exports.SpacingMode.Proportional: - var sum = 0; - for (var i = 0, n = spacesCount - 1; i < n;) { - var bone = bones[i]; - var setupLength = bone.data.length; - if (setupLength < PathConstraint.epsilon) { - if (scale) - lengths[i] = 0; - spaces[++i] = spacing; - } - else { - var x = setupLength * bone.a, y = setupLength * bone.c; - var length_1 = Math.sqrt(x * x + y * y); - if (scale) - lengths[i] = length_1; - spaces[++i] = length_1; - sum += length_1; - } - } - if (sum > 0) { - sum = spacesCount / sum * spacing; - for (var i = 1; i < spacesCount; i++) - spaces[i] *= sum; - } - break; - default: - var lengthSpacing = data.spacingMode == exports.SpacingMode.Length; - for (var i = 0, n = spacesCount - 1; i < n;) { - var bone = bones[i]; - var setupLength = bone.data.length; - if (setupLength < PathConstraint.epsilon) { - if (scale) - lengths[i] = 0; - spaces[++i] = spacing; - } - else { - var x = setupLength * bone.a, y = setupLength * bone.c; - var length_2 = Math.sqrt(x * x + y * y); - if (scale) - lengths[i] = length_2; - spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_2 / setupLength; - } - } + boneX = x; + boneY = y; + if (mixRotate > 0) { + let a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; + if (tangents) + r = positions[p - 1]; + else if (spaces[i + 1] == 0) + r = positions[p + 2]; + else + r = Math.atan2(dy, dx); + r -= Math.atan2(c, a); + if (tip) { + cos = Math.cos(r); + sin = Math.sin(r); + let length = bone.data.length; + boneX += (length * (cos * a - sin * c) - dx) * mixRotate; + boneY += (length * (sin * a + cos * c) - dy) * mixRotate; + } else { + r += offsetRotation; + } + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + r *= mixRotate; + cos = Math.cos(r); + sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + bone.updateAppliedTransform(); + } + } + computeWorldPositions(path, spacesCount, tangents) { + let target = this.target; + let position = this.position; + let spaces = this.spaces, out = Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = null; + let closed2 = path.closed; + let verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = _PathConstraint.NONE; + if (!path.constantSpeed) { + let lengths = path.lengths; + curveCount -= closed2 ? 1 : 2; + let pathLength2 = lengths[curveCount]; + if (this.data.positionMode == PositionMode.Percent) + position *= pathLength2; + let multiplier2; + switch (this.data.spacingMode) { + case SpacingMode.Percent: + multiplier2 = pathLength2; + break; + case SpacingMode.Proportional: + multiplier2 = pathLength2 / spacesCount; + break; + default: + multiplier2 = 1; + } + world = Utils.setArraySize(this.world, 8); + for (let i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { + let space = spaces[i] * multiplier2; + position += space; + let p = position; + if (closed2) { + p %= pathLength2; + if (p < 0) + p += pathLength2; + curve = 0; + } else if (p < 0) { + if (prevCurve != _PathConstraint.BEFORE) { + prevCurve = _PathConstraint.BEFORE; + path.computeWorldVertices(target, 2, 4, world, 0, 2); } - var positions = this.computeWorldPositions(attachment, spacesCount, tangents); - var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation; - var tip = false; - if (offsetRotation == 0) - tip = data.rotateMode == exports.RotateMode.Chain; + this.addBeforePosition(p, world, 0, out, o); + continue; + } else if (p > pathLength2) { + if (prevCurve != _PathConstraint.AFTER) { + prevCurve = _PathConstraint.AFTER; + path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2); + } + this.addAfterPosition(p - pathLength2, world, 0, out, o); + continue; + } + for (; ; curve++) { + let length = lengths[curve]; + if (p > length) + continue; + if (curve == 0) + p /= length; else { - tip = false; - var p = this.target.bone; - offsetRotation *= p.a * p.d - p.b * p.c > 0 ? MathUtils.degRad : -MathUtils.degRad; + let prev = lengths[curve - 1]; + p = (p - prev) / (length - prev); } - for (var i = 0, p = 3; i < boneCount; i++, p += 3) { - var bone = bones[i]; - bone.worldX += (boneX - bone.worldX) * mixX; - bone.worldY += (boneY - bone.worldY) * mixY; - var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; - if (scale) { - var length_3 = lengths[i]; - if (length_3 != 0) { - var s = (Math.sqrt(dx * dx + dy * dy) / length_3 - 1) * mixRotate + 1; - bone.a *= s; - bone.c *= s; - } - } - boneX = x; - boneY = y; - if (mixRotate > 0) { - var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0; - if (tangents) - r = positions[p - 1]; - else if (spaces[i + 1] == 0) - r = positions[p + 2]; - else - r = Math.atan2(dy, dx); - r -= Math.atan2(c, a); - if (tip) { - cos = Math.cos(r); - sin = Math.sin(r); - var length_4 = bone.data.length; - boneX += (length_4 * (cos * a - sin * c) - dx) * mixRotate; - boneY += (length_4 * (sin * a + cos * c) - dy) * mixRotate; - } - else { - r += offsetRotation; - } - if (r > MathUtils.PI) - r -= MathUtils.PI2; - else if (r < -MathUtils.PI) // - r += MathUtils.PI2; - r *= mixRotate; - cos = Math.cos(r); - sin = Math.sin(r); - bone.a = cos * a - sin * c; - bone.b = cos * b - sin * d; - bone.c = sin * a + cos * c; - bone.d = sin * b + cos * d; - } - bone.updateAppliedTransform(); - } - }; - PathConstraint.prototype.computeWorldPositions = function (path, spacesCount, tangents) { - var target = this.target; - var position = this.position; - var spaces = this.spaces, out = Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = null; - var closed = path.closed; - var verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE; - if (!path.constantSpeed) { - var lengths = path.lengths; - curveCount -= closed ? 1 : 2; - var pathLength_1 = lengths[curveCount]; - if (this.data.positionMode == exports.PositionMode.Percent) - position *= pathLength_1; - var multiplier_1; - switch (this.data.spacingMode) { - case exports.SpacingMode.Percent: - multiplier_1 = pathLength_1; - break; - case exports.SpacingMode.Proportional: - multiplier_1 = pathLength_1 / spacesCount; - break; - default: - multiplier_1 = 1; - } - world = Utils.setArraySize(this.world, 8); - for (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { - var space = spaces[i] * multiplier_1; - position += space; - var p = position; - if (closed) { - p %= pathLength_1; - if (p < 0) - p += pathLength_1; - curve = 0; - } - else if (p < 0) { - if (prevCurve != PathConstraint.BEFORE) { - prevCurve = PathConstraint.BEFORE; - path.computeWorldVertices(target, 2, 4, world, 0, 2); - } - this.addBeforePosition(p, world, 0, out, o); - continue; - } - else if (p > pathLength_1) { - if (prevCurve != PathConstraint.AFTER) { - prevCurve = PathConstraint.AFTER; - path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2); - } - this.addAfterPosition(p - pathLength_1, world, 0, out, o); - continue; - } - // Determine curve containing position. - for (;; curve++) { - var length_5 = lengths[curve]; - if (p > length_5) - continue; - if (curve == 0) - p /= length_5; - else { - var prev = lengths[curve - 1]; - p = (p - prev) / (length_5 - prev); - } - break; - } - if (curve != prevCurve) { - prevCurve = curve; - if (closed && curve == curveCount) { - path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2); - path.computeWorldVertices(target, 0, 4, world, 4, 2); - } - else - path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2); - } - this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || (i > 0 && space == 0)); - } - return out; - } - // World vertices. - if (closed) { - verticesLength += 2; - world = Utils.setArraySize(this.world, verticesLength); - path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2); - path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2); - world[verticesLength - 2] = world[0]; - world[verticesLength - 1] = world[1]; - } - else { - curveCount--; - verticesLength -= 4; - world = Utils.setArraySize(this.world, verticesLength); - path.computeWorldVertices(target, 2, verticesLength, world, 0, 2); - } - // Curve lengths. - var curves = Utils.setArraySize(this.curves, curveCount); - var pathLength = 0; - var x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; - var tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0; - for (var i = 0, w = 2; i < curveCount; i++, w += 6) { - cx1 = world[w]; - cy1 = world[w + 1]; - cx2 = world[w + 2]; - cy2 = world[w + 3]; - x2 = world[w + 4]; - y2 = world[w + 5]; - tmpx = (x1 - cx1 * 2 + cx2) * 0.1875; - tmpy = (y1 - cy1 * 2 + cy2) * 0.1875; - dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375; - dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375; - ddfx = tmpx * 2 + dddfx; - ddfy = tmpy * 2 + dddfy; - dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667; - dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667; - pathLength += Math.sqrt(dfx * dfx + dfy * dfy); - dfx += ddfx; - dfy += ddfy; - ddfx += dddfx; - ddfy += dddfy; - pathLength += Math.sqrt(dfx * dfx + dfy * dfy); - dfx += ddfx; - dfy += ddfy; - pathLength += Math.sqrt(dfx * dfx + dfy * dfy); - dfx += ddfx + dddfx; - dfy += ddfy + dddfy; - pathLength += Math.sqrt(dfx * dfx + dfy * dfy); - curves[i] = pathLength; - x1 = x2; - y1 = y2; - } - if (this.data.positionMode == exports.PositionMode.Percent) - position *= pathLength; - var multiplier; - switch (this.data.spacingMode) { - case exports.SpacingMode.Percent: - multiplier = pathLength; - break; - case exports.SpacingMode.Proportional: - multiplier = pathLength / spacesCount; - break; - default: - multiplier = 1; - } - var segments = this.segments; - var curveLength = 0; - for (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { - var space = spaces[i] * multiplier; - position += space; - var p = position; - if (closed) { - p %= pathLength; - if (p < 0) - p += pathLength; - curve = 0; - } - else if (p < 0) { - this.addBeforePosition(p, world, 0, out, o); - continue; - } - else if (p > pathLength) { - this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); - continue; - } - // Determine curve containing position. - for (;; curve++) { - var length_6 = curves[curve]; - if (p > length_6) - continue; - if (curve == 0) - p /= length_6; - else { - var prev = curves[curve - 1]; - p = (p - prev) / (length_6 - prev); - } - break; - } - // Curve segment lengths. - if (curve != prevCurve) { - prevCurve = curve; - var ii = curve * 6; - x1 = world[ii]; - y1 = world[ii + 1]; - cx1 = world[ii + 2]; - cy1 = world[ii + 3]; - cx2 = world[ii + 4]; - cy2 = world[ii + 5]; - x2 = world[ii + 6]; - y2 = world[ii + 7]; - tmpx = (x1 - cx1 * 2 + cx2) * 0.03; - tmpy = (y1 - cy1 * 2 + cy2) * 0.03; - dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006; - dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006; - ddfx = tmpx * 2 + dddfx; - ddfy = tmpy * 2 + dddfy; - dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667; - dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667; - curveLength = Math.sqrt(dfx * dfx + dfy * dfy); - segments[0] = curveLength; - for (ii = 1; ii < 8; ii++) { - dfx += ddfx; - dfy += ddfy; - ddfx += dddfx; - ddfy += dddfy; - curveLength += Math.sqrt(dfx * dfx + dfy * dfy); - segments[ii] = curveLength; - } - dfx += ddfx; - dfy += ddfy; - curveLength += Math.sqrt(dfx * dfx + dfy * dfy); - segments[8] = curveLength; - dfx += ddfx + dddfx; - dfy += ddfy + dddfy; - curveLength += Math.sqrt(dfx * dfx + dfy * dfy); - segments[9] = curveLength; - segment = 0; - } - // Weight by segment length. - p *= curveLength; - for (;; segment++) { - var length_7 = segments[segment]; - if (p > length_7) - continue; - if (segment == 0) - p /= length_7; - else { - var prev = segments[segment - 1]; - p = segment + (p - prev) / (length_7 - prev); - } - break; - } - this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0)); - } - return out; - }; - PathConstraint.prototype.addBeforePosition = function (p, temp, i, out, o) { - var x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx); - out[o] = x1 + p * Math.cos(r); - out[o + 1] = y1 + p * Math.sin(r); - out[o + 2] = r; - }; - PathConstraint.prototype.addAfterPosition = function (p, temp, i, out, o) { - var x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx); - out[o] = x1 + p * Math.cos(r); - out[o + 1] = y1 + p * Math.sin(r); - out[o + 2] = r; - }; - PathConstraint.prototype.addCurvePosition = function (p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) { - if (p == 0 || isNaN(p)) { - out[o] = x1; - out[o + 1] = y1; - out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); - return; - } - var tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; - var ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; - var x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; - out[o] = x; - out[o + 1] = y; - if (tangents) { - if (p < 0.001) - out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); - else - out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); - } - }; - PathConstraint.NONE = -1; - PathConstraint.BEFORE = -2; - PathConstraint.AFTER = -3; - PathConstraint.epsilon = 0.00001; - return PathConstraint; - }()); + break; + } + if (curve != prevCurve) { + prevCurve = curve; + if (closed2 && curve == curveCount) { + path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2); + path.computeWorldVertices(target, 0, 4, world, 4, 2); + } else + path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2); + } + this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || i > 0 && space == 0); + } + return out; + } + if (closed2) { + verticesLength += 2; + world = Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2); + path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2); + world[verticesLength - 2] = world[0]; + world[verticesLength - 1] = world[1]; + } else { + curveCount--; + verticesLength -= 4; + world = Utils.setArraySize(this.world, verticesLength); + path.computeWorldVertices(target, 2, verticesLength, world, 0, 2); + } + let curves = Utils.setArraySize(this.curves, curveCount); + let pathLength = 0; + let x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; + let tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0; + for (let i = 0, w = 2; i < curveCount; i++, w += 6) { + cx1 = world[w]; + cy1 = world[w + 1]; + cx2 = world[w + 2]; + cy2 = world[w + 3]; + x2 = world[w + 4]; + y2 = world[w + 5]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.1875; + tmpy = (y1 - cy1 * 2 + cy2) * 0.1875; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx; + dfy += ddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + pathLength += Math.sqrt(dfx * dfx + dfy * dfy); + curves[i] = pathLength; + x1 = x2; + y1 = y2; + } + if (this.data.positionMode == PositionMode.Percent) + position *= pathLength; + let multiplier; + switch (this.data.spacingMode) { + case SpacingMode.Percent: + multiplier = pathLength; + break; + case SpacingMode.Proportional: + multiplier = pathLength / spacesCount; + break; + default: + multiplier = 1; + } + let segments = this.segments; + let curveLength = 0; + for (let i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { + let space = spaces[i] * multiplier; + position += space; + let p = position; + if (closed2) { + p %= pathLength; + if (p < 0) + p += pathLength; + curve = 0; + } else if (p < 0) { + this.addBeforePosition(p, world, 0, out, o); + continue; + } else if (p > pathLength) { + this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); + continue; + } + for (; ; curve++) { + let length = curves[curve]; + if (p > length) + continue; + if (curve == 0) + p /= length; + else { + let prev = curves[curve - 1]; + p = (p - prev) / (length - prev); + } + break; + } + if (curve != prevCurve) { + prevCurve = curve; + let ii = curve * 6; + x1 = world[ii]; + y1 = world[ii + 1]; + cx1 = world[ii + 2]; + cy1 = world[ii + 3]; + cx2 = world[ii + 4]; + cy2 = world[ii + 5]; + x2 = world[ii + 6]; + y2 = world[ii + 7]; + tmpx = (x1 - cx1 * 2 + cx2) * 0.03; + tmpy = (y1 - cy1 * 2 + cy2) * 0.03; + dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 6e-3; + dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 6e-3; + ddfx = tmpx * 2 + dddfx; + ddfy = tmpy * 2 + dddfy; + dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667; + dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667; + curveLength = Math.sqrt(dfx * dfx + dfy * dfy); + segments[0] = curveLength; + for (ii = 1; ii < 8; ii++) { + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[ii] = curveLength; + } + dfx += ddfx; + dfy += ddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[8] = curveLength; + dfx += ddfx + dddfx; + dfy += ddfy + dddfy; + curveLength += Math.sqrt(dfx * dfx + dfy * dfy); + segments[9] = curveLength; + segment = 0; + } + p *= curveLength; + for (; ; segment++) { + let length = segments[segment]; + if (p > length) + continue; + if (segment == 0) + p /= length; + else { + let prev = segments[segment - 1]; + p = segment + (p - prev) / (length - prev); + } + break; + } + this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || i > 0 && space == 0); + } + return out; + } + addBeforePosition(p, temp, i, out, o) { + let x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + } + addAfterPosition(p, temp, i, out, o) { + let x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx); + out[o] = x1 + p * Math.cos(r); + out[o + 1] = y1 + p * Math.sin(r); + out[o + 2] = r; + } + addCurvePosition(p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) { + if (p == 0 || isNaN(p)) { + out[o] = x1; + out[o + 1] = y1; + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + return; + } + let tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; + let ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; + let x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; + out[o] = x; + out[o + 1] = y; + if (tangents) { + if (p < 1e-3) + out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1); + else + out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); + } + } + }; + var PathConstraint = _PathConstraint; + PathConstraint.NONE = -1; + PathConstraint.BEFORE = -2; + PathConstraint.AFTER = -3; + PathConstraint.epsilon = 1e-5; - /****************************************************************************** - * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. - * - * Copyright (c) 2013-2020, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - /** Stores a slot's current pose. Slots organize attachments for {@link Skeleton#drawOrder} purposes and provide a place to store - * state for an attachment. State cannot be stored in an attachment itself because attachments are stateless and may be shared - * across multiple skeletons. */ - var Slot = /** @class */ (function () { - function Slot(data, bone) { - /** Values to deform the slot's attachment. For an unweighted mesh, the entries are local positions for each vertex. For a - * weighted mesh, the entries are an offset for each vertex which will be added to the mesh's local vertex positions. - * - * See {@link VertexAttachment#computeWorldVertices()} and {@link DeformTimeline}. */ - this.deform = new Array(); - if (!data) - throw new Error("data cannot be null."); - if (!bone) - throw new Error("bone cannot be null."); - this.data = data; - this.bone = bone; - this.color = new Color(); - this.darkColor = !data.darkColor ? null : new Color(); - this.setToSetupPose(); - } - /** The skeleton this slot belongs to. */ - Slot.prototype.getSkeleton = function () { - return this.bone.skeleton; - }; - /** The current attachment for the slot, or null if the slot has no attachment. */ - Slot.prototype.getAttachment = function () { - return this.attachment; - }; - /** Sets the slot's attachment and, if the attachment changed, resets {@link #attachmentTime} and clears the {@link #deform}. - * The deform is not cleared if the old attachment has the same {@link VertexAttachment#getDeformAttachment()} as the specified - * attachment. - * @param attachment May be null. */ - Slot.prototype.setAttachment = function (attachment) { - if (this.attachment == attachment) - return; - if (!(attachment instanceof VertexAttachment) || !(this.attachment instanceof VertexAttachment) - || attachment.deformAttachment != this.attachment.deformAttachment) { - this.deform.length = 0; - } - this.attachment = attachment; - this.attachmentTime = this.bone.skeleton.time; - }; - Slot.prototype.setAttachmentTime = function (time) { - this.attachmentTime = this.bone.skeleton.time - time; - }; - /** The time that has elapsed since the last time the attachment was set or cleared. Relies on Skeleton - * {@link Skeleton#time}. */ - Slot.prototype.getAttachmentTime = function () { - return this.bone.skeleton.time - this.attachmentTime; - }; - /** Sets this slot to the setup pose. */ - Slot.prototype.setToSetupPose = function () { - this.color.setFromColor(this.data.color); - if (this.darkColor) - this.darkColor.setFromColor(this.data.darkColor); - if (!this.data.attachmentName) - this.attachment = null; - else { - this.attachment = null; - this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)); - } - }; - return Slot; - }()); + // spine-core/src/Slot.ts + var Slot = class { + constructor(data, bone) { + this.deform = new Array(); + if (!data) + throw new Error("data cannot be null."); + if (!bone) + throw new Error("bone cannot be null."); + this.data = data; + this.bone = bone; + this.color = new Color(); + this.darkColor = !data.darkColor ? null : new Color(); + this.setToSetupPose(); + } + getSkeleton() { + return this.bone.skeleton; + } + getAttachment() { + return this.attachment; + } + setAttachment(attachment) { + if (this.attachment == attachment) + return; + if (!(attachment instanceof VertexAttachment) || !(this.attachment instanceof VertexAttachment) || attachment.deformAttachment != this.attachment.deformAttachment) { + this.deform.length = 0; + } + this.attachment = attachment; + this.attachmentTime = this.bone.skeleton.time; + } + setAttachmentTime(time) { + this.attachmentTime = this.bone.skeleton.time - time; + } + getAttachmentTime() { + return this.bone.skeleton.time - this.attachmentTime; + } + setToSetupPose() { + this.color.setFromColor(this.data.color); + if (this.darkColor) + this.darkColor.setFromColor(this.data.darkColor); + if (!this.data.attachmentName) + this.attachment = null; + else { + this.attachment = null; + this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName)); + } + } + }; - /****************************************************************************** - * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. - * - * Copyright (c) 2013-2020, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - /** Stores the current pose for a transform constraint. A transform constraint adjusts the world transform of the constrained - * bones to match that of the target bone. - * - * See [Transform constraints](http://esotericsoftware.com/spine-transform-constraints) in the Spine User Guide. */ - var TransformConstraint = /** @class */ (function () { - function TransformConstraint(data, skeleton) { - this.mixRotate = 0; - this.mixX = 0; - this.mixY = 0; - this.mixScaleX = 0; - this.mixScaleY = 0; - this.mixShearY = 0; - this.temp = new Vector2(); - this.active = false; - if (!data) - throw new Error("data cannot be null."); - if (!skeleton) - throw new Error("skeleton cannot be null."); - this.data = data; - this.mixRotate = data.mixRotate; - this.mixX = data.mixX; - this.mixY = data.mixY; - this.mixScaleX = data.mixScaleX; - this.mixScaleY = data.mixScaleY; - this.mixShearY = data.mixShearY; - this.bones = new Array(); - for (var i = 0; i < data.bones.length; i++) - this.bones.push(skeleton.findBone(data.bones[i].name)); - this.target = skeleton.findBone(data.target.name); + // spine-core/src/TransformConstraint.ts + var TransformConstraint = class { + constructor(data, skeleton) { + this.mixRotate = 0; + this.mixX = 0; + this.mixY = 0; + this.mixScaleX = 0; + this.mixScaleY = 0; + this.mixShearY = 0; + this.temp = new Vector2(); + this.active = false; + if (!data) + throw new Error("data cannot be null."); + if (!skeleton) + throw new Error("skeleton cannot be null."); + this.data = data; + this.mixRotate = data.mixRotate; + this.mixX = data.mixX; + this.mixY = data.mixY; + this.mixScaleX = data.mixScaleX; + this.mixScaleY = data.mixScaleY; + this.mixShearY = data.mixShearY; + this.bones = new Array(); + for (let i = 0; i < data.bones.length; i++) + this.bones.push(skeleton.findBone(data.bones[i].name)); + this.target = skeleton.findBone(data.target.name); + } + isActive() { + return this.active; + } + update() { + if (this.mixRotate == 0 && this.mixX == 0 && this.mixY == 0 && this.mixScaleX == 0 && this.mixScaleX == 0 && this.mixShearY == 0) + return; + if (this.data.local) { + if (this.data.relative) + this.applyRelativeLocal(); + else + this.applyAbsoluteLocal(); + } else { + if (this.data.relative) + this.applyRelativeWorld(); + else + this.applyAbsoluteWorld(); + } + } + applyAbsoluteWorld() { + let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY; + let translate = mixX != 0 || mixY != 0; + let target = this.target; + let ta = target.a, tb = target.b, tc = target.c, td = target.d; + let degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad; + let offsetRotation = this.data.offsetRotation * degRadReflect; + let offsetShearY = this.data.offsetShearY * degRadReflect; + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (mixRotate != 0) { + let a = bone.a, b = bone.b, c = bone.c, d = bone.d; + let r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + r *= mixRotate; + let cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; } - TransformConstraint.prototype.isActive = function () { - return this.active; - }; - TransformConstraint.prototype.update = function () { - if (this.mixRotate == 0 && this.mixX == 0 && this.mixY == 0 && this.mixScaleX == 0 && this.mixScaleX == 0 && this.mixShearY == 0) - return; - if (this.data.local) { - if (this.data.relative) - this.applyRelativeLocal(); - else - this.applyAbsoluteLocal(); - } - else { - if (this.data.relative) - this.applyRelativeWorld(); - else - this.applyAbsoluteWorld(); - } - }; - TransformConstraint.prototype.applyAbsoluteWorld = function () { - var mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY; - var translate = mixX != 0 || mixY != 0; - var target = this.target; - var ta = target.a, tb = target.b, tc = target.c, td = target.d; - var degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad; - var offsetRotation = this.data.offsetRotation * degRadReflect; - var offsetShearY = this.data.offsetShearY * degRadReflect; - var bones = this.bones; - for (var i = 0, n = bones.length; i < n; i++) { - var bone = bones[i]; - if (mixRotate != 0) { - var a = bone.a, b = bone.b, c = bone.c, d = bone.d; - var r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation; - if (r > MathUtils.PI) - r -= MathUtils.PI2; - else if (r < -MathUtils.PI) // - r += MathUtils.PI2; - r *= mixRotate; - var cos = Math.cos(r), sin = Math.sin(r); - bone.a = cos * a - sin * c; - bone.b = cos * b - sin * d; - bone.c = sin * a + cos * c; - bone.d = sin * b + cos * d; - } - if (translate) { - var temp = this.temp; - target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); - bone.worldX += (temp.x - bone.worldX) * mixX; - bone.worldY += (temp.y - bone.worldY) * mixY; - } - if (mixScaleX != 0) { - var s = Math.sqrt(bone.a * bone.a + bone.c * bone.c); - if (s != 0) - s = (s + (Math.sqrt(ta * ta + tc * tc) - s + this.data.offsetScaleX) * mixScaleX) / s; - bone.a *= s; - bone.c *= s; - } - if (mixScaleY != 0) { - var s = Math.sqrt(bone.b * bone.b + bone.d * bone.d); - if (s != 0) - s = (s + (Math.sqrt(tb * tb + td * td) - s + this.data.offsetScaleY) * mixScaleY) / s; - bone.b *= s; - bone.d *= s; - } - if (mixShearY > 0) { - var b = bone.b, d = bone.d; - var by = Math.atan2(d, b); - var r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); - if (r > MathUtils.PI) - r -= MathUtils.PI2; - else if (r < -MathUtils.PI) // - r += MathUtils.PI2; - r = by + (r + offsetShearY) * mixShearY; - var s = Math.sqrt(b * b + d * d); - bone.b = Math.cos(r) * s; - bone.d = Math.sin(r) * s; - } - bone.updateAppliedTransform(); - } - }; - TransformConstraint.prototype.applyRelativeWorld = function () { - var mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY; - var translate = mixX != 0 || mixY != 0; - var target = this.target; - var ta = target.a, tb = target.b, tc = target.c, td = target.d; - var degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad; - var offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect; - var bones = this.bones; - for (var i = 0, n = bones.length; i < n; i++) { - var bone = bones[i]; - if (mixRotate != 0) { - var a = bone.a, b = bone.b, c = bone.c, d = bone.d; - var r = Math.atan2(tc, ta) + offsetRotation; - if (r > MathUtils.PI) - r -= MathUtils.PI2; - else if (r < -MathUtils.PI) // - r += MathUtils.PI2; - r *= mixRotate; - var cos = Math.cos(r), sin = Math.sin(r); - bone.a = cos * a - sin * c; - bone.b = cos * b - sin * d; - bone.c = sin * a + cos * c; - bone.d = sin * b + cos * d; - } - if (translate) { - var temp = this.temp; - target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); - bone.worldX += temp.x * mixX; - bone.worldY += temp.y * mixY; - } - if (mixScaleX != 0) { - var s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * mixScaleX + 1; - bone.a *= s; - bone.c *= s; - } - if (mixScaleY != 0) { - var s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * mixScaleY + 1; - bone.b *= s; - bone.d *= s; - } - if (mixShearY > 0) { - var r = Math.atan2(td, tb) - Math.atan2(tc, ta); - if (r > MathUtils.PI) - r -= MathUtils.PI2; - else if (r < -MathUtils.PI) // - r += MathUtils.PI2; - var b = bone.b, d = bone.d; - r = Math.atan2(d, b) + (r - MathUtils.PI / 2 + offsetShearY) * mixShearY; - var s = Math.sqrt(b * b + d * d); - bone.b = Math.cos(r) * s; - bone.d = Math.sin(r) * s; - } - bone.updateAppliedTransform(); - } - }; - TransformConstraint.prototype.applyAbsoluteLocal = function () { - var mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY; - var target = this.target; - var bones = this.bones; - for (var i = 0, n = bones.length; i < n; i++) { - var bone = bones[i]; - var rotation = bone.arotation; - if (mixRotate != 0) { - var r = target.arotation - rotation + this.data.offsetRotation; - r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; - rotation += r * mixRotate; - } - var x = bone.ax, y = bone.ay; - x += (target.ax - x + this.data.offsetX) * mixX; - y += (target.ay - y + this.data.offsetY) * mixY; - var scaleX = bone.ascaleX, scaleY = bone.ascaleY; - if (mixScaleX != 0 && scaleX != 0) - scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * mixScaleX) / scaleX; - if (mixScaleY != 0 && scaleY != 0) - scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * mixScaleY) / scaleY; - var shearY = bone.ashearY; - if (mixShearY != 0) { - var r = target.ashearY - shearY + this.data.offsetShearY; - r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360; - shearY += r * mixShearY; - } - bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); - } - }; - TransformConstraint.prototype.applyRelativeLocal = function () { - var mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY; - var target = this.target; - var bones = this.bones; - for (var i = 0, n = bones.length; i < n; i++) { - var bone = bones[i]; - var rotation = bone.arotation + (target.arotation + this.data.offsetRotation) * mixRotate; - var x = bone.ax + (target.ax + this.data.offsetX) * mixX; - var y = bone.ay + (target.ay + this.data.offsetY) * mixY; - var scaleX = (bone.ascaleX * ((target.ascaleX - 1 + this.data.offsetScaleX) * mixScaleX) + 1); - var scaleY = (bone.ascaleY * ((target.ascaleY - 1 + this.data.offsetScaleY) * mixScaleY) + 1); - var shearY = bone.ashearY + (target.ashearY + this.data.offsetShearY) * mixShearY; - bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); - } - }; - return TransformConstraint; - }()); + if (translate) { + let temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += (temp.x - bone.worldX) * mixX; + bone.worldY += (temp.y - bone.worldY) * mixY; + } + if (mixScaleX != 0) { + let s = Math.sqrt(bone.a * bone.a + bone.c * bone.c); + if (s != 0) + s = (s + (Math.sqrt(ta * ta + tc * tc) - s + this.data.offsetScaleX) * mixScaleX) / s; + bone.a *= s; + bone.c *= s; + } + if (mixScaleY != 0) { + let s = Math.sqrt(bone.b * bone.b + bone.d * bone.d); + if (s != 0) + s = (s + (Math.sqrt(tb * tb + td * td) - s + this.data.offsetScaleY) * mixScaleY) / s; + bone.b *= s; + bone.d *= s; + } + if (mixShearY > 0) { + let b = bone.b, d = bone.d; + let by = Math.atan2(d, b); + let r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a)); + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + r = by + (r + offsetShearY) * mixShearY; + let s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + } + bone.updateAppliedTransform(); + } + } + applyRelativeWorld() { + let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY; + let translate = mixX != 0 || mixY != 0; + let target = this.target; + let ta = target.a, tb = target.b, tc = target.c, td = target.d; + let degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad; + let offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect; + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + if (mixRotate != 0) { + let a = bone.a, b = bone.b, c = bone.c, d = bone.d; + let r = Math.atan2(tc, ta) + offsetRotation; + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + r *= mixRotate; + let cos = Math.cos(r), sin = Math.sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + if (translate) { + let temp = this.temp; + target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY)); + bone.worldX += temp.x * mixX; + bone.worldY += temp.y * mixY; + } + if (mixScaleX != 0) { + let s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * mixScaleX + 1; + bone.a *= s; + bone.c *= s; + } + if (mixScaleY != 0) { + let s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * mixScaleY + 1; + bone.b *= s; + bone.d *= s; + } + if (mixShearY > 0) { + let r = Math.atan2(td, tb) - Math.atan2(tc, ta); + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) + r += MathUtils.PI2; + let b = bone.b, d = bone.d; + r = Math.atan2(d, b) + (r - MathUtils.PI / 2 + offsetShearY) * mixShearY; + let s = Math.sqrt(b * b + d * d); + bone.b = Math.cos(r) * s; + bone.d = Math.sin(r) * s; + } + bone.updateAppliedTransform(); + } + } + applyAbsoluteLocal() { + let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY; + let target = this.target; + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + let rotation = bone.arotation; + if (mixRotate != 0) { + let r = target.arotation - rotation + this.data.offsetRotation; + r -= (16384 - (16384.499999999996 - r / 360 | 0)) * 360; + rotation += r * mixRotate; + } + let x = bone.ax, y = bone.ay; + x += (target.ax - x + this.data.offsetX) * mixX; + y += (target.ay - y + this.data.offsetY) * mixY; + let scaleX = bone.ascaleX, scaleY = bone.ascaleY; + if (mixScaleX != 0 && scaleX != 0) + scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * mixScaleX) / scaleX; + if (mixScaleY != 0 && scaleY != 0) + scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * mixScaleY) / scaleY; + let shearY = bone.ashearY; + if (mixShearY != 0) { + let r = target.ashearY - shearY + this.data.offsetShearY; + r -= (16384 - (16384.499999999996 - r / 360 | 0)) * 360; + shearY += r * mixShearY; + } + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + } + applyRelativeLocal() { + let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY; + let target = this.target; + let bones = this.bones; + for (let i = 0, n = bones.length; i < n; i++) { + let bone = bones[i]; + let rotation = bone.arotation + (target.arotation + this.data.offsetRotation) * mixRotate; + let x = bone.ax + (target.ax + this.data.offsetX) * mixX; + let y = bone.ay + (target.ay + this.data.offsetY) * mixY; + let scaleX = bone.ascaleX * ((target.ascaleX - 1 + this.data.offsetScaleX) * mixScaleX) + 1; + let scaleY = bone.ascaleY * ((target.ascaleY - 1 + this.data.offsetScaleY) * mixScaleY) + 1; + let shearY = bone.ashearY + (target.ashearY + this.data.offsetShearY) * mixShearY; + bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY); + } + } + }; - /****************************************************************************** - * Spine Runtimes License Agreement - * Last updated January 1, 2020. Replaces all prior versions. - * - * Copyright (c) 2013-2020, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - /** Stores the current pose for a skeleton. - * - * See [Instance objects](http://esotericsoftware.com/spine-runtime-architecture#Instance-objects) in the Spine Runtimes Guide. */ - var Skeleton = /** @class */ (function () { - function Skeleton(data) { - /** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link #updateCache()}. */ - this._updateCache = new Array(); - /** Returns the skeleton's time. This can be used for tracking, such as with Slot {@link Slot#attachmentTime}. - *
- * See {@link #update()}. */
- this.time = 0;
- /** Scales the entire skeleton on the X axis. This affects all bones, even if the bone's transform mode disallows scale
- * inheritance. */
- this.scaleX = 1;
- /** Scales the entire skeleton on the Y axis. This affects all bones, even if the bone's transform mode disallows scale
- * inheritance. */
- this.scaleY = 1;
- /** Sets the skeleton X position, which is added to the root bone worldX position. */
- this.x = 0;
- /** Sets the skeleton Y position, which is added to the root bone worldY position. */
- this.y = 0;
- if (!data)
- throw new Error("data cannot be null.");
- this.data = data;
- this.bones = new Array();
- for (var i = 0; i < data.bones.length; i++) {
- var boneData = data.bones[i];
- var bone = void 0;
- if (!boneData.parent)
- bone = new Bone(boneData, this, null);
- else {
- var parent_1 = this.bones[boneData.parent.index];
- bone = new Bone(boneData, this, parent_1);
- parent_1.children.push(bone);
- }
- this.bones.push(bone);
- }
- this.slots = new Array();
- this.drawOrder = new Array();
- for (var i = 0; i < data.slots.length; i++) {
- var slotData = data.slots[i];
- var bone = this.bones[slotData.boneData.index];
- var slot = new Slot(slotData, bone);
- this.slots.push(slot);
- this.drawOrder.push(slot);
- }
- this.ikConstraints = new Array();
- for (var i = 0; i < data.ikConstraints.length; i++) {
- var ikConstraintData = data.ikConstraints[i];
- this.ikConstraints.push(new IkConstraint(ikConstraintData, this));
- }
- this.transformConstraints = new Array();
- for (var i = 0; i < data.transformConstraints.length; i++) {
- var transformConstraintData = data.transformConstraints[i];
- this.transformConstraints.push(new TransformConstraint(transformConstraintData, this));
- }
- this.pathConstraints = new Array();
- for (var i = 0; i < data.pathConstraints.length; i++) {
- var pathConstraintData = data.pathConstraints[i];
- this.pathConstraints.push(new PathConstraint(pathConstraintData, this));
- }
- this.color = new Color(1, 1, 1, 1);
- this.updateCache();
+ // spine-core/src/Skeleton.ts
+ var Skeleton = class {
+ constructor(data) {
+ this._updateCache = new Array();
+ this.time = 0;
+ this.scaleX = 1;
+ this.scaleY = 1;
+ this.x = 0;
+ this.y = 0;
+ if (!data)
+ throw new Error("data cannot be null.");
+ this.data = data;
+ this.bones = new Array();
+ for (let i = 0; i < data.bones.length; i++) {
+ let boneData = data.bones[i];
+ let bone;
+ if (!boneData.parent)
+ bone = new Bone(boneData, this, null);
+ else {
+ let parent = this.bones[boneData.parent.index];
+ bone = new Bone(boneData, this, parent);
+ parent.children.push(bone);
}
- /** Caches information about bones and constraints. Must be called if the {@link #getSkin()} is modified or if bones,
- * constraints, or weighted path attachments are added or removed. */
- Skeleton.prototype.updateCache = function () {
- var updateCache = this._updateCache;
- updateCache.length = 0;
- var bones = this.bones;
- for (var i = 0, n = bones.length; i < n; i++) {
- var bone = bones[i];
- bone.sorted = bone.data.skinRequired;
- bone.active = !bone.sorted;
- }
- if (this.skin) {
- var skinBones = this.skin.bones;
- for (var i = 0, n = this.skin.bones.length; i < n; i++) {
- var bone = this.bones[skinBones[i].index];
- do {
- bone.sorted = false;
- bone.active = true;
- bone = bone.parent;
- } while (bone);
- }
- }
- // IK first, lowest hierarchy depth first.
- var ikConstraints = this.ikConstraints;
- var transformConstraints = this.transformConstraints;
- var pathConstraints = this.pathConstraints;
- var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length;
- var constraintCount = ikCount + transformCount + pathCount;
- outer: for (var i = 0; i < constraintCount; i++) {
- for (var ii = 0; ii < ikCount; ii++) {
- var constraint = ikConstraints[ii];
- if (constraint.data.order == i) {
- this.sortIkConstraint(constraint);
- continue outer;
- }
- }
- for (var ii = 0; ii < transformCount; ii++) {
- var constraint = transformConstraints[ii];
- if (constraint.data.order == i) {
- this.sortTransformConstraint(constraint);
- continue outer;
- }
- }
- for (var ii = 0; ii < pathCount; ii++) {
- var constraint = pathConstraints[ii];
- if (constraint.data.order == i) {
- this.sortPathConstraint(constraint);
- continue outer;
- }
- }
- }
- for (var i = 0, n = bones.length; i < n; i++)
- this.sortBone(bones[i]);
- };
- Skeleton.prototype.sortIkConstraint = function (constraint) {
- constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));
- if (!constraint.active)
- return;
- var target = constraint.target;
- this.sortBone(target);
- var constrained = constraint.bones;
- var parent = constrained[0];
- this.sortBone(parent);
- if (constrained.length == 1) {
- this._updateCache.push(constraint);
- this.sortReset(parent.children);
- }
- else {
- var child = constrained[constrained.length - 1];
- this.sortBone(child);
- this._updateCache.push(constraint);
- this.sortReset(parent.children);
- child.sorted = true;
- }
- };
- Skeleton.prototype.sortPathConstraint = function (constraint) {
- constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));
- if (!constraint.active)
- return;
- var slot = constraint.target;
- var slotIndex = slot.data.index;
- var slotBone = slot.bone;
- if (this.skin)
- this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);
- if (this.data.defaultSkin && this.data.defaultSkin != this.skin)
- this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);
- for (var i = 0, n = this.data.skins.length; i < n; i++)
- this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);
- var attachment = slot.getAttachment();
- if (attachment instanceof PathAttachment)
- this.sortPathConstraintAttachmentWith(attachment, slotBone);
- var constrained = constraint.bones;
- var boneCount = constrained.length;
- for (var i = 0; i < boneCount; i++)
- this.sortBone(constrained[i]);
- this._updateCache.push(constraint);
- for (var i = 0; i < boneCount; i++)
- this.sortReset(constrained[i].children);
- for (var i = 0; i < boneCount; i++)
- constrained[i].sorted = true;
- };
- Skeleton.prototype.sortTransformConstraint = function (constraint) {
- constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));
- if (!constraint.active)
- return;
- this.sortBone(constraint.target);
- var constrained = constraint.bones;
- var boneCount = constrained.length;
- if (constraint.data.local) {
- for (var i = 0; i < boneCount; i++) {
- var child = constrained[i];
- this.sortBone(child.parent);
- this.sortBone(child);
- }
- }
- else {
- for (var i = 0; i < boneCount; i++) {
- this.sortBone(constrained[i]);
- }
- }
- this._updateCache.push(constraint);
- for (var i = 0; i < boneCount; i++)
- this.sortReset(constrained[i].children);
- for (var i = 0; i < boneCount; i++)
- constrained[i].sorted = true;
- };
- Skeleton.prototype.sortPathConstraintAttachment = function (skin, slotIndex, slotBone) {
- var attachments = skin.attachments[slotIndex];
- if (!attachments)
- return;
- for (var key in attachments) {
- this.sortPathConstraintAttachmentWith(attachments[key], slotBone);
- }
- };
- Skeleton.prototype.sortPathConstraintAttachmentWith = function (attachment, slotBone) {
- if (!(attachment instanceof PathAttachment))
- return;
- var pathBones = attachment.bones;
- if (!pathBones)
- this.sortBone(slotBone);
- else {
- var bones = this.bones;
- for (var i = 0, n = pathBones.length; i < n;) {
- var nn = pathBones[i++];
- nn += i;
- while (i < nn)
- this.sortBone(bones[pathBones[i++]]);
- }
- }
- };
- Skeleton.prototype.sortBone = function (bone) {
- if (bone.sorted)
- return;
- var parent = bone.parent;
- if (parent)
- this.sortBone(parent);
- bone.sorted = true;
- this._updateCache.push(bone);
- };
- Skeleton.prototype.sortReset = function (bones) {
- for (var i = 0, n = bones.length; i < n; i++) {
- var bone = bones[i];
- if (!bone.active)
- continue;
- if (bone.sorted)
- this.sortReset(bone.children);
- bone.sorted = false;
- }
- };
- /** Updates the world transform for each bone and applies all constraints.
- *
- * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine
- * Runtimes Guide. */
- Skeleton.prototype.updateWorldTransform = function () {
- var bones = this.bones;
- for (var i = 0, n = bones.length; i < n; i++) {
- var bone = bones[i];
- bone.ax = bone.x;
- bone.ay = bone.y;
- bone.arotation = bone.rotation;
- bone.ascaleX = bone.scaleX;
- bone.ascaleY = bone.scaleY;
- bone.ashearX = bone.shearX;
- bone.ashearY = bone.shearY;
- }
- var updateCache = this._updateCache;
- for (var i = 0, n = updateCache.length; i < n; i++)
- updateCache[i].update();
- };
- Skeleton.prototype.updateWorldTransformWith = function (parent) {
- // Apply the parent bone transform to the root bone. The root bone always inherits scale, rotation and reflection.
- var rootBone = this.getRootBone();
- var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
- rootBone.worldX = pa * this.x + pb * this.y + parent.worldX;
- rootBone.worldY = pc * this.x + pd * this.y + parent.worldY;
- var rotationY = rootBone.rotation + 90 + rootBone.shearY;
- var la = MathUtils.cosDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;
- var lb = MathUtils.cosDeg(rotationY) * rootBone.scaleY;
- var lc = MathUtils.sinDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;
- var ld = MathUtils.sinDeg(rotationY) * rootBone.scaleY;
- rootBone.a = (pa * la + pb * lc) * this.scaleX;
- rootBone.b = (pa * lb + pb * ld) * this.scaleX;
- rootBone.c = (pc * la + pd * lc) * this.scaleY;
- rootBone.d = (pc * lb + pd * ld) * this.scaleY;
- // Update everything except root bone.
- var updateCache = this._updateCache;
- for (var i = 0, n = updateCache.length; i < n; i++) {
- var updatable = updateCache[i];
- if (updatable != rootBone)
- updatable.update();
- }
- };
- /** Sets the bones, constraints, and slots to their setup pose values. */
- Skeleton.prototype.setToSetupPose = function () {
- this.setBonesToSetupPose();
- this.setSlotsToSetupPose();
- };
- /** Sets the bones and constraints to their setup pose values. */
- Skeleton.prototype.setBonesToSetupPose = function () {
- var bones = this.bones;
- for (var i = 0, n = bones.length; i < n; i++)
- bones[i].setToSetupPose();
- var ikConstraints = this.ikConstraints;
- for (var i = 0, n = ikConstraints.length; i < n; i++) {
- var constraint = ikConstraints[i];
- constraint.mix = constraint.data.mix;
- constraint.softness = constraint.data.softness;
- constraint.bendDirection = constraint.data.bendDirection;
- constraint.compress = constraint.data.compress;
- constraint.stretch = constraint.data.stretch;
- }
- var transformConstraints = this.transformConstraints;
- for (var i = 0, n = transformConstraints.length; i < n; i++) {
- var constraint = transformConstraints[i];
- var data = constraint.data;
- constraint.mixRotate = data.mixRotate;
- constraint.mixX = data.mixX;
- constraint.mixY = data.mixY;
- constraint.mixScaleX = data.mixScaleX;
- constraint.mixScaleY = data.mixScaleY;
- constraint.mixShearY = data.mixShearY;
- }
- var pathConstraints = this.pathConstraints;
- for (var i = 0, n = pathConstraints.length; i < n; i++) {
- var constraint = pathConstraints[i];
- var data = constraint.data;
- constraint.position = data.position;
- constraint.spacing = data.spacing;
- constraint.mixRotate = data.mixRotate;
- constraint.mixX = data.mixX;
- constraint.mixY = data.mixY;
- }
- };
- /** Sets the slots and draw order to their setup pose values. */
- Skeleton.prototype.setSlotsToSetupPose = function () {
- var slots = this.slots;
- Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);
- for (var i = 0, n = slots.length; i < n; i++)
- slots[i].setToSetupPose();
- };
- /** @returns May return null. */
- Skeleton.prototype.getRootBone = function () {
- if (this.bones.length == 0)
- return null;
- return this.bones[0];
- };
- /** @returns May be null. */
- Skeleton.prototype.findBone = function (boneName) {
- if (!boneName)
- throw new Error("boneName cannot be null.");
- var bones = this.bones;
- for (var i = 0, n = bones.length; i < n; i++) {
- var bone = bones[i];
- if (bone.data.name == boneName)
- return bone;
- }
- return null;
- };
- /** @returns -1 if the bone was not found. */
- Skeleton.prototype.findBoneIndex = function (boneName) {
- if (!boneName)
- throw new Error("boneName cannot be null.");
- var bones = this.bones;
- for (var i = 0, n = bones.length; i < n; i++)
- if (bones[i].data.name == boneName)
- return i;
- return -1;
- };
- /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it
- * repeatedly.
- * @returns May be null. */
- Skeleton.prototype.findSlot = function (slotName) {
- if (!slotName)
- throw new Error("slotName cannot be null.");
- var slots = this.slots;
- for (var i = 0, n = slots.length; i < n; i++) {
- var slot = slots[i];
- if (slot.data.name == slotName)
- return slot;
- }
- return null;
- };
- /** @returns -1 if the bone was not found. */
- Skeleton.prototype.findSlotIndex = function (slotName) {
- if (!slotName)
- throw new Error("slotName cannot be null.");
- var slots = this.slots;
- for (var i = 0, n = slots.length; i < n; i++)
- if (slots[i].data.name == slotName)
- return i;
- return -1;
- };
- /** Sets a skin by name.
- *
- * See {@link #setSkin()}. */
- Skeleton.prototype.setSkinByName = function (skinName) {
- var skin = this.data.findSkin(skinName);
- if (!skin)
- throw new Error("Skin not found: " + skinName);
- this.setSkin(skin);
- };
- /** Sets the skin used to look up attachments before looking in the {@link SkeletonData#defaultSkin default skin}. If the
- * skin is changed, {@link #updateCache()} is called.
- *
- * Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no
- * old skin, each slot's setup mode attachment is attached from the new skin.
- *
- * After changing the skin, the visible attachments can be reset to those attached in the setup pose by calling
- * {@link #setSlotsToSetupPose()}. Also, often {@link AnimationState#apply()} is called before the next time the
- * skeleton is rendered to allow any attachment keys in the current animation(s) to hide or show attachments from the new skin.
- * @param newSkin May be null. */
- Skeleton.prototype.setSkin = function (newSkin) {
- if (newSkin == this.skin)
- return;
- if (newSkin) {
- if (this.skin)
- newSkin.attachAll(this, this.skin);
- else {
- var slots = this.slots;
- for (var i = 0, n = slots.length; i < n; i++) {
- var slot = slots[i];
- var name_1 = slot.data.attachmentName;
- if (name_1) {
- var attachment = newSkin.getAttachment(i, name_1);
- if (attachment)
- slot.setAttachment(attachment);
- }
- }
- }
- }
- this.skin = newSkin;
- this.updateCache();
- };
- /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot name and attachment
- * name.
- *
- * See {@link #getAttachment()}.
- * @returns May be null. */
- Skeleton.prototype.getAttachmentByName = function (slotName, attachmentName) {
- return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName);
- };
- /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot index and
- * attachment name. First the skin is checked and if the attachment was not found, the default skin is checked.
- *
- * See [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide.
- * @returns May be null. */
- Skeleton.prototype.getAttachment = function (slotIndex, attachmentName) {
- if (!attachmentName)
- throw new Error("attachmentName cannot be null.");
- if (this.skin) {
- var attachment = this.skin.getAttachment(slotIndex, attachmentName);
- if (attachment)
- return attachment;
- }
- if (this.data.defaultSkin)
- return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
- return null;
- };
- /** A convenience method to set an attachment by finding the slot with {@link #findSlot()}, finding the attachment with
- * {@link #getAttachment()}, then setting the slot's {@link Slot#attachment}.
- * @param attachmentName May be null to clear the slot's attachment. */
- Skeleton.prototype.setAttachment = function (slotName, attachmentName) {
- if (!slotName)
- throw new Error("slotName cannot be null.");
- var slots = this.slots;
- for (var i = 0, n = slots.length; i < n; i++) {
- var slot = slots[i];
- if (slot.data.name == slotName) {
- var attachment = null;
- if (attachmentName) {
- attachment = this.getAttachment(i, attachmentName);
- if (!attachment)
- throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName);
- }
- slot.setAttachment(attachment);
- return;
- }
- }
- throw new Error("Slot not found: " + slotName);
- };
- /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method
- * than to call it repeatedly.
- * @return May be null. */
- Skeleton.prototype.findIkConstraint = function (constraintName) {
- if (!constraintName)
- throw new Error("constraintName cannot be null.");
- var ikConstraints = this.ikConstraints;
- for (var i = 0, n = ikConstraints.length; i < n; i++) {
- var ikConstraint = ikConstraints[i];
- if (ikConstraint.data.name == constraintName)
- return ikConstraint;
- }
- return null;
- };
- /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of
- * this method than to call it repeatedly.
- * @return May be null. */
- Skeleton.prototype.findTransformConstraint = function (constraintName) {
- if (!constraintName)
- throw new Error("constraintName cannot be null.");
- var transformConstraints = this.transformConstraints;
- for (var i = 0, n = transformConstraints.length; i < n; i++) {
- var constraint = transformConstraints[i];
- if (constraint.data.name == constraintName)
- return constraint;
- }
- return null;
- };
- /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method
- * than to call it repeatedly.
- * @return May be null. */
- Skeleton.prototype.findPathConstraint = function (constraintName) {
- if (!constraintName)
- throw new Error("constraintName cannot be null.");
- var pathConstraints = this.pathConstraints;
- for (var i = 0, n = pathConstraints.length; i < n; i++) {
- var constraint = pathConstraints[i];
- if (constraint.data.name == constraintName)
- return constraint;
- }
- return null;
- };
- /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose.
- * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB.
- * @param size An output value, the width and height of the AABB.
- * @param temp Working memory to temporarily store attachments' computed world vertices. */
- Skeleton.prototype.getBounds = function (offset, size, temp) {
- if (temp === void 0) { temp = new Array(2); }
- if (!offset)
- throw new Error("offset cannot be null.");
- if (!size)
- throw new Error("size cannot be null.");
- var drawOrder = this.drawOrder;
- var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
- for (var i = 0, n = drawOrder.length; i < n; i++) {
- var slot = drawOrder[i];
- if (!slot.bone.active)
- continue;
- var verticesLength = 0;
- var vertices = null;
- var attachment = slot.getAttachment();
- if (attachment instanceof RegionAttachment) {
- verticesLength = 8;
- vertices = Utils.setArraySize(temp, verticesLength, 0);
- attachment.computeWorldVertices(slot.bone, vertices, 0, 2);
- }
- else if (attachment instanceof MeshAttachment) {
- var mesh = attachment;
- verticesLength = mesh.worldVerticesLength;
- vertices = Utils.setArraySize(temp, verticesLength, 0);
- mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);
- }
- if (vertices) {
- for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) {
- var x = vertices[ii], y = vertices[ii + 1];
- minX = Math.min(minX, x);
- minY = Math.min(minY, y);
- maxX = Math.max(maxX, x);
- maxY = Math.max(maxY, y);
- }
- }
- }
- offset.set(minX, minY);
- size.set(maxX - minX, maxY - minY);
- };
- /** Increments the skeleton's {@link #time}. */
- Skeleton.prototype.update = function (delta) {
- this.time += delta;
- };
- return Skeleton;
- }());
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- /** Stores the setup pose and all of the stateless data for a skeleton.
- *
- * See [Data objects](http://esotericsoftware.com/spine-runtime-architecture#Data-objects) in the Spine Runtimes
- * Guide. */
- var SkeletonData = /** @class */ (function () {
- function SkeletonData() {
- /** The skeleton's bones, sorted parent first. The root bone is always the first bone. */
- this.bones = new Array(); // Ordered parents first.
- /** The skeleton's slots. */
- this.slots = new Array(); // Setup pose draw order.
- this.skins = new Array();
- /** The skeleton's events. */
- this.events = new Array();
- /** The skeleton's animations. */
- this.animations = new Array();
- /** The skeleton's IK constraints. */
- this.ikConstraints = new Array();
- /** The skeleton's transform constraints. */
- this.transformConstraints = new Array();
- /** The skeleton's path constraints. */
- this.pathConstraints = new Array();
- // Nonessential
- /** The dopesheet FPS in Spine. Available only when nonessential data was exported. */
- this.fps = 0;
+ this.bones.push(bone);
+ }
+ this.slots = new Array();
+ this.drawOrder = new Array();
+ for (let i = 0; i < data.slots.length; i++) {
+ let slotData = data.slots[i];
+ let bone = this.bones[slotData.boneData.index];
+ let slot = new Slot(slotData, bone);
+ this.slots.push(slot);
+ this.drawOrder.push(slot);
+ }
+ this.ikConstraints = new Array();
+ for (let i = 0; i < data.ikConstraints.length; i++) {
+ let ikConstraintData = data.ikConstraints[i];
+ this.ikConstraints.push(new IkConstraint(ikConstraintData, this));
+ }
+ this.transformConstraints = new Array();
+ for (let i = 0; i < data.transformConstraints.length; i++) {
+ let transformConstraintData = data.transformConstraints[i];
+ this.transformConstraints.push(new TransformConstraint(transformConstraintData, this));
+ }
+ this.pathConstraints = new Array();
+ for (let i = 0; i < data.pathConstraints.length; i++) {
+ let pathConstraintData = data.pathConstraints[i];
+ this.pathConstraints.push(new PathConstraint(pathConstraintData, this));
+ }
+ this.color = new Color(1, 1, 1, 1);
+ this.updateCache();
+ }
+ updateCache() {
+ let updateCache = this._updateCache;
+ updateCache.length = 0;
+ let bones = this.bones;
+ for (let i = 0, n = bones.length; i < n; i++) {
+ let bone = bones[i];
+ bone.sorted = bone.data.skinRequired;
+ bone.active = !bone.sorted;
+ }
+ if (this.skin) {
+ let skinBones = this.skin.bones;
+ for (let i = 0, n = this.skin.bones.length; i < n; i++) {
+ let bone = this.bones[skinBones[i].index];
+ do {
+ bone.sorted = false;
+ bone.active = true;
+ bone = bone.parent;
+ } while (bone);
}
- /** Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it
- * multiple times.
- * @returns May be null. */
- SkeletonData.prototype.findBone = function (boneName) {
- if (!boneName)
- throw new Error("boneName cannot be null.");
- var bones = this.bones;
- for (var i = 0, n = bones.length; i < n; i++) {
- var bone = bones[i];
- if (bone.name == boneName)
- return bone;
+ }
+ let ikConstraints = this.ikConstraints;
+ let transformConstraints = this.transformConstraints;
+ let pathConstraints = this.pathConstraints;
+ let ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length;
+ let constraintCount = ikCount + transformCount + pathCount;
+ outer:
+ for (let i = 0; i < constraintCount; i++) {
+ for (let ii = 0; ii < ikCount; ii++) {
+ let constraint = ikConstraints[ii];
+ if (constraint.data.order == i) {
+ this.sortIkConstraint(constraint);
+ continue outer;
}
- return null;
- };
- SkeletonData.prototype.findBoneIndex = function (boneName) {
- if (!boneName)
- throw new Error("boneName cannot be null.");
- var bones = this.bones;
- for (var i = 0, n = bones.length; i < n; i++)
- if (bones[i].name == boneName)
- return i;
- return -1;
- };
- /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it
- * multiple times.
- * @returns May be null. */
- SkeletonData.prototype.findSlot = function (slotName) {
- if (!slotName)
- throw new Error("slotName cannot be null.");
- var slots = this.slots;
- for (var i = 0, n = slots.length; i < n; i++) {
- var slot = slots[i];
- if (slot.name == slotName)
- return slot;
+ }
+ for (let ii = 0; ii < transformCount; ii++) {
+ let constraint = transformConstraints[ii];
+ if (constraint.data.order == i) {
+ this.sortTransformConstraint(constraint);
+ continue outer;
}
- return null;
- };
- SkeletonData.prototype.findSlotIndex = function (slotName) {
- if (!slotName)
- throw new Error("slotName cannot be null.");
- var slots = this.slots;
- for (var i = 0, n = slots.length; i < n; i++)
- if (slots[i].name == slotName)
- return i;
- return -1;
- };
- /** Finds a skin by comparing each skin's name. It is more efficient to cache the results of this method than to call it
- * multiple times.
- * @returns May be null. */
- SkeletonData.prototype.findSkin = function (skinName) {
- if (!skinName)
- throw new Error("skinName cannot be null.");
- var skins = this.skins;
- for (var i = 0, n = skins.length; i < n; i++) {
- var skin = skins[i];
- if (skin.name == skinName)
- return skin;
+ }
+ for (let ii = 0; ii < pathCount; ii++) {
+ let constraint = pathConstraints[ii];
+ if (constraint.data.order == i) {
+ this.sortPathConstraint(constraint);
+ continue outer;
}
- return null;
- };
- /** Finds an event by comparing each events's name. It is more efficient to cache the results of this method than to call it
- * multiple times.
- * @returns May be null. */
- SkeletonData.prototype.findEvent = function (eventDataName) {
- if (!eventDataName)
- throw new Error("eventDataName cannot be null.");
- var events = this.events;
- for (var i = 0, n = events.length; i < n; i++) {
- var event_1 = events[i];
- if (event_1.name == eventDataName)
- return event_1;
- }
- return null;
- };
- /** Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to
- * call it multiple times.
- * @returns May be null. */
- SkeletonData.prototype.findAnimation = function (animationName) {
- if (!animationName)
- throw new Error("animationName cannot be null.");
- var animations = this.animations;
- for (var i = 0, n = animations.length; i < n; i++) {
- var animation = animations[i];
- if (animation.name == animationName)
- return animation;
- }
- return null;
- };
- /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method
- * than to call it multiple times.
- * @return May be null. */
- SkeletonData.prototype.findIkConstraint = function (constraintName) {
- if (!constraintName)
- throw new Error("constraintName cannot be null.");
- var ikConstraints = this.ikConstraints;
- for (var i = 0, n = ikConstraints.length; i < n; i++) {
- var constraint = ikConstraints[i];
- if (constraint.name == constraintName)
- return constraint;
- }
- return null;
- };
- /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of
- * this method than to call it multiple times.
- * @return May be null. */
- SkeletonData.prototype.findTransformConstraint = function (constraintName) {
- if (!constraintName)
- throw new Error("constraintName cannot be null.");
- var transformConstraints = this.transformConstraints;
- for (var i = 0, n = transformConstraints.length; i < n; i++) {
- var constraint = transformConstraints[i];
- if (constraint.name == constraintName)
- return constraint;
- }
- return null;
- };
- /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method
- * than to call it multiple times.
- * @return May be null. */
- SkeletonData.prototype.findPathConstraint = function (constraintName) {
- if (!constraintName)
- throw new Error("constraintName cannot be null.");
- var pathConstraints = this.pathConstraints;
- for (var i = 0, n = pathConstraints.length; i < n; i++) {
- var constraint = pathConstraints[i];
- if (constraint.name == constraintName)
- return constraint;
- }
- return null;
- };
- return SkeletonData;
- }());
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- /** Stores an entry in the skin consisting of the slot index, name, and attachment **/
- var SkinEntry = /** @class */ (function () {
- function SkinEntry(slotIndex, name, attachment) {
- this.slotIndex = slotIndex;
- this.name = name;
- this.attachment = attachment;
+ }
}
- return SkinEntry;
- }());
- /** Stores attachments by slot index and attachment name.
- *
- * See SkeletonData {@link SkeletonData#defaultSkin}, Skeleton {@link Skeleton#skin}, and
- * [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide. */
- var Skin = /** @class */ (function () {
- function Skin(name) {
- this.attachments = new Array();
- this.bones = Array();
- this.constraints = new Array();
- if (!name)
- throw new Error("name cannot be null.");
- this.name = name;
+ for (let i = 0, n = bones.length; i < n; i++)
+ this.sortBone(bones[i]);
+ }
+ sortIkConstraint(constraint) {
+ constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || this.skin && Utils.contains(this.skin.constraints, constraint.data, true));
+ if (!constraint.active)
+ return;
+ let target = constraint.target;
+ this.sortBone(target);
+ let constrained = constraint.bones;
+ let parent = constrained[0];
+ this.sortBone(parent);
+ if (constrained.length == 1) {
+ this._updateCache.push(constraint);
+ this.sortReset(parent.children);
+ } else {
+ let child = constrained[constrained.length - 1];
+ this.sortBone(child);
+ this._updateCache.push(constraint);
+ this.sortReset(parent.children);
+ child.sorted = true;
+ }
+ }
+ sortPathConstraint(constraint) {
+ constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || this.skin && Utils.contains(this.skin.constraints, constraint.data, true));
+ if (!constraint.active)
+ return;
+ let slot = constraint.target;
+ let slotIndex = slot.data.index;
+ let slotBone = slot.bone;
+ if (this.skin)
+ this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);
+ if (this.data.defaultSkin && this.data.defaultSkin != this.skin)
+ this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);
+ for (let i = 0, n = this.data.skins.length; i < n; i++)
+ this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);
+ let attachment = slot.getAttachment();
+ if (attachment instanceof PathAttachment)
+ this.sortPathConstraintAttachmentWith(attachment, slotBone);
+ let constrained = constraint.bones;
+ let boneCount = constrained.length;
+ for (let i = 0; i < boneCount; i++)
+ this.sortBone(constrained[i]);
+ this._updateCache.push(constraint);
+ for (let i = 0; i < boneCount; i++)
+ this.sortReset(constrained[i].children);
+ for (let i = 0; i < boneCount; i++)
+ constrained[i].sorted = true;
+ }
+ sortTransformConstraint(constraint) {
+ constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || this.skin && Utils.contains(this.skin.constraints, constraint.data, true));
+ if (!constraint.active)
+ return;
+ this.sortBone(constraint.target);
+ let constrained = constraint.bones;
+ let boneCount = constrained.length;
+ if (constraint.data.local) {
+ for (let i = 0; i < boneCount; i++) {
+ let child = constrained[i];
+ this.sortBone(child.parent);
+ this.sortBone(child);
}
- /** Adds an attachment to the skin for the specified slot index and name. */
- Skin.prototype.setAttachment = function (slotIndex, name, attachment) {
+ } else {
+ for (let i = 0; i < boneCount; i++) {
+ this.sortBone(constrained[i]);
+ }
+ }
+ this._updateCache.push(constraint);
+ for (let i = 0; i < boneCount; i++)
+ this.sortReset(constrained[i].children);
+ for (let i = 0; i < boneCount; i++)
+ constrained[i].sorted = true;
+ }
+ sortPathConstraintAttachment(skin, slotIndex, slotBone) {
+ let attachments = skin.attachments[slotIndex];
+ if (!attachments)
+ return;
+ for (let key in attachments) {
+ this.sortPathConstraintAttachmentWith(attachments[key], slotBone);
+ }
+ }
+ sortPathConstraintAttachmentWith(attachment, slotBone) {
+ if (!(attachment instanceof PathAttachment))
+ return;
+ let pathBones = attachment.bones;
+ if (!pathBones)
+ this.sortBone(slotBone);
+ else {
+ let bones = this.bones;
+ for (let i = 0, n = pathBones.length; i < n; ) {
+ let nn = pathBones[i++];
+ nn += i;
+ while (i < nn)
+ this.sortBone(bones[pathBones[i++]]);
+ }
+ }
+ }
+ sortBone(bone) {
+ if (bone.sorted)
+ return;
+ let parent = bone.parent;
+ if (parent)
+ this.sortBone(parent);
+ bone.sorted = true;
+ this._updateCache.push(bone);
+ }
+ sortReset(bones) {
+ for (let i = 0, n = bones.length; i < n; i++) {
+ let bone = bones[i];
+ if (!bone.active)
+ continue;
+ if (bone.sorted)
+ this.sortReset(bone.children);
+ bone.sorted = false;
+ }
+ }
+ updateWorldTransform() {
+ let bones = this.bones;
+ for (let i = 0, n = bones.length; i < n; i++) {
+ let bone = bones[i];
+ bone.ax = bone.x;
+ bone.ay = bone.y;
+ bone.arotation = bone.rotation;
+ bone.ascaleX = bone.scaleX;
+ bone.ascaleY = bone.scaleY;
+ bone.ashearX = bone.shearX;
+ bone.ashearY = bone.shearY;
+ }
+ let updateCache = this._updateCache;
+ for (let i = 0, n = updateCache.length; i < n; i++)
+ updateCache[i].update();
+ }
+ updateWorldTransformWith(parent) {
+ let rootBone = this.getRootBone();
+ let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;
+ rootBone.worldX = pa * this.x + pb * this.y + parent.worldX;
+ rootBone.worldY = pc * this.x + pd * this.y + parent.worldY;
+ let rotationY = rootBone.rotation + 90 + rootBone.shearY;
+ let la = MathUtils.cosDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;
+ let lb = MathUtils.cosDeg(rotationY) * rootBone.scaleY;
+ let lc = MathUtils.sinDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;
+ let ld = MathUtils.sinDeg(rotationY) * rootBone.scaleY;
+ rootBone.a = (pa * la + pb * lc) * this.scaleX;
+ rootBone.b = (pa * lb + pb * ld) * this.scaleX;
+ rootBone.c = (pc * la + pd * lc) * this.scaleY;
+ rootBone.d = (pc * lb + pd * ld) * this.scaleY;
+ let updateCache = this._updateCache;
+ for (let i = 0, n = updateCache.length; i < n; i++) {
+ let updatable = updateCache[i];
+ if (updatable != rootBone)
+ updatable.update();
+ }
+ }
+ setToSetupPose() {
+ this.setBonesToSetupPose();
+ this.setSlotsToSetupPose();
+ }
+ setBonesToSetupPose() {
+ let bones = this.bones;
+ for (let i = 0, n = bones.length; i < n; i++)
+ bones[i].setToSetupPose();
+ let ikConstraints = this.ikConstraints;
+ for (let i = 0, n = ikConstraints.length; i < n; i++) {
+ let constraint = ikConstraints[i];
+ constraint.mix = constraint.data.mix;
+ constraint.softness = constraint.data.softness;
+ constraint.bendDirection = constraint.data.bendDirection;
+ constraint.compress = constraint.data.compress;
+ constraint.stretch = constraint.data.stretch;
+ }
+ let transformConstraints = this.transformConstraints;
+ for (let i = 0, n = transformConstraints.length; i < n; i++) {
+ let constraint = transformConstraints[i];
+ let data = constraint.data;
+ constraint.mixRotate = data.mixRotate;
+ constraint.mixX = data.mixX;
+ constraint.mixY = data.mixY;
+ constraint.mixScaleX = data.mixScaleX;
+ constraint.mixScaleY = data.mixScaleY;
+ constraint.mixShearY = data.mixShearY;
+ }
+ let pathConstraints = this.pathConstraints;
+ for (let i = 0, n = pathConstraints.length; i < n; i++) {
+ let constraint = pathConstraints[i];
+ let data = constraint.data;
+ constraint.position = data.position;
+ constraint.spacing = data.spacing;
+ constraint.mixRotate = data.mixRotate;
+ constraint.mixX = data.mixX;
+ constraint.mixY = data.mixY;
+ }
+ }
+ setSlotsToSetupPose() {
+ let slots = this.slots;
+ Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);
+ for (let i = 0, n = slots.length; i < n; i++)
+ slots[i].setToSetupPose();
+ }
+ getRootBone() {
+ if (this.bones.length == 0)
+ return null;
+ return this.bones[0];
+ }
+ findBone(boneName) {
+ if (!boneName)
+ throw new Error("boneName cannot be null.");
+ let bones = this.bones;
+ for (let i = 0, n = bones.length; i < n; i++) {
+ let bone = bones[i];
+ if (bone.data.name == boneName)
+ return bone;
+ }
+ return null;
+ }
+ findBoneIndex(boneName) {
+ if (!boneName)
+ throw new Error("boneName cannot be null.");
+ let bones = this.bones;
+ for (let i = 0, n = bones.length; i < n; i++)
+ if (bones[i].data.name == boneName)
+ return i;
+ return -1;
+ }
+ findSlot(slotName) {
+ if (!slotName)
+ throw new Error("slotName cannot be null.");
+ let slots = this.slots;
+ for (let i = 0, n = slots.length; i < n; i++) {
+ let slot = slots[i];
+ if (slot.data.name == slotName)
+ return slot;
+ }
+ return null;
+ }
+ findSlotIndex(slotName) {
+ if (!slotName)
+ throw new Error("slotName cannot be null.");
+ let slots = this.slots;
+ for (let i = 0, n = slots.length; i < n; i++)
+ if (slots[i].data.name == slotName)
+ return i;
+ return -1;
+ }
+ setSkinByName(skinName) {
+ let skin = this.data.findSkin(skinName);
+ if (!skin)
+ throw new Error("Skin not found: " + skinName);
+ this.setSkin(skin);
+ }
+ setSkin(newSkin) {
+ if (newSkin == this.skin)
+ return;
+ if (newSkin) {
+ if (this.skin)
+ newSkin.attachAll(this, this.skin);
+ else {
+ let slots = this.slots;
+ for (let i = 0, n = slots.length; i < n; i++) {
+ let slot = slots[i];
+ let name = slot.data.attachmentName;
+ if (name) {
+ let attachment = newSkin.getAttachment(i, name);
+ if (attachment)
+ slot.setAttachment(attachment);
+ }
+ }
+ }
+ }
+ this.skin = newSkin;
+ this.updateCache();
+ }
+ getAttachmentByName(slotName, attachmentName) {
+ return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName);
+ }
+ getAttachment(slotIndex, attachmentName) {
+ if (!attachmentName)
+ throw new Error("attachmentName cannot be null.");
+ if (this.skin) {
+ let attachment = this.skin.getAttachment(slotIndex, attachmentName);
+ if (attachment)
+ return attachment;
+ }
+ if (this.data.defaultSkin)
+ return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
+ return null;
+ }
+ setAttachment(slotName, attachmentName) {
+ if (!slotName)
+ throw new Error("slotName cannot be null.");
+ let slots = this.slots;
+ for (let i = 0, n = slots.length; i < n; i++) {
+ let slot = slots[i];
+ if (slot.data.name == slotName) {
+ let attachment = null;
+ if (attachmentName) {
+ attachment = this.getAttachment(i, attachmentName);
if (!attachment)
- throw new Error("attachment cannot be null.");
- var attachments = this.attachments;
- if (slotIndex >= attachments.length)
- attachments.length = slotIndex + 1;
- if (!attachments[slotIndex])
- attachments[slotIndex] = {};
- attachments[slotIndex][name] = attachment;
- };
- /** Adds all attachments, bones, and constraints from the specified skin to this skin. */
- Skin.prototype.addSkin = function (skin) {
- for (var i = 0; i < skin.bones.length; i++) {
- var bone = skin.bones[i];
- var contained = false;
- for (var ii = 0; ii < this.bones.length; ii++) {
- if (this.bones[ii] == bone) {
- contained = true;
- break;
- }
- }
- if (!contained)
- this.bones.push(bone);
- }
- for (var i = 0; i < skin.constraints.length; i++) {
- var constraint = skin.constraints[i];
- var contained = false;
- for (var ii = 0; ii < this.constraints.length; ii++) {
- if (this.constraints[ii] == constraint) {
- contained = true;
- break;
- }
- }
- if (!contained)
- this.constraints.push(constraint);
- }
- var attachments = skin.getAttachments();
- for (var i = 0; i < attachments.length; i++) {
- var attachment = attachments[i];
- this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
- }
- };
- /** Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not
- * copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals. */
- Skin.prototype.copySkin = function (skin) {
- for (var i = 0; i < skin.bones.length; i++) {
- var bone = skin.bones[i];
- var contained = false;
- for (var ii = 0; ii < this.bones.length; ii++) {
- if (this.bones[ii] == bone) {
- contained = true;
- break;
- }
- }
- if (!contained)
- this.bones.push(bone);
- }
- for (var i = 0; i < skin.constraints.length; i++) {
- var constraint = skin.constraints[i];
- var contained = false;
- for (var ii = 0; ii < this.constraints.length; ii++) {
- if (this.constraints[ii] == constraint) {
- contained = true;
- break;
- }
- }
- if (!contained)
- this.constraints.push(constraint);
- }
- var attachments = skin.getAttachments();
- for (var i = 0; i < attachments.length; i++) {
- var attachment = attachments[i];
- if (!attachment.attachment)
- continue;
- if (attachment.attachment instanceof MeshAttachment) {
- attachment.attachment = attachment.attachment.newLinkedMesh();
- this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
- }
- else {
- attachment.attachment = attachment.attachment.copy();
- this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
- }
- }
- };
- /** Returns the attachment for the specified slot index and name, or null. */
- Skin.prototype.getAttachment = function (slotIndex, name) {
- var dictionary = this.attachments[slotIndex];
- return dictionary ? dictionary[name] : null;
- };
- /** Removes the attachment in the skin for the specified slot index and name, if any. */
- Skin.prototype.removeAttachment = function (slotIndex, name) {
- var dictionary = this.attachments[slotIndex];
- if (dictionary)
- dictionary[name] = null;
- };
- /** Returns all attachments in this skin. */
- Skin.prototype.getAttachments = function () {
- var entries = new Array();
- for (var i = 0; i < this.attachments.length; i++) {
- var slotAttachments = this.attachments[i];
- if (slotAttachments) {
- for (var name_1 in slotAttachments) {
- var attachment = slotAttachments[name_1];
- if (attachment)
- entries.push(new SkinEntry(i, name_1, attachment));
- }
- }
- }
- return entries;
- };
- /** Returns all attachments in this skin for the specified slot index. */
- Skin.prototype.getAttachmentsForSlot = function (slotIndex, attachments) {
- var slotAttachments = this.attachments[slotIndex];
- if (slotAttachments) {
- for (var name_2 in slotAttachments) {
- var attachment = slotAttachments[name_2];
- if (attachment)
- attachments.push(new SkinEntry(slotIndex, name_2, attachment));
- }
- }
- };
- /** Clears all attachments, bones, and constraints. */
- Skin.prototype.clear = function () {
- this.attachments.length = 0;
- this.bones.length = 0;
- this.constraints.length = 0;
- };
- /** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */
- Skin.prototype.attachAll = function (skeleton, oldSkin) {
- var slotIndex = 0;
- for (var i = 0; i < skeleton.slots.length; i++) {
- var slot = skeleton.slots[i];
- var slotAttachment = slot.getAttachment();
- if (slotAttachment && slotIndex < oldSkin.attachments.length) {
- var dictionary = oldSkin.attachments[slotIndex];
- for (var key in dictionary) {
- var skinAttachment = dictionary[key];
- if (slotAttachment == skinAttachment) {
- var attachment = this.getAttachment(slotIndex, key);
- if (attachment)
- slot.setAttachment(attachment);
- break;
- }
- }
- }
- slotIndex++;
- }
- };
- return Skin;
- }());
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- /** Stores the setup pose for a {@link Slot}. */
- var SlotData = /** @class */ (function () {
- function SlotData(index, name, boneData) {
- /** The color used to tint the slot's attachment. If {@link #getDarkColor()} is set, this is used as the light color for two
- * color tinting. */
- this.color = new Color(1, 1, 1, 1);
- if (index < 0)
- throw new Error("index must be >= 0.");
- if (!name)
- throw new Error("name cannot be null.");
- if (!boneData)
- throw new Error("boneData cannot be null.");
- this.index = index;
- this.name = name;
- this.boneData = boneData;
+ throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName);
+ }
+ slot.setAttachment(attachment);
+ return;
}
- return SlotData;
- }());
- /** Determines how images are blended with existing pixels when drawn. */
- exports.BlendMode = void 0;
- (function (BlendMode) {
- BlendMode[BlendMode["Normal"] = 0] = "Normal";
- BlendMode[BlendMode["Additive"] = 1] = "Additive";
- BlendMode[BlendMode["Multiply"] = 2] = "Multiply";
- BlendMode[BlendMode["Screen"] = 3] = "Screen";
- })(exports.BlendMode || (exports.BlendMode = {}));
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- var __extends$2 = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- /** Stores the setup pose for a {@link TransformConstraint}.
- *
- * See [Transform constraints](http://esotericsoftware.com/spine-transform-constraints) in the Spine User Guide. */
- var TransformConstraintData = /** @class */ (function (_super) {
- __extends$2(TransformConstraintData, _super);
- function TransformConstraintData(name) {
- var _this = _super.call(this, name, 0, false) || this;
- /** The bones that will be modified by this transform constraint. */
- _this.bones = new Array();
- _this.mixRotate = 0;
- _this.mixX = 0;
- _this.mixY = 0;
- _this.mixScaleX = 0;
- _this.mixScaleY = 0;
- _this.mixShearY = 0;
- /** An offset added to the constrained bone rotation. */
- _this.offsetRotation = 0;
- /** An offset added to the constrained bone X translation. */
- _this.offsetX = 0;
- /** An offset added to the constrained bone Y translation. */
- _this.offsetY = 0;
- /** An offset added to the constrained bone scaleX. */
- _this.offsetScaleX = 0;
- /** An offset added to the constrained bone scaleY. */
- _this.offsetScaleY = 0;
- /** An offset added to the constrained bone shearY. */
- _this.offsetShearY = 0;
- _this.relative = false;
- _this.local = false;
- return _this;
+ }
+ throw new Error("Slot not found: " + slotName);
+ }
+ findIkConstraint(constraintName) {
+ if (!constraintName)
+ throw new Error("constraintName cannot be null.");
+ let ikConstraints = this.ikConstraints;
+ for (let i = 0, n = ikConstraints.length; i < n; i++) {
+ let ikConstraint = ikConstraints[i];
+ if (ikConstraint.data.name == constraintName)
+ return ikConstraint;
+ }
+ return null;
+ }
+ findTransformConstraint(constraintName) {
+ if (!constraintName)
+ throw new Error("constraintName cannot be null.");
+ let transformConstraints = this.transformConstraints;
+ for (let i = 0, n = transformConstraints.length; i < n; i++) {
+ let constraint = transformConstraints[i];
+ if (constraint.data.name == constraintName)
+ return constraint;
+ }
+ return null;
+ }
+ findPathConstraint(constraintName) {
+ if (!constraintName)
+ throw new Error("constraintName cannot be null.");
+ let pathConstraints = this.pathConstraints;
+ for (let i = 0, n = pathConstraints.length; i < n; i++) {
+ let constraint = pathConstraints[i];
+ if (constraint.data.name == constraintName)
+ return constraint;
+ }
+ return null;
+ }
+ getBounds(offset, size, temp = new Array(2)) {
+ if (!offset)
+ throw new Error("offset cannot be null.");
+ if (!size)
+ throw new Error("size cannot be null.");
+ let drawOrder = this.drawOrder;
+ let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
+ for (let i = 0, n = drawOrder.length; i < n; i++) {
+ let slot = drawOrder[i];
+ if (!slot.bone.active)
+ continue;
+ let verticesLength = 0;
+ let vertices = null;
+ let attachment = slot.getAttachment();
+ if (attachment instanceof RegionAttachment) {
+ verticesLength = 8;
+ vertices = Utils.setArraySize(temp, verticesLength, 0);
+ attachment.computeWorldVertices(slot.bone, vertices, 0, 2);
+ } else if (attachment instanceof MeshAttachment) {
+ let mesh = attachment;
+ verticesLength = mesh.worldVerticesLength;
+ vertices = Utils.setArraySize(temp, verticesLength, 0);
+ mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);
}
- return TransformConstraintData;
- }(ConstraintData));
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- /** Loads skeleton data in the Spine binary format.
- *
- * See [Spine binary format](http://esotericsoftware.com/spine-binary-format) and
- * [JSON and binary data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the Spine
- * Runtimes Guide. */
- var SkeletonBinary = /** @class */ (function () {
- function SkeletonBinary(attachmentLoader) {
- /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at
- * runtime than were used in Spine.
- *
- * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */
- this.scale = 1;
- this.linkedMeshes = new Array();
- this.attachmentLoader = attachmentLoader;
+ if (vertices) {
+ for (let ii = 0, nn = vertices.length; ii < nn; ii += 2) {
+ let x = vertices[ii], y = vertices[ii + 1];
+ minX = Math.min(minX, x);
+ minY = Math.min(minY, y);
+ maxX = Math.max(maxX, x);
+ maxY = Math.max(maxY, y);
+ }
}
- SkeletonBinary.prototype.readSkeletonData = function (binary) {
- var scale = this.scale;
- var skeletonData = new SkeletonData();
- skeletonData.name = ""; // BOZO
- var input = new BinaryInput(binary);
- var lowHash = input.readInt32();
- var highHash = input.readInt32();
- skeletonData.hash = highHash == 0 && lowHash == 0 ? null : highHash.toString(16) + lowHash.toString(16);
- skeletonData.version = input.readString();
- skeletonData.x = input.readFloat();
- skeletonData.y = input.readFloat();
- skeletonData.width = input.readFloat();
- skeletonData.height = input.readFloat();
- var nonessential = input.readBoolean();
- if (nonessential) {
- skeletonData.fps = input.readFloat();
- skeletonData.imagesPath = input.readString();
- skeletonData.audioPath = input.readString();
- }
- var n = 0;
- // Strings.
- n = input.readInt(true);
- for (var i = 0; i < n; i++)
- input.strings.push(input.readString());
- // Bones.
- n = input.readInt(true);
- for (var i = 0; i < n; i++) {
- var name_1 = input.readString();
- var parent_1 = i == 0 ? null : skeletonData.bones[input.readInt(true)];
- var data = new BoneData(i, name_1, parent_1);
- data.rotation = input.readFloat();
- data.x = input.readFloat() * scale;
- data.y = input.readFloat() * scale;
- data.scaleX = input.readFloat();
- data.scaleY = input.readFloat();
- data.shearX = input.readFloat();
- data.shearY = input.readFloat();
- data.length = input.readFloat() * scale;
- data.transformMode = input.readInt(true);
- data.skinRequired = input.readBoolean();
- if (nonessential)
- Color.rgba8888ToColor(data.color, input.readInt32());
- skeletonData.bones.push(data);
- }
- // Slots.
- n = input.readInt(true);
- for (var i = 0; i < n; i++) {
- var slotName = input.readString();
- var boneData = skeletonData.bones[input.readInt(true)];
- var data = new SlotData(i, slotName, boneData);
- Color.rgba8888ToColor(data.color, input.readInt32());
- var darkColor = input.readInt32();
- if (darkColor != -1)
- Color.rgb888ToColor(data.darkColor = new Color(), darkColor);
- data.attachmentName = input.readStringRef();
- data.blendMode = input.readInt(true);
- skeletonData.slots.push(data);
- }
- // IK constraints.
- n = input.readInt(true);
- for (var i = 0, nn = void 0; i < n; i++) {
- var data = new IkConstraintData(input.readString());
- data.order = input.readInt(true);
- data.skinRequired = input.readBoolean();
- nn = input.readInt(true);
- for (var ii = 0; ii < nn; ii++)
- data.bones.push(skeletonData.bones[input.readInt(true)]);
- data.target = skeletonData.bones[input.readInt(true)];
- data.mix = input.readFloat();
- data.softness = input.readFloat() * scale;
- data.bendDirection = input.readByte();
- data.compress = input.readBoolean();
- data.stretch = input.readBoolean();
- data.uniform = input.readBoolean();
- skeletonData.ikConstraints.push(data);
- }
- // Transform constraints.
- n = input.readInt(true);
- for (var i = 0, nn = void 0; i < n; i++) {
- var data = new TransformConstraintData(input.readString());
- data.order = input.readInt(true);
- data.skinRequired = input.readBoolean();
- nn = input.readInt(true);
- for (var ii = 0; ii < nn; ii++)
- data.bones.push(skeletonData.bones[input.readInt(true)]);
- data.target = skeletonData.bones[input.readInt(true)];
- data.local = input.readBoolean();
- data.relative = input.readBoolean();
- data.offsetRotation = input.readFloat();
- data.offsetX = input.readFloat() * scale;
- data.offsetY = input.readFloat() * scale;
- data.offsetScaleX = input.readFloat();
- data.offsetScaleY = input.readFloat();
- data.offsetShearY = input.readFloat();
- data.mixRotate = input.readFloat();
- data.mixX = input.readFloat();
- data.mixY = input.readFloat();
- data.mixScaleX = input.readFloat();
- data.mixScaleY = input.readFloat();
- data.mixShearY = input.readFloat();
- skeletonData.transformConstraints.push(data);
- }
- // Path constraints.
- n = input.readInt(true);
- for (var i = 0, nn = void 0; i < n; i++) {
- var data = new PathConstraintData(input.readString());
- data.order = input.readInt(true);
- data.skinRequired = input.readBoolean();
- nn = input.readInt(true);
- for (var ii = 0; ii < nn; ii++)
- data.bones.push(skeletonData.bones[input.readInt(true)]);
- data.target = skeletonData.slots[input.readInt(true)];
- data.positionMode = input.readInt(true);
- data.spacingMode = input.readInt(true);
- data.rotateMode = input.readInt(true);
- data.offsetRotation = input.readFloat();
- data.position = input.readFloat();
- if (data.positionMode == exports.PositionMode.Fixed)
- data.position *= scale;
- data.spacing = input.readFloat();
- if (data.spacingMode == exports.SpacingMode.Length || data.spacingMode == exports.SpacingMode.Fixed)
- data.spacing *= scale;
- data.mixRotate = input.readFloat();
- data.mixX = input.readFloat();
- data.mixY = input.readFloat();
- skeletonData.pathConstraints.push(data);
- }
- // Default skin.
- var defaultSkin = this.readSkin(input, skeletonData, true, nonessential);
- if (defaultSkin) {
- skeletonData.defaultSkin = defaultSkin;
- skeletonData.skins.push(defaultSkin);
- }
- // Skins.
- {
- var i = skeletonData.skins.length;
- Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true));
- for (; i < n; i++)
- skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential);
- }
- // Linked meshes.
- n = this.linkedMeshes.length;
- for (var i = 0; i < n; i++) {
- var linkedMesh = this.linkedMeshes[i];
- var skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);
- var parent_2 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);
- linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_2 : linkedMesh.mesh;
- linkedMesh.mesh.setParentMesh(parent_2);
- linkedMesh.mesh.updateUVs();
- }
- this.linkedMeshes.length = 0;
- // Events.
- n = input.readInt(true);
- for (var i = 0; i < n; i++) {
- var data = new EventData(input.readStringRef());
- data.intValue = input.readInt(false);
- data.floatValue = input.readFloat();
- data.stringValue = input.readString();
- data.audioPath = input.readString();
- if (data.audioPath) {
- data.volume = input.readFloat();
- data.balance = input.readFloat();
- }
- skeletonData.events.push(data);
- }
- // Animations.
- n = input.readInt(true);
- for (var i = 0; i < n; i++)
- skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData));
- return skeletonData;
- };
- SkeletonBinary.prototype.readSkin = function (input, skeletonData, defaultSkin, nonessential) {
- var skin = null;
- var slotCount = 0;
- if (defaultSkin) {
- slotCount = input.readInt(true);
- if (slotCount == 0)
- return null;
- skin = new Skin("default");
- }
- else {
- skin = new Skin(input.readStringRef());
- skin.bones.length = input.readInt(true);
- for (var i = 0, n = skin.bones.length; i < n; i++)
- skin.bones[i] = skeletonData.bones[input.readInt(true)];
- for (var i = 0, n = input.readInt(true); i < n; i++)
- skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]);
- for (var i = 0, n = input.readInt(true); i < n; i++)
- skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]);
- for (var i = 0, n = input.readInt(true); i < n; i++)
- skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]);
- slotCount = input.readInt(true);
- }
- for (var i = 0; i < slotCount; i++) {
- var slotIndex = input.readInt(true);
- for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {
- var name_2 = input.readStringRef();
- var attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name_2, nonessential);
- if (attachment)
- skin.setAttachment(slotIndex, name_2, attachment);
- }
- }
- return skin;
- };
- SkeletonBinary.prototype.readAttachment = function (input, skeletonData, skin, slotIndex, attachmentName, nonessential) {
- var scale = this.scale;
- var name = input.readStringRef();
- if (!name)
- name = attachmentName;
- switch (input.readByte()) {
- case AttachmentType.Region: {
- var path = input.readStringRef();
- var rotation = input.readFloat();
- var x = input.readFloat();
- var y = input.readFloat();
- var scaleX = input.readFloat();
- var scaleY = input.readFloat();
- var width = input.readFloat();
- var height = input.readFloat();
- var color = input.readInt32();
- if (!path)
- path = name;
- var region = this.attachmentLoader.newRegionAttachment(skin, name, path);
- if (!region)
- return null;
- region.path = path;
- region.x = x * scale;
- region.y = y * scale;
- region.scaleX = scaleX;
- region.scaleY = scaleY;
- region.rotation = rotation;
- region.width = width * scale;
- region.height = height * scale;
- Color.rgba8888ToColor(region.color, color);
- region.updateOffset();
- return region;
- }
- case AttachmentType.BoundingBox: {
- var vertexCount = input.readInt(true);
- var vertices = this.readVertices(input, vertexCount);
- var color = nonessential ? input.readInt32() : 0;
- var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);
- if (!box)
- return null;
- box.worldVerticesLength = vertexCount << 1;
- box.vertices = vertices.vertices;
- box.bones = vertices.bones;
- if (nonessential)
- Color.rgba8888ToColor(box.color, color);
- return box;
- }
- case AttachmentType.Mesh: {
- var path = input.readStringRef();
- var color = input.readInt32();
- var vertexCount = input.readInt(true);
- var uvs = this.readFloatArray(input, vertexCount << 1, 1);
- var triangles = this.readShortArray(input);
- var vertices = this.readVertices(input, vertexCount);
- var hullLength = input.readInt(true);
- var edges = null;
- var width = 0, height = 0;
- if (nonessential) {
- edges = this.readShortArray(input);
- width = input.readFloat();
- height = input.readFloat();
- }
- if (!path)
- path = name;
- var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
- if (!mesh)
- return null;
- mesh.path = path;
- Color.rgba8888ToColor(mesh.color, color);
- mesh.bones = vertices.bones;
- mesh.vertices = vertices.vertices;
- mesh.worldVerticesLength = vertexCount << 1;
- mesh.triangles = triangles;
- mesh.regionUVs = uvs;
- mesh.updateUVs();
- mesh.hullLength = hullLength << 1;
- if (nonessential) {
- mesh.edges = edges;
- mesh.width = width * scale;
- mesh.height = height * scale;
- }
- return mesh;
- }
- case AttachmentType.LinkedMesh: {
- var path = input.readStringRef();
- var color = input.readInt32();
- var skinName = input.readStringRef();
- var parent_3 = input.readStringRef();
- var inheritDeform = input.readBoolean();
- var width = 0, height = 0;
- if (nonessential) {
- width = input.readFloat();
- height = input.readFloat();
- }
- if (!path)
- path = name;
- var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
- if (!mesh)
- return null;
- mesh.path = path;
- Color.rgba8888ToColor(mesh.color, color);
- if (nonessential) {
- mesh.width = width * scale;
- mesh.height = height * scale;
- }
- this.linkedMeshes.push(new LinkedMesh$1(mesh, skinName, slotIndex, parent_3, inheritDeform));
- return mesh;
- }
- case AttachmentType.Path: {
- var closed_1 = input.readBoolean();
- var constantSpeed = input.readBoolean();
- var vertexCount = input.readInt(true);
- var vertices = this.readVertices(input, vertexCount);
- var lengths = Utils.newArray(vertexCount / 3, 0);
- for (var i = 0, n = lengths.length; i < n; i++)
- lengths[i] = input.readFloat() * scale;
- var color = nonessential ? input.readInt32() : 0;
- var path = this.attachmentLoader.newPathAttachment(skin, name);
- if (!path)
- return null;
- path.closed = closed_1;
- path.constantSpeed = constantSpeed;
- path.worldVerticesLength = vertexCount << 1;
- path.vertices = vertices.vertices;
- path.bones = vertices.bones;
- path.lengths = lengths;
- if (nonessential)
- Color.rgba8888ToColor(path.color, color);
- return path;
- }
- case AttachmentType.Point: {
- var rotation = input.readFloat();
- var x = input.readFloat();
- var y = input.readFloat();
- var color = nonessential ? input.readInt32() : 0;
- var point = this.attachmentLoader.newPointAttachment(skin, name);
- if (!point)
- return null;
- point.x = x * scale;
- point.y = y * scale;
- point.rotation = rotation;
- if (nonessential)
- Color.rgba8888ToColor(point.color, color);
- return point;
- }
- case AttachmentType.Clipping: {
- var endSlotIndex = input.readInt(true);
- var vertexCount = input.readInt(true);
- var vertices = this.readVertices(input, vertexCount);
- var color = nonessential ? input.readInt32() : 0;
- var clip = this.attachmentLoader.newClippingAttachment(skin, name);
- if (!clip)
- return null;
- clip.endSlot = skeletonData.slots[endSlotIndex];
- clip.worldVerticesLength = vertexCount << 1;
- clip.vertices = vertices.vertices;
- clip.bones = vertices.bones;
- if (nonessential)
- Color.rgba8888ToColor(clip.color, color);
- return clip;
- }
+ }
+ offset.set(minX, minY);
+ size.set(maxX - minX, maxY - minY);
+ }
+ update(delta) {
+ this.time += delta;
+ }
+ };
+
+ // spine-core/src/SkeletonData.ts
+ var SkeletonData = class {
+ constructor() {
+ this.bones = new Array();
+ this.slots = new Array();
+ this.skins = new Array();
+ this.events = new Array();
+ this.animations = new Array();
+ this.ikConstraints = new Array();
+ this.transformConstraints = new Array();
+ this.pathConstraints = new Array();
+ this.fps = 0;
+ }
+ findBone(boneName) {
+ if (!boneName)
+ throw new Error("boneName cannot be null.");
+ let bones = this.bones;
+ for (let i = 0, n = bones.length; i < n; i++) {
+ let bone = bones[i];
+ if (bone.name == boneName)
+ return bone;
+ }
+ return null;
+ }
+ findBoneIndex(boneName) {
+ if (!boneName)
+ throw new Error("boneName cannot be null.");
+ let bones = this.bones;
+ for (let i = 0, n = bones.length; i < n; i++)
+ if (bones[i].name == boneName)
+ return i;
+ return -1;
+ }
+ findSlot(slotName) {
+ if (!slotName)
+ throw new Error("slotName cannot be null.");
+ let slots = this.slots;
+ for (let i = 0, n = slots.length; i < n; i++) {
+ let slot = slots[i];
+ if (slot.name == slotName)
+ return slot;
+ }
+ return null;
+ }
+ findSlotIndex(slotName) {
+ if (!slotName)
+ throw new Error("slotName cannot be null.");
+ let slots = this.slots;
+ for (let i = 0, n = slots.length; i < n; i++)
+ if (slots[i].name == slotName)
+ return i;
+ return -1;
+ }
+ findSkin(skinName) {
+ if (!skinName)
+ throw new Error("skinName cannot be null.");
+ let skins = this.skins;
+ for (let i = 0, n = skins.length; i < n; i++) {
+ let skin = skins[i];
+ if (skin.name == skinName)
+ return skin;
+ }
+ return null;
+ }
+ findEvent(eventDataName) {
+ if (!eventDataName)
+ throw new Error("eventDataName cannot be null.");
+ let events = this.events;
+ for (let i = 0, n = events.length; i < n; i++) {
+ let event = events[i];
+ if (event.name == eventDataName)
+ return event;
+ }
+ return null;
+ }
+ findAnimation(animationName) {
+ if (!animationName)
+ throw new Error("animationName cannot be null.");
+ let animations = this.animations;
+ for (let i = 0, n = animations.length; i < n; i++) {
+ let animation = animations[i];
+ if (animation.name == animationName)
+ return animation;
+ }
+ return null;
+ }
+ findIkConstraint(constraintName) {
+ if (!constraintName)
+ throw new Error("constraintName cannot be null.");
+ let ikConstraints = this.ikConstraints;
+ for (let i = 0, n = ikConstraints.length; i < n; i++) {
+ let constraint = ikConstraints[i];
+ if (constraint.name == constraintName)
+ return constraint;
+ }
+ return null;
+ }
+ findTransformConstraint(constraintName) {
+ if (!constraintName)
+ throw new Error("constraintName cannot be null.");
+ let transformConstraints = this.transformConstraints;
+ for (let i = 0, n = transformConstraints.length; i < n; i++) {
+ let constraint = transformConstraints[i];
+ if (constraint.name == constraintName)
+ return constraint;
+ }
+ return null;
+ }
+ findPathConstraint(constraintName) {
+ if (!constraintName)
+ throw new Error("constraintName cannot be null.");
+ let pathConstraints = this.pathConstraints;
+ for (let i = 0, n = pathConstraints.length; i < n; i++) {
+ let constraint = pathConstraints[i];
+ if (constraint.name == constraintName)
+ return constraint;
+ }
+ return null;
+ }
+ };
+
+ // spine-core/src/Skin.ts
+ var SkinEntry = class {
+ constructor(slotIndex, name, attachment) {
+ this.slotIndex = slotIndex;
+ this.name = name;
+ this.attachment = attachment;
+ }
+ };
+ var Skin = class {
+ constructor(name) {
+ this.attachments = new Array();
+ this.bones = Array();
+ this.constraints = new Array();
+ if (!name)
+ throw new Error("name cannot be null.");
+ this.name = name;
+ }
+ setAttachment(slotIndex, name, attachment) {
+ if (!attachment)
+ throw new Error("attachment cannot be null.");
+ let attachments = this.attachments;
+ if (slotIndex >= attachments.length)
+ attachments.length = slotIndex + 1;
+ if (!attachments[slotIndex])
+ attachments[slotIndex] = {};
+ attachments[slotIndex][name] = attachment;
+ }
+ addSkin(skin) {
+ for (let i = 0; i < skin.bones.length; i++) {
+ let bone = skin.bones[i];
+ let contained = false;
+ for (let ii = 0; ii < this.bones.length; ii++) {
+ if (this.bones[ii] == bone) {
+ contained = true;
+ break;
+ }
+ }
+ if (!contained)
+ this.bones.push(bone);
+ }
+ for (let i = 0; i < skin.constraints.length; i++) {
+ let constraint = skin.constraints[i];
+ let contained = false;
+ for (let ii = 0; ii < this.constraints.length; ii++) {
+ if (this.constraints[ii] == constraint) {
+ contained = true;
+ break;
+ }
+ }
+ if (!contained)
+ this.constraints.push(constraint);
+ }
+ let attachments = skin.getAttachments();
+ for (let i = 0; i < attachments.length; i++) {
+ var attachment = attachments[i];
+ this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
+ }
+ }
+ copySkin(skin) {
+ for (let i = 0; i < skin.bones.length; i++) {
+ let bone = skin.bones[i];
+ let contained = false;
+ for (let ii = 0; ii < this.bones.length; ii++) {
+ if (this.bones[ii] == bone) {
+ contained = true;
+ break;
+ }
+ }
+ if (!contained)
+ this.bones.push(bone);
+ }
+ for (let i = 0; i < skin.constraints.length; i++) {
+ let constraint = skin.constraints[i];
+ let contained = false;
+ for (let ii = 0; ii < this.constraints.length; ii++) {
+ if (this.constraints[ii] == constraint) {
+ contained = true;
+ break;
+ }
+ }
+ if (!contained)
+ this.constraints.push(constraint);
+ }
+ let attachments = skin.getAttachments();
+ for (let i = 0; i < attachments.length; i++) {
+ var attachment = attachments[i];
+ if (!attachment.attachment)
+ continue;
+ if (attachment.attachment instanceof MeshAttachment) {
+ attachment.attachment = attachment.attachment.newLinkedMesh();
+ this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
+ } else {
+ attachment.attachment = attachment.attachment.copy();
+ this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);
+ }
+ }
+ }
+ getAttachment(slotIndex, name) {
+ let dictionary = this.attachments[slotIndex];
+ return dictionary ? dictionary[name] : null;
+ }
+ removeAttachment(slotIndex, name) {
+ let dictionary = this.attachments[slotIndex];
+ if (dictionary)
+ dictionary[name] = null;
+ }
+ getAttachments() {
+ let entries = new Array();
+ for (var i = 0; i < this.attachments.length; i++) {
+ let slotAttachments = this.attachments[i];
+ if (slotAttachments) {
+ for (let name in slotAttachments) {
+ let attachment = slotAttachments[name];
+ if (attachment)
+ entries.push(new SkinEntry(i, name, attachment));
+ }
+ }
+ }
+ return entries;
+ }
+ getAttachmentsForSlot(slotIndex, attachments) {
+ let slotAttachments = this.attachments[slotIndex];
+ if (slotAttachments) {
+ for (let name in slotAttachments) {
+ let attachment = slotAttachments[name];
+ if (attachment)
+ attachments.push(new SkinEntry(slotIndex, name, attachment));
+ }
+ }
+ }
+ clear() {
+ this.attachments.length = 0;
+ this.bones.length = 0;
+ this.constraints.length = 0;
+ }
+ attachAll(skeleton, oldSkin) {
+ let slotIndex = 0;
+ for (let i = 0; i < skeleton.slots.length; i++) {
+ let slot = skeleton.slots[i];
+ let slotAttachment = slot.getAttachment();
+ if (slotAttachment && slotIndex < oldSkin.attachments.length) {
+ let dictionary = oldSkin.attachments[slotIndex];
+ for (let key in dictionary) {
+ let skinAttachment = dictionary[key];
+ if (slotAttachment == skinAttachment) {
+ let attachment = this.getAttachment(slotIndex, key);
+ if (attachment)
+ slot.setAttachment(attachment);
+ break;
}
+ }
+ }
+ slotIndex++;
+ }
+ }
+ };
+
+ // spine-core/src/SlotData.ts
+ var SlotData = class {
+ constructor(index, name, boneData) {
+ this.color = new Color(1, 1, 1, 1);
+ if (index < 0)
+ throw new Error("index must be >= 0.");
+ if (!name)
+ throw new Error("name cannot be null.");
+ if (!boneData)
+ throw new Error("boneData cannot be null.");
+ this.index = index;
+ this.name = name;
+ this.boneData = boneData;
+ }
+ };
+ var BlendMode;
+ (function(BlendMode3) {
+ BlendMode3[BlendMode3["Normal"] = 0] = "Normal";
+ BlendMode3[BlendMode3["Additive"] = 1] = "Additive";
+ BlendMode3[BlendMode3["Multiply"] = 2] = "Multiply";
+ BlendMode3[BlendMode3["Screen"] = 3] = "Screen";
+ })(BlendMode || (BlendMode = {}));
+
+ // spine-core/src/TransformConstraintData.ts
+ var TransformConstraintData = class extends ConstraintData {
+ constructor(name) {
+ super(name, 0, false);
+ this.bones = new Array();
+ this.mixRotate = 0;
+ this.mixX = 0;
+ this.mixY = 0;
+ this.mixScaleX = 0;
+ this.mixScaleY = 0;
+ this.mixShearY = 0;
+ this.offsetRotation = 0;
+ this.offsetX = 0;
+ this.offsetY = 0;
+ this.offsetScaleX = 0;
+ this.offsetScaleY = 0;
+ this.offsetShearY = 0;
+ this.relative = false;
+ this.local = false;
+ }
+ };
+
+ // spine-core/src/SkeletonBinary.ts
+ var SkeletonBinary = class {
+ constructor(attachmentLoader) {
+ this.scale = 1;
+ this.linkedMeshes = new Array();
+ this.attachmentLoader = attachmentLoader;
+ }
+ readSkeletonData(binary) {
+ let scale = this.scale;
+ let skeletonData = new SkeletonData();
+ skeletonData.name = "";
+ let input = new BinaryInput(binary);
+ let lowHash = input.readInt32();
+ let highHash = input.readInt32();
+ skeletonData.hash = highHash == 0 && lowHash == 0 ? null : highHash.toString(16) + lowHash.toString(16);
+ skeletonData.version = input.readString();
+ skeletonData.x = input.readFloat();
+ skeletonData.y = input.readFloat();
+ skeletonData.width = input.readFloat();
+ skeletonData.height = input.readFloat();
+ let nonessential = input.readBoolean();
+ if (nonessential) {
+ skeletonData.fps = input.readFloat();
+ skeletonData.imagesPath = input.readString();
+ skeletonData.audioPath = input.readString();
+ }
+ let n = 0;
+ n = input.readInt(true);
+ for (let i = 0; i < n; i++)
+ input.strings.push(input.readString());
+ n = input.readInt(true);
+ for (let i = 0; i < n; i++) {
+ let name = input.readString();
+ let parent = i == 0 ? null : skeletonData.bones[input.readInt(true)];
+ let data = new BoneData(i, name, parent);
+ data.rotation = input.readFloat();
+ data.x = input.readFloat() * scale;
+ data.y = input.readFloat() * scale;
+ data.scaleX = input.readFloat();
+ data.scaleY = input.readFloat();
+ data.shearX = input.readFloat();
+ data.shearY = input.readFloat();
+ data.length = input.readFloat() * scale;
+ data.transformMode = input.readInt(true);
+ data.skinRequired = input.readBoolean();
+ if (nonessential)
+ Color.rgba8888ToColor(data.color, input.readInt32());
+ skeletonData.bones.push(data);
+ }
+ n = input.readInt(true);
+ for (let i = 0; i < n; i++) {
+ let slotName = input.readString();
+ let boneData = skeletonData.bones[input.readInt(true)];
+ let data = new SlotData(i, slotName, boneData);
+ Color.rgba8888ToColor(data.color, input.readInt32());
+ let darkColor = input.readInt32();
+ if (darkColor != -1)
+ Color.rgb888ToColor(data.darkColor = new Color(), darkColor);
+ data.attachmentName = input.readStringRef();
+ data.blendMode = input.readInt(true);
+ skeletonData.slots.push(data);
+ }
+ n = input.readInt(true);
+ for (let i = 0, nn; i < n; i++) {
+ let data = new IkConstraintData(input.readString());
+ data.order = input.readInt(true);
+ data.skinRequired = input.readBoolean();
+ nn = input.readInt(true);
+ for (let ii = 0; ii < nn; ii++)
+ data.bones.push(skeletonData.bones[input.readInt(true)]);
+ data.target = skeletonData.bones[input.readInt(true)];
+ data.mix = input.readFloat();
+ data.softness = input.readFloat() * scale;
+ data.bendDirection = input.readByte();
+ data.compress = input.readBoolean();
+ data.stretch = input.readBoolean();
+ data.uniform = input.readBoolean();
+ skeletonData.ikConstraints.push(data);
+ }
+ n = input.readInt(true);
+ for (let i = 0, nn; i < n; i++) {
+ let data = new TransformConstraintData(input.readString());
+ data.order = input.readInt(true);
+ data.skinRequired = input.readBoolean();
+ nn = input.readInt(true);
+ for (let ii = 0; ii < nn; ii++)
+ data.bones.push(skeletonData.bones[input.readInt(true)]);
+ data.target = skeletonData.bones[input.readInt(true)];
+ data.local = input.readBoolean();
+ data.relative = input.readBoolean();
+ data.offsetRotation = input.readFloat();
+ data.offsetX = input.readFloat() * scale;
+ data.offsetY = input.readFloat() * scale;
+ data.offsetScaleX = input.readFloat();
+ data.offsetScaleY = input.readFloat();
+ data.offsetShearY = input.readFloat();
+ data.mixRotate = input.readFloat();
+ data.mixX = input.readFloat();
+ data.mixY = input.readFloat();
+ data.mixScaleX = input.readFloat();
+ data.mixScaleY = input.readFloat();
+ data.mixShearY = input.readFloat();
+ skeletonData.transformConstraints.push(data);
+ }
+ n = input.readInt(true);
+ for (let i = 0, nn; i < n; i++) {
+ let data = new PathConstraintData(input.readString());
+ data.order = input.readInt(true);
+ data.skinRequired = input.readBoolean();
+ nn = input.readInt(true);
+ for (let ii = 0; ii < nn; ii++)
+ data.bones.push(skeletonData.bones[input.readInt(true)]);
+ data.target = skeletonData.slots[input.readInt(true)];
+ data.positionMode = input.readInt(true);
+ data.spacingMode = input.readInt(true);
+ data.rotateMode = input.readInt(true);
+ data.offsetRotation = input.readFloat();
+ data.position = input.readFloat();
+ if (data.positionMode == PositionMode.Fixed)
+ data.position *= scale;
+ data.spacing = input.readFloat();
+ if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)
+ data.spacing *= scale;
+ data.mixRotate = input.readFloat();
+ data.mixX = input.readFloat();
+ data.mixY = input.readFloat();
+ skeletonData.pathConstraints.push(data);
+ }
+ let defaultSkin = this.readSkin(input, skeletonData, true, nonessential);
+ if (defaultSkin) {
+ skeletonData.defaultSkin = defaultSkin;
+ skeletonData.skins.push(defaultSkin);
+ }
+ {
+ let i = skeletonData.skins.length;
+ Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true));
+ for (; i < n; i++)
+ skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential);
+ }
+ n = this.linkedMeshes.length;
+ for (let i = 0; i < n; i++) {
+ let linkedMesh = this.linkedMeshes[i];
+ let skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);
+ let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);
+ linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent : linkedMesh.mesh;
+ linkedMesh.mesh.setParentMesh(parent);
+ linkedMesh.mesh.updateUVs();
+ }
+ this.linkedMeshes.length = 0;
+ n = input.readInt(true);
+ for (let i = 0; i < n; i++) {
+ let data = new EventData(input.readStringRef());
+ data.intValue = input.readInt(false);
+ data.floatValue = input.readFloat();
+ data.stringValue = input.readString();
+ data.audioPath = input.readString();
+ if (data.audioPath) {
+ data.volume = input.readFloat();
+ data.balance = input.readFloat();
+ }
+ skeletonData.events.push(data);
+ }
+ n = input.readInt(true);
+ for (let i = 0; i < n; i++)
+ skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData));
+ return skeletonData;
+ }
+ readSkin(input, skeletonData, defaultSkin, nonessential) {
+ let skin = null;
+ let slotCount = 0;
+ if (defaultSkin) {
+ slotCount = input.readInt(true);
+ if (slotCount == 0)
+ return null;
+ skin = new Skin("default");
+ } else {
+ skin = new Skin(input.readStringRef());
+ skin.bones.length = input.readInt(true);
+ for (let i = 0, n = skin.bones.length; i < n; i++)
+ skin.bones[i] = skeletonData.bones[input.readInt(true)];
+ for (let i = 0, n = input.readInt(true); i < n; i++)
+ skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]);
+ for (let i = 0, n = input.readInt(true); i < n; i++)
+ skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]);
+ for (let i = 0, n = input.readInt(true); i < n; i++)
+ skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]);
+ slotCount = input.readInt(true);
+ }
+ for (let i = 0; i < slotCount; i++) {
+ let slotIndex = input.readInt(true);
+ for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
+ let name = input.readStringRef();
+ let attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name, nonessential);
+ if (attachment)
+ skin.setAttachment(slotIndex, name, attachment);
+ }
+ }
+ return skin;
+ }
+ readAttachment(input, skeletonData, skin, slotIndex, attachmentName, nonessential) {
+ let scale = this.scale;
+ let name = input.readStringRef();
+ if (!name)
+ name = attachmentName;
+ switch (input.readByte()) {
+ case AttachmentType.Region: {
+ let path = input.readStringRef();
+ let rotation = input.readFloat();
+ let x = input.readFloat();
+ let y = input.readFloat();
+ let scaleX = input.readFloat();
+ let scaleY = input.readFloat();
+ let width = input.readFloat();
+ let height = input.readFloat();
+ let color = input.readInt32();
+ if (!path)
+ path = name;
+ let region = this.attachmentLoader.newRegionAttachment(skin, name, path);
+ if (!region)
return null;
- };
- SkeletonBinary.prototype.readVertices = function (input, vertexCount) {
- var scale = this.scale;
- var verticesLength = vertexCount << 1;
- var vertices = new Vertices();
- if (!input.readBoolean()) {
- vertices.vertices = this.readFloatArray(input, verticesLength, scale);
- return vertices;
- }
- var weights = new Array();
- var bonesArray = new Array();
- for (var i = 0; i < vertexCount; i++) {
- var boneCount = input.readInt(true);
- bonesArray.push(boneCount);
- for (var ii = 0; ii < boneCount; ii++) {
- bonesArray.push(input.readInt(true));
- weights.push(input.readFloat() * scale);
- weights.push(input.readFloat() * scale);
- weights.push(input.readFloat());
- }
- }
- vertices.vertices = Utils.toFloatArray(weights);
- vertices.bones = bonesArray;
- return vertices;
- };
- SkeletonBinary.prototype.readFloatArray = function (input, n, scale) {
- var array = new Array(n);
- if (scale == 1) {
- for (var i = 0; i < n; i++)
- array[i] = input.readFloat();
- }
- else {
- for (var i = 0; i < n; i++)
- array[i] = input.readFloat() * scale;
- }
- return array;
- };
- SkeletonBinary.prototype.readShortArray = function (input) {
- var n = input.readInt(true);
- var array = new Array(n);
- for (var i = 0; i < n; i++)
- array[i] = input.readShort();
- return array;
- };
- SkeletonBinary.prototype.readAnimation = function (input, name, skeletonData) {
- input.readInt(true); // Number of timelines.
- var timelines = new Array();
- var scale = this.scale;
- new Color();
- new Color();
- // Slot timelines.
- for (var i = 0, n = input.readInt(true); i < n; i++) {
- var slotIndex = input.readInt(true);
- for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {
- var timelineType = input.readByte();
- var frameCount = input.readInt(true);
- var frameLast = frameCount - 1;
- switch (timelineType) {
- case SLOT_ATTACHMENT: {
- var timeline = new AttachmentTimeline(frameCount, slotIndex);
- for (var frame = 0; frame < frameCount; frame++)
- timeline.setFrame(frame, input.readFloat(), input.readStringRef());
- timelines.push(timeline);
- break;
- }
- case SLOT_RGBA: {
- var bezierCount = input.readInt(true);
- var timeline = new RGBATimeline(frameCount, bezierCount, slotIndex);
- var time = input.readFloat();
- var r = input.readUnsignedByte() / 255.0;
- var g = input.readUnsignedByte() / 255.0;
- var b = input.readUnsignedByte() / 255.0;
- var a = input.readUnsignedByte() / 255.0;
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, r, g, b, a);
- if (frame == frameLast)
- break;
- var time2 = input.readFloat();
- var r2 = input.readUnsignedByte() / 255.0;
- var g2 = input.readUnsignedByte() / 255.0;
- var b2 = input.readUnsignedByte() / 255.0;
- var a2 = input.readUnsignedByte() / 255.0;
- switch (input.readByte()) {
- case CURVE_STEPPED:
- timeline.setStepped(frame);
- break;
- case CURVE_BEZIER:
- setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);
- setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);
- setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);
- setBezier(input, timeline, bezier++, frame, 3, time, time2, a, a2, 1);
- }
- time = time2;
- r = r2;
- g = g2;
- b = b2;
- a = a2;
- }
- timelines.push(timeline);
- break;
- }
- case SLOT_RGB: {
- var bezierCount = input.readInt(true);
- var timeline = new RGBTimeline(frameCount, bezierCount, slotIndex);
- var time = input.readFloat();
- var r = input.readUnsignedByte() / 255.0;
- var g = input.readUnsignedByte() / 255.0;
- var b = input.readUnsignedByte() / 255.0;
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, r, g, b);
- if (frame == frameLast)
- break;
- var time2 = input.readFloat();
- var r2 = input.readUnsignedByte() / 255.0;
- var g2 = input.readUnsignedByte() / 255.0;
- var b2 = input.readUnsignedByte() / 255.0;
- switch (input.readByte()) {
- case CURVE_STEPPED:
- timeline.setStepped(frame);
- break;
- case CURVE_BEZIER:
- setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);
- setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);
- setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);
- }
- time = time2;
- r = r2;
- g = g2;
- b = b2;
- }
- timelines.push(timeline);
- break;
- }
- case SLOT_RGBA2: {
- var bezierCount = input.readInt(true);
- var timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex);
- var time = input.readFloat();
- var r = input.readUnsignedByte() / 255.0;
- var g = input.readUnsignedByte() / 255.0;
- var b = input.readUnsignedByte() / 255.0;
- var a = input.readUnsignedByte() / 255.0;
- var r2 = input.readUnsignedByte() / 255.0;
- var g2 = input.readUnsignedByte() / 255.0;
- var b2 = input.readUnsignedByte() / 255.0;
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, r, g, b, a, r2, g2, b2);
- if (frame == frameLast)
- break;
- var time2 = input.readFloat();
- var nr = input.readUnsignedByte() / 255.0;
- var ng = input.readUnsignedByte() / 255.0;
- var nb = input.readUnsignedByte() / 255.0;
- var na = input.readUnsignedByte() / 255.0;
- var nr2 = input.readUnsignedByte() / 255.0;
- var ng2 = input.readUnsignedByte() / 255.0;
- var nb2 = input.readUnsignedByte() / 255.0;
- switch (input.readByte()) {
- case CURVE_STEPPED:
- timeline.setStepped(frame);
- break;
- case CURVE_BEZIER:
- setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);
- setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);
- setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);
- setBezier(input, timeline, bezier++, frame, 3, time, time2, a, na, 1);
- setBezier(input, timeline, bezier++, frame, 4, time, time2, r2, nr2, 1);
- setBezier(input, timeline, bezier++, frame, 5, time, time2, g2, ng2, 1);
- setBezier(input, timeline, bezier++, frame, 6, time, time2, b2, nb2, 1);
- }
- time = time2;
- r = nr;
- g = ng;
- b = nb;
- a = na;
- r2 = nr2;
- g2 = ng2;
- b2 = nb2;
- }
- timelines.push(timeline);
- break;
- }
- case SLOT_RGB2: {
- var bezierCount = input.readInt(true);
- var timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex);
- var time = input.readFloat();
- var r = input.readUnsignedByte() / 255.0;
- var g = input.readUnsignedByte() / 255.0;
- var b = input.readUnsignedByte() / 255.0;
- var r2 = input.readUnsignedByte() / 255.0;
- var g2 = input.readUnsignedByte() / 255.0;
- var b2 = input.readUnsignedByte() / 255.0;
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, r, g, b, r2, g2, b2);
- if (frame == frameLast)
- break;
- var time2 = input.readFloat();
- var nr = input.readUnsignedByte() / 255.0;
- var ng = input.readUnsignedByte() / 255.0;
- var nb = input.readUnsignedByte() / 255.0;
- var nr2 = input.readUnsignedByte() / 255.0;
- var ng2 = input.readUnsignedByte() / 255.0;
- var nb2 = input.readUnsignedByte() / 255.0;
- switch (input.readByte()) {
- case CURVE_STEPPED:
- timeline.setStepped(frame);
- break;
- case CURVE_BEZIER:
- setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);
- setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);
- setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);
- setBezier(input, timeline, bezier++, frame, 3, time, time2, r2, nr2, 1);
- setBezier(input, timeline, bezier++, frame, 4, time, time2, g2, ng2, 1);
- setBezier(input, timeline, bezier++, frame, 5, time, time2, b2, nb2, 1);
- }
- time = time2;
- r = nr;
- g = ng;
- b = nb;
- r2 = nr2;
- g2 = ng2;
- b2 = nb2;
- }
- timelines.push(timeline);
- break;
- }
- case SLOT_ALPHA: {
- var timeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex);
- var time = input.readFloat(), a = input.readUnsignedByte() / 255;
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, a);
- if (frame == frameLast)
- break;
- var time2 = input.readFloat();
- var a2 = input.readUnsignedByte() / 255;
- switch (input.readByte()) {
- case CURVE_STEPPED:
- timeline.setStepped(frame);
- break;
- case CURVE_BEZIER:
- setBezier(input, timeline, bezier++, frame, 0, time, time2, a, a2, 1);
- }
- time = time2;
- a = a2;
- }
- timelines.push(timeline);
- break;
- }
- }
- }
- }
- // Bone timelines.
- for (var i = 0, n = input.readInt(true); i < n; i++) {
- var boneIndex = input.readInt(true);
- for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {
- var type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);
- switch (type) {
- case BONE_ROTATE:
- timelines.push(readTimeline1$1(input, new RotateTimeline(frameCount, bezierCount, boneIndex), 1));
- break;
- case BONE_TRANSLATE:
- timelines.push(readTimeline2$1(input, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale));
- break;
- case BONE_TRANSLATEX:
- timelines.push(readTimeline1$1(input, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale));
- break;
- case BONE_TRANSLATEY:
- timelines.push(readTimeline1$1(input, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale));
- break;
- case BONE_SCALE:
- timelines.push(readTimeline2$1(input, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1));
- break;
- case BONE_SCALEX:
- timelines.push(readTimeline1$1(input, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1));
- break;
- case BONE_SCALEY:
- timelines.push(readTimeline1$1(input, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1));
- break;
- case BONE_SHEAR:
- timelines.push(readTimeline2$1(input, new ShearTimeline(frameCount, bezierCount, boneIndex), 1));
- break;
- case BONE_SHEARX:
- timelines.push(readTimeline1$1(input, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1));
- break;
- case BONE_SHEARY:
- timelines.push(readTimeline1$1(input, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1));
- }
- }
- }
- // IK constraint timelines.
- for (var i = 0, n = input.readInt(true); i < n; i++) {
- var index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;
- var timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index);
- var time = input.readFloat(), mix = input.readFloat(), softness = input.readFloat() * scale;
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, mix, softness, input.readByte(), input.readBoolean(), input.readBoolean());
- if (frame == frameLast)
- break;
- var time2 = input.readFloat(), mix2 = input.readFloat(), softness2 = input.readFloat() * scale;
- switch (input.readByte()) {
- case CURVE_STEPPED:
- timeline.setStepped(frame);
- break;
- case CURVE_BEZIER:
- setBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);
- setBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale);
- }
- time = time2;
- mix = mix2;
- softness = softness2;
- }
- timelines.push(timeline);
- }
- // Transform constraint timelines.
- for (var i = 0, n = input.readInt(true); i < n; i++) {
- var index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;
- var timeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index);
- var time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat(), mixScaleX = input.readFloat(), mixScaleY = input.readFloat(), mixShearY = input.readFloat();
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);
- if (frame == frameLast)
- break;
- var time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat(), mixScaleX2 = input.readFloat(), mixScaleY2 = input.readFloat(), mixShearY2 = input.readFloat();
- switch (input.readByte()) {
- case CURVE_STEPPED:
- timeline.setStepped(frame);
- break;
- case CURVE_BEZIER:
- setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);
- setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);
- setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);
- setBezier(input, timeline, bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);
- setBezier(input, timeline, bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);
- setBezier(input, timeline, bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1);
- }
- time = time2;
- mixRotate = mixRotate2;
- mixX = mixX2;
- mixY = mixY2;
- mixScaleX = mixScaleX2;
- mixScaleY = mixScaleY2;
- mixShearY = mixShearY2;
- }
- timelines.push(timeline);
- }
- // Path constraint timelines.
- for (var i = 0, n = input.readInt(true); i < n; i++) {
- var index = input.readInt(true);
- var data = skeletonData.pathConstraints[index];
- for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {
- switch (input.readByte()) {
- case PATH_POSITION:
- timelines
- .push(readTimeline1$1(input, new PathConstraintPositionTimeline(input.readInt(true), input.readInt(true), index), data.positionMode == exports.PositionMode.Fixed ? scale : 1));
- break;
- case PATH_SPACING:
- timelines
- .push(readTimeline1$1(input, new PathConstraintSpacingTimeline(input.readInt(true), input.readInt(true), index), data.spacingMode == exports.SpacingMode.Length || data.spacingMode == exports.SpacingMode.Fixed ? scale : 1));
- break;
- case PATH_MIX:
- var timeline = new PathConstraintMixTimeline(input.readInt(true), input.readInt(true), index);
- var time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat();
- for (var frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {
- timeline.setFrame(frame, time, mixRotate, mixX, mixY);
- if (frame == frameLast)
- break;
- var time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat();
- switch (input.readByte()) {
- case CURVE_STEPPED:
- timeline.setStepped(frame);
- break;
- case CURVE_BEZIER:
- setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);
- setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);
- setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);
- }
- time = time2;
- mixRotate = mixRotate2;
- mixX = mixX2;
- mixY = mixY2;
- }
- timelines.push(timeline);
- }
- }
- }
- // Deform timelines.
- for (var i = 0, n = input.readInt(true); i < n; i++) {
- var skin = skeletonData.skins[input.readInt(true)];
- for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {
- var slotIndex = input.readInt(true);
- for (var iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {
- var attachmentName = input.readStringRef();
- var attachment = skin.getAttachment(slotIndex, attachmentName);
- var weighted = attachment.bones;
- var vertices = attachment.vertices;
- var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
- var frameCount = input.readInt(true);
- var frameLast = frameCount - 1;
- var bezierCount = input.readInt(true);
- var timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, attachment);
- var time = input.readFloat();
- for (var frame = 0, bezier = 0;; frame++) {
- var deform = void 0;
- var end = input.readInt(true);
- if (end == 0)
- deform = weighted ? Utils.newFloatArray(deformLength) : vertices;
- else {
- deform = Utils.newFloatArray(deformLength);
- var start = input.readInt(true);
- end += start;
- if (scale == 1) {
- for (var v = start; v < end; v++)
- deform[v] = input.readFloat();
- }
- else {
- for (var v = start; v < end; v++)
- deform[v] = input.readFloat() * scale;
- }
- if (!weighted) {
- for (var v = 0, vn = deform.length; v < vn; v++)
- deform[v] += vertices[v];
- }
- }
- timeline.setFrame(frame, time, deform);
- if (frame == frameLast)
- break;
- var time2 = input.readFloat();
- switch (input.readByte()) {
- case CURVE_STEPPED:
- timeline.setStepped(frame);
- break;
- case CURVE_BEZIER:
- setBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1);
- }
- time = time2;
- }
- timelines.push(timeline);
- }
- }
- }
- // Draw order timeline.
- var drawOrderCount = input.readInt(true);
- if (drawOrderCount > 0) {
- var timeline = new DrawOrderTimeline(drawOrderCount);
- var slotCount = skeletonData.slots.length;
- for (var i = 0; i < drawOrderCount; i++) {
- var time = input.readFloat();
- var offsetCount = input.readInt(true);
- var drawOrder = Utils.newArray(slotCount, 0);
- for (var ii = slotCount - 1; ii >= 0; ii--)
- drawOrder[ii] = -1;
- var unchanged = Utils.newArray(slotCount - offsetCount, 0);
- var originalIndex = 0, unchangedIndex = 0;
- for (var ii = 0; ii < offsetCount; ii++) {
- var slotIndex = input.readInt(true);
- // Collect unchanged items.
- while (originalIndex != slotIndex)
- unchanged[unchangedIndex++] = originalIndex++;
- // Set changed items.
- drawOrder[originalIndex + input.readInt(true)] = originalIndex++;
- }
- // Collect remaining unchanged items.
- while (originalIndex < slotCount)
- unchanged[unchangedIndex++] = originalIndex++;
- // Fill in unchanged items.
- for (var ii = slotCount - 1; ii >= 0; ii--)
- if (drawOrder[ii] == -1)
- drawOrder[ii] = unchanged[--unchangedIndex];
- timeline.setFrame(i, time, drawOrder);
- }
- timelines.push(timeline);
- }
- // Event timeline.
- var eventCount = input.readInt(true);
- if (eventCount > 0) {
- var timeline = new EventTimeline(eventCount);
- for (var i = 0; i < eventCount; i++) {
- var time = input.readFloat();
- var eventData = skeletonData.events[input.readInt(true)];
- var event_1 = new Event(time, eventData);
- event_1.intValue = input.readInt(false);
- event_1.floatValue = input.readFloat();
- event_1.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue;
- if (event_1.data.audioPath) {
- event_1.volume = input.readFloat();
- event_1.balance = input.readFloat();
- }
- timeline.setFrame(i, event_1);
- }
- timelines.push(timeline);
- }
- var duration = 0;
- for (var i = 0, n = timelines.length; i < n; i++)
- duration = Math.max(duration, timelines[i].getDuration());
- return new Animation(name, timelines, duration);
- };
- return SkeletonBinary;
- }());
- var BinaryInput = /** @class */ (function () {
- function BinaryInput(data, strings, index, buffer) {
- if (strings === void 0) { strings = new Array(); }
- if (index === void 0) { index = 0; }
- if (buffer === void 0) { buffer = new DataView(data.buffer); }
- this.strings = strings;
- this.index = index;
- this.buffer = buffer;
+ region.path = path;
+ region.x = x * scale;
+ region.y = y * scale;
+ region.scaleX = scaleX;
+ region.scaleY = scaleY;
+ region.rotation = rotation;
+ region.width = width * scale;
+ region.height = height * scale;
+ Color.rgba8888ToColor(region.color, color);
+ region.updateOffset();
+ return region;
}
- BinaryInput.prototype.readByte = function () {
- return this.buffer.getInt8(this.index++);
- };
- BinaryInput.prototype.readUnsignedByte = function () {
- return this.buffer.getUint8(this.index++);
- };
- BinaryInput.prototype.readShort = function () {
- var value = this.buffer.getInt16(this.index);
- this.index += 2;
- return value;
- };
- BinaryInput.prototype.readInt32 = function () {
- var value = this.buffer.getInt32(this.index);
- this.index += 4;
- return value;
- };
- BinaryInput.prototype.readInt = function (optimizePositive) {
- var b = this.readByte();
- var result = b & 0x7F;
- if ((b & 0x80) != 0) {
- b = this.readByte();
- result |= (b & 0x7F) << 7;
- if ((b & 0x80) != 0) {
- b = this.readByte();
- result |= (b & 0x7F) << 14;
- if ((b & 0x80) != 0) {
- b = this.readByte();
- result |= (b & 0x7F) << 21;
- if ((b & 0x80) != 0) {
- b = this.readByte();
- result |= (b & 0x7F) << 28;
- }
- }
- }
- }
- return optimizePositive ? result : ((result >>> 1) ^ -(result & 1));
- };
- BinaryInput.prototype.readStringRef = function () {
- var index = this.readInt(true);
- return index == 0 ? null : this.strings[index - 1];
- };
- BinaryInput.prototype.readString = function () {
- var byteCount = this.readInt(true);
- switch (byteCount) {
- case 0:
- return null;
- case 1:
- return "";
- }
- byteCount--;
- var chars = "";
- for (var i = 0; i < byteCount;) {
- var b = this.readByte();
- switch (b >> 4) {
- case 12:
- case 13:
- chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F));
- i += 2;
- break;
- case 14:
- chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F));
- i += 3;
- break;
- default:
- chars += String.fromCharCode(b);
- i++;
- }
- }
- return chars;
- };
- BinaryInput.prototype.readFloat = function () {
- var value = this.buffer.getFloat32(this.index);
- this.index += 4;
- return value;
- };
- BinaryInput.prototype.readBoolean = function () {
- return this.readByte() != 0;
- };
- return BinaryInput;
- }());
- var LinkedMesh$1 = /** @class */ (function () {
- function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) {
- this.mesh = mesh;
- this.skin = skin;
- this.slotIndex = slotIndex;
- this.parent = parent;
- this.inheritDeform = inheritDeform;
+ case AttachmentType.BoundingBox: {
+ let vertexCount = input.readInt(true);
+ let vertices = this.readVertices(input, vertexCount);
+ let color = nonessential ? input.readInt32() : 0;
+ let box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);
+ if (!box)
+ return null;
+ box.worldVerticesLength = vertexCount << 1;
+ box.vertices = vertices.vertices;
+ box.bones = vertices.bones;
+ if (nonessential)
+ Color.rgba8888ToColor(box.color, color);
+ return box;
}
- return LinkedMesh;
- }());
- var Vertices = /** @class */ (function () {
- function Vertices(bones, vertices) {
- if (bones === void 0) { bones = null; }
- if (vertices === void 0) { vertices = null; }
- this.bones = bones;
- this.vertices = vertices;
+ case AttachmentType.Mesh: {
+ let path = input.readStringRef();
+ let color = input.readInt32();
+ let vertexCount = input.readInt(true);
+ let uvs = this.readFloatArray(input, vertexCount << 1, 1);
+ let triangles = this.readShortArray(input);
+ let vertices = this.readVertices(input, vertexCount);
+ let hullLength = input.readInt(true);
+ let edges = null;
+ let width = 0, height = 0;
+ if (nonessential) {
+ edges = this.readShortArray(input);
+ width = input.readFloat();
+ height = input.readFloat();
+ }
+ if (!path)
+ path = name;
+ let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
+ if (!mesh)
+ return null;
+ mesh.path = path;
+ Color.rgba8888ToColor(mesh.color, color);
+ mesh.bones = vertices.bones;
+ mesh.vertices = vertices.vertices;
+ mesh.worldVerticesLength = vertexCount << 1;
+ mesh.triangles = triangles;
+ mesh.regionUVs = uvs;
+ mesh.updateUVs();
+ mesh.hullLength = hullLength << 1;
+ if (nonessential) {
+ mesh.edges = edges;
+ mesh.width = width * scale;
+ mesh.height = height * scale;
+ }
+ return mesh;
}
- return Vertices;
- }());
- var AttachmentType;
- (function (AttachmentType) {
- AttachmentType[AttachmentType["Region"] = 0] = "Region";
- AttachmentType[AttachmentType["BoundingBox"] = 1] = "BoundingBox";
- AttachmentType[AttachmentType["Mesh"] = 2] = "Mesh";
- AttachmentType[AttachmentType["LinkedMesh"] = 3] = "LinkedMesh";
- AttachmentType[AttachmentType["Path"] = 4] = "Path";
- AttachmentType[AttachmentType["Point"] = 5] = "Point";
- AttachmentType[AttachmentType["Clipping"] = 6] = "Clipping";
- })(AttachmentType || (AttachmentType = {}));
- function readTimeline1$1(input, timeline, scale) {
- var time = input.readFloat(), value = input.readFloat() * scale;
- for (var frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {
- timeline.setFrame(frame, time, value);
- if (frame == frameLast)
- break;
- var time2 = input.readFloat(), value2 = input.readFloat() * scale;
- switch (input.readByte()) {
- case CURVE_STEPPED:
+ case AttachmentType.LinkedMesh: {
+ let path = input.readStringRef();
+ let color = input.readInt32();
+ let skinName = input.readStringRef();
+ let parent = input.readStringRef();
+ let inheritDeform = input.readBoolean();
+ let width = 0, height = 0;
+ if (nonessential) {
+ width = input.readFloat();
+ height = input.readFloat();
+ }
+ if (!path)
+ path = name;
+ let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
+ if (!mesh)
+ return null;
+ mesh.path = path;
+ Color.rgba8888ToColor(mesh.color, color);
+ if (nonessential) {
+ mesh.width = width * scale;
+ mesh.height = height * scale;
+ }
+ this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent, inheritDeform));
+ return mesh;
+ }
+ case AttachmentType.Path: {
+ let closed2 = input.readBoolean();
+ let constantSpeed = input.readBoolean();
+ let vertexCount = input.readInt(true);
+ let vertices = this.readVertices(input, vertexCount);
+ let lengths = Utils.newArray(vertexCount / 3, 0);
+ for (let i = 0, n = lengths.length; i < n; i++)
+ lengths[i] = input.readFloat() * scale;
+ let color = nonessential ? input.readInt32() : 0;
+ let path = this.attachmentLoader.newPathAttachment(skin, name);
+ if (!path)
+ return null;
+ path.closed = closed2;
+ path.constantSpeed = constantSpeed;
+ path.worldVerticesLength = vertexCount << 1;
+ path.vertices = vertices.vertices;
+ path.bones = vertices.bones;
+ path.lengths = lengths;
+ if (nonessential)
+ Color.rgba8888ToColor(path.color, color);
+ return path;
+ }
+ case AttachmentType.Point: {
+ let rotation = input.readFloat();
+ let x = input.readFloat();
+ let y = input.readFloat();
+ let color = nonessential ? input.readInt32() : 0;
+ let point = this.attachmentLoader.newPointAttachment(skin, name);
+ if (!point)
+ return null;
+ point.x = x * scale;
+ point.y = y * scale;
+ point.rotation = rotation;
+ if (nonessential)
+ Color.rgba8888ToColor(point.color, color);
+ return point;
+ }
+ case AttachmentType.Clipping: {
+ let endSlotIndex = input.readInt(true);
+ let vertexCount = input.readInt(true);
+ let vertices = this.readVertices(input, vertexCount);
+ let color = nonessential ? input.readInt32() : 0;
+ let clip = this.attachmentLoader.newClippingAttachment(skin, name);
+ if (!clip)
+ return null;
+ clip.endSlot = skeletonData.slots[endSlotIndex];
+ clip.worldVerticesLength = vertexCount << 1;
+ clip.vertices = vertices.vertices;
+ clip.bones = vertices.bones;
+ if (nonessential)
+ Color.rgba8888ToColor(clip.color, color);
+ return clip;
+ }
+ }
+ return null;
+ }
+ readVertices(input, vertexCount) {
+ let scale = this.scale;
+ let verticesLength = vertexCount << 1;
+ let vertices = new Vertices();
+ if (!input.readBoolean()) {
+ vertices.vertices = this.readFloatArray(input, verticesLength, scale);
+ return vertices;
+ }
+ let weights = new Array();
+ let bonesArray = new Array();
+ for (let i = 0; i < vertexCount; i++) {
+ let boneCount = input.readInt(true);
+ bonesArray.push(boneCount);
+ for (let ii = 0; ii < boneCount; ii++) {
+ bonesArray.push(input.readInt(true));
+ weights.push(input.readFloat() * scale);
+ weights.push(input.readFloat() * scale);
+ weights.push(input.readFloat());
+ }
+ }
+ vertices.vertices = Utils.toFloatArray(weights);
+ vertices.bones = bonesArray;
+ return vertices;
+ }
+ readFloatArray(input, n, scale) {
+ let array = new Array(n);
+ if (scale == 1) {
+ for (let i = 0; i < n; i++)
+ array[i] = input.readFloat();
+ } else {
+ for (let i = 0; i < n; i++)
+ array[i] = input.readFloat() * scale;
+ }
+ return array;
+ }
+ readShortArray(input) {
+ let n = input.readInt(true);
+ let array = new Array(n);
+ for (let i = 0; i < n; i++)
+ array[i] = input.readShort();
+ return array;
+ }
+ readAnimation(input, name, skeletonData) {
+ input.readInt(true);
+ let timelines = new Array();
+ let scale = this.scale;
+ let tempColor1 = new Color();
+ let tempColor2 = new Color();
+ for (let i = 0, n = input.readInt(true); i < n; i++) {
+ let slotIndex = input.readInt(true);
+ for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
+ let timelineType = input.readByte();
+ let frameCount = input.readInt(true);
+ let frameLast = frameCount - 1;
+ switch (timelineType) {
+ case SLOT_ATTACHMENT: {
+ let timeline = new AttachmentTimeline(frameCount, slotIndex);
+ for (let frame = 0; frame < frameCount; frame++)
+ timeline.setFrame(frame, input.readFloat(), input.readStringRef());
+ timelines.push(timeline);
+ break;
+ }
+ case SLOT_RGBA: {
+ let bezierCount = input.readInt(true);
+ let timeline = new RGBATimeline(frameCount, bezierCount, slotIndex);
+ let time = input.readFloat();
+ let r = input.readUnsignedByte() / 255;
+ let g = input.readUnsignedByte() / 255;
+ let b = input.readUnsignedByte() / 255;
+ let a = input.readUnsignedByte() / 255;
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, r, g, b, a);
+ if (frame == frameLast)
+ break;
+ let time2 = input.readFloat();
+ let r2 = input.readUnsignedByte() / 255;
+ let g2 = input.readUnsignedByte() / 255;
+ let b2 = input.readUnsignedByte() / 255;
+ let a2 = input.readUnsignedByte() / 255;
+ switch (input.readByte()) {
+ case CURVE_STEPPED:
timeline.setStepped(frame);
break;
- case CURVE_BEZIER:
- setBezier(input, timeline, bezier++, frame, 0, time, time2, value, value2, scale);
+ case CURVE_BEZIER:
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);
+ setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);
+ setBezier(input, timeline, bezier++, frame, 3, time, time2, a, a2, 1);
+ }
+ time = time2;
+ r = r2;
+ g = g2;
+ b = b2;
+ a = a2;
+ }
+ timelines.push(timeline);
+ break;
}
- time = time2;
- value = value2;
- }
- return timeline;
- }
- function readTimeline2$1(input, timeline, scale) {
- var time = input.readFloat(), value1 = input.readFloat() * scale, value2 = input.readFloat() * scale;
- for (var frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {
- timeline.setFrame(frame, time, value1, value2);
- if (frame == frameLast)
- break;
- var time2 = input.readFloat(), nvalue1 = input.readFloat() * scale, nvalue2 = input.readFloat() * scale;
- switch (input.readByte()) {
- case CURVE_STEPPED:
+ case SLOT_RGB: {
+ let bezierCount = input.readInt(true);
+ let timeline = new RGBTimeline(frameCount, bezierCount, slotIndex);
+ let time = input.readFloat();
+ let r = input.readUnsignedByte() / 255;
+ let g = input.readUnsignedByte() / 255;
+ let b = input.readUnsignedByte() / 255;
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, r, g, b);
+ if (frame == frameLast)
+ break;
+ let time2 = input.readFloat();
+ let r2 = input.readUnsignedByte() / 255;
+ let g2 = input.readUnsignedByte() / 255;
+ let b2 = input.readUnsignedByte() / 255;
+ switch (input.readByte()) {
+ case CURVE_STEPPED:
timeline.setStepped(frame);
break;
- case CURVE_BEZIER:
- setBezier(input, timeline, bezier++, frame, 0, time, time2, value1, nvalue1, scale);
- setBezier(input, timeline, bezier++, frame, 1, time, time2, value2, nvalue2, scale);
- }
- time = time2;
- value1 = nvalue1;
- value2 = nvalue2;
- }
- return timeline;
- }
- function setBezier(input, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {
- timeline.setBezier(bezier, frame, value, time1, value1, input.readFloat(), input.readFloat() * scale, input.readFloat(), input.readFloat() * scale, time2, value2);
- }
- var BONE_ROTATE = 0;
- var BONE_TRANSLATE = 1;
- var BONE_TRANSLATEX = 2;
- var BONE_TRANSLATEY = 3;
- var BONE_SCALE = 4;
- var BONE_SCALEX = 5;
- var BONE_SCALEY = 6;
- var BONE_SHEAR = 7;
- var BONE_SHEARX = 8;
- var BONE_SHEARY = 9;
- var SLOT_ATTACHMENT = 0;
- var SLOT_RGBA = 1;
- var SLOT_RGB = 2;
- var SLOT_RGBA2 = 3;
- var SLOT_RGB2 = 4;
- var SLOT_ALPHA = 5;
- var PATH_POSITION = 0;
- var PATH_SPACING = 1;
- var PATH_MIX = 2;
- var CURVE_STEPPED = 1;
- var CURVE_BEZIER = 2;
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- /** Collects each visible {@link BoundingBoxAttachment} and computes the world vertices for its polygon. The polygon vertices are
- * provided along with convenience methods for doing hit detection. */
- var SkeletonBounds = /** @class */ (function () {
- function SkeletonBounds() {
- /** The left edge of the axis aligned bounding box. */
- this.minX = 0;
- /** The bottom edge of the axis aligned bounding box. */
- this.minY = 0;
- /** The right edge of the axis aligned bounding box. */
- this.maxX = 0;
- /** The top edge of the axis aligned bounding box. */
- this.maxY = 0;
- /** The visible bounding boxes. */
- this.boundingBoxes = new Array();
- /** The world vertices for the bounding box polygons. */
- this.polygons = new Array();
- this.polygonPool = new Pool(function () {
- return Utils.newFloatArray(16);
- });
- }
- /** Clears any previous polygons, finds all visible bounding box attachments, and computes the world vertices for each bounding
- * box's polygon.
- * @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the
- * SkeletonBounds AABB methods will always return true. */
- SkeletonBounds.prototype.update = function (skeleton, updateAabb) {
- if (!skeleton)
- throw new Error("skeleton cannot be null.");
- var boundingBoxes = this.boundingBoxes;
- var polygons = this.polygons;
- var polygonPool = this.polygonPool;
- var slots = skeleton.slots;
- var slotCount = slots.length;
- boundingBoxes.length = 0;
- polygonPool.freeAll(polygons);
- polygons.length = 0;
- for (var i = 0; i < slotCount; i++) {
- var slot = slots[i];
- if (!slot.bone.active)
- continue;
- var attachment = slot.getAttachment();
- if (attachment instanceof BoundingBoxAttachment) {
- var boundingBox = attachment;
- boundingBoxes.push(boundingBox);
- var polygon = polygonPool.obtain();
- if (polygon.length != boundingBox.worldVerticesLength) {
- polygon = Utils.newFloatArray(boundingBox.worldVerticesLength);
- }
- polygons.push(polygon);
- boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2);
+ case CURVE_BEZIER:
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);
+ setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);
}
+ time = time2;
+ r = r2;
+ g = g2;
+ b = b2;
+ }
+ timelines.push(timeline);
+ break;
}
- if (updateAabb) {
- this.aabbCompute();
- }
- else {
- this.minX = Number.POSITIVE_INFINITY;
- this.minY = Number.POSITIVE_INFINITY;
- this.maxX = Number.NEGATIVE_INFINITY;
- this.maxY = Number.NEGATIVE_INFINITY;
- }
- };
- SkeletonBounds.prototype.aabbCompute = function () {
- var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
- var polygons = this.polygons;
- for (var i = 0, n = polygons.length; i < n; i++) {
- var polygon = polygons[i];
- var vertices = polygon;
- for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) {
- var x = vertices[ii];
- var y = vertices[ii + 1];
- minX = Math.min(minX, x);
- minY = Math.min(minY, y);
- maxX = Math.max(maxX, x);
- maxY = Math.max(maxY, y);
- }
- }
- this.minX = minX;
- this.minY = minY;
- this.maxX = maxX;
- this.maxY = maxY;
- };
- /** Returns true if the axis aligned bounding box contains the point. */
- SkeletonBounds.prototype.aabbContainsPoint = function (x, y) {
- return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;
- };
- /** Returns true if the axis aligned bounding box intersects the line segment. */
- SkeletonBounds.prototype.aabbIntersectsSegment = function (x1, y1, x2, y2) {
- var minX = this.minX;
- var minY = this.minY;
- var maxX = this.maxX;
- var maxY = this.maxY;
- if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY))
- return false;
- var m = (y2 - y1) / (x2 - x1);
- var y = m * (minX - x1) + y1;
- if (y > minY && y < maxY)
- return true;
- y = m * (maxX - x1) + y1;
- if (y > minY && y < maxY)
- return true;
- var x = (minY - y1) / m + x1;
- if (x > minX && x < maxX)
- return true;
- x = (maxY - y1) / m + x1;
- if (x > minX && x < maxX)
- return true;
- return false;
- };
- /** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */
- SkeletonBounds.prototype.aabbIntersectsSkeleton = function (bounds) {
- return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;
- };
- /** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more
- * efficient to only call this method if {@link #aabbContainsPoint(float, float)} returns true. */
- SkeletonBounds.prototype.containsPoint = function (x, y) {
- var polygons = this.polygons;
- for (var i = 0, n = polygons.length; i < n; i++)
- if (this.containsPointPolygon(polygons[i], x, y))
- return this.boundingBoxes[i];
- return null;
- };
- /** Returns true if the polygon contains the point. */
- SkeletonBounds.prototype.containsPointPolygon = function (polygon, x, y) {
- var vertices = polygon;
- var nn = polygon.length;
- var prevIndex = nn - 2;
- var inside = false;
- for (var ii = 0; ii < nn; ii += 2) {
- var vertexY = vertices[ii + 1];
- var prevY = vertices[prevIndex + 1];
- if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) {
- var vertexX = vertices[ii];
- if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x)
- inside = !inside;
- }
- prevIndex = ii;
- }
- return inside;
- };
- /** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it
- * is usually more efficient to only call this method if {@link #aabbIntersectsSegment()} returns
- * true. */
- SkeletonBounds.prototype.intersectsSegment = function (x1, y1, x2, y2) {
- var polygons = this.polygons;
- for (var i = 0, n = polygons.length; i < n; i++)
- if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2))
- return this.boundingBoxes[i];
- return null;
- };
- /** Returns true if the polygon contains any part of the line segment. */
- SkeletonBounds.prototype.intersectsSegmentPolygon = function (polygon, x1, y1, x2, y2) {
- var vertices = polygon;
- var nn = polygon.length;
- var width12 = x1 - x2, height12 = y1 - y2;
- var det1 = x1 * y2 - y1 * x2;
- var x3 = vertices[nn - 2], y3 = vertices[nn - 1];
- for (var ii = 0; ii < nn; ii += 2) {
- var x4 = vertices[ii], y4 = vertices[ii + 1];
- var det2 = x3 * y4 - y3 * x4;
- var width34 = x3 - x4, height34 = y3 - y4;
- var det3 = width12 * height34 - height12 * width34;
- var x = (det1 * width34 - width12 * det2) / det3;
- if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) {
- var y = (det1 * height34 - height12 * det2) / det3;
- if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1)))
- return true;
- }
- x3 = x4;
- y3 = y4;
- }
- return false;
- };
- /** Returns the polygon for the specified bounding box, or null. */
- SkeletonBounds.prototype.getPolygon = function (boundingBox) {
- if (!boundingBox)
- throw new Error("boundingBox cannot be null.");
- var index = this.boundingBoxes.indexOf(boundingBox);
- return index == -1 ? null : this.polygons[index];
- };
- /** The width of the axis aligned bounding box. */
- SkeletonBounds.prototype.getWidth = function () {
- return this.maxX - this.minX;
- };
- /** The height of the axis aligned bounding box. */
- SkeletonBounds.prototype.getHeight = function () {
- return this.maxY - this.minY;
- };
- return SkeletonBounds;
- }());
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- var Triangulator = /** @class */ (function () {
- function Triangulator() {
- this.convexPolygons = new Array();
- this.convexPolygonsIndices = new Array();
- this.indicesArray = new Array();
- this.isConcaveArray = new Array();
- this.triangles = new Array();
- this.polygonPool = new Pool(function () {
- return new Array();
- });
- this.polygonIndicesPool = new Pool(function () {
- return new Array();
- });
- }
- Triangulator.prototype.triangulate = function (verticesArray) {
- var vertices = verticesArray;
- var vertexCount = verticesArray.length >> 1;
- var indices = this.indicesArray;
- indices.length = 0;
- for (var i = 0; i < vertexCount; i++)
- indices[i] = i;
- var isConcave = this.isConcaveArray;
- isConcave.length = 0;
- for (var i = 0, n = vertexCount; i < n; ++i)
- isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices);
- var triangles = this.triangles;
- triangles.length = 0;
- while (vertexCount > 3) {
- // Find ear tip.
- var previous = vertexCount - 1, i = 0, next = 1;
- while (true) {
- outer: if (!isConcave[i]) {
- var p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1;
- var p1x = vertices[p1], p1y = vertices[p1 + 1];
- var p2x = vertices[p2], p2y = vertices[p2 + 1];
- var p3x = vertices[p3], p3y = vertices[p3 + 1];
- for (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) {
- if (!isConcave[ii])
- continue;
- var v = indices[ii] << 1;
- var vx = vertices[v], vy = vertices[v + 1];
- if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) {
- if (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) {
- if (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy))
- break outer;
- }
- }
- }
- break;
- }
- if (next == 0) {
- do {
- if (!isConcave[i])
- break;
- i--;
- } while (i > 0);
- break;
- }
- previous = i;
- i = next;
- next = (next + 1) % vertexCount;
- }
- // Cut ear tip.
- triangles.push(indices[(vertexCount + i - 1) % vertexCount]);
- triangles.push(indices[i]);
- triangles.push(indices[(i + 1) % vertexCount]);
- indices.splice(i, 1);
- isConcave.splice(i, 1);
- vertexCount--;
- var previousIndex = (vertexCount + i - 1) % vertexCount;
- var nextIndex = i == vertexCount ? 0 : i;
- isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices);
- isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices);
- }
- if (vertexCount == 3) {
- triangles.push(indices[2]);
- triangles.push(indices[0]);
- triangles.push(indices[1]);
- }
- return triangles;
- };
- Triangulator.prototype.decompose = function (verticesArray, triangles) {
- var vertices = verticesArray;
- var convexPolygons = this.convexPolygons;
- this.polygonPool.freeAll(convexPolygons);
- convexPolygons.length = 0;
- var convexPolygonsIndices = this.convexPolygonsIndices;
- this.polygonIndicesPool.freeAll(convexPolygonsIndices);
- convexPolygonsIndices.length = 0;
- var polygonIndices = this.polygonIndicesPool.obtain();
- polygonIndices.length = 0;
- var polygon = this.polygonPool.obtain();
- polygon.length = 0;
- // Merge subsequent triangles if they form a triangle fan.
- var fanBaseIndex = -1, lastWinding = 0;
- for (var i = 0, n = triangles.length; i < n; i += 3) {
- var t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1;
- var x1 = vertices[t1], y1 = vertices[t1 + 1];
- var x2 = vertices[t2], y2 = vertices[t2 + 1];
- var x3 = vertices[t3], y3 = vertices[t3 + 1];
- // If the base of the last triangle is the same as this triangle, check if they form a convex polygon (triangle fan).
- var merged = false;
- if (fanBaseIndex == t1) {
- var o = polygon.length - 4;
- var winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3);
- var winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]);
- if (winding1 == lastWinding && winding2 == lastWinding) {
- polygon.push(x3);
- polygon.push(y3);
- polygonIndices.push(t3);
- merged = true;
- }
- }
- // Otherwise make this triangle the new base.
- if (!merged) {
- if (polygon.length > 0) {
- convexPolygons.push(polygon);
- convexPolygonsIndices.push(polygonIndices);
- }
- else {
- this.polygonPool.free(polygon);
- this.polygonIndicesPool.free(polygonIndices);
- }
- polygon = this.polygonPool.obtain();
- polygon.length = 0;
- polygon.push(x1);
- polygon.push(y1);
- polygon.push(x2);
- polygon.push(y2);
- polygon.push(x3);
- polygon.push(y3);
- polygonIndices = this.polygonIndicesPool.obtain();
- polygonIndices.length = 0;
- polygonIndices.push(t1);
- polygonIndices.push(t2);
- polygonIndices.push(t3);
- lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3);
- fanBaseIndex = t1;
- }
- }
- if (polygon.length > 0) {
- convexPolygons.push(polygon);
- convexPolygonsIndices.push(polygonIndices);
- }
- // Go through the list of polygons and try to merge the remaining triangles with the found triangle fans.
- for (var i = 0, n = convexPolygons.length; i < n; i++) {
- polygonIndices = convexPolygonsIndices[i];
- if (polygonIndices.length == 0)
- continue;
- var firstIndex = polygonIndices[0];
- var lastIndex = polygonIndices[polygonIndices.length - 1];
- polygon = convexPolygons[i];
- var o = polygon.length - 4;
- var prevPrevX = polygon[o], prevPrevY = polygon[o + 1];
- var prevX = polygon[o + 2], prevY = polygon[o + 3];
- var firstX = polygon[0], firstY = polygon[1];
- var secondX = polygon[2], secondY = polygon[3];
- var winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY);
- for (var ii = 0; ii < n; ii++) {
- if (ii == i)
- continue;
- var otherIndices = convexPolygonsIndices[ii];
- if (otherIndices.length != 3)
- continue;
- var otherFirstIndex = otherIndices[0];
- var otherSecondIndex = otherIndices[1];
- var otherLastIndex = otherIndices[2];
- var otherPoly = convexPolygons[ii];
- var x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1];
- if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex)
- continue;
- var winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3);
- var winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY);
- if (winding1 == winding && winding2 == winding) {
- otherPoly.length = 0;
- otherIndices.length = 0;
- polygon.push(x3);
- polygon.push(y3);
- polygonIndices.push(otherLastIndex);
- prevPrevX = prevX;
- prevPrevY = prevY;
- prevX = x3;
- prevY = y3;
- ii = 0;
- }
- }
- }
- // Remove empty polygons that resulted from the merge step above.
- for (var i = convexPolygons.length - 1; i >= 0; i--) {
- polygon = convexPolygons[i];
- if (polygon.length == 0) {
- convexPolygons.splice(i, 1);
- this.polygonPool.free(polygon);
- polygonIndices = convexPolygonsIndices[i];
- convexPolygonsIndices.splice(i, 1);
- this.polygonIndicesPool.free(polygonIndices);
- }
- }
- return convexPolygons;
- };
- Triangulator.isConcave = function (index, vertexCount, vertices, indices) {
- var previous = indices[(vertexCount + index - 1) % vertexCount] << 1;
- var current = indices[index] << 1;
- var next = indices[(index + 1) % vertexCount] << 1;
- return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]);
- };
- Triangulator.positiveArea = function (p1x, p1y, p2x, p2y, p3x, p3y) {
- return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0;
- };
- Triangulator.winding = function (p1x, p1y, p2x, p2y, p3x, p3y) {
- var px = p2x - p1x, py = p2y - p1y;
- return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1;
- };
- return Triangulator;
- }());
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- var SkeletonClipping = /** @class */ (function () {
- function SkeletonClipping() {
- this.triangulator = new Triangulator();
- this.clippingPolygon = new Array();
- this.clipOutput = new Array();
- this.clippedVertices = new Array();
- this.clippedTriangles = new Array();
- this.scratch = new Array();
- }
- SkeletonClipping.prototype.clipStart = function (slot, clip) {
- if (this.clipAttachment)
- return 0;
- this.clipAttachment = clip;
- var n = clip.worldVerticesLength;
- var vertices = Utils.setArraySize(this.clippingPolygon, n);
- clip.computeWorldVertices(slot, 0, n, vertices, 0, 2);
- var clippingPolygon = this.clippingPolygon;
- SkeletonClipping.makeClockwise(clippingPolygon);
- var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon));
- for (var i = 0, n_1 = clippingPolygons.length; i < n_1; i++) {
- var polygon = clippingPolygons[i];
- SkeletonClipping.makeClockwise(polygon);
- polygon.push(polygon[0]);
- polygon.push(polygon[1]);
- }
- return clippingPolygons.length;
- };
- SkeletonClipping.prototype.clipEndWithSlot = function (slot) {
- if (this.clipAttachment && this.clipAttachment.endSlot == slot.data)
- this.clipEnd();
- };
- SkeletonClipping.prototype.clipEnd = function () {
- if (!this.clipAttachment)
- return;
- this.clipAttachment = null;
- this.clippingPolygons = null;
- this.clippedVertices.length = 0;
- this.clippedTriangles.length = 0;
- this.clippingPolygon.length = 0;
- };
- SkeletonClipping.prototype.isClipping = function () {
- return this.clipAttachment != null;
- };
- SkeletonClipping.prototype.clipTriangles = function (vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) {
- var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;
- var clippedTriangles = this.clippedTriangles;
- var polygons = this.clippingPolygons;
- var polygonsCount = this.clippingPolygons.length;
- var vertexSize = twoColor ? 12 : 8;
- var index = 0;
- clippedVertices.length = 0;
- clippedTriangles.length = 0;
- outer: for (var i = 0; i < trianglesLength; i += 3) {
- var vertexOffset = triangles[i] << 1;
- var x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];
- var u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1];
- vertexOffset = triangles[i + 1] << 1;
- var x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];
- var u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1];
- vertexOffset = triangles[i + 2] << 1;
- var x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];
- var u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1];
- for (var p = 0; p < polygonsCount; p++) {
- var s = clippedVertices.length;
- if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {
- var clipOutputLength = clipOutput.length;
- if (clipOutputLength == 0)
- continue;
- var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;
- var d = 1 / (d0 * d2 + d1 * (y1 - y3));
- var clipOutputCount = clipOutputLength >> 1;
- var clipOutputItems = this.clipOutput;
- var clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);
- for (var ii = 0; ii < clipOutputLength; ii += 2) {
- var x = clipOutputItems[ii], y = clipOutputItems[ii + 1];
- clippedVerticesItems[s] = x;
- clippedVerticesItems[s + 1] = y;
- clippedVerticesItems[s + 2] = light.r;
- clippedVerticesItems[s + 3] = light.g;
- clippedVerticesItems[s + 4] = light.b;
- clippedVerticesItems[s + 5] = light.a;
- var c0 = x - x3, c1 = y - y3;
- var a = (d0 * c0 + d1 * c1) * d;
- var b = (d4 * c0 + d2 * c1) * d;
- var c = 1 - a - b;
- clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c;
- clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c;
- if (twoColor) {
- clippedVerticesItems[s + 8] = dark.r;
- clippedVerticesItems[s + 9] = dark.g;
- clippedVerticesItems[s + 10] = dark.b;
- clippedVerticesItems[s + 11] = dark.a;
- }
- s += vertexSize;
- }
- s = clippedTriangles.length;
- var clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));
- clipOutputCount--;
- for (var ii = 1; ii < clipOutputCount; ii++) {
- clippedTrianglesItems[s] = index;
- clippedTrianglesItems[s + 1] = (index + ii);
- clippedTrianglesItems[s + 2] = (index + ii + 1);
- s += 3;
- }
- index += clipOutputCount + 1;
- }
- else {
- var clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize);
- clippedVerticesItems[s] = x1;
- clippedVerticesItems[s + 1] = y1;
- clippedVerticesItems[s + 2] = light.r;
- clippedVerticesItems[s + 3] = light.g;
- clippedVerticesItems[s + 4] = light.b;
- clippedVerticesItems[s + 5] = light.a;
- if (!twoColor) {
- clippedVerticesItems[s + 6] = u1;
- clippedVerticesItems[s + 7] = v1;
- clippedVerticesItems[s + 8] = x2;
- clippedVerticesItems[s + 9] = y2;
- clippedVerticesItems[s + 10] = light.r;
- clippedVerticesItems[s + 11] = light.g;
- clippedVerticesItems[s + 12] = light.b;
- clippedVerticesItems[s + 13] = light.a;
- clippedVerticesItems[s + 14] = u2;
- clippedVerticesItems[s + 15] = v2;
- clippedVerticesItems[s + 16] = x3;
- clippedVerticesItems[s + 17] = y3;
- clippedVerticesItems[s + 18] = light.r;
- clippedVerticesItems[s + 19] = light.g;
- clippedVerticesItems[s + 20] = light.b;
- clippedVerticesItems[s + 21] = light.a;
- clippedVerticesItems[s + 22] = u3;
- clippedVerticesItems[s + 23] = v3;
- }
- else {
- clippedVerticesItems[s + 6] = u1;
- clippedVerticesItems[s + 7] = v1;
- clippedVerticesItems[s + 8] = dark.r;
- clippedVerticesItems[s + 9] = dark.g;
- clippedVerticesItems[s + 10] = dark.b;
- clippedVerticesItems[s + 11] = dark.a;
- clippedVerticesItems[s + 12] = x2;
- clippedVerticesItems[s + 13] = y2;
- clippedVerticesItems[s + 14] = light.r;
- clippedVerticesItems[s + 15] = light.g;
- clippedVerticesItems[s + 16] = light.b;
- clippedVerticesItems[s + 17] = light.a;
- clippedVerticesItems[s + 18] = u2;
- clippedVerticesItems[s + 19] = v2;
- clippedVerticesItems[s + 20] = dark.r;
- clippedVerticesItems[s + 21] = dark.g;
- clippedVerticesItems[s + 22] = dark.b;
- clippedVerticesItems[s + 23] = dark.a;
- clippedVerticesItems[s + 24] = x3;
- clippedVerticesItems[s + 25] = y3;
- clippedVerticesItems[s + 26] = light.r;
- clippedVerticesItems[s + 27] = light.g;
- clippedVerticesItems[s + 28] = light.b;
- clippedVerticesItems[s + 29] = light.a;
- clippedVerticesItems[s + 30] = u3;
- clippedVerticesItems[s + 31] = v3;
- clippedVerticesItems[s + 32] = dark.r;
- clippedVerticesItems[s + 33] = dark.g;
- clippedVerticesItems[s + 34] = dark.b;
- clippedVerticesItems[s + 35] = dark.a;
- }
- s = clippedTriangles.length;
- var clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3);
- clippedTrianglesItems[s] = index;
- clippedTrianglesItems[s + 1] = (index + 1);
- clippedTrianglesItems[s + 2] = (index + 2);
- index += 3;
- continue outer;
- }
- }
- }
- };
- /** Clips the input triangle against the convex, clockwise clipping area. If the triangle lies entirely within the clipping
- * area, false is returned. The clipping area must duplicate the first vertex at the end of the vertices list. */
- SkeletonClipping.prototype.clip = function (x1, y1, x2, y2, x3, y3, clippingArea, output) {
- var originalOutput = output;
- var clipped = false;
- // Avoid copy at the end.
- var input = null;
- if (clippingArea.length % 4 >= 2) {
- input = output;
- output = this.scratch;
- }
- else
- input = this.scratch;
- input.length = 0;
- input.push(x1);
- input.push(y1);
- input.push(x2);
- input.push(y2);
- input.push(x3);
- input.push(y3);
- input.push(x1);
- input.push(y1);
- output.length = 0;
- var clippingVertices = clippingArea;
- var clippingVerticesLast = clippingArea.length - 4;
- for (var i = 0;; i += 2) {
- var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];
- var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3];
- var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2;
- var inputVertices = input;
- var inputVerticesLength = input.length - 2, outputStart = output.length;
- for (var ii = 0; ii < inputVerticesLength; ii += 2) {
- var inputX = inputVertices[ii], inputY = inputVertices[ii + 1];
- var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3];
- var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0;
- if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) {
- if (side2) { // v1 inside, v2 inside
- output.push(inputX2);
- output.push(inputY2);
- continue;
- }
- // v1 inside, v2 outside
- var c0 = inputY2 - inputY, c2 = inputX2 - inputX;
- var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
- if (Math.abs(s) > 0.000001) {
- var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
- output.push(edgeX + (edgeX2 - edgeX) * ua);
- output.push(edgeY + (edgeY2 - edgeY) * ua);
- }
- else {
- output.push(edgeX);
- output.push(edgeY);
- }
- }
- else if (side2) { // v1 outside, v2 inside
- var c0 = inputY2 - inputY, c2 = inputX2 - inputX;
- var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
- if (Math.abs(s) > 0.000001) {
- var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
- output.push(edgeX + (edgeX2 - edgeX) * ua);
- output.push(edgeY + (edgeY2 - edgeY) * ua);
- }
- else {
- output.push(edgeX);
- output.push(edgeY);
- }
- output.push(inputX2);
- output.push(inputY2);
- }
- clipped = true;
- }
- if (outputStart == output.length) { // All edges outside.
- originalOutput.length = 0;
- return true;
- }
- output.push(output[0]);
- output.push(output[1]);
- if (i == clippingVerticesLast)
+ case SLOT_RGBA2: {
+ let bezierCount = input.readInt(true);
+ let timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex);
+ let time = input.readFloat();
+ let r = input.readUnsignedByte() / 255;
+ let g = input.readUnsignedByte() / 255;
+ let b = input.readUnsignedByte() / 255;
+ let a = input.readUnsignedByte() / 255;
+ let r2 = input.readUnsignedByte() / 255;
+ let g2 = input.readUnsignedByte() / 255;
+ let b2 = input.readUnsignedByte() / 255;
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, r, g, b, a, r2, g2, b2);
+ if (frame == frameLast)
+ break;
+ let time2 = input.readFloat();
+ let nr = input.readUnsignedByte() / 255;
+ let ng = input.readUnsignedByte() / 255;
+ let nb = input.readUnsignedByte() / 255;
+ let na = input.readUnsignedByte() / 255;
+ let nr2 = input.readUnsignedByte() / 255;
+ let ng2 = input.readUnsignedByte() / 255;
+ let nb2 = input.readUnsignedByte() / 255;
+ switch (input.readByte()) {
+ case CURVE_STEPPED:
+ timeline.setStepped(frame);
break;
- var temp = output;
- output = input;
- output.length = 0;
- input = temp;
+ case CURVE_BEZIER:
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);
+ setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);
+ setBezier(input, timeline, bezier++, frame, 3, time, time2, a, na, 1);
+ setBezier(input, timeline, bezier++, frame, 4, time, time2, r2, nr2, 1);
+ setBezier(input, timeline, bezier++, frame, 5, time, time2, g2, ng2, 1);
+ setBezier(input, timeline, bezier++, frame, 6, time, time2, b2, nb2, 1);
+ }
+ time = time2;
+ r = nr;
+ g = ng;
+ b = nb;
+ a = na;
+ r2 = nr2;
+ g2 = ng2;
+ b2 = nb2;
+ }
+ timelines.push(timeline);
+ break;
}
- if (originalOutput != output) {
- originalOutput.length = 0;
- for (var i = 0, n = output.length - 2; i < n; i++)
- originalOutput[i] = output[i];
+ case SLOT_RGB2: {
+ let bezierCount = input.readInt(true);
+ let timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex);
+ let time = input.readFloat();
+ let r = input.readUnsignedByte() / 255;
+ let g = input.readUnsignedByte() / 255;
+ let b = input.readUnsignedByte() / 255;
+ let r2 = input.readUnsignedByte() / 255;
+ let g2 = input.readUnsignedByte() / 255;
+ let b2 = input.readUnsignedByte() / 255;
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, r, g, b, r2, g2, b2);
+ if (frame == frameLast)
+ break;
+ let time2 = input.readFloat();
+ let nr = input.readUnsignedByte() / 255;
+ let ng = input.readUnsignedByte() / 255;
+ let nb = input.readUnsignedByte() / 255;
+ let nr2 = input.readUnsignedByte() / 255;
+ let ng2 = input.readUnsignedByte() / 255;
+ let nb2 = input.readUnsignedByte() / 255;
+ switch (input.readByte()) {
+ case CURVE_STEPPED:
+ timeline.setStepped(frame);
+ break;
+ case CURVE_BEZIER:
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);
+ setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);
+ setBezier(input, timeline, bezier++, frame, 3, time, time2, r2, nr2, 1);
+ setBezier(input, timeline, bezier++, frame, 4, time, time2, g2, ng2, 1);
+ setBezier(input, timeline, bezier++, frame, 5, time, time2, b2, nb2, 1);
+ }
+ time = time2;
+ r = nr;
+ g = ng;
+ b = nb;
+ r2 = nr2;
+ g2 = ng2;
+ b2 = nb2;
+ }
+ timelines.push(timeline);
+ break;
}
- else
- originalOutput.length = originalOutput.length - 2;
- return clipped;
- };
- SkeletonClipping.makeClockwise = function (polygon) {
- var vertices = polygon;
- var verticeslength = polygon.length;
- var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0;
- for (var i = 0, n = verticeslength - 3; i < n; i += 2) {
- p1x = vertices[i];
- p1y = vertices[i + 1];
- p2x = vertices[i + 2];
- p2y = vertices[i + 3];
- area += p1x * p2y - p2x * p1y;
+ case SLOT_ALPHA: {
+ let timeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex);
+ let time = input.readFloat(), a = input.readUnsignedByte() / 255;
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, a);
+ if (frame == frameLast)
+ break;
+ let time2 = input.readFloat();
+ let a2 = input.readUnsignedByte() / 255;
+ switch (input.readByte()) {
+ case CURVE_STEPPED:
+ timeline.setStepped(frame);
+ break;
+ case CURVE_BEZIER:
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, a, a2, 1);
+ }
+ time = time2;
+ a = a2;
+ }
+ timelines.push(timeline);
+ break;
}
- if (area < 0)
- return;
- for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) {
- var x = vertices[i], y = vertices[i + 1];
- var other = lastX - i;
- vertices[i] = vertices[other];
- vertices[i + 1] = vertices[other + 1];
- vertices[other] = x;
- vertices[other + 1] = y;
+ }
+ }
+ }
+ for (let i = 0, n = input.readInt(true); i < n; i++) {
+ let boneIndex = input.readInt(true);
+ for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
+ let type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);
+ switch (type) {
+ case BONE_ROTATE:
+ timelines.push(readTimeline1(input, new RotateTimeline(frameCount, bezierCount, boneIndex), 1));
+ break;
+ case BONE_TRANSLATE:
+ timelines.push(readTimeline2(input, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale));
+ break;
+ case BONE_TRANSLATEX:
+ timelines.push(readTimeline1(input, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale));
+ break;
+ case BONE_TRANSLATEY:
+ timelines.push(readTimeline1(input, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale));
+ break;
+ case BONE_SCALE:
+ timelines.push(readTimeline2(input, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1));
+ break;
+ case BONE_SCALEX:
+ timelines.push(readTimeline1(input, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1));
+ break;
+ case BONE_SCALEY:
+ timelines.push(readTimeline1(input, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1));
+ break;
+ case BONE_SHEAR:
+ timelines.push(readTimeline2(input, new ShearTimeline(frameCount, bezierCount, boneIndex), 1));
+ break;
+ case BONE_SHEARX:
+ timelines.push(readTimeline1(input, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1));
+ break;
+ case BONE_SHEARY:
+ timelines.push(readTimeline1(input, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1));
+ }
+ }
+ }
+ for (let i = 0, n = input.readInt(true); i < n; i++) {
+ let index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;
+ let timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index);
+ let time = input.readFloat(), mix = input.readFloat(), softness = input.readFloat() * scale;
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, mix, softness, input.readByte(), input.readBoolean(), input.readBoolean());
+ if (frame == frameLast)
+ break;
+ let time2 = input.readFloat(), mix2 = input.readFloat(), softness2 = input.readFloat() * scale;
+ switch (input.readByte()) {
+ case CURVE_STEPPED:
+ timeline.setStepped(frame);
+ break;
+ case CURVE_BEZIER:
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale);
+ }
+ time = time2;
+ mix = mix2;
+ softness = softness2;
+ }
+ timelines.push(timeline);
+ }
+ for (let i = 0, n = input.readInt(true); i < n; i++) {
+ let index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;
+ let timeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index);
+ let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat(), mixScaleX = input.readFloat(), mixScaleY = input.readFloat(), mixShearY = input.readFloat();
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);
+ if (frame == frameLast)
+ break;
+ let time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat(), mixScaleX2 = input.readFloat(), mixScaleY2 = input.readFloat(), mixShearY2 = input.readFloat();
+ switch (input.readByte()) {
+ case CURVE_STEPPED:
+ timeline.setStepped(frame);
+ break;
+ case CURVE_BEZIER:
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);
+ setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);
+ setBezier(input, timeline, bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);
+ setBezier(input, timeline, bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);
+ setBezier(input, timeline, bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1);
+ }
+ time = time2;
+ mixRotate = mixRotate2;
+ mixX = mixX2;
+ mixY = mixY2;
+ mixScaleX = mixScaleX2;
+ mixScaleY = mixScaleY2;
+ mixShearY = mixShearY2;
+ }
+ timelines.push(timeline);
+ }
+ for (let i = 0, n = input.readInt(true); i < n; i++) {
+ let index = input.readInt(true);
+ let data = skeletonData.pathConstraints[index];
+ for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
+ switch (input.readByte()) {
+ case PATH_POSITION:
+ timelines.push(readTimeline1(input, new PathConstraintPositionTimeline(input.readInt(true), input.readInt(true), index), data.positionMode == PositionMode.Fixed ? scale : 1));
+ break;
+ case PATH_SPACING:
+ timelines.push(readTimeline1(input, new PathConstraintSpacingTimeline(input.readInt(true), input.readInt(true), index), data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed ? scale : 1));
+ break;
+ case PATH_MIX:
+ let timeline = new PathConstraintMixTimeline(input.readInt(true), input.readInt(true), index);
+ let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat();
+ for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {
+ timeline.setFrame(frame, time, mixRotate, mixX, mixY);
+ if (frame == frameLast)
+ break;
+ let time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat();
+ switch (input.readByte()) {
+ case CURVE_STEPPED:
+ timeline.setStepped(frame);
+ break;
+ case CURVE_BEZIER:
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);
+ setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);
+ }
+ time = time2;
+ mixRotate = mixRotate2;
+ mixX = mixX2;
+ mixY = mixY2;
+ }
+ timelines.push(timeline);
+ }
+ }
+ }
+ for (let i = 0, n = input.readInt(true); i < n; i++) {
+ let skin = skeletonData.skins[input.readInt(true)];
+ for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {
+ let slotIndex = input.readInt(true);
+ for (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {
+ let attachmentName = input.readStringRef();
+ let attachment = skin.getAttachment(slotIndex, attachmentName);
+ let weighted = attachment.bones;
+ let vertices = attachment.vertices;
+ let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
+ let frameCount = input.readInt(true);
+ let frameLast = frameCount - 1;
+ let bezierCount = input.readInt(true);
+ let timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, attachment);
+ let time = input.readFloat();
+ for (let frame = 0, bezier = 0; ; frame++) {
+ let deform;
+ let end = input.readInt(true);
+ if (end == 0)
+ deform = weighted ? Utils.newFloatArray(deformLength) : vertices;
+ else {
+ deform = Utils.newFloatArray(deformLength);
+ let start = input.readInt(true);
+ end += start;
+ if (scale == 1) {
+ for (let v = start; v < end; v++)
+ deform[v] = input.readFloat();
+ } else {
+ for (let v = start; v < end; v++)
+ deform[v] = input.readFloat() * scale;
+ }
+ if (!weighted) {
+ for (let v = 0, vn = deform.length; v < vn; v++)
+ deform[v] += vertices[v];
+ }
+ }
+ timeline.setFrame(frame, time, deform);
+ if (frame == frameLast)
+ break;
+ let time2 = input.readFloat();
+ switch (input.readByte()) {
+ case CURVE_STEPPED:
+ timeline.setStepped(frame);
+ break;
+ case CURVE_BEZIER:
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1);
+ }
+ time = time2;
}
- };
- return SkeletonClipping;
- }());
+ timelines.push(timeline);
+ }
+ }
+ }
+ let drawOrderCount = input.readInt(true);
+ if (drawOrderCount > 0) {
+ let timeline = new DrawOrderTimeline(drawOrderCount);
+ let slotCount = skeletonData.slots.length;
+ for (let i = 0; i < drawOrderCount; i++) {
+ let time = input.readFloat();
+ let offsetCount = input.readInt(true);
+ let drawOrder = Utils.newArray(slotCount, 0);
+ for (let ii = slotCount - 1; ii >= 0; ii--)
+ drawOrder[ii] = -1;
+ let unchanged = Utils.newArray(slotCount - offsetCount, 0);
+ let originalIndex = 0, unchangedIndex = 0;
+ for (let ii = 0; ii < offsetCount; ii++) {
+ let slotIndex = input.readInt(true);
+ while (originalIndex != slotIndex)
+ unchanged[unchangedIndex++] = originalIndex++;
+ drawOrder[originalIndex + input.readInt(true)] = originalIndex++;
+ }
+ while (originalIndex < slotCount)
+ unchanged[unchangedIndex++] = originalIndex++;
+ for (let ii = slotCount - 1; ii >= 0; ii--)
+ if (drawOrder[ii] == -1)
+ drawOrder[ii] = unchanged[--unchangedIndex];
+ timeline.setFrame(i, time, drawOrder);
+ }
+ timelines.push(timeline);
+ }
+ let eventCount = input.readInt(true);
+ if (eventCount > 0) {
+ let timeline = new EventTimeline(eventCount);
+ for (let i = 0; i < eventCount; i++) {
+ let time = input.readFloat();
+ let eventData = skeletonData.events[input.readInt(true)];
+ let event = new Event(time, eventData);
+ event.intValue = input.readInt(false);
+ event.floatValue = input.readFloat();
+ event.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue;
+ if (event.data.audioPath) {
+ event.volume = input.readFloat();
+ event.balance = input.readFloat();
+ }
+ timeline.setFrame(i, event);
+ }
+ timelines.push(timeline);
+ }
+ let duration = 0;
+ for (let i = 0, n = timelines.length; i < n; i++)
+ duration = Math.max(duration, timelines[i].getDuration());
+ return new Animation(name, timelines, duration);
+ }
+ };
+ var BinaryInput = class {
+ constructor(data, strings = new Array(), index = 0, buffer = new DataView(data.buffer)) {
+ this.strings = strings;
+ this.index = index;
+ this.buffer = buffer;
+ }
+ readByte() {
+ return this.buffer.getInt8(this.index++);
+ }
+ readUnsignedByte() {
+ return this.buffer.getUint8(this.index++);
+ }
+ readShort() {
+ let value = this.buffer.getInt16(this.index);
+ this.index += 2;
+ return value;
+ }
+ readInt32() {
+ let value = this.buffer.getInt32(this.index);
+ this.index += 4;
+ return value;
+ }
+ readInt(optimizePositive) {
+ let b = this.readByte();
+ let result = b & 127;
+ if ((b & 128) != 0) {
+ b = this.readByte();
+ result |= (b & 127) << 7;
+ if ((b & 128) != 0) {
+ b = this.readByte();
+ result |= (b & 127) << 14;
+ if ((b & 128) != 0) {
+ b = this.readByte();
+ result |= (b & 127) << 21;
+ if ((b & 128) != 0) {
+ b = this.readByte();
+ result |= (b & 127) << 28;
+ }
+ }
+ }
+ }
+ return optimizePositive ? result : result >>> 1 ^ -(result & 1);
+ }
+ readStringRef() {
+ let index = this.readInt(true);
+ return index == 0 ? null : this.strings[index - 1];
+ }
+ readString() {
+ let byteCount = this.readInt(true);
+ switch (byteCount) {
+ case 0:
+ return null;
+ case 1:
+ return "";
+ }
+ byteCount--;
+ let chars = "";
+ let charCount = 0;
+ for (let i = 0; i < byteCount; ) {
+ let b = this.readByte();
+ switch (b >> 4) {
+ case 12:
+ case 13:
+ chars += String.fromCharCode((b & 31) << 6 | this.readByte() & 63);
+ i += 2;
+ break;
+ case 14:
+ chars += String.fromCharCode((b & 15) << 12 | (this.readByte() & 63) << 6 | this.readByte() & 63);
+ i += 3;
+ break;
+ default:
+ chars += String.fromCharCode(b);
+ i++;
+ }
+ }
+ return chars;
+ }
+ readFloat() {
+ let value = this.buffer.getFloat32(this.index);
+ this.index += 4;
+ return value;
+ }
+ readBoolean() {
+ return this.readByte() != 0;
+ }
+ };
+ var LinkedMesh = class {
+ constructor(mesh, skin, slotIndex, parent, inheritDeform) {
+ this.mesh = mesh;
+ this.skin = skin;
+ this.slotIndex = slotIndex;
+ this.parent = parent;
+ this.inheritDeform = inheritDeform;
+ }
+ };
+ var Vertices = class {
+ constructor(bones = null, vertices = null) {
+ this.bones = bones;
+ this.vertices = vertices;
+ }
+ };
+ var AttachmentType;
+ (function(AttachmentType2) {
+ AttachmentType2[AttachmentType2["Region"] = 0] = "Region";
+ AttachmentType2[AttachmentType2["BoundingBox"] = 1] = "BoundingBox";
+ AttachmentType2[AttachmentType2["Mesh"] = 2] = "Mesh";
+ AttachmentType2[AttachmentType2["LinkedMesh"] = 3] = "LinkedMesh";
+ AttachmentType2[AttachmentType2["Path"] = 4] = "Path";
+ AttachmentType2[AttachmentType2["Point"] = 5] = "Point";
+ AttachmentType2[AttachmentType2["Clipping"] = 6] = "Clipping";
+ })(AttachmentType || (AttachmentType = {}));
+ function readTimeline1(input, timeline, scale) {
+ let time = input.readFloat(), value = input.readFloat() * scale;
+ for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {
+ timeline.setFrame(frame, time, value);
+ if (frame == frameLast)
+ break;
+ let time2 = input.readFloat(), value2 = input.readFloat() * scale;
+ switch (input.readByte()) {
+ case CURVE_STEPPED:
+ timeline.setStepped(frame);
+ break;
+ case CURVE_BEZIER:
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, value, value2, scale);
+ }
+ time = time2;
+ value = value2;
+ }
+ return timeline;
+ }
+ function readTimeline2(input, timeline, scale) {
+ let time = input.readFloat(), value1 = input.readFloat() * scale, value2 = input.readFloat() * scale;
+ for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {
+ timeline.setFrame(frame, time, value1, value2);
+ if (frame == frameLast)
+ break;
+ let time2 = input.readFloat(), nvalue1 = input.readFloat() * scale, nvalue2 = input.readFloat() * scale;
+ switch (input.readByte()) {
+ case CURVE_STEPPED:
+ timeline.setStepped(frame);
+ break;
+ case CURVE_BEZIER:
+ setBezier(input, timeline, bezier++, frame, 0, time, time2, value1, nvalue1, scale);
+ setBezier(input, timeline, bezier++, frame, 1, time, time2, value2, nvalue2, scale);
+ }
+ time = time2;
+ value1 = nvalue1;
+ value2 = nvalue2;
+ }
+ return timeline;
+ }
+ function setBezier(input, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {
+ timeline.setBezier(bezier, frame, value, time1, value1, input.readFloat(), input.readFloat() * scale, input.readFloat(), input.readFloat() * scale, time2, value2);
+ }
+ var BONE_ROTATE = 0;
+ var BONE_TRANSLATE = 1;
+ var BONE_TRANSLATEX = 2;
+ var BONE_TRANSLATEY = 3;
+ var BONE_SCALE = 4;
+ var BONE_SCALEX = 5;
+ var BONE_SCALEY = 6;
+ var BONE_SHEAR = 7;
+ var BONE_SHEARX = 8;
+ var BONE_SHEARY = 9;
+ var SLOT_ATTACHMENT = 0;
+ var SLOT_RGBA = 1;
+ var SLOT_RGB = 2;
+ var SLOT_RGBA2 = 3;
+ var SLOT_RGB2 = 4;
+ var SLOT_ALPHA = 5;
+ var PATH_POSITION = 0;
+ var PATH_SPACING = 1;
+ var PATH_MIX = 2;
+ var CURVE_STEPPED = 1;
+ var CURVE_BEZIER = 2;
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- /** Loads skeleton data in the Spine JSON format.
- *
- * See [Spine JSON format](http://esotericsoftware.com/spine-json-format) and
- * [JSON and binary data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the Spine
- * Runtimes Guide. */
- var SkeletonJson = /** @class */ (function () {
- function SkeletonJson(attachmentLoader) {
- /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at
- * runtime than were used in Spine.
- *
- * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */
- this.scale = 1;
- this.linkedMeshes = new Array();
- this.attachmentLoader = attachmentLoader;
+ // spine-core/src/SkeletonBounds.ts
+ var SkeletonBounds = class {
+ constructor() {
+ this.minX = 0;
+ this.minY = 0;
+ this.maxX = 0;
+ this.maxY = 0;
+ this.boundingBoxes = new Array();
+ this.polygons = new Array();
+ this.polygonPool = new Pool(() => {
+ return Utils.newFloatArray(16);
+ });
+ }
+ update(skeleton, updateAabb) {
+ if (!skeleton)
+ throw new Error("skeleton cannot be null.");
+ let boundingBoxes = this.boundingBoxes;
+ let polygons = this.polygons;
+ let polygonPool = this.polygonPool;
+ let slots = skeleton.slots;
+ let slotCount = slots.length;
+ boundingBoxes.length = 0;
+ polygonPool.freeAll(polygons);
+ polygons.length = 0;
+ for (let i = 0; i < slotCount; i++) {
+ let slot = slots[i];
+ if (!slot.bone.active)
+ continue;
+ let attachment = slot.getAttachment();
+ if (attachment instanceof BoundingBoxAttachment) {
+ let boundingBox = attachment;
+ boundingBoxes.push(boundingBox);
+ let polygon = polygonPool.obtain();
+ if (polygon.length != boundingBox.worldVerticesLength) {
+ polygon = Utils.newFloatArray(boundingBox.worldVerticesLength);
+ }
+ polygons.push(polygon);
+ boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2);
}
- SkeletonJson.prototype.readSkeletonData = function (json) {
- var scale = this.scale;
- var skeletonData = new SkeletonData();
- var root = typeof (json) === "string" ? JSON.parse(json) : json;
- // Skeleton
- var skeletonMap = root.skeleton;
- if (skeletonMap) {
- skeletonData.hash = skeletonMap.hash;
- skeletonData.version = skeletonMap.spine;
- skeletonData.x = skeletonMap.x;
- skeletonData.y = skeletonMap.y;
- skeletonData.width = skeletonMap.width;
- skeletonData.height = skeletonMap.height;
- skeletonData.fps = skeletonMap.fps;
- skeletonData.imagesPath = skeletonMap.images;
- }
- // Bones
- if (root.bones) {
- for (var i = 0; i < root.bones.length; i++) {
- var boneMap = root.bones[i];
- var parent_1 = null;
- var parentName = getValue(boneMap, "parent", null);
- if (parentName)
- parent_1 = skeletonData.findBone(parentName);
- var data = new BoneData(skeletonData.bones.length, boneMap.name, parent_1);
- data.length = getValue(boneMap, "length", 0) * scale;
- data.x = getValue(boneMap, "x", 0) * scale;
- data.y = getValue(boneMap, "y", 0) * scale;
- data.rotation = getValue(boneMap, "rotation", 0);
- data.scaleX = getValue(boneMap, "scaleX", 1);
- data.scaleY = getValue(boneMap, "scaleY", 1);
- data.shearX = getValue(boneMap, "shearX", 0);
- data.shearY = getValue(boneMap, "shearY", 0);
- data.transformMode = Utils.enumValue(exports.TransformMode, getValue(boneMap, "transform", "Normal"));
- data.skinRequired = getValue(boneMap, "skin", false);
- var color = getValue(boneMap, "color", null);
- if (color)
- data.color.setFromString(color);
- skeletonData.bones.push(data);
- }
- }
- // Slots.
- if (root.slots) {
- for (var i = 0; i < root.slots.length; i++) {
- var slotMap = root.slots[i];
- var boneData = skeletonData.findBone(slotMap.bone);
- var data = new SlotData(skeletonData.slots.length, slotMap.name, boneData);
- var color = getValue(slotMap, "color", null);
- if (color)
- data.color.setFromString(color);
- var dark = getValue(slotMap, "dark", null);
- if (dark)
- data.darkColor = Color.fromString(dark);
- data.attachmentName = getValue(slotMap, "attachment", null);
- data.blendMode = Utils.enumValue(exports.BlendMode, getValue(slotMap, "blend", "normal"));
- skeletonData.slots.push(data);
- }
- }
- // IK constraints
- if (root.ik) {
- for (var i = 0; i < root.ik.length; i++) {
- var constraintMap = root.ik[i];
- var data = new IkConstraintData(constraintMap.name);
- data.order = getValue(constraintMap, "order", 0);
- data.skinRequired = getValue(constraintMap, "skin", false);
- for (var ii = 0; ii < constraintMap.bones.length; ii++)
- data.bones.push(skeletonData.findBone(constraintMap.bones[ii]));
- data.target = skeletonData.findBone(constraintMap.target);
- data.mix = getValue(constraintMap, "mix", 1);
- data.softness = getValue(constraintMap, "softness", 0) * scale;
- data.bendDirection = getValue(constraintMap, "bendPositive", true) ? 1 : -1;
- data.compress = getValue(constraintMap, "compress", false);
- data.stretch = getValue(constraintMap, "stretch", false);
- data.uniform = getValue(constraintMap, "uniform", false);
- skeletonData.ikConstraints.push(data);
- }
- }
- // Transform constraints.
- if (root.transform) {
- for (var i = 0; i < root.transform.length; i++) {
- var constraintMap = root.transform[i];
- var data = new TransformConstraintData(constraintMap.name);
- data.order = getValue(constraintMap, "order", 0);
- data.skinRequired = getValue(constraintMap, "skin", false);
- for (var ii = 0; ii < constraintMap.bones.length; ii++)
- data.bones.push(skeletonData.findBone(constraintMap.bones[ii]));
- var targetName = constraintMap.target;
- data.target = skeletonData.findBone(targetName);
- data.local = getValue(constraintMap, "local", false);
- data.relative = getValue(constraintMap, "relative", false);
- data.offsetRotation = getValue(constraintMap, "rotation", 0);
- data.offsetX = getValue(constraintMap, "x", 0) * scale;
- data.offsetY = getValue(constraintMap, "y", 0) * scale;
- data.offsetScaleX = getValue(constraintMap, "scaleX", 0);
- data.offsetScaleY = getValue(constraintMap, "scaleY", 0);
- data.offsetShearY = getValue(constraintMap, "shearY", 0);
- data.mixRotate = getValue(constraintMap, "mixRotate", 1);
- data.mixX = getValue(constraintMap, "mixX", 1);
- data.mixY = getValue(constraintMap, "mixY", data.mixX);
- data.mixScaleX = getValue(constraintMap, "mixScaleX", 1);
- data.mixScaleY = getValue(constraintMap, "mixScaleY", data.mixScaleX);
- data.mixShearY = getValue(constraintMap, "mixShearY", 1);
- skeletonData.transformConstraints.push(data);
- }
- }
- // Path constraints.
- if (root.path) {
- for (var i = 0; i < root.path.length; i++) {
- var constraintMap = root.path[i];
- var data = new PathConstraintData(constraintMap.name);
- data.order = getValue(constraintMap, "order", 0);
- data.skinRequired = getValue(constraintMap, "skin", false);
- for (var ii = 0; ii < constraintMap.bones.length; ii++)
- data.bones.push(skeletonData.findBone(constraintMap.bones[ii]));
- var targetName = constraintMap.target;
- data.target = skeletonData.findSlot(targetName);
- data.positionMode = Utils.enumValue(exports.PositionMode, getValue(constraintMap, "positionMode", "Percent"));
- data.spacingMode = Utils.enumValue(exports.SpacingMode, getValue(constraintMap, "spacingMode", "Length"));
- data.rotateMode = Utils.enumValue(exports.RotateMode, getValue(constraintMap, "rotateMode", "Tangent"));
- data.offsetRotation = getValue(constraintMap, "rotation", 0);
- data.position = getValue(constraintMap, "position", 0);
- if (data.positionMode == exports.PositionMode.Fixed)
- data.position *= scale;
- data.spacing = getValue(constraintMap, "spacing", 0);
- if (data.spacingMode == exports.SpacingMode.Length || data.spacingMode == exports.SpacingMode.Fixed)
- data.spacing *= scale;
- data.mixRotate = getValue(constraintMap, "mixRotate", 1);
- data.mixX = getValue(constraintMap, "mixX", 1);
- data.mixY = getValue(constraintMap, "mixY", data.mixX);
- skeletonData.pathConstraints.push(data);
- }
- }
- // Skins.
- if (root.skins) {
- for (var i = 0; i < root.skins.length; i++) {
- var skinMap = root.skins[i];
- var skin = new Skin(skinMap.name);
- if (skinMap.bones) {
- for (var ii = 0; ii < skinMap.bones.length; ii++)
- skin.bones.push(skeletonData.findBone(skinMap.bones[ii]));
- }
- if (skinMap.ik) {
- for (var ii = 0; ii < skinMap.ik.length; ii++)
- skin.constraints.push(skeletonData.findIkConstraint(skinMap.ik[ii]));
- }
- if (skinMap.transform) {
- for (var ii = 0; ii < skinMap.transform.length; ii++)
- skin.constraints.push(skeletonData.findTransformConstraint(skinMap.transform[ii]));
- }
- if (skinMap.path) {
- for (var ii = 0; ii < skinMap.path.length; ii++)
- skin.constraints.push(skeletonData.findPathConstraint(skinMap.path[ii]));
- }
- for (var slotName in skinMap.attachments) {
- var slot = skeletonData.findSlot(slotName);
- var slotMap = skinMap.attachments[slotName];
- for (var entryName in slotMap) {
- var attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData);
- if (attachment)
- skin.setAttachment(slot.index, entryName, attachment);
- }
- }
- skeletonData.skins.push(skin);
- if (skin.name == "default")
- skeletonData.defaultSkin = skin;
- }
- }
- // Linked meshes.
- for (var i = 0, n = this.linkedMeshes.length; i < n; i++) {
- var linkedMesh = this.linkedMeshes[i];
- var skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);
- var parent_2 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);
- linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_2 : linkedMesh.mesh;
- linkedMesh.mesh.setParentMesh(parent_2);
- linkedMesh.mesh.updateUVs();
- }
- this.linkedMeshes.length = 0;
- // Events.
- if (root.events) {
- for (var eventName in root.events) {
- var eventMap = root.events[eventName];
- var data = new EventData(eventName);
- data.intValue = getValue(eventMap, "int", 0);
- data.floatValue = getValue(eventMap, "float", 0);
- data.stringValue = getValue(eventMap, "string", "");
- data.audioPath = getValue(eventMap, "audio", null);
- if (data.audioPath) {
- data.volume = getValue(eventMap, "volume", 1);
- data.balance = getValue(eventMap, "balance", 0);
- }
- skeletonData.events.push(data);
- }
- }
- // Animations.
- if (root.animations) {
- for (var animationName in root.animations) {
- var animationMap = root.animations[animationName];
- this.readAnimation(animationMap, animationName, skeletonData);
- }
- }
- return skeletonData;
- };
- SkeletonJson.prototype.readAttachment = function (map, skin, slotIndex, name, skeletonData) {
- var scale = this.scale;
- name = getValue(map, "name", name);
- switch (getValue(map, "type", "region")) {
- case "region": {
- var path = getValue(map, "path", name);
- var region = this.attachmentLoader.newRegionAttachment(skin, name, path);
- if (!region)
- return null;
- region.path = path;
- region.x = getValue(map, "x", 0) * scale;
- region.y = getValue(map, "y", 0) * scale;
- region.scaleX = getValue(map, "scaleX", 1);
- region.scaleY = getValue(map, "scaleY", 1);
- region.rotation = getValue(map, "rotation", 0);
- region.width = map.width * scale;
- region.height = map.height * scale;
- var color = getValue(map, "color", null);
- if (color)
- region.color.setFromString(color);
- region.updateOffset();
- return region;
- }
- case "boundingbox": {
- var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);
- if (!box)
- return null;
- this.readVertices(map, box, map.vertexCount << 1);
- var color = getValue(map, "color", null);
- if (color)
- box.color.setFromString(color);
- return box;
- }
- case "mesh":
- case "linkedmesh": {
- var path = getValue(map, "path", name);
- var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
- if (!mesh)
- return null;
- mesh.path = path;
- var color = getValue(map, "color", null);
- if (color)
- mesh.color.setFromString(color);
- mesh.width = getValue(map, "width", 0) * scale;
- mesh.height = getValue(map, "height", 0) * scale;
- var parent_3 = getValue(map, "parent", null);
- if (parent_3) {
- this.linkedMeshes.push(new LinkedMesh(mesh, getValue(map, "skin", null), slotIndex, parent_3, getValue(map, "deform", true)));
- return mesh;
- }
- var uvs = map.uvs;
- this.readVertices(map, mesh, uvs.length);
- mesh.triangles = map.triangles;
- mesh.regionUVs = uvs;
- mesh.updateUVs();
- mesh.edges = getValue(map, "edges", null);
- mesh.hullLength = getValue(map, "hull", 0) * 2;
- return mesh;
- }
- case "path": {
- var path = this.attachmentLoader.newPathAttachment(skin, name);
- if (!path)
- return null;
- path.closed = getValue(map, "closed", false);
- path.constantSpeed = getValue(map, "constantSpeed", true);
- var vertexCount = map.vertexCount;
- this.readVertices(map, path, vertexCount << 1);
- var lengths = Utils.newArray(vertexCount / 3, 0);
- for (var i = 0; i < map.lengths.length; i++)
- lengths[i] = map.lengths[i] * scale;
- path.lengths = lengths;
- var color = getValue(map, "color", null);
- if (color)
- path.color.setFromString(color);
- return path;
- }
- case "point": {
- var point = this.attachmentLoader.newPointAttachment(skin, name);
- if (!point)
- return null;
- point.x = getValue(map, "x", 0) * scale;
- point.y = getValue(map, "y", 0) * scale;
- point.rotation = getValue(map, "rotation", 0);
- var color = getValue(map, "color", null);
- if (color)
- point.color.setFromString(color);
- return point;
- }
- case "clipping": {
- var clip = this.attachmentLoader.newClippingAttachment(skin, name);
- if (!clip)
- return null;
- var end = getValue(map, "end", null);
- if (end)
- clip.endSlot = skeletonData.findSlot(end);
- var vertexCount = map.vertexCount;
- this.readVertices(map, clip, vertexCount << 1);
- var color = getValue(map, "color", null);
- if (color)
- clip.color.setFromString(color);
- return clip;
- }
- }
- return null;
- };
- SkeletonJson.prototype.readVertices = function (map, attachment, verticesLength) {
- var scale = this.scale;
- attachment.worldVerticesLength = verticesLength;
- var vertices = map.vertices;
- if (verticesLength == vertices.length) {
- var scaledVertices = Utils.toFloatArray(vertices);
- if (scale != 1) {
- for (var i = 0, n = vertices.length; i < n; i++)
- scaledVertices[i] *= scale;
- }
- attachment.vertices = scaledVertices;
- return;
- }
- var weights = new Array();
- var bones = new Array();
- for (var i = 0, n = vertices.length; i < n;) {
- var boneCount = vertices[i++];
- bones.push(boneCount);
- for (var nn = i + boneCount * 4; i < nn; i += 4) {
- bones.push(vertices[i]);
- weights.push(vertices[i + 1] * scale);
- weights.push(vertices[i + 2] * scale);
- weights.push(vertices[i + 3]);
- }
- }
- attachment.bones = bones;
- attachment.vertices = Utils.toFloatArray(weights);
- };
- SkeletonJson.prototype.readAnimation = function (map, name, skeletonData) {
- var scale = this.scale;
- var timelines = new Array();
- // Slot timelines.
- if (map.slots) {
- for (var slotName in map.slots) {
- var slotMap = map.slots[slotName];
- var slotIndex = skeletonData.findSlotIndex(slotName);
- for (var timelineName in slotMap) {
- var timelineMap = slotMap[timelineName];
- if (!timelineMap)
- continue;
- if (timelineName == "attachment") {
- var timeline = new AttachmentTimeline(timelineMap.length, slotIndex);
- for (var frame = 0; frame < timelineMap.length; frame++) {
- var keyMap = timelineMap[frame];
- timeline.setFrame(frame, getValue(keyMap, "time", 0), keyMap.name);
- }
- timelines.push(timeline);
- }
- else if (timelineName == "rgba") {
- var timeline = new RGBATimeline(timelineMap.length, timelineMap.length << 2, slotIndex);
- var keyMap = timelineMap[0];
- var time = getValue(keyMap, "time", 0);
- var color = Color.fromString(keyMap.color);
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, color.r, color.g, color.b, color.a);
- var nextMap = timelineMap[frame + 1];
- if (!nextMap) {
- timeline.shrink(bezier);
- break;
- }
- var time2 = getValue(nextMap, "time", 0);
- var newColor = Color.fromString(nextMap.color);
- var curve = keyMap.curve;
- if (curve) {
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);
- }
- time = time2;
- color = newColor;
- keyMap = nextMap;
- }
- timelines.push(timeline);
- }
- else if (timelineName == "rgb") {
- var timeline = new RGBTimeline(timelineMap.length, timelineMap.length * 3, slotIndex);
- var keyMap = timelineMap[0];
- var time = getValue(keyMap, "time", 0);
- var color = Color.fromString(keyMap.color);
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, color.r, color.g, color.b);
- var nextMap = timelineMap[frame + 1];
- if (!nextMap) {
- timeline.shrink(bezier);
- break;
- }
- var time2 = getValue(nextMap, "time", 0);
- var newColor = Color.fromString(nextMap.color);
- var curve = keyMap.curve;
- if (curve) {
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);
- }
- time = time2;
- color = newColor;
- keyMap = nextMap;
- }
- timelines.push(timeline);
- }
- else if (timelineName == "alpha") {
- timelines.push(readTimeline1(timelineMap, new AlphaTimeline(timelineMap.length, timelineMap.length, slotIndex), 0, 1));
- }
- else if (timelineName == "rgba2") {
- var timeline = new RGBA2Timeline(timelineMap.length, timelineMap.length * 7, slotIndex);
- var keyMap = timelineMap[0];
- var time = getValue(keyMap, "time", 0);
- var color = Color.fromString(keyMap.light);
- var color2 = Color.fromString(keyMap.dark);
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b);
- var nextMap = timelineMap[frame + 1];
- if (!nextMap) {
- timeline.shrink(bezier);
- break;
- }
- var time2 = getValue(nextMap, "time", 0);
- var newColor = Color.fromString(nextMap.light);
- var newColor2 = Color.fromString(nextMap.dark);
- var curve = keyMap.curve;
- if (curve) {
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.r, newColor2.r, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.g, newColor2.g, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 6, time, time2, color2.b, newColor2.b, 1);
- }
- time = time2;
- color = newColor;
- color2 = newColor2;
- keyMap = nextMap;
- }
- timelines.push(timeline);
- }
- else if (timelineName == "rgb2") {
- var timeline = new RGB2Timeline(timelineMap.length, timelineMap.length * 6, slotIndex);
- var keyMap = timelineMap[0];
- var time = getValue(keyMap, "time", 0);
- var color = Color.fromString(keyMap.light);
- var color2 = Color.fromString(keyMap.dark);
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, color.r, color.g, color.b, color2.r, color2.g, color2.b);
- var nextMap = timelineMap[frame + 1];
- if (!nextMap) {
- timeline.shrink(bezier);
- break;
- }
- var time2 = getValue(nextMap, "time", 0);
- var newColor = Color.fromString(nextMap.light);
- var newColor2 = Color.fromString(nextMap.dark);
- var curve = keyMap.curve;
- if (curve) {
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.r, newColor2.r, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.g, newColor2.g, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.b, newColor2.b, 1);
- }
- time = time2;
- color = newColor;
- color2 = newColor2;
- keyMap = nextMap;
- }
- timelines.push(timeline);
- }
- }
- }
- }
- // Bone timelines.
- if (map.bones) {
- for (var boneName in map.bones) {
- var boneMap = map.bones[boneName];
- var boneIndex = skeletonData.findBoneIndex(boneName);
- for (var timelineName in boneMap) {
- var timelineMap = boneMap[timelineName];
- if (timelineMap.length == 0)
- continue;
- if (timelineName === "rotate") {
- timelines.push(readTimeline1(timelineMap, new RotateTimeline(timelineMap.length, timelineMap.length, boneIndex), 0, 1));
- }
- else if (timelineName === "translate") {
- var timeline = new TranslateTimeline(timelineMap.length, timelineMap.length << 1, boneIndex);
- timelines.push(readTimeline2(timelineMap, timeline, "x", "y", 0, scale));
- }
- else if (timelineName === "translatex") {
- var timeline = new TranslateXTimeline(timelineMap.length, timelineMap.length, boneIndex);
- timelines.push(readTimeline1(timelineMap, timeline, 0, scale));
- }
- else if (timelineName === "translatey") {
- var timeline = new TranslateYTimeline(timelineMap.length, timelineMap.length, boneIndex);
- timelines.push(readTimeline1(timelineMap, timeline, 0, scale));
- }
- else if (timelineName === "scale") {
- var timeline = new ScaleTimeline(timelineMap.length, timelineMap.length << 1, boneIndex);
- timelines.push(readTimeline2(timelineMap, timeline, "x", "y", 1, 1));
- }
- else if (timelineName === "scalex") {
- var timeline = new ScaleXTimeline(timelineMap.length, timelineMap.length, boneIndex);
- timelines.push(readTimeline1(timelineMap, timeline, 1, 1));
- }
- else if (timelineName === "scaley") {
- var timeline = new ScaleYTimeline(timelineMap.length, timelineMap.length, boneIndex);
- timelines.push(readTimeline1(timelineMap, timeline, 1, 1));
- }
- else if (timelineName === "shear") {
- var timeline = new ShearTimeline(timelineMap.length, timelineMap.length << 1, boneIndex);
- timelines.push(readTimeline2(timelineMap, timeline, "x", "y", 0, 1));
- }
- else if (timelineName === "shearx") {
- var timeline = new ShearXTimeline(timelineMap.length, timelineMap.length, boneIndex);
- timelines.push(readTimeline1(timelineMap, timeline, 0, 1));
- }
- else if (timelineName === "sheary") {
- var timeline = new ShearYTimeline(timelineMap.length, timelineMap.length, boneIndex);
- timelines.push(readTimeline1(timelineMap, timeline, 0, 1));
- }
- }
- }
- }
- // IK constraint timelines.
- if (map.ik) {
- for (var constraintName in map.ik) {
- var constraintMap = map.ik[constraintName];
- var keyMap = constraintMap[0];
- if (!keyMap)
- continue;
- var constraint = skeletonData.findIkConstraint(constraintName);
- var constraintIndex = skeletonData.ikConstraints.indexOf(constraint);
- var timeline = new IkConstraintTimeline(constraintMap.length, constraintMap.length << 1, constraintIndex);
- var time = getValue(keyMap, "time", 0);
- var mix = getValue(keyMap, "mix", 1);
- var softness = getValue(keyMap, "softness", 0) * scale;
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, mix, softness, getValue(keyMap, "bendPositive", true) ? 1 : -1, getValue(keyMap, "compress", false), getValue(keyMap, "stretch", false));
- var nextMap = constraintMap[frame + 1];
- if (!nextMap) {
- timeline.shrink(bezier);
- break;
- }
- var time2 = getValue(nextMap, "time", 0);
- var mix2 = getValue(nextMap, "mix", 1);
- var softness2 = getValue(nextMap, "softness", 0) * scale;
- var curve = keyMap.curve;
- if (curve) {
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mix, mix2, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, softness, softness2, scale);
- }
- time = time2;
- mix = mix2;
- softness = softness2;
- keyMap = nextMap;
- }
- timelines.push(timeline);
- }
- }
- // Transform constraint timelines.
- if (map.transform) {
- for (var constraintName in map.transform) {
- var timelineMap = map.transform[constraintName];
- var keyMap = timelineMap[0];
- if (!keyMap)
- continue;
- var constraint = skeletonData.findTransformConstraint(constraintName);
- var constraintIndex = skeletonData.transformConstraints.indexOf(constraint);
- var timeline = new TransformConstraintTimeline(timelineMap.length, timelineMap.length << 2, constraintIndex);
- var time = getValue(keyMap, "time", 0);
- var mixRotate = getValue(keyMap, "mixRotate", 1);
- var mixX = getValue(keyMap, "mixX", 1);
- var mixY = getValue(keyMap, "mixY", mixX);
- var mixScaleX = getValue(keyMap, "mixScaleX", 1);
- var mixScaleY = getValue(keyMap, "mixScaleY", mixScaleX);
- var mixShearY = getValue(keyMap, "mixShearY", 1);
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);
- var nextMap = timelineMap[frame + 1];
- if (!nextMap) {
- timeline.shrink(bezier);
- break;
- }
- var time2 = getValue(nextMap, "time", 0);
- var mixRotate2 = getValue(nextMap, "mixRotate", 1);
- var mixX2 = getValue(nextMap, "mixX", 1);
- var mixY2 = getValue(nextMap, "mixY", mixX2);
- var mixScaleX2 = getValue(nextMap, "mixScaleX", 1);
- var mixScaleY2 = getValue(nextMap, "mixScaleY", mixScaleX2);
- var mixShearY2 = getValue(nextMap, "mixShearY", 1);
- var curve = keyMap.curve;
- if (curve) {
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1);
- }
- time = time2;
- mixRotate = mixRotate2;
- mixX = mixX2;
- mixY = mixY2;
- mixScaleX = mixScaleX2;
- mixScaleY = mixScaleY2;
- mixScaleX = mixScaleX2;
- keyMap = nextMap;
- }
- timelines.push(timeline);
- }
- }
- // Path constraint timelines.
- if (map.path) {
- for (var constraintName in map.path) {
- var constraintMap = map.path[constraintName];
- var constraint = skeletonData.findPathConstraint(constraintName);
- var constraintIndex = skeletonData.pathConstraints.indexOf(constraint);
- for (var timelineName in constraintMap) {
- var timelineMap = constraintMap[timelineName];
- var keyMap = timelineMap[0];
- if (!keyMap)
- continue;
- if (timelineName === "position") {
- var timeline = new PathConstraintPositionTimeline(timelineMap.length, timelineMap.length, constraintIndex);
- timelines.push(readTimeline1(timelineMap, timeline, 0, constraint.positionMode == exports.PositionMode.Fixed ? scale : 1));
- }
- else if (timelineName === "spacing") {
- var timeline = new PathConstraintSpacingTimeline(timelineMap.length, timelineMap.length, constraintIndex);
- timelines.push(readTimeline1(timelineMap, timeline, 0, constraint.spacingMode == exports.SpacingMode.Length || constraint.spacingMode == exports.SpacingMode.Fixed ? scale : 1));
- }
- else if (timelineName === "mix") {
- var timeline = new PathConstraintMixTimeline(timelineMap.size, timelineMap.size * 3, constraintIndex);
- var time = getValue(keyMap, "time", 0);
- var mixRotate = getValue(keyMap, "mixRotate", 1);
- var mixX = getValue(keyMap, "mixX", 1);
- var mixY = getValue(keyMap, "mixY", mixX);
- for (var frame = 0, bezier = 0;; frame++) {
- timeline.setFrame(frame, time, mixRotate, mixX, mixY);
- var nextMap = timelineMap[frame + 1];
- if (!nextMap) {
- timeline.shrink(bezier);
- break;
- }
- var time2 = getValue(nextMap, "time", 0);
- var mixRotate2 = getValue(nextMap, "mixRotate", 1);
- var mixX2 = getValue(nextMap, "mixX", 1);
- var mixY2 = getValue(nextMap, "mixY", mixX2);
- var curve = keyMap.curve;
- if (curve) {
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);
- bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);
- }
- time = time2;
- mixRotate = mixRotate2;
- mixX = mixX2;
- mixY = mixY2;
- keyMap = nextMap;
- }
- timelines.push(timeline);
- }
- }
- }
- }
- // Deform timelines.
- if (map.deform) {
- for (var deformName in map.deform) {
- var deformMap = map.deform[deformName];
- var skin = skeletonData.findSkin(deformName);
- for (var slotName in deformMap) {
- var slotMap = deformMap[slotName];
- var slotIndex = skeletonData.findSlotIndex(slotName);
- for (var timelineName in slotMap) {
- var timelineMap = slotMap[timelineName];
- var keyMap = timelineMap[0];
- if (!keyMap)
- continue;
- var attachment = skin.getAttachment(slotIndex, timelineName);
- var weighted = attachment.bones;
- var vertices = attachment.vertices;
- var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
- var timeline = new DeformTimeline(timelineMap.length, timelineMap.length, slotIndex, attachment);
- var time = getValue(keyMap, "time", 0);
- for (var frame = 0, bezier = 0;; frame++) {
- var deform = void 0;
- var verticesValue = getValue(keyMap, "vertices", null);
- if (!verticesValue)
- deform = weighted ? Utils.newFloatArray(deformLength) : vertices;
- else {
- deform = Utils.newFloatArray(deformLength);
- var start = getValue(keyMap, "offset", 0);
- Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);
- if (scale != 1) {
- for (var i = start, n = i + verticesValue.length; i < n; i++)
- deform[i] *= scale;
- }
- if (!weighted) {
- for (var i = 0; i < deformLength; i++)
- deform[i] += vertices[i];
- }
- }
- timeline.setFrame(frame, time, deform);
- var nextMap = timelineMap[frame + 1];
- if (!nextMap) {
- timeline.shrink(bezier);
- break;
- }
- var time2 = getValue(nextMap, "time", 0);
- var curve = keyMap.curve;
- if (curve)
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1);
- time = time2;
- keyMap = nextMap;
- }
- timelines.push(timeline);
- }
- }
- }
- }
- // Draw order timelines.
- if (map.drawOrder) {
- var timeline = new DrawOrderTimeline(map.drawOrder.length);
- var slotCount = skeletonData.slots.length;
- var frame = 0;
- for (var i = 0; i < map.drawOrder.length; i++, frame++) {
- var drawOrderMap = map.drawOrder[i];
- var drawOrder = null;
- var offsets = getValue(drawOrderMap, "offsets", null);
- if (offsets) {
- drawOrder = Utils.newArray(slotCount, -1);
- var unchanged = Utils.newArray(slotCount - offsets.length, 0);
- var originalIndex = 0, unchangedIndex = 0;
- for (var ii = 0; ii < offsets.length; ii++) {
- var offsetMap = offsets[ii];
- var slotIndex = skeletonData.findSlotIndex(offsetMap.slot);
- // Collect unchanged items.
- while (originalIndex != slotIndex)
- unchanged[unchangedIndex++] = originalIndex++;
- // Set changed items.
- drawOrder[originalIndex + offsetMap.offset] = originalIndex++;
- }
- // Collect remaining unchanged items.
- while (originalIndex < slotCount)
- unchanged[unchangedIndex++] = originalIndex++;
- // Fill in unchanged items.
- for (var ii = slotCount - 1; ii >= 0; ii--)
- if (drawOrder[ii] == -1)
- drawOrder[ii] = unchanged[--unchangedIndex];
- }
- timeline.setFrame(frame, getValue(drawOrderMap, "time", 0), drawOrder);
- }
- timelines.push(timeline);
- }
- // Event timelines.
- if (map.events) {
- var timeline = new EventTimeline(map.events.length);
- var frame = 0;
- for (var i = 0; i < map.events.length; i++, frame++) {
- var eventMap = map.events[i];
- var eventData = skeletonData.findEvent(eventMap.name);
- var event_1 = new Event(Utils.toSinglePrecision(getValue(eventMap, "time", 0)), eventData);
- event_1.intValue = getValue(eventMap, "int", eventData.intValue);
- event_1.floatValue = getValue(eventMap, "float", eventData.floatValue);
- event_1.stringValue = getValue(eventMap, "string", eventData.stringValue);
- if (event_1.data.audioPath) {
- event_1.volume = getValue(eventMap, "volume", 1);
- event_1.balance = getValue(eventMap, "balance", 0);
- }
- timeline.setFrame(frame, event_1);
- }
- timelines.push(timeline);
- }
- var duration = 0;
- for (var i = 0, n = timelines.length; i < n; i++)
- duration = Math.max(duration, timelines[i].getDuration());
- skeletonData.animations.push(new Animation(name, timelines, duration));
- };
- return SkeletonJson;
- }());
- var LinkedMesh = /** @class */ (function () {
- function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) {
- this.mesh = mesh;
- this.skin = skin;
- this.slotIndex = slotIndex;
- this.parent = parent;
- this.inheritDeform = inheritDeform;
+ }
+ if (updateAabb) {
+ this.aabbCompute();
+ } else {
+ this.minX = Number.POSITIVE_INFINITY;
+ this.minY = Number.POSITIVE_INFINITY;
+ this.maxX = Number.NEGATIVE_INFINITY;
+ this.maxY = Number.NEGATIVE_INFINITY;
+ }
+ }
+ aabbCompute() {
+ let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;
+ let polygons = this.polygons;
+ for (let i = 0, n = polygons.length; i < n; i++) {
+ let polygon = polygons[i];
+ let vertices = polygon;
+ for (let ii = 0, nn = polygon.length; ii < nn; ii += 2) {
+ let x = vertices[ii];
+ let y = vertices[ii + 1];
+ minX = Math.min(minX, x);
+ minY = Math.min(minY, y);
+ maxX = Math.max(maxX, x);
+ maxY = Math.max(maxY, y);
}
- return LinkedMesh;
- }());
- function readTimeline1(keys, timeline, defaultValue, scale) {
- var keyMap = keys[0];
- var time = getValue(keyMap, "time", 0);
- var value = getValue(keyMap, "value", defaultValue) * scale;
- var bezier = 0;
- for (var frame = 0;; frame++) {
- timeline.setFrame(frame, time, value);
- var nextMap = keys[frame + 1];
- if (!nextMap) {
- timeline.shrink(bezier);
- return timeline;
+ }
+ this.minX = minX;
+ this.minY = minY;
+ this.maxX = maxX;
+ this.maxY = maxY;
+ }
+ aabbContainsPoint(x, y) {
+ return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;
+ }
+ aabbIntersectsSegment(x1, y1, x2, y2) {
+ let minX = this.minX;
+ let minY = this.minY;
+ let maxX = this.maxX;
+ let maxY = this.maxY;
+ if (x1 <= minX && x2 <= minX || y1 <= minY && y2 <= minY || x1 >= maxX && x2 >= maxX || y1 >= maxY && y2 >= maxY)
+ return false;
+ let m = (y2 - y1) / (x2 - x1);
+ let y = m * (minX - x1) + y1;
+ if (y > minY && y < maxY)
+ return true;
+ y = m * (maxX - x1) + y1;
+ if (y > minY && y < maxY)
+ return true;
+ let x = (minY - y1) / m + x1;
+ if (x > minX && x < maxX)
+ return true;
+ x = (maxY - y1) / m + x1;
+ if (x > minX && x < maxX)
+ return true;
+ return false;
+ }
+ aabbIntersectsSkeleton(bounds) {
+ return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;
+ }
+ containsPoint(x, y) {
+ let polygons = this.polygons;
+ for (let i = 0, n = polygons.length; i < n; i++)
+ if (this.containsPointPolygon(polygons[i], x, y))
+ return this.boundingBoxes[i];
+ return null;
+ }
+ containsPointPolygon(polygon, x, y) {
+ let vertices = polygon;
+ let nn = polygon.length;
+ let prevIndex = nn - 2;
+ let inside = false;
+ for (let ii = 0; ii < nn; ii += 2) {
+ let vertexY = vertices[ii + 1];
+ let prevY = vertices[prevIndex + 1];
+ if (vertexY < y && prevY >= y || prevY < y && vertexY >= y) {
+ let vertexX = vertices[ii];
+ if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x)
+ inside = !inside;
+ }
+ prevIndex = ii;
+ }
+ return inside;
+ }
+ intersectsSegment(x1, y1, x2, y2) {
+ let polygons = this.polygons;
+ for (let i = 0, n = polygons.length; i < n; i++)
+ if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2))
+ return this.boundingBoxes[i];
+ return null;
+ }
+ intersectsSegmentPolygon(polygon, x1, y1, x2, y2) {
+ let vertices = polygon;
+ let nn = polygon.length;
+ let width12 = x1 - x2, height12 = y1 - y2;
+ let det1 = x1 * y2 - y1 * x2;
+ let x3 = vertices[nn - 2], y3 = vertices[nn - 1];
+ for (let ii = 0; ii < nn; ii += 2) {
+ let x4 = vertices[ii], y4 = vertices[ii + 1];
+ let det2 = x3 * y4 - y3 * x4;
+ let width34 = x3 - x4, height34 = y3 - y4;
+ let det3 = width12 * height34 - height12 * width34;
+ let x = (det1 * width34 - width12 * det2) / det3;
+ if ((x >= x3 && x <= x4 || x >= x4 && x <= x3) && (x >= x1 && x <= x2 || x >= x2 && x <= x1)) {
+ let y = (det1 * height34 - height12 * det2) / det3;
+ if ((y >= y3 && y <= y4 || y >= y4 && y <= y3) && (y >= y1 && y <= y2 || y >= y2 && y <= y1))
+ return true;
+ }
+ x3 = x4;
+ y3 = y4;
+ }
+ return false;
+ }
+ getPolygon(boundingBox) {
+ if (!boundingBox)
+ throw new Error("boundingBox cannot be null.");
+ let index = this.boundingBoxes.indexOf(boundingBox);
+ return index == -1 ? null : this.polygons[index];
+ }
+ getWidth() {
+ return this.maxX - this.minX;
+ }
+ getHeight() {
+ return this.maxY - this.minY;
+ }
+ };
+
+ // spine-core/src/Triangulator.ts
+ var Triangulator = class {
+ constructor() {
+ this.convexPolygons = new Array();
+ this.convexPolygonsIndices = new Array();
+ this.indicesArray = new Array();
+ this.isConcaveArray = new Array();
+ this.triangles = new Array();
+ this.polygonPool = new Pool(() => {
+ return new Array();
+ });
+ this.polygonIndicesPool = new Pool(() => {
+ return new Array();
+ });
+ }
+ triangulate(verticesArray) {
+ let vertices = verticesArray;
+ let vertexCount = verticesArray.length >> 1;
+ let indices = this.indicesArray;
+ indices.length = 0;
+ for (let i = 0; i < vertexCount; i++)
+ indices[i] = i;
+ let isConcave = this.isConcaveArray;
+ isConcave.length = 0;
+ for (let i = 0, n = vertexCount; i < n; ++i)
+ isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices);
+ let triangles = this.triangles;
+ triangles.length = 0;
+ while (vertexCount > 3) {
+ let previous = vertexCount - 1, i = 0, next = 1;
+ while (true) {
+ outer:
+ if (!isConcave[i]) {
+ let p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1;
+ let p1x = vertices[p1], p1y = vertices[p1 + 1];
+ let p2x = vertices[p2], p2y = vertices[p2 + 1];
+ let p3x = vertices[p3], p3y = vertices[p3 + 1];
+ for (let ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) {
+ if (!isConcave[ii])
+ continue;
+ let v = indices[ii] << 1;
+ let vx = vertices[v], vy = vertices[v + 1];
+ if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) {
+ if (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) {
+ if (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy))
+ break outer;
+ }
+ }
+ }
+ break;
}
- var time2 = getValue(nextMap, "time", 0);
- var value2 = getValue(nextMap, "value", defaultValue) * scale;
- if (keyMap.curve)
- bezier = readCurve(keyMap.curve, timeline, bezier, frame, 0, time, time2, value, value2, scale);
- time = time2;
- value = value2;
- keyMap = nextMap;
+ if (next == 0) {
+ do {
+ if (!isConcave[i])
+ break;
+ i--;
+ } while (i > 0);
+ break;
+ }
+ previous = i;
+ i = next;
+ next = (next + 1) % vertexCount;
+ }
+ triangles.push(indices[(vertexCount + i - 1) % vertexCount]);
+ triangles.push(indices[i]);
+ triangles.push(indices[(i + 1) % vertexCount]);
+ indices.splice(i, 1);
+ isConcave.splice(i, 1);
+ vertexCount--;
+ let previousIndex = (vertexCount + i - 1) % vertexCount;
+ let nextIndex = i == vertexCount ? 0 : i;
+ isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices);
+ isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices);
+ }
+ if (vertexCount == 3) {
+ triangles.push(indices[2]);
+ triangles.push(indices[0]);
+ triangles.push(indices[1]);
+ }
+ return triangles;
+ }
+ decompose(verticesArray, triangles) {
+ let vertices = verticesArray;
+ let convexPolygons = this.convexPolygons;
+ this.polygonPool.freeAll(convexPolygons);
+ convexPolygons.length = 0;
+ let convexPolygonsIndices = this.convexPolygonsIndices;
+ this.polygonIndicesPool.freeAll(convexPolygonsIndices);
+ convexPolygonsIndices.length = 0;
+ let polygonIndices = this.polygonIndicesPool.obtain();
+ polygonIndices.length = 0;
+ let polygon = this.polygonPool.obtain();
+ polygon.length = 0;
+ let fanBaseIndex = -1, lastWinding = 0;
+ for (let i = 0, n = triangles.length; i < n; i += 3) {
+ let t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1;
+ let x1 = vertices[t1], y1 = vertices[t1 + 1];
+ let x2 = vertices[t2], y2 = vertices[t2 + 1];
+ let x3 = vertices[t3], y3 = vertices[t3 + 1];
+ let merged = false;
+ if (fanBaseIndex == t1) {
+ let o = polygon.length - 4;
+ let winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3);
+ let winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]);
+ if (winding1 == lastWinding && winding2 == lastWinding) {
+ polygon.push(x3);
+ polygon.push(y3);
+ polygonIndices.push(t3);
+ merged = true;
+ }
+ }
+ if (!merged) {
+ if (polygon.length > 0) {
+ convexPolygons.push(polygon);
+ convexPolygonsIndices.push(polygonIndices);
+ } else {
+ this.polygonPool.free(polygon);
+ this.polygonIndicesPool.free(polygonIndices);
+ }
+ polygon = this.polygonPool.obtain();
+ polygon.length = 0;
+ polygon.push(x1);
+ polygon.push(y1);
+ polygon.push(x2);
+ polygon.push(y2);
+ polygon.push(x3);
+ polygon.push(y3);
+ polygonIndices = this.polygonIndicesPool.obtain();
+ polygonIndices.length = 0;
+ polygonIndices.push(t1);
+ polygonIndices.push(t2);
+ polygonIndices.push(t3);
+ lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3);
+ fanBaseIndex = t1;
+ }
+ }
+ if (polygon.length > 0) {
+ convexPolygons.push(polygon);
+ convexPolygonsIndices.push(polygonIndices);
+ }
+ for (let i = 0, n = convexPolygons.length; i < n; i++) {
+ polygonIndices = convexPolygonsIndices[i];
+ if (polygonIndices.length == 0)
+ continue;
+ let firstIndex = polygonIndices[0];
+ let lastIndex = polygonIndices[polygonIndices.length - 1];
+ polygon = convexPolygons[i];
+ let o = polygon.length - 4;
+ let prevPrevX = polygon[o], prevPrevY = polygon[o + 1];
+ let prevX = polygon[o + 2], prevY = polygon[o + 3];
+ let firstX = polygon[0], firstY = polygon[1];
+ let secondX = polygon[2], secondY = polygon[3];
+ let winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY);
+ for (let ii = 0; ii < n; ii++) {
+ if (ii == i)
+ continue;
+ let otherIndices = convexPolygonsIndices[ii];
+ if (otherIndices.length != 3)
+ continue;
+ let otherFirstIndex = otherIndices[0];
+ let otherSecondIndex = otherIndices[1];
+ let otherLastIndex = otherIndices[2];
+ let otherPoly = convexPolygons[ii];
+ let x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1];
+ if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex)
+ continue;
+ let winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3);
+ let winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY);
+ if (winding1 == winding && winding2 == winding) {
+ otherPoly.length = 0;
+ otherIndices.length = 0;
+ polygon.push(x3);
+ polygon.push(y3);
+ polygonIndices.push(otherLastIndex);
+ prevPrevX = prevX;
+ prevPrevY = prevY;
+ prevX = x3;
+ prevY = y3;
+ ii = 0;
+ }
+ }
+ }
+ for (let i = convexPolygons.length - 1; i >= 0; i--) {
+ polygon = convexPolygons[i];
+ if (polygon.length == 0) {
+ convexPolygons.splice(i, 1);
+ this.polygonPool.free(polygon);
+ polygonIndices = convexPolygonsIndices[i];
+ convexPolygonsIndices.splice(i, 1);
+ this.polygonIndicesPool.free(polygonIndices);
+ }
+ }
+ return convexPolygons;
+ }
+ static isConcave(index, vertexCount, vertices, indices) {
+ let previous = indices[(vertexCount + index - 1) % vertexCount] << 1;
+ let current = indices[index] << 1;
+ let next = indices[(index + 1) % vertexCount] << 1;
+ return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]);
+ }
+ static positiveArea(p1x, p1y, p2x, p2y, p3x, p3y) {
+ return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0;
+ }
+ static winding(p1x, p1y, p2x, p2y, p3x, p3y) {
+ let px = p2x - p1x, py = p2y - p1y;
+ return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1;
+ }
+ };
+
+ // spine-core/src/SkeletonClipping.ts
+ var SkeletonClipping = class {
+ constructor() {
+ this.triangulator = new Triangulator();
+ this.clippingPolygon = new Array();
+ this.clipOutput = new Array();
+ this.clippedVertices = new Array();
+ this.clippedTriangles = new Array();
+ this.scratch = new Array();
+ }
+ clipStart(slot, clip) {
+ if (this.clipAttachment)
+ return 0;
+ this.clipAttachment = clip;
+ let n = clip.worldVerticesLength;
+ let vertices = Utils.setArraySize(this.clippingPolygon, n);
+ clip.computeWorldVertices(slot, 0, n, vertices, 0, 2);
+ let clippingPolygon = this.clippingPolygon;
+ SkeletonClipping.makeClockwise(clippingPolygon);
+ let clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon));
+ for (let i = 0, n2 = clippingPolygons.length; i < n2; i++) {
+ let polygon = clippingPolygons[i];
+ SkeletonClipping.makeClockwise(polygon);
+ polygon.push(polygon[0]);
+ polygon.push(polygon[1]);
+ }
+ return clippingPolygons.length;
+ }
+ clipEndWithSlot(slot) {
+ if (this.clipAttachment && this.clipAttachment.endSlot == slot.data)
+ this.clipEnd();
+ }
+ clipEnd() {
+ if (!this.clipAttachment)
+ return;
+ this.clipAttachment = null;
+ this.clippingPolygons = null;
+ this.clippedVertices.length = 0;
+ this.clippedTriangles.length = 0;
+ this.clippingPolygon.length = 0;
+ }
+ isClipping() {
+ return this.clipAttachment != null;
+ }
+ clipTriangles(vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) {
+ let clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;
+ let clippedTriangles = this.clippedTriangles;
+ let polygons = this.clippingPolygons;
+ let polygonsCount = this.clippingPolygons.length;
+ let vertexSize = twoColor ? 12 : 8;
+ let index = 0;
+ clippedVertices.length = 0;
+ clippedTriangles.length = 0;
+ outer:
+ for (let i = 0; i < trianglesLength; i += 3) {
+ let vertexOffset = triangles[i] << 1;
+ let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];
+ let u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1];
+ vertexOffset = triangles[i + 1] << 1;
+ let x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];
+ let u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1];
+ vertexOffset = triangles[i + 2] << 1;
+ let x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];
+ let u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1];
+ for (let p = 0; p < polygonsCount; p++) {
+ let s = clippedVertices.length;
+ if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {
+ let clipOutputLength = clipOutput.length;
+ if (clipOutputLength == 0)
+ continue;
+ let d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;
+ let d = 1 / (d0 * d2 + d1 * (y1 - y3));
+ let clipOutputCount = clipOutputLength >> 1;
+ let clipOutputItems = this.clipOutput;
+ let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);
+ for (let ii = 0; ii < clipOutputLength; ii += 2) {
+ let x = clipOutputItems[ii], y = clipOutputItems[ii + 1];
+ clippedVerticesItems[s] = x;
+ clippedVerticesItems[s + 1] = y;
+ clippedVerticesItems[s + 2] = light.r;
+ clippedVerticesItems[s + 3] = light.g;
+ clippedVerticesItems[s + 4] = light.b;
+ clippedVerticesItems[s + 5] = light.a;
+ let c0 = x - x3, c1 = y - y3;
+ let a = (d0 * c0 + d1 * c1) * d;
+ let b = (d4 * c0 + d2 * c1) * d;
+ let c = 1 - a - b;
+ clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c;
+ clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c;
+ if (twoColor) {
+ clippedVerticesItems[s + 8] = dark.r;
+ clippedVerticesItems[s + 9] = dark.g;
+ clippedVerticesItems[s + 10] = dark.b;
+ clippedVerticesItems[s + 11] = dark.a;
+ }
+ s += vertexSize;
+ }
+ s = clippedTriangles.length;
+ let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));
+ clipOutputCount--;
+ for (let ii = 1; ii < clipOutputCount; ii++) {
+ clippedTrianglesItems[s] = index;
+ clippedTrianglesItems[s + 1] = index + ii;
+ clippedTrianglesItems[s + 2] = index + ii + 1;
+ s += 3;
+ }
+ index += clipOutputCount + 1;
+ } else {
+ let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize);
+ clippedVerticesItems[s] = x1;
+ clippedVerticesItems[s + 1] = y1;
+ clippedVerticesItems[s + 2] = light.r;
+ clippedVerticesItems[s + 3] = light.g;
+ clippedVerticesItems[s + 4] = light.b;
+ clippedVerticesItems[s + 5] = light.a;
+ if (!twoColor) {
+ clippedVerticesItems[s + 6] = u1;
+ clippedVerticesItems[s + 7] = v1;
+ clippedVerticesItems[s + 8] = x2;
+ clippedVerticesItems[s + 9] = y2;
+ clippedVerticesItems[s + 10] = light.r;
+ clippedVerticesItems[s + 11] = light.g;
+ clippedVerticesItems[s + 12] = light.b;
+ clippedVerticesItems[s + 13] = light.a;
+ clippedVerticesItems[s + 14] = u2;
+ clippedVerticesItems[s + 15] = v2;
+ clippedVerticesItems[s + 16] = x3;
+ clippedVerticesItems[s + 17] = y3;
+ clippedVerticesItems[s + 18] = light.r;
+ clippedVerticesItems[s + 19] = light.g;
+ clippedVerticesItems[s + 20] = light.b;
+ clippedVerticesItems[s + 21] = light.a;
+ clippedVerticesItems[s + 22] = u3;
+ clippedVerticesItems[s + 23] = v3;
+ } else {
+ clippedVerticesItems[s + 6] = u1;
+ clippedVerticesItems[s + 7] = v1;
+ clippedVerticesItems[s + 8] = dark.r;
+ clippedVerticesItems[s + 9] = dark.g;
+ clippedVerticesItems[s + 10] = dark.b;
+ clippedVerticesItems[s + 11] = dark.a;
+ clippedVerticesItems[s + 12] = x2;
+ clippedVerticesItems[s + 13] = y2;
+ clippedVerticesItems[s + 14] = light.r;
+ clippedVerticesItems[s + 15] = light.g;
+ clippedVerticesItems[s + 16] = light.b;
+ clippedVerticesItems[s + 17] = light.a;
+ clippedVerticesItems[s + 18] = u2;
+ clippedVerticesItems[s + 19] = v2;
+ clippedVerticesItems[s + 20] = dark.r;
+ clippedVerticesItems[s + 21] = dark.g;
+ clippedVerticesItems[s + 22] = dark.b;
+ clippedVerticesItems[s + 23] = dark.a;
+ clippedVerticesItems[s + 24] = x3;
+ clippedVerticesItems[s + 25] = y3;
+ clippedVerticesItems[s + 26] = light.r;
+ clippedVerticesItems[s + 27] = light.g;
+ clippedVerticesItems[s + 28] = light.b;
+ clippedVerticesItems[s + 29] = light.a;
+ clippedVerticesItems[s + 30] = u3;
+ clippedVerticesItems[s + 31] = v3;
+ clippedVerticesItems[s + 32] = dark.r;
+ clippedVerticesItems[s + 33] = dark.g;
+ clippedVerticesItems[s + 34] = dark.b;
+ clippedVerticesItems[s + 35] = dark.a;
+ }
+ s = clippedTriangles.length;
+ let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3);
+ clippedTrianglesItems[s] = index;
+ clippedTrianglesItems[s + 1] = index + 1;
+ clippedTrianglesItems[s + 2] = index + 2;
+ index += 3;
+ continue outer;
+ }
+ }
}
}
- function readTimeline2(keys, timeline, name1, name2, defaultValue, scale) {
- var keyMap = keys[0];
- var time = getValue(keyMap, "time", 0);
- var value1 = getValue(keyMap, name1, defaultValue) * scale;
- var value2 = getValue(keyMap, name2, defaultValue) * scale;
- var bezier = 0;
- for (var frame = 0;; frame++) {
- timeline.setFrame(frame, time, value1, value2);
- var nextMap = keys[frame + 1];
- if (!nextMap) {
- timeline.shrink(bezier);
- return timeline;
+ clip(x1, y1, x2, y2, x3, y3, clippingArea, output) {
+ let originalOutput = output;
+ let clipped = false;
+ let input = null;
+ if (clippingArea.length % 4 >= 2) {
+ input = output;
+ output = this.scratch;
+ } else
+ input = this.scratch;
+ input.length = 0;
+ input.push(x1);
+ input.push(y1);
+ input.push(x2);
+ input.push(y2);
+ input.push(x3);
+ input.push(y3);
+ input.push(x1);
+ input.push(y1);
+ output.length = 0;
+ let clippingVertices = clippingArea;
+ let clippingVerticesLast = clippingArea.length - 4;
+ for (let i = 0; ; i += 2) {
+ let edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];
+ let edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3];
+ let deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2;
+ let inputVertices = input;
+ let inputVerticesLength = input.length - 2, outputStart = output.length;
+ for (let ii = 0; ii < inputVerticesLength; ii += 2) {
+ let inputX = inputVertices[ii], inputY = inputVertices[ii + 1];
+ let inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3];
+ let side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0;
+ if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) {
+ if (side2) {
+ output.push(inputX2);
+ output.push(inputY2);
+ continue;
}
- var time2 = getValue(nextMap, "time", 0);
- var nvalue1 = getValue(nextMap, name1, defaultValue) * scale;
- var nvalue2 = getValue(nextMap, name2, defaultValue) * scale;
- var curve = keyMap.curve;
+ let c0 = inputY2 - inputY, c2 = inputX2 - inputX;
+ let s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
+ if (Math.abs(s) > 1e-6) {
+ let ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
+ output.push(edgeX + (edgeX2 - edgeX) * ua);
+ output.push(edgeY + (edgeY2 - edgeY) * ua);
+ } else {
+ output.push(edgeX);
+ output.push(edgeY);
+ }
+ } else if (side2) {
+ let c0 = inputY2 - inputY, c2 = inputX2 - inputX;
+ let s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
+ if (Math.abs(s) > 1e-6) {
+ let ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
+ output.push(edgeX + (edgeX2 - edgeX) * ua);
+ output.push(edgeY + (edgeY2 - edgeY) * ua);
+ } else {
+ output.push(edgeX);
+ output.push(edgeY);
+ }
+ output.push(inputX2);
+ output.push(inputY2);
+ }
+ clipped = true;
+ }
+ if (outputStart == output.length) {
+ originalOutput.length = 0;
+ return true;
+ }
+ output.push(output[0]);
+ output.push(output[1]);
+ if (i == clippingVerticesLast)
+ break;
+ let temp = output;
+ output = input;
+ output.length = 0;
+ input = temp;
+ }
+ if (originalOutput != output) {
+ originalOutput.length = 0;
+ for (let i = 0, n = output.length - 2; i < n; i++)
+ originalOutput[i] = output[i];
+ } else
+ originalOutput.length = originalOutput.length - 2;
+ return clipped;
+ }
+ static makeClockwise(polygon) {
+ let vertices = polygon;
+ let verticeslength = polygon.length;
+ let area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0;
+ for (let i = 0, n = verticeslength - 3; i < n; i += 2) {
+ p1x = vertices[i];
+ p1y = vertices[i + 1];
+ p2x = vertices[i + 2];
+ p2y = vertices[i + 3];
+ area += p1x * p2y - p2x * p1y;
+ }
+ if (area < 0)
+ return;
+ for (let i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) {
+ let x = vertices[i], y = vertices[i + 1];
+ let other = lastX - i;
+ vertices[i] = vertices[other];
+ vertices[i + 1] = vertices[other + 1];
+ vertices[other] = x;
+ vertices[other + 1] = y;
+ }
+ }
+ };
+
+ // spine-core/src/SkeletonJson.ts
+ var SkeletonJson = class {
+ constructor(attachmentLoader) {
+ this.scale = 1;
+ this.linkedMeshes = new Array();
+ this.attachmentLoader = attachmentLoader;
+ }
+ readSkeletonData(json) {
+ let scale = this.scale;
+ let skeletonData = new SkeletonData();
+ let root = typeof json === "string" ? JSON.parse(json) : json;
+ let skeletonMap = root.skeleton;
+ if (skeletonMap) {
+ skeletonData.hash = skeletonMap.hash;
+ skeletonData.version = skeletonMap.spine;
+ skeletonData.x = skeletonMap.x;
+ skeletonData.y = skeletonMap.y;
+ skeletonData.width = skeletonMap.width;
+ skeletonData.height = skeletonMap.height;
+ skeletonData.fps = skeletonMap.fps;
+ skeletonData.imagesPath = skeletonMap.images;
+ }
+ if (root.bones) {
+ for (let i = 0; i < root.bones.length; i++) {
+ let boneMap = root.bones[i];
+ let parent = null;
+ let parentName = getValue(boneMap, "parent", null);
+ if (parentName)
+ parent = skeletonData.findBone(parentName);
+ let data = new BoneData(skeletonData.bones.length, boneMap.name, parent);
+ data.length = getValue(boneMap, "length", 0) * scale;
+ data.x = getValue(boneMap, "x", 0) * scale;
+ data.y = getValue(boneMap, "y", 0) * scale;
+ data.rotation = getValue(boneMap, "rotation", 0);
+ data.scaleX = getValue(boneMap, "scaleX", 1);
+ data.scaleY = getValue(boneMap, "scaleY", 1);
+ data.shearX = getValue(boneMap, "shearX", 0);
+ data.shearY = getValue(boneMap, "shearY", 0);
+ data.transformMode = Utils.enumValue(TransformMode, getValue(boneMap, "transform", "Normal"));
+ data.skinRequired = getValue(boneMap, "skin", false);
+ let color = getValue(boneMap, "color", null);
+ if (color)
+ data.color.setFromString(color);
+ skeletonData.bones.push(data);
+ }
+ }
+ if (root.slots) {
+ for (let i = 0; i < root.slots.length; i++) {
+ let slotMap = root.slots[i];
+ let boneData = skeletonData.findBone(slotMap.bone);
+ let data = new SlotData(skeletonData.slots.length, slotMap.name, boneData);
+ let color = getValue(slotMap, "color", null);
+ if (color)
+ data.color.setFromString(color);
+ let dark = getValue(slotMap, "dark", null);
+ if (dark)
+ data.darkColor = Color.fromString(dark);
+ data.attachmentName = getValue(slotMap, "attachment", null);
+ data.blendMode = Utils.enumValue(BlendMode, getValue(slotMap, "blend", "normal"));
+ skeletonData.slots.push(data);
+ }
+ }
+ if (root.ik) {
+ for (let i = 0; i < root.ik.length; i++) {
+ let constraintMap = root.ik[i];
+ let data = new IkConstraintData(constraintMap.name);
+ data.order = getValue(constraintMap, "order", 0);
+ data.skinRequired = getValue(constraintMap, "skin", false);
+ for (let ii = 0; ii < constraintMap.bones.length; ii++)
+ data.bones.push(skeletonData.findBone(constraintMap.bones[ii]));
+ data.target = skeletonData.findBone(constraintMap.target);
+ data.mix = getValue(constraintMap, "mix", 1);
+ data.softness = getValue(constraintMap, "softness", 0) * scale;
+ data.bendDirection = getValue(constraintMap, "bendPositive", true) ? 1 : -1;
+ data.compress = getValue(constraintMap, "compress", false);
+ data.stretch = getValue(constraintMap, "stretch", false);
+ data.uniform = getValue(constraintMap, "uniform", false);
+ skeletonData.ikConstraints.push(data);
+ }
+ }
+ if (root.transform) {
+ for (let i = 0; i < root.transform.length; i++) {
+ let constraintMap = root.transform[i];
+ let data = new TransformConstraintData(constraintMap.name);
+ data.order = getValue(constraintMap, "order", 0);
+ data.skinRequired = getValue(constraintMap, "skin", false);
+ for (let ii = 0; ii < constraintMap.bones.length; ii++)
+ data.bones.push(skeletonData.findBone(constraintMap.bones[ii]));
+ let targetName = constraintMap.target;
+ data.target = skeletonData.findBone(targetName);
+ data.local = getValue(constraintMap, "local", false);
+ data.relative = getValue(constraintMap, "relative", false);
+ data.offsetRotation = getValue(constraintMap, "rotation", 0);
+ data.offsetX = getValue(constraintMap, "x", 0) * scale;
+ data.offsetY = getValue(constraintMap, "y", 0) * scale;
+ data.offsetScaleX = getValue(constraintMap, "scaleX", 0);
+ data.offsetScaleY = getValue(constraintMap, "scaleY", 0);
+ data.offsetShearY = getValue(constraintMap, "shearY", 0);
+ data.mixRotate = getValue(constraintMap, "mixRotate", 1);
+ data.mixX = getValue(constraintMap, "mixX", 1);
+ data.mixY = getValue(constraintMap, "mixY", data.mixX);
+ data.mixScaleX = getValue(constraintMap, "mixScaleX", 1);
+ data.mixScaleY = getValue(constraintMap, "mixScaleY", data.mixScaleX);
+ data.mixShearY = getValue(constraintMap, "mixShearY", 1);
+ skeletonData.transformConstraints.push(data);
+ }
+ }
+ if (root.path) {
+ for (let i = 0; i < root.path.length; i++) {
+ let constraintMap = root.path[i];
+ let data = new PathConstraintData(constraintMap.name);
+ data.order = getValue(constraintMap, "order", 0);
+ data.skinRequired = getValue(constraintMap, "skin", false);
+ for (let ii = 0; ii < constraintMap.bones.length; ii++)
+ data.bones.push(skeletonData.findBone(constraintMap.bones[ii]));
+ let targetName = constraintMap.target;
+ data.target = skeletonData.findSlot(targetName);
+ data.positionMode = Utils.enumValue(PositionMode, getValue(constraintMap, "positionMode", "Percent"));
+ data.spacingMode = Utils.enumValue(SpacingMode, getValue(constraintMap, "spacingMode", "Length"));
+ data.rotateMode = Utils.enumValue(RotateMode, getValue(constraintMap, "rotateMode", "Tangent"));
+ data.offsetRotation = getValue(constraintMap, "rotation", 0);
+ data.position = getValue(constraintMap, "position", 0);
+ if (data.positionMode == PositionMode.Fixed)
+ data.position *= scale;
+ data.spacing = getValue(constraintMap, "spacing", 0);
+ if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)
+ data.spacing *= scale;
+ data.mixRotate = getValue(constraintMap, "mixRotate", 1);
+ data.mixX = getValue(constraintMap, "mixX", 1);
+ data.mixY = getValue(constraintMap, "mixY", data.mixX);
+ skeletonData.pathConstraints.push(data);
+ }
+ }
+ if (root.skins) {
+ for (let i = 0; i < root.skins.length; i++) {
+ let skinMap = root.skins[i];
+ let skin = new Skin(skinMap.name);
+ if (skinMap.bones) {
+ for (let ii = 0; ii < skinMap.bones.length; ii++)
+ skin.bones.push(skeletonData.findBone(skinMap.bones[ii]));
+ }
+ if (skinMap.ik) {
+ for (let ii = 0; ii < skinMap.ik.length; ii++)
+ skin.constraints.push(skeletonData.findIkConstraint(skinMap.ik[ii]));
+ }
+ if (skinMap.transform) {
+ for (let ii = 0; ii < skinMap.transform.length; ii++)
+ skin.constraints.push(skeletonData.findTransformConstraint(skinMap.transform[ii]));
+ }
+ if (skinMap.path) {
+ for (let ii = 0; ii < skinMap.path.length; ii++)
+ skin.constraints.push(skeletonData.findPathConstraint(skinMap.path[ii]));
+ }
+ for (let slotName in skinMap.attachments) {
+ let slot = skeletonData.findSlot(slotName);
+ let slotMap = skinMap.attachments[slotName];
+ for (let entryName in slotMap) {
+ let attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData);
+ if (attachment)
+ skin.setAttachment(slot.index, entryName, attachment);
+ }
+ }
+ skeletonData.skins.push(skin);
+ if (skin.name == "default")
+ skeletonData.defaultSkin = skin;
+ }
+ }
+ for (let i = 0, n = this.linkedMeshes.length; i < n; i++) {
+ let linkedMesh = this.linkedMeshes[i];
+ let skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);
+ let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);
+ linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent : linkedMesh.mesh;
+ linkedMesh.mesh.setParentMesh(parent);
+ linkedMesh.mesh.updateUVs();
+ }
+ this.linkedMeshes.length = 0;
+ if (root.events) {
+ for (let eventName in root.events) {
+ let eventMap = root.events[eventName];
+ let data = new EventData(eventName);
+ data.intValue = getValue(eventMap, "int", 0);
+ data.floatValue = getValue(eventMap, "float", 0);
+ data.stringValue = getValue(eventMap, "string", "");
+ data.audioPath = getValue(eventMap, "audio", null);
+ if (data.audioPath) {
+ data.volume = getValue(eventMap, "volume", 1);
+ data.balance = getValue(eventMap, "balance", 0);
+ }
+ skeletonData.events.push(data);
+ }
+ }
+ if (root.animations) {
+ for (let animationName in root.animations) {
+ let animationMap = root.animations[animationName];
+ this.readAnimation(animationMap, animationName, skeletonData);
+ }
+ }
+ return skeletonData;
+ }
+ readAttachment(map, skin, slotIndex, name, skeletonData) {
+ let scale = this.scale;
+ name = getValue(map, "name", name);
+ switch (getValue(map, "type", "region")) {
+ case "region": {
+ let path = getValue(map, "path", name);
+ let region = this.attachmentLoader.newRegionAttachment(skin, name, path);
+ if (!region)
+ return null;
+ region.path = path;
+ region.x = getValue(map, "x", 0) * scale;
+ region.y = getValue(map, "y", 0) * scale;
+ region.scaleX = getValue(map, "scaleX", 1);
+ region.scaleY = getValue(map, "scaleY", 1);
+ region.rotation = getValue(map, "rotation", 0);
+ region.width = map.width * scale;
+ region.height = map.height * scale;
+ let color = getValue(map, "color", null);
+ if (color)
+ region.color.setFromString(color);
+ region.updateOffset();
+ return region;
+ }
+ case "boundingbox": {
+ let box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);
+ if (!box)
+ return null;
+ this.readVertices(map, box, map.vertexCount << 1);
+ let color = getValue(map, "color", null);
+ if (color)
+ box.color.setFromString(color);
+ return box;
+ }
+ case "mesh":
+ case "linkedmesh": {
+ let path = getValue(map, "path", name);
+ let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);
+ if (!mesh)
+ return null;
+ mesh.path = path;
+ let color = getValue(map, "color", null);
+ if (color)
+ mesh.color.setFromString(color);
+ mesh.width = getValue(map, "width", 0) * scale;
+ mesh.height = getValue(map, "height", 0) * scale;
+ let parent = getValue(map, "parent", null);
+ if (parent) {
+ this.linkedMeshes.push(new LinkedMesh2(mesh, getValue(map, "skin", null), slotIndex, parent, getValue(map, "deform", true)));
+ return mesh;
+ }
+ let uvs = map.uvs;
+ this.readVertices(map, mesh, uvs.length);
+ mesh.triangles = map.triangles;
+ mesh.regionUVs = uvs;
+ mesh.updateUVs();
+ mesh.edges = getValue(map, "edges", null);
+ mesh.hullLength = getValue(map, "hull", 0) * 2;
+ return mesh;
+ }
+ case "path": {
+ let path = this.attachmentLoader.newPathAttachment(skin, name);
+ if (!path)
+ return null;
+ path.closed = getValue(map, "closed", false);
+ path.constantSpeed = getValue(map, "constantSpeed", true);
+ let vertexCount = map.vertexCount;
+ this.readVertices(map, path, vertexCount << 1);
+ let lengths = Utils.newArray(vertexCount / 3, 0);
+ for (let i = 0; i < map.lengths.length; i++)
+ lengths[i] = map.lengths[i] * scale;
+ path.lengths = lengths;
+ let color = getValue(map, "color", null);
+ if (color)
+ path.color.setFromString(color);
+ return path;
+ }
+ case "point": {
+ let point = this.attachmentLoader.newPointAttachment(skin, name);
+ if (!point)
+ return null;
+ point.x = getValue(map, "x", 0) * scale;
+ point.y = getValue(map, "y", 0) * scale;
+ point.rotation = getValue(map, "rotation", 0);
+ let color = getValue(map, "color", null);
+ if (color)
+ point.color.setFromString(color);
+ return point;
+ }
+ case "clipping": {
+ let clip = this.attachmentLoader.newClippingAttachment(skin, name);
+ if (!clip)
+ return null;
+ let end = getValue(map, "end", null);
+ if (end)
+ clip.endSlot = skeletonData.findSlot(end);
+ let vertexCount = map.vertexCount;
+ this.readVertices(map, clip, vertexCount << 1);
+ let color = getValue(map, "color", null);
+ if (color)
+ clip.color.setFromString(color);
+ return clip;
+ }
+ }
+ return null;
+ }
+ readVertices(map, attachment, verticesLength) {
+ let scale = this.scale;
+ attachment.worldVerticesLength = verticesLength;
+ let vertices = map.vertices;
+ if (verticesLength == vertices.length) {
+ let scaledVertices = Utils.toFloatArray(vertices);
+ if (scale != 1) {
+ for (let i = 0, n = vertices.length; i < n; i++)
+ scaledVertices[i] *= scale;
+ }
+ attachment.vertices = scaledVertices;
+ return;
+ }
+ let weights = new Array();
+ let bones = new Array();
+ for (let i = 0, n = vertices.length; i < n; ) {
+ let boneCount = vertices[i++];
+ bones.push(boneCount);
+ for (let nn = i + boneCount * 4; i < nn; i += 4) {
+ bones.push(vertices[i]);
+ weights.push(vertices[i + 1] * scale);
+ weights.push(vertices[i + 2] * scale);
+ weights.push(vertices[i + 3]);
+ }
+ }
+ attachment.bones = bones;
+ attachment.vertices = Utils.toFloatArray(weights);
+ }
+ readAnimation(map, name, skeletonData) {
+ let scale = this.scale;
+ let timelines = new Array();
+ if (map.slots) {
+ for (let slotName in map.slots) {
+ let slotMap = map.slots[slotName];
+ let slotIndex = skeletonData.findSlotIndex(slotName);
+ for (let timelineName in slotMap) {
+ let timelineMap = slotMap[timelineName];
+ if (!timelineMap)
+ continue;
+ if (timelineName == "attachment") {
+ let timeline = new AttachmentTimeline(timelineMap.length, slotIndex);
+ for (let frame = 0; frame < timelineMap.length; frame++) {
+ let keyMap = timelineMap[frame];
+ timeline.setFrame(frame, getValue(keyMap, "time", 0), keyMap.name);
+ }
+ timelines.push(timeline);
+ } else if (timelineName == "rgba") {
+ let timeline = new RGBATimeline(timelineMap.length, timelineMap.length << 2, slotIndex);
+ let keyMap = timelineMap[0];
+ let time = getValue(keyMap, "time", 0);
+ let color = Color.fromString(keyMap.color);
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, color.r, color.g, color.b, color.a);
+ let nextMap = timelineMap[frame + 1];
+ if (!nextMap) {
+ timeline.shrink(bezier);
+ break;
+ }
+ let time2 = getValue(nextMap, "time", 0);
+ let newColor = Color.fromString(nextMap.color);
+ let curve = keyMap.curve;
+ if (curve) {
+ bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);
+ }
+ time = time2;
+ color = newColor;
+ keyMap = nextMap;
+ }
+ timelines.push(timeline);
+ } else if (timelineName == "rgb") {
+ let timeline = new RGBTimeline(timelineMap.length, timelineMap.length * 3, slotIndex);
+ let keyMap = timelineMap[0];
+ let time = getValue(keyMap, "time", 0);
+ let color = Color.fromString(keyMap.color);
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, color.r, color.g, color.b);
+ let nextMap = timelineMap[frame + 1];
+ if (!nextMap) {
+ timeline.shrink(bezier);
+ break;
+ }
+ let time2 = getValue(nextMap, "time", 0);
+ let newColor = Color.fromString(nextMap.color);
+ let curve = keyMap.curve;
+ if (curve) {
+ bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);
+ }
+ time = time2;
+ color = newColor;
+ keyMap = nextMap;
+ }
+ timelines.push(timeline);
+ } else if (timelineName == "alpha") {
+ timelines.push(readTimeline12(timelineMap, new AlphaTimeline(timelineMap.length, timelineMap.length, slotIndex), 0, 1));
+ } else if (timelineName == "rgba2") {
+ let timeline = new RGBA2Timeline(timelineMap.length, timelineMap.length * 7, slotIndex);
+ let keyMap = timelineMap[0];
+ let time = getValue(keyMap, "time", 0);
+ let color = Color.fromString(keyMap.light);
+ let color2 = Color.fromString(keyMap.dark);
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b);
+ let nextMap = timelineMap[frame + 1];
+ if (!nextMap) {
+ timeline.shrink(bezier);
+ break;
+ }
+ let time2 = getValue(nextMap, "time", 0);
+ let newColor = Color.fromString(nextMap.light);
+ let newColor2 = Color.fromString(nextMap.dark);
+ let curve = keyMap.curve;
+ if (curve) {
+ bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.r, newColor2.r, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.g, newColor2.g, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 6, time, time2, color2.b, newColor2.b, 1);
+ }
+ time = time2;
+ color = newColor;
+ color2 = newColor2;
+ keyMap = nextMap;
+ }
+ timelines.push(timeline);
+ } else if (timelineName == "rgb2") {
+ let timeline = new RGB2Timeline(timelineMap.length, timelineMap.length * 6, slotIndex);
+ let keyMap = timelineMap[0];
+ let time = getValue(keyMap, "time", 0);
+ let color = Color.fromString(keyMap.light);
+ let color2 = Color.fromString(keyMap.dark);
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, color.r, color.g, color.b, color2.r, color2.g, color2.b);
+ let nextMap = timelineMap[frame + 1];
+ if (!nextMap) {
+ timeline.shrink(bezier);
+ break;
+ }
+ let time2 = getValue(nextMap, "time", 0);
+ let newColor = Color.fromString(nextMap.light);
+ let newColor2 = Color.fromString(nextMap.dark);
+ let curve = keyMap.curve;
+ if (curve) {
+ bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.r, newColor2.r, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.g, newColor2.g, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.b, newColor2.b, 1);
+ }
+ time = time2;
+ color = newColor;
+ color2 = newColor2;
+ keyMap = nextMap;
+ }
+ timelines.push(timeline);
+ }
+ }
+ }
+ }
+ if (map.bones) {
+ for (let boneName in map.bones) {
+ let boneMap = map.bones[boneName];
+ let boneIndex = skeletonData.findBoneIndex(boneName);
+ for (let timelineName in boneMap) {
+ let timelineMap = boneMap[timelineName];
+ if (timelineMap.length == 0)
+ continue;
+ if (timelineName === "rotate") {
+ timelines.push(readTimeline12(timelineMap, new RotateTimeline(timelineMap.length, timelineMap.length, boneIndex), 0, 1));
+ } else if (timelineName === "translate") {
+ let timeline = new TranslateTimeline(timelineMap.length, timelineMap.length << 1, boneIndex);
+ timelines.push(readTimeline22(timelineMap, timeline, "x", "y", 0, scale));
+ } else if (timelineName === "translatex") {
+ let timeline = new TranslateXTimeline(timelineMap.length, timelineMap.length, boneIndex);
+ timelines.push(readTimeline12(timelineMap, timeline, 0, scale));
+ } else if (timelineName === "translatey") {
+ let timeline = new TranslateYTimeline(timelineMap.length, timelineMap.length, boneIndex);
+ timelines.push(readTimeline12(timelineMap, timeline, 0, scale));
+ } else if (timelineName === "scale") {
+ let timeline = new ScaleTimeline(timelineMap.length, timelineMap.length << 1, boneIndex);
+ timelines.push(readTimeline22(timelineMap, timeline, "x", "y", 1, 1));
+ } else if (timelineName === "scalex") {
+ let timeline = new ScaleXTimeline(timelineMap.length, timelineMap.length, boneIndex);
+ timelines.push(readTimeline12(timelineMap, timeline, 1, 1));
+ } else if (timelineName === "scaley") {
+ let timeline = new ScaleYTimeline(timelineMap.length, timelineMap.length, boneIndex);
+ timelines.push(readTimeline12(timelineMap, timeline, 1, 1));
+ } else if (timelineName === "shear") {
+ let timeline = new ShearTimeline(timelineMap.length, timelineMap.length << 1, boneIndex);
+ timelines.push(readTimeline22(timelineMap, timeline, "x", "y", 0, 1));
+ } else if (timelineName === "shearx") {
+ let timeline = new ShearXTimeline(timelineMap.length, timelineMap.length, boneIndex);
+ timelines.push(readTimeline12(timelineMap, timeline, 0, 1));
+ } else if (timelineName === "sheary") {
+ let timeline = new ShearYTimeline(timelineMap.length, timelineMap.length, boneIndex);
+ timelines.push(readTimeline12(timelineMap, timeline, 0, 1));
+ }
+ }
+ }
+ }
+ if (map.ik) {
+ for (let constraintName in map.ik) {
+ let constraintMap = map.ik[constraintName];
+ let keyMap = constraintMap[0];
+ if (!keyMap)
+ continue;
+ let constraint = skeletonData.findIkConstraint(constraintName);
+ let constraintIndex = skeletonData.ikConstraints.indexOf(constraint);
+ let timeline = new IkConstraintTimeline(constraintMap.length, constraintMap.length << 1, constraintIndex);
+ let time = getValue(keyMap, "time", 0);
+ let mix = getValue(keyMap, "mix", 1);
+ let softness = getValue(keyMap, "softness", 0) * scale;
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, mix, softness, getValue(keyMap, "bendPositive", true) ? 1 : -1, getValue(keyMap, "compress", false), getValue(keyMap, "stretch", false));
+ let nextMap = constraintMap[frame + 1];
+ if (!nextMap) {
+ timeline.shrink(bezier);
+ break;
+ }
+ let time2 = getValue(nextMap, "time", 0);
+ let mix2 = getValue(nextMap, "mix", 1);
+ let softness2 = getValue(nextMap, "softness", 0) * scale;
+ let curve = keyMap.curve;
if (curve) {
- bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale);
- bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale);
+ bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mix, mix2, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, softness, softness2, scale);
}
time = time2;
- value1 = nvalue1;
- value2 = nvalue2;
+ mix = mix2;
+ softness = softness2;
keyMap = nextMap;
+ }
+ timelines.push(timeline);
}
- }
- function readCurve(curve, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {
- if (curve == "stepped") {
- timeline.setStepped(frame);
- return bezier;
- }
- var i = value << 2;
- var cx1 = curve[i];
- var cy1 = curve[i + 1] * scale;
- var cx2 = curve[i + 2];
- var cy2 = curve[i + 3] * scale;
- timeline.setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2);
- return bezier + 1;
- }
- function getValue(map, property, defaultValue) {
- return map[property] !== undefined ? map[property] : defaultValue;
- }
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- (function () {
- if (typeof Math.fround === "undefined") {
- Math.fround = (function (array) {
- return function (x) {
- return array[0] = x, array[0];
- };
- })(new Float32Array(1));
- }
- })();
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- var JitterEffect = /** @class */ (function () {
- function JitterEffect(jitterX, jitterY) {
- this.jitterX = 0;
- this.jitterY = 0;
- this.jitterX = jitterX;
- this.jitterY = jitterY;
- }
- JitterEffect.prototype.begin = function (skeleton) {
- };
- JitterEffect.prototype.transform = function (position, uv, light, dark) {
- position.x += MathUtils.randomTriangular(-this.jitterX, this.jitterY);
- position.y += MathUtils.randomTriangular(-this.jitterX, this.jitterY);
- };
- JitterEffect.prototype.end = function () {
- };
- return JitterEffect;
- }());
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- var SwirlEffect = /** @class */ (function () {
- function SwirlEffect(radius) {
- this.centerX = 0;
- this.centerY = 0;
- this.radius = 0;
- this.angle = 0;
- this.worldX = 0;
- this.worldY = 0;
- this.radius = radius;
- }
- SwirlEffect.prototype.begin = function (skeleton) {
- this.worldX = skeleton.x + this.centerX;
- this.worldY = skeleton.y + this.centerY;
- };
- SwirlEffect.prototype.transform = function (position, uv, light, dark) {
- var radAngle = this.angle * MathUtils.degreesToRadians;
- var x = position.x - this.worldX;
- var y = position.y - this.worldY;
- var dist = Math.sqrt(x * x + y * y);
- if (dist < this.radius) {
- var theta = SwirlEffect.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius);
- var cos = Math.cos(theta);
- var sin = Math.sin(theta);
- position.x = cos * x - sin * y + this.worldX;
- position.y = sin * x + cos * y + this.worldY;
+ }
+ if (map.transform) {
+ for (let constraintName in map.transform) {
+ let timelineMap = map.transform[constraintName];
+ let keyMap = timelineMap[0];
+ if (!keyMap)
+ continue;
+ let constraint = skeletonData.findTransformConstraint(constraintName);
+ let constraintIndex = skeletonData.transformConstraints.indexOf(constraint);
+ let timeline = new TransformConstraintTimeline(timelineMap.length, timelineMap.length << 2, constraintIndex);
+ let time = getValue(keyMap, "time", 0);
+ let mixRotate = getValue(keyMap, "mixRotate", 1);
+ let mixX = getValue(keyMap, "mixX", 1);
+ let mixY = getValue(keyMap, "mixY", mixX);
+ let mixScaleX = getValue(keyMap, "mixScaleX", 1);
+ let mixScaleY = getValue(keyMap, "mixScaleY", mixScaleX);
+ let mixShearY = getValue(keyMap, "mixShearY", 1);
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);
+ let nextMap = timelineMap[frame + 1];
+ if (!nextMap) {
+ timeline.shrink(bezier);
+ break;
}
- };
- SwirlEffect.prototype.end = function () {
- };
- SwirlEffect.interpolation = new PowOut(2);
- return SwirlEffect;
- }());
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- var __extends$1 = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var CanvasTexture = /** @class */ (function (_super) {
- __extends$1(CanvasTexture, _super);
- function CanvasTexture(image) {
- return _super.call(this, image) || this;
- }
- CanvasTexture.prototype.setFilters = function (minFilter, magFilter) { };
- CanvasTexture.prototype.setWraps = function (uWrap, vWrap) { };
- CanvasTexture.prototype.dispose = function () { };
- return CanvasTexture;
- }(Texture));
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- var __extends = (this && this.__extends) || (function () {
- var extendStatics = function (d, b) {
- extendStatics = Object.setPrototypeOf ||
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
- extendStatics(d, b);
- function __() { this.constructor = d; }
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
- };
- })();
- var AssetManager = /** @class */ (function (_super) {
- __extends(AssetManager, _super);
- function AssetManager(pathPrefix, downloader) {
- if (pathPrefix === void 0) { pathPrefix = ""; }
- if (downloader === void 0) { downloader = null; }
- return _super.call(this, function (image) { return new CanvasTexture(image); }, pathPrefix, downloader) || this;
- }
- return AssetManager;
- }(AssetManagerBase));
-
- /******************************************************************************
- * Spine Runtimes License Agreement
- * Last updated January 1, 2020. Replaces all prior versions.
- *
- * Copyright (c) 2013-2020, Esoteric Software LLC
- *
- * Integration of the Spine Runtimes into software or otherwise creating
- * derivative works of the Spine Runtimes is permitted under the terms and
- * conditions of Section 2 of the Spine Editor License Agreement:
- * http://esotericsoftware.com/spine-editor-license
- *
- * Otherwise, it is permitted to integrate the Spine Runtimes into software
- * or otherwise create derivative works of the Spine Runtimes (collectively,
- * "Products"), provided that each user of the Products must obtain their own
- * Spine Editor license and redistribution of the Products in any form must
- * include this license and copyright notice.
- *
- * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
- * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *****************************************************************************/
- var SkeletonRenderer = /** @class */ (function () {
- function SkeletonRenderer(context) {
- this.triangleRendering = false;
- this.debugRendering = false;
- this.vertices = Utils.newFloatArray(8 * 1024);
- this.tempColor = new Color();
- this.ctx = context;
- }
- SkeletonRenderer.prototype.draw = function (skeleton) {
- if (this.triangleRendering)
- this.drawTriangles(skeleton);
- else
- this.drawImages(skeleton);
- };
- SkeletonRenderer.prototype.drawImages = function (skeleton) {
- var ctx = this.ctx;
- var color = this.tempColor;
- var skeletonColor = skeleton.color;
- var drawOrder = skeleton.drawOrder;
- if (this.debugRendering)
- ctx.strokeStyle = "green";
- for (var i = 0, n = drawOrder.length; i < n; i++) {
- var slot = drawOrder[i];
- var bone = slot.bone;
- if (!bone.active)
- continue;
- var attachment = slot.getAttachment();
- if (!(attachment instanceof RegionAttachment))
- continue;
- var region = attachment.region;
- var image = region.page.texture.getImage();
- var slotColor = slot.color;
- var regionColor = attachment.color;
- 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);
- ctx.save();
- ctx.transform(bone.a, bone.c, bone.b, bone.d, bone.worldX, bone.worldY);
- ctx.translate(attachment.offset[0], attachment.offset[1]);
- ctx.rotate(attachment.rotation * Math.PI / 180);
- var atlasScale = attachment.width / region.originalWidth;
- ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY);
- var w = region.width, h = region.height;
- ctx.translate(w / 2, h / 2);
- if (attachment.region.degrees == 90) {
- var t = w;
- w = h;
- h = t;
- ctx.rotate(-Math.PI / 2);
- }
- ctx.scale(1, -1);
- ctx.translate(-w / 2, -h / 2);
- if (color.r != 1 || color.g != 1 || color.b != 1 || color.a != 1) {
- ctx.globalAlpha = color.a;
- // experimental tinting via compositing, doesn't work
- // ctx.globalCompositeOperation = "source-atop";
- // ctx.fillStyle = "rgba(" + (color.r * 255 | 0) + ", " + (color.g * 255 | 0) + ", " + (color.b * 255 | 0) + ", " + color.a + ")";
- // ctx.fillRect(0, 0, w, h);
- }
- ctx.drawImage(image, region.x, region.y, w, h, 0, 0, w, h);
- if (this.debugRendering)
- ctx.strokeRect(0, 0, w, h);
- ctx.restore();
+ let time2 = getValue(nextMap, "time", 0);
+ let mixRotate2 = getValue(nextMap, "mixRotate", 1);
+ let mixX2 = getValue(nextMap, "mixX", 1);
+ let mixY2 = getValue(nextMap, "mixY", mixX2);
+ let mixScaleX2 = getValue(nextMap, "mixScaleX", 1);
+ let mixScaleY2 = getValue(nextMap, "mixScaleY", mixScaleX2);
+ let mixShearY2 = getValue(nextMap, "mixShearY", 1);
+ let curve = keyMap.curve;
+ if (curve) {
+ bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1);
}
- };
- SkeletonRenderer.prototype.drawTriangles = function (skeleton) {
- var ctx = this.ctx;
- var color = this.tempColor;
- var skeletonColor = skeleton.color;
- var drawOrder = skeleton.drawOrder;
- var blendMode = null;
- var vertices = this.vertices;
- var triangles = null;
- for (var i = 0, n = drawOrder.length; i < n; i++) {
- var slot = drawOrder[i];
- var attachment = slot.getAttachment();
- var texture = void 0;
- var region = void 0;
- if (attachment instanceof RegionAttachment) {
- var regionAttachment = attachment;
- vertices = this.computeRegionVertices(slot, regionAttachment, false);
- triangles = SkeletonRenderer.QUAD_TRIANGLES;
- region = regionAttachment.region;
- texture = region.page.texture.getImage();
+ time = time2;
+ mixRotate = mixRotate2;
+ mixX = mixX2;
+ mixY = mixY2;
+ mixScaleX = mixScaleX2;
+ mixScaleY = mixScaleY2;
+ mixScaleX = mixScaleX2;
+ keyMap = nextMap;
+ }
+ timelines.push(timeline);
+ }
+ }
+ if (map.path) {
+ for (let constraintName in map.path) {
+ let constraintMap = map.path[constraintName];
+ let constraint = skeletonData.findPathConstraint(constraintName);
+ let constraintIndex = skeletonData.pathConstraints.indexOf(constraint);
+ for (let timelineName in constraintMap) {
+ let timelineMap = constraintMap[timelineName];
+ let keyMap = timelineMap[0];
+ if (!keyMap)
+ continue;
+ if (timelineName === "position") {
+ let timeline = new PathConstraintPositionTimeline(timelineMap.length, timelineMap.length, constraintIndex);
+ timelines.push(readTimeline12(timelineMap, timeline, 0, constraint.positionMode == PositionMode.Fixed ? scale : 1));
+ } else if (timelineName === "spacing") {
+ let timeline = new PathConstraintSpacingTimeline(timelineMap.length, timelineMap.length, constraintIndex);
+ timelines.push(readTimeline12(timelineMap, timeline, 0, constraint.spacingMode == SpacingMode.Length || constraint.spacingMode == SpacingMode.Fixed ? scale : 1));
+ } else if (timelineName === "mix") {
+ let timeline = new PathConstraintMixTimeline(timelineMap.size, timelineMap.size * 3, constraintIndex);
+ let time = getValue(keyMap, "time", 0);
+ let mixRotate = getValue(keyMap, "mixRotate", 1);
+ let mixX = getValue(keyMap, "mixX", 1);
+ let mixY = getValue(keyMap, "mixY", mixX);
+ for (let frame = 0, bezier = 0; ; frame++) {
+ timeline.setFrame(frame, time, mixRotate, mixX, mixY);
+ let nextMap = timelineMap[frame + 1];
+ if (!nextMap) {
+ timeline.shrink(bezier);
+ break;
}
- else if (attachment instanceof MeshAttachment) {
- var mesh = attachment;
- vertices = this.computeMeshVertices(slot, mesh, false);
- triangles = mesh.triangles;
- texture = mesh.region.renderObject.page.texture.getImage();
- }
- else
- continue;
- if (texture) {
- if (slot.data.blendMode != blendMode)
- blendMode = slot.data.blendMode;
- var slotColor = slot.color;
- var attachmentColor = attachment.color;
- 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);
- if (color.r != 1 || color.g != 1 || color.b != 1 || color.a != 1) {
- ctx.globalAlpha = color.a;
- // experimental tinting via compositing, doesn't work
- // ctx.globalCompositeOperation = "source-atop";
- // ctx.fillStyle = "rgba(" + (color.r * 255 | 0) + ", " + (color.g * 255 | 0) + ", " + (color.b * 255 | 0) + ", " + color.a + ")";
- // ctx.fillRect(0, 0, w, h);
- }
- for (var j = 0; j < triangles.length; j += 3) {
- var t1 = triangles[j] * 8, t2 = triangles[j + 1] * 8, t3 = triangles[j + 2] * 8;
- var x0 = vertices[t1], y0 = vertices[t1 + 1], u0 = vertices[t1 + 6], v0 = vertices[t1 + 7];
- var x1 = vertices[t2], y1 = vertices[t2 + 1], u1 = vertices[t2 + 6], v1 = vertices[t2 + 7];
- var x2 = vertices[t3], y2 = vertices[t3 + 1], u2 = vertices[t3 + 6], v2 = vertices[t3 + 7];
- this.drawTriangle(texture, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2);
- if (this.debugRendering) {
- ctx.strokeStyle = "green";
- ctx.beginPath();
- ctx.moveTo(x0, y0);
- ctx.lineTo(x1, y1);
- ctx.lineTo(x2, y2);
- ctx.lineTo(x0, y0);
- ctx.stroke();
- }
- }
+ let time2 = getValue(nextMap, "time", 0);
+ let mixRotate2 = getValue(nextMap, "mixRotate", 1);
+ let mixX2 = getValue(nextMap, "mixX", 1);
+ let mixY2 = getValue(nextMap, "mixY", mixX2);
+ let curve = keyMap.curve;
+ if (curve) {
+ bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);
+ bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);
}
+ time = time2;
+ mixRotate = mixRotate2;
+ mixX = mixX2;
+ mixY = mixY2;
+ keyMap = nextMap;
+ }
+ timelines.push(timeline);
}
- this.ctx.globalAlpha = 1;
- };
- // Adapted from http://extremelysatisfactorytotalitarianism.com/blog/?p=2120
- // Apache 2 licensed
- SkeletonRenderer.prototype.drawTriangle = function (img, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2) {
- var ctx = this.ctx;
- u0 *= img.width;
- v0 *= img.height;
- u1 *= img.width;
- v1 *= img.height;
- u2 *= img.width;
- v2 *= img.height;
- ctx.beginPath();
- ctx.moveTo(x0, y0);
- ctx.lineTo(x1, y1);
- ctx.lineTo(x2, y2);
- ctx.closePath();
- x1 -= x0;
- y1 -= y0;
- x2 -= x0;
- y2 -= y0;
- u1 -= u0;
- v1 -= v0;
- u2 -= u0;
- v2 -= v0;
- var det = 1 / (u1 * v2 - u2 * v1),
- // linear transformation
- a = (v2 * x1 - v1 * x2) * det, b = (v2 * y1 - v1 * y2) * det, c = (u1 * x2 - u2 * x1) * det, d = (u1 * y2 - u2 * y1) * det,
- // translation
- e = x0 - a * u0 - c * v0, f = y0 - b * u0 - d * v0;
- ctx.save();
- ctx.transform(a, b, c, d, e, f);
- ctx.clip();
- ctx.drawImage(img, 0, 0);
- ctx.restore();
- };
- SkeletonRenderer.prototype.computeRegionVertices = function (slot, region, pma) {
- var skeletonColor = slot.bone.skeleton.color;
- var slotColor = slot.color;
- var regionColor = region.color;
- var alpha = skeletonColor.a * slotColor.a * regionColor.a;
- var multiplier = pma ? alpha : 1;
- var color = this.tempColor;
- color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha);
- region.computeWorldVertices(slot.bone, this.vertices, 0, SkeletonRenderer.VERTEX_SIZE);
- var vertices = this.vertices;
- var uvs = region.uvs;
- vertices[RegionAttachment.C1R] = color.r;
- vertices[RegionAttachment.C1G] = color.g;
- vertices[RegionAttachment.C1B] = color.b;
- vertices[RegionAttachment.C1A] = color.a;
- vertices[RegionAttachment.U1] = uvs[0];
- vertices[RegionAttachment.V1] = uvs[1];
- vertices[RegionAttachment.C2R] = color.r;
- vertices[RegionAttachment.C2G] = color.g;
- vertices[RegionAttachment.C2B] = color.b;
- vertices[RegionAttachment.C2A] = color.a;
- vertices[RegionAttachment.U2] = uvs[2];
- vertices[RegionAttachment.V2] = uvs[3];
- vertices[RegionAttachment.C3R] = color.r;
- vertices[RegionAttachment.C3G] = color.g;
- vertices[RegionAttachment.C3B] = color.b;
- vertices[RegionAttachment.C3A] = color.a;
- vertices[RegionAttachment.U3] = uvs[4];
- vertices[RegionAttachment.V3] = uvs[5];
- vertices[RegionAttachment.C4R] = color.r;
- vertices[RegionAttachment.C4G] = color.g;
- vertices[RegionAttachment.C4B] = color.b;
- vertices[RegionAttachment.C4A] = color.a;
- vertices[RegionAttachment.U4] = uvs[6];
- vertices[RegionAttachment.V4] = uvs[7];
- return vertices;
- };
- SkeletonRenderer.prototype.computeMeshVertices = function (slot, mesh, pma) {
- var skeletonColor = slot.bone.skeleton.color;
- var slotColor = slot.color;
- var regionColor = mesh.color;
- var alpha = skeletonColor.a * slotColor.a * regionColor.a;
- var multiplier = pma ? alpha : 1;
- var color = this.tempColor;
- color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha);
- var vertexCount = mesh.worldVerticesLength / 2;
- var vertices = this.vertices;
- if (vertices.length < mesh.worldVerticesLength)
- this.vertices = vertices = Utils.newFloatArray(mesh.worldVerticesLength);
- mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, SkeletonRenderer.VERTEX_SIZE);
- var uvs = mesh.uvs;
- for (var i = 0, u = 0, v = 2; i < vertexCount; i++) {
- vertices[v++] = color.r;
- vertices[v++] = color.g;
- vertices[v++] = color.b;
- vertices[v++] = color.a;
- vertices[v++] = uvs[u++];
- vertices[v++] = uvs[u++];
- v += 2;
+ }
+ }
+ }
+ if (map.deform) {
+ for (let deformName in map.deform) {
+ let deformMap = map.deform[deformName];
+ let skin = skeletonData.findSkin(deformName);
+ for (let slotName in deformMap) {
+ let slotMap = deformMap[slotName];
+ let slotIndex = skeletonData.findSlotIndex(slotName);
+ for (let timelineName in slotMap) {
+ let timelineMap = slotMap[timelineName];
+ let keyMap = timelineMap[0];
+ if (!keyMap)
+ continue;
+ let attachment = skin.getAttachment(slotIndex, timelineName);
+ let weighted = attachment.bones;
+ let vertices = attachment.vertices;
+ let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;
+ let timeline = new DeformTimeline(timelineMap.length, timelineMap.length, slotIndex, attachment);
+ let time = getValue(keyMap, "time", 0);
+ for (let frame = 0, bezier = 0; ; frame++) {
+ let deform;
+ let verticesValue = getValue(keyMap, "vertices", null);
+ if (!verticesValue)
+ deform = weighted ? Utils.newFloatArray(deformLength) : vertices;
+ else {
+ deform = Utils.newFloatArray(deformLength);
+ let start = getValue(keyMap, "offset", 0);
+ Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);
+ if (scale != 1) {
+ for (let i = start, n = i + verticesValue.length; i < n; i++)
+ deform[i] *= scale;
+ }
+ if (!weighted) {
+ for (let i = 0; i < deformLength; i++)
+ deform[i] += vertices[i];
+ }
+ }
+ timeline.setFrame(frame, time, deform);
+ let nextMap = timelineMap[frame + 1];
+ if (!nextMap) {
+ timeline.shrink(bezier);
+ break;
+ }
+ let time2 = getValue(nextMap, "time", 0);
+ let curve = keyMap.curve;
+ if (curve)
+ bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1);
+ time = time2;
+ keyMap = nextMap;
+ }
+ timelines.push(timeline);
}
- return vertices;
- };
- SkeletonRenderer.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];
- SkeletonRenderer.VERTEX_SIZE = 2 + 2 + 4;
- return SkeletonRenderer;
- }());
-
- if (globalThis.spine) {
- globalThis.spine.canvas = {
- AssetManager: AssetManager,
- CanvasTexture: CanvasTexture,
- SkeletonRenderer: SkeletonRenderer
- };
+ }
+ }
+ }
+ if (map.drawOrder) {
+ let timeline = new DrawOrderTimeline(map.drawOrder.length);
+ let slotCount = skeletonData.slots.length;
+ let frame = 0;
+ for (let i = 0; i < map.drawOrder.length; i++, frame++) {
+ let drawOrderMap = map.drawOrder[i];
+ let drawOrder = null;
+ let offsets = getValue(drawOrderMap, "offsets", null);
+ if (offsets) {
+ drawOrder = Utils.newArray(slotCount, -1);
+ let unchanged = Utils.newArray(slotCount - offsets.length, 0);
+ let originalIndex = 0, unchangedIndex = 0;
+ for (let ii = 0; ii < offsets.length; ii++) {
+ let offsetMap = offsets[ii];
+ let slotIndex = skeletonData.findSlotIndex(offsetMap.slot);
+ while (originalIndex != slotIndex)
+ unchanged[unchangedIndex++] = originalIndex++;
+ drawOrder[originalIndex + offsetMap.offset] = originalIndex++;
+ }
+ while (originalIndex < slotCount)
+ unchanged[unchangedIndex++] = originalIndex++;
+ for (let ii = slotCount - 1; ii >= 0; ii--)
+ if (drawOrder[ii] == -1)
+ drawOrder[ii] = unchanged[--unchangedIndex];
+ }
+ timeline.setFrame(frame, getValue(drawOrderMap, "time", 0), drawOrder);
+ }
+ timelines.push(timeline);
+ }
+ if (map.events) {
+ let timeline = new EventTimeline(map.events.length);
+ let frame = 0;
+ for (let i = 0; i < map.events.length; i++, frame++) {
+ let eventMap = map.events[i];
+ let eventData = skeletonData.findEvent(eventMap.name);
+ let event = new Event(Utils.toSinglePrecision(getValue(eventMap, "time", 0)), eventData);
+ event.intValue = getValue(eventMap, "int", eventData.intValue);
+ event.floatValue = getValue(eventMap, "float", eventData.floatValue);
+ event.stringValue = getValue(eventMap, "string", eventData.stringValue);
+ if (event.data.audioPath) {
+ event.volume = getValue(eventMap, "volume", 1);
+ event.balance = getValue(eventMap, "balance", 0);
+ }
+ timeline.setFrame(frame, event);
+ }
+ timelines.push(timeline);
+ }
+ let duration = 0;
+ for (let i = 0, n = timelines.length; i < n; i++)
+ duration = Math.max(duration, timelines[i].getDuration());
+ skeletonData.animations.push(new Animation(name, timelines, duration));
}
+ };
+ var LinkedMesh2 = class {
+ constructor(mesh, skin, slotIndex, parent, inheritDeform) {
+ this.mesh = mesh;
+ this.skin = skin;
+ this.slotIndex = slotIndex;
+ this.parent = parent;
+ this.inheritDeform = inheritDeform;
+ }
+ };
+ function readTimeline12(keys, timeline, defaultValue, scale) {
+ let keyMap = keys[0];
+ let time = getValue(keyMap, "time", 0);
+ let value = getValue(keyMap, "value", defaultValue) * scale;
+ let bezier = 0;
+ for (let frame = 0; ; frame++) {
+ timeline.setFrame(frame, time, value);
+ let nextMap = keys[frame + 1];
+ if (!nextMap) {
+ timeline.shrink(bezier);
+ return timeline;
+ }
+ let time2 = getValue(nextMap, "time", 0);
+ let value2 = getValue(nextMap, "value", defaultValue) * scale;
+ if (keyMap.curve)
+ bezier = readCurve(keyMap.curve, timeline, bezier, frame, 0, time, time2, value, value2, scale);
+ time = time2;
+ value = value2;
+ keyMap = nextMap;
+ }
+ }
+ function readTimeline22(keys, timeline, name1, name2, defaultValue, scale) {
+ let keyMap = keys[0];
+ let time = getValue(keyMap, "time", 0);
+ let value1 = getValue(keyMap, name1, defaultValue) * scale;
+ let value2 = getValue(keyMap, name2, defaultValue) * scale;
+ let bezier = 0;
+ for (let frame = 0; ; frame++) {
+ timeline.setFrame(frame, time, value1, value2);
+ let nextMap = keys[frame + 1];
+ if (!nextMap) {
+ timeline.shrink(bezier);
+ return timeline;
+ }
+ let time2 = getValue(nextMap, "time", 0);
+ let nvalue1 = getValue(nextMap, name1, defaultValue) * scale;
+ let nvalue2 = getValue(nextMap, name2, defaultValue) * scale;
+ let curve = keyMap.curve;
+ if (curve) {
+ bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale);
+ bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale);
+ }
+ time = time2;
+ value1 = nvalue1;
+ value2 = nvalue2;
+ keyMap = nextMap;
+ }
+ }
+ function readCurve(curve, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {
+ if (curve == "stepped") {
+ timeline.setStepped(frame);
+ return bezier;
+ }
+ let i = value << 2;
+ let cx1 = curve[i];
+ let cy1 = curve[i + 1] * scale;
+ let cx2 = curve[i + 2];
+ let cy2 = curve[i + 3] * scale;
+ timeline.setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2);
+ return bezier + 1;
+ }
+ function getValue(map, property, defaultValue) {
+ return map[property] !== void 0 ? map[property] : defaultValue;
+ }
- exports.AlphaTimeline = AlphaTimeline;
- exports.Animation = Animation;
- exports.AnimationState = AnimationState;
- exports.AnimationStateAdapter = AnimationStateAdapter;
- exports.AnimationStateData = AnimationStateData;
- exports.AssetManager = AssetManager;
- exports.AssetManagerBase = AssetManagerBase;
- exports.AtlasAttachmentLoader = AtlasAttachmentLoader;
- exports.Attachment = Attachment;
- exports.AttachmentTimeline = AttachmentTimeline;
- exports.BinaryInput = BinaryInput;
- exports.Bone = Bone;
- exports.BoneData = BoneData;
- exports.BoundingBoxAttachment = BoundingBoxAttachment;
- exports.CURRENT = CURRENT;
- exports.CanvasTexture = CanvasTexture;
- exports.ClippingAttachment = ClippingAttachment;
- exports.Color = Color;
- exports.ConstraintData = ConstraintData;
- exports.CurveTimeline = CurveTimeline;
- exports.CurveTimeline1 = CurveTimeline1;
- exports.CurveTimeline2 = CurveTimeline2;
- exports.DebugUtils = DebugUtils;
- exports.DeformTimeline = DeformTimeline;
- exports.Downloader = Downloader;
- exports.DrawOrderTimeline = DrawOrderTimeline;
- exports.Event = Event;
- exports.EventData = EventData;
- exports.EventQueue = EventQueue;
- exports.EventTimeline = EventTimeline;
- exports.FIRST = FIRST;
- exports.FakeTexture = FakeTexture;
- exports.HOLD_FIRST = HOLD_FIRST;
- exports.HOLD_MIX = HOLD_MIX;
- exports.HOLD_SUBSEQUENT = HOLD_SUBSEQUENT;
- exports.IkConstraint = IkConstraint;
- exports.IkConstraintData = IkConstraintData;
- exports.IkConstraintTimeline = IkConstraintTimeline;
- exports.IntSet = IntSet;
- exports.Interpolation = Interpolation;
- exports.JitterEffect = JitterEffect;
- exports.MathUtils = MathUtils;
- exports.MeshAttachment = MeshAttachment;
- exports.PathAttachment = PathAttachment;
- exports.PathConstraint = PathConstraint;
- exports.PathConstraintData = PathConstraintData;
- exports.PathConstraintMixTimeline = PathConstraintMixTimeline;
- exports.PathConstraintPositionTimeline = PathConstraintPositionTimeline;
- exports.PathConstraintSpacingTimeline = PathConstraintSpacingTimeline;
- exports.PointAttachment = PointAttachment;
- exports.Pool = Pool;
- exports.Pow = Pow;
- exports.PowOut = PowOut;
- exports.RGB2Timeline = RGB2Timeline;
- exports.RGBA2Timeline = RGBA2Timeline;
- exports.RGBATimeline = RGBATimeline;
- exports.RGBTimeline = RGBTimeline;
- exports.RegionAttachment = RegionAttachment;
- exports.RotateTimeline = RotateTimeline;
- exports.SETUP = SETUP;
- exports.SUBSEQUENT = SUBSEQUENT;
- exports.ScaleTimeline = ScaleTimeline;
- exports.ScaleXTimeline = ScaleXTimeline;
- exports.ScaleYTimeline = ScaleYTimeline;
- exports.ShearTimeline = ShearTimeline;
- exports.ShearXTimeline = ShearXTimeline;
- exports.ShearYTimeline = ShearYTimeline;
- exports.Skeleton = Skeleton;
- exports.SkeletonBinary = SkeletonBinary;
- exports.SkeletonBounds = SkeletonBounds;
- exports.SkeletonClipping = SkeletonClipping;
- exports.SkeletonData = SkeletonData;
- exports.SkeletonJson = SkeletonJson;
- exports.SkeletonRenderer = SkeletonRenderer;
- exports.Skin = Skin;
- exports.SkinEntry = SkinEntry;
- exports.Slot = Slot;
- exports.SlotData = SlotData;
- exports.StringSet = StringSet;
- exports.SwirlEffect = SwirlEffect;
- exports.Texture = Texture;
- exports.TextureAtlas = TextureAtlas;
- exports.TextureAtlasPage = TextureAtlasPage;
- exports.TextureAtlasRegion = TextureAtlasRegion;
- exports.TextureRegion = TextureRegion;
- exports.TimeKeeper = TimeKeeper;
- exports.Timeline = Timeline;
- exports.TrackEntry = TrackEntry;
- exports.TransformConstraint = TransformConstraint;
- exports.TransformConstraintData = TransformConstraintData;
- exports.TransformConstraintTimeline = TransformConstraintTimeline;
- exports.TranslateTimeline = TranslateTimeline;
- exports.TranslateXTimeline = TranslateXTimeline;
- exports.TranslateYTimeline = TranslateYTimeline;
- exports.Triangulator = Triangulator;
- exports.Utils = Utils;
- exports.Vector2 = Vector2;
- exports.VertexAttachment = VertexAttachment;
- exports.WindowedMean = WindowedMean;
+ // spine-core/src/polyfills.ts
+ (() => {
+ if (typeof Math.fround === "undefined") {
+ Math.fround = function(array) {
+ return function(x) {
+ return array[0] = x, array[0];
+ };
+ }(new Float32Array(1));
+ }
+ })();
- Object.defineProperty(exports, '__esModule', { value: true });
+ // spine-core/src/vertexeffects/JitterEffect.ts
+ var JitterEffect = class {
+ constructor(jitterX, jitterY) {
+ this.jitterX = 0;
+ this.jitterY = 0;
+ this.jitterX = jitterX;
+ this.jitterY = jitterY;
+ }
+ begin(skeleton) {
+ }
+ transform(position, uv, light, dark) {
+ position.x += MathUtils.randomTriangular(-this.jitterX, this.jitterY);
+ position.y += MathUtils.randomTriangular(-this.jitterX, this.jitterY);
+ }
+ end() {
+ }
+ };
-})));
+ // spine-core/src/vertexeffects/SwirlEffect.ts
+ var _SwirlEffect = class {
+ constructor(radius) {
+ this.centerX = 0;
+ this.centerY = 0;
+ this.radius = 0;
+ this.angle = 0;
+ this.worldX = 0;
+ this.worldY = 0;
+ this.radius = radius;
+ }
+ begin(skeleton) {
+ this.worldX = skeleton.x + this.centerX;
+ this.worldY = skeleton.y + this.centerY;
+ }
+ transform(position, uv, light, dark) {
+ let radAngle = this.angle * MathUtils.degreesToRadians;
+ let x = position.x - this.worldX;
+ let y = position.y - this.worldY;
+ let dist = Math.sqrt(x * x + y * y);
+ if (dist < this.radius) {
+ let theta = _SwirlEffect.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius);
+ let cos = Math.cos(theta);
+ let sin = Math.sin(theta);
+ position.x = cos * x - sin * y + this.worldX;
+ position.y = sin * x + cos * y + this.worldY;
+ }
+ }
+ end() {
+ }
+ };
+ var SwirlEffect = _SwirlEffect;
+ SwirlEffect.interpolation = new PowOut(2);
+
+ // spine-canvas/src/CanvasTexture.ts
+ var CanvasTexture = class extends Texture {
+ constructor(image) {
+ super(image);
+ }
+ setFilters(minFilter, magFilter) {
+ }
+ setWraps(uWrap, vWrap) {
+ }
+ dispose() {
+ }
+ };
+
+ // spine-canvas/src/AssetManager.ts
+ var AssetManager = class extends AssetManagerBase {
+ constructor(pathPrefix = "", downloader = null) {
+ super((image) => {
+ return new CanvasTexture(image);
+ }, pathPrefix, downloader);
+ }
+ };
+
+ // spine-canvas/src/SkeletonRenderer.ts
+ var _SkeletonRenderer = class {
+ constructor(context) {
+ this.triangleRendering = false;
+ this.debugRendering = false;
+ this.vertices = Utils.newFloatArray(8 * 1024);
+ this.tempColor = new Color();
+ this.ctx = context;
+ }
+ draw(skeleton) {
+ if (this.triangleRendering)
+ this.drawTriangles(skeleton);
+ else
+ this.drawImages(skeleton);
+ }
+ drawImages(skeleton) {
+ let ctx = this.ctx;
+ let color = this.tempColor;
+ let skeletonColor = skeleton.color;
+ let drawOrder = skeleton.drawOrder;
+ if (this.debugRendering)
+ ctx.strokeStyle = "green";
+ for (let i = 0, n = drawOrder.length; i < n; i++) {
+ let slot = drawOrder[i];
+ let bone = slot.bone;
+ if (!bone.active)
+ continue;
+ let attachment = slot.getAttachment();
+ if (!(attachment instanceof RegionAttachment))
+ continue;
+ let region = attachment.region;
+ let image = region.page.texture.getImage();
+ let slotColor = slot.color;
+ let regionColor = attachment.color;
+ 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);
+ ctx.save();
+ ctx.transform(bone.a, bone.c, bone.b, bone.d, bone.worldX, bone.worldY);
+ ctx.translate(attachment.offset[0], attachment.offset[1]);
+ ctx.rotate(attachment.rotation * Math.PI / 180);
+ let atlasScale = attachment.width / region.originalWidth;
+ ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY);
+ let w = region.width, h = region.height;
+ ctx.translate(w / 2, h / 2);
+ if (attachment.region.degrees == 90) {
+ let t = w;
+ w = h;
+ h = t;
+ ctx.rotate(-Math.PI / 2);
+ }
+ ctx.scale(1, -1);
+ ctx.translate(-w / 2, -h / 2);
+ if (color.r != 1 || color.g != 1 || color.b != 1 || color.a != 1) {
+ ctx.globalAlpha = color.a;
+ }
+ ctx.drawImage(image, region.x, region.y, w, h, 0, 0, w, h);
+ if (this.debugRendering)
+ ctx.strokeRect(0, 0, w, h);
+ ctx.restore();
+ }
+ }
+ drawTriangles(skeleton) {
+ let ctx = this.ctx;
+ let color = this.tempColor;
+ let skeletonColor = skeleton.color;
+ let drawOrder = skeleton.drawOrder;
+ let blendMode = null;
+ let vertices = this.vertices;
+ let triangles = null;
+ for (let i = 0, n = drawOrder.length; i < n; i++) {
+ let slot = drawOrder[i];
+ let attachment = slot.getAttachment();
+ let texture;
+ let region;
+ if (attachment instanceof RegionAttachment) {
+ let regionAttachment = attachment;
+ vertices = this.computeRegionVertices(slot, regionAttachment, false);
+ triangles = _SkeletonRenderer.QUAD_TRIANGLES;
+ region = regionAttachment.region;
+ texture = region.page.texture.getImage();
+ } else if (attachment instanceof MeshAttachment) {
+ let mesh = attachment;
+ vertices = this.computeMeshVertices(slot, mesh, false);
+ triangles = mesh.triangles;
+ texture = mesh.region.renderObject.page.texture.getImage();
+ } else
+ continue;
+ if (texture) {
+ if (slot.data.blendMode != blendMode)
+ blendMode = slot.data.blendMode;
+ let slotColor = slot.color;
+ let attachmentColor = attachment.color;
+ 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);
+ if (color.r != 1 || color.g != 1 || color.b != 1 || color.a != 1) {
+ ctx.globalAlpha = color.a;
+ }
+ for (var j = 0; j < triangles.length; j += 3) {
+ let t1 = triangles[j] * 8, t2 = triangles[j + 1] * 8, t3 = triangles[j + 2] * 8;
+ let x0 = vertices[t1], y0 = vertices[t1 + 1], u0 = vertices[t1 + 6], v0 = vertices[t1 + 7];
+ let x1 = vertices[t2], y1 = vertices[t2 + 1], u1 = vertices[t2 + 6], v1 = vertices[t2 + 7];
+ let x2 = vertices[t3], y2 = vertices[t3 + 1], u2 = vertices[t3 + 6], v2 = vertices[t3 + 7];
+ this.drawTriangle(texture, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2);
+ if (this.debugRendering) {
+ ctx.strokeStyle = "green";
+ ctx.beginPath();
+ ctx.moveTo(x0, y0);
+ ctx.lineTo(x1, y1);
+ ctx.lineTo(x2, y2);
+ ctx.lineTo(x0, y0);
+ ctx.stroke();
+ }
+ }
+ }
+ }
+ this.ctx.globalAlpha = 1;
+ }
+ drawTriangle(img, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2) {
+ let ctx = this.ctx;
+ u0 *= img.width;
+ v0 *= img.height;
+ u1 *= img.width;
+ v1 *= img.height;
+ u2 *= img.width;
+ v2 *= img.height;
+ ctx.beginPath();
+ ctx.moveTo(x0, y0);
+ ctx.lineTo(x1, y1);
+ ctx.lineTo(x2, y2);
+ ctx.closePath();
+ x1 -= x0;
+ y1 -= y0;
+ x2 -= x0;
+ y2 -= y0;
+ u1 -= u0;
+ v1 -= v0;
+ u2 -= u0;
+ v2 -= v0;
+ var det = 1 / (u1 * v2 - u2 * v1), a = (v2 * x1 - v1 * x2) * det, b = (v2 * y1 - v1 * y2) * det, c = (u1 * x2 - u2 * x1) * det, d = (u1 * y2 - u2 * y1) * det, e = x0 - a * u0 - c * v0, f = y0 - b * u0 - d * v0;
+ ctx.save();
+ ctx.transform(a, b, c, d, e, f);
+ ctx.clip();
+ ctx.drawImage(img, 0, 0);
+ ctx.restore();
+ }
+ computeRegionVertices(slot, region, pma) {
+ let skeletonColor = slot.bone.skeleton.color;
+ let slotColor = slot.color;
+ let regionColor = region.color;
+ let alpha = skeletonColor.a * slotColor.a * regionColor.a;
+ let multiplier = pma ? alpha : 1;
+ let color = this.tempColor;
+ color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha);
+ region.computeWorldVertices(slot.bone, this.vertices, 0, _SkeletonRenderer.VERTEX_SIZE);
+ let vertices = this.vertices;
+ let uvs = region.uvs;
+ vertices[RegionAttachment.C1R] = color.r;
+ vertices[RegionAttachment.C1G] = color.g;
+ vertices[RegionAttachment.C1B] = color.b;
+ vertices[RegionAttachment.C1A] = color.a;
+ vertices[RegionAttachment.U1] = uvs[0];
+ vertices[RegionAttachment.V1] = uvs[1];
+ vertices[RegionAttachment.C2R] = color.r;
+ vertices[RegionAttachment.C2G] = color.g;
+ vertices[RegionAttachment.C2B] = color.b;
+ vertices[RegionAttachment.C2A] = color.a;
+ vertices[RegionAttachment.U2] = uvs[2];
+ vertices[RegionAttachment.V2] = uvs[3];
+ vertices[RegionAttachment.C3R] = color.r;
+ vertices[RegionAttachment.C3G] = color.g;
+ vertices[RegionAttachment.C3B] = color.b;
+ vertices[RegionAttachment.C3A] = color.a;
+ vertices[RegionAttachment.U3] = uvs[4];
+ vertices[RegionAttachment.V3] = uvs[5];
+ vertices[RegionAttachment.C4R] = color.r;
+ vertices[RegionAttachment.C4G] = color.g;
+ vertices[RegionAttachment.C4B] = color.b;
+ vertices[RegionAttachment.C4A] = color.a;
+ vertices[RegionAttachment.U4] = uvs[6];
+ vertices[RegionAttachment.V4] = uvs[7];
+ return vertices;
+ }
+ computeMeshVertices(slot, mesh, pma) {
+ let skeletonColor = slot.bone.skeleton.color;
+ let slotColor = slot.color;
+ let regionColor = mesh.color;
+ let alpha = skeletonColor.a * slotColor.a * regionColor.a;
+ let multiplier = pma ? alpha : 1;
+ let color = this.tempColor;
+ color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha);
+ let vertexCount = mesh.worldVerticesLength / 2;
+ let vertices = this.vertices;
+ if (vertices.length < mesh.worldVerticesLength)
+ this.vertices = vertices = Utils.newFloatArray(mesh.worldVerticesLength);
+ mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, _SkeletonRenderer.VERTEX_SIZE);
+ let uvs = mesh.uvs;
+ for (let i = 0, u = 0, v = 2; i < vertexCount; i++) {
+ vertices[v++] = color.r;
+ vertices[v++] = color.g;
+ vertices[v++] = color.b;
+ vertices[v++] = color.a;
+ vertices[v++] = uvs[u++];
+ vertices[v++] = uvs[u++];
+ v += 2;
+ }
+ return vertices;
+ }
+ };
+ var SkeletonRenderer = _SkeletonRenderer;
+ SkeletonRenderer.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];
+ SkeletonRenderer.VERTEX_SIZE = 2 + 2 + 4;
+
+ // spine-canvas/src/index.ts
+ var exports = eval("src_exports");
+ exports.canvas = exports;
+ return src_exports;
+})();
//# sourceMappingURL=spine-canvas.js.map
diff --git a/spine-ts/build/spine-canvas.js.map b/spine-ts/build/spine-canvas.js.map
index ea3ee3270..4be3895e0 100644
--- a/spine-ts/build/spine-canvas.js.map
+++ b/spine-ts/build/spine-canvas.js.map
@@ -1 +1,7 @@
-{"version":3,"file":"spine-canvas.js","sources":["../spine-core/dist/Utils.js","../spine-core/dist/attachments/Attachment.js","../spine-core/dist/Animation.js","../spine-core/dist/AnimationState.js","../spine-core/dist/AnimationStateData.js","../spine-core/dist/attachments/BoundingBoxAttachment.js","../spine-core/dist/attachments/ClippingAttachment.js","../spine-core/dist/Texture.js","../spine-core/dist/TextureAtlas.js","../spine-core/dist/attachments/MeshAttachment.js","../spine-core/dist/attachments/PathAttachment.js","../spine-core/dist/attachments/PointAttachment.js","../spine-core/dist/attachments/RegionAttachment.js","../spine-core/dist/AtlasAttachmentLoader.js","../spine-core/dist/BoneData.js","../spine-core/dist/Bone.js","../spine-core/dist/ConstraintData.js","../spine-core/dist/AssetManagerBase.js","../spine-core/dist/Event.js","../spine-core/dist/EventData.js","../spine-core/dist/IkConstraint.js","../spine-core/dist/IkConstraintData.js","../spine-core/dist/PathConstraintData.js","../spine-core/dist/PathConstraint.js","../spine-core/dist/Slot.js","../spine-core/dist/TransformConstraint.js","../spine-core/dist/Skeleton.js","../spine-core/dist/SkeletonData.js","../spine-core/dist/Skin.js","../spine-core/dist/SlotData.js","../spine-core/dist/TransformConstraintData.js","../spine-core/dist/SkeletonBinary.js","../spine-core/dist/SkeletonBounds.js","../spine-core/dist/Triangulator.js","../spine-core/dist/SkeletonClipping.js","../spine-core/dist/SkeletonJson.js","../spine-core/dist/polyfills.js","../spine-core/dist/vertexeffects/JitterEffect.js","../spine-core/dist/vertexeffects/SwirlEffect.js","../spine-canvas/dist/CanvasTexture.js","../spine-canvas/dist/AssetManager.js","../spine-canvas/dist/SkeletonRenderer.js","../spine-canvas/dist/index.js"],"sourcesContent":["/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar IntSet = /** @class */ (function () {\n function IntSet() {\n this.array = new Array();\n }\n IntSet.prototype.add = function (value) {\n var contains = this.contains(value);\n this.array[value | 0] = value | 0;\n return !contains;\n };\n IntSet.prototype.contains = function (value) {\n return this.array[value | 0] != undefined;\n };\n IntSet.prototype.remove = function (value) {\n this.array[value | 0] = undefined;\n };\n IntSet.prototype.clear = function () {\n this.array.length = 0;\n };\n return IntSet;\n}());\nexport { IntSet };\nvar StringSet = /** @class */ (function () {\n function StringSet() {\n this.entries = {};\n this.size = 0;\n }\n StringSet.prototype.add = function (value) {\n var contains = this.entries[value];\n this.entries[value] = true;\n if (!contains) {\n this.size++;\n return true;\n }\n return false;\n };\n StringSet.prototype.addAll = function (values) {\n var oldSize = this.size;\n for (var i = 0, n = values.length; i < n; i++)\n this.add(values[i]);\n return oldSize != this.size;\n };\n StringSet.prototype.contains = function (value) {\n return this.entries[value];\n };\n StringSet.prototype.clear = function () {\n this.entries = {};\n this.size = 0;\n };\n return StringSet;\n}());\nexport { StringSet };\nvar Color = /** @class */ (function () {\n function Color(r, g, b, a) {\n if (r === void 0) { r = 0; }\n if (g === void 0) { g = 0; }\n if (b === void 0) { b = 0; }\n if (a === void 0) { a = 0; }\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n Color.prototype.set = function (r, g, b, a) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n return this.clamp();\n };\n Color.prototype.setFromColor = function (c) {\n this.r = c.r;\n this.g = c.g;\n this.b = c.b;\n this.a = c.a;\n return this;\n };\n Color.prototype.setFromString = function (hex) {\n hex = hex.charAt(0) == '#' ? hex.substr(1) : hex;\n this.r = parseInt(hex.substr(0, 2), 16) / 255;\n this.g = parseInt(hex.substr(2, 2), 16) / 255;\n this.b = parseInt(hex.substr(4, 2), 16) / 255;\n this.a = hex.length != 8 ? 1 : parseInt(hex.substr(6, 2), 16) / 255;\n return this;\n };\n Color.prototype.add = function (r, g, b, a) {\n this.r += r;\n this.g += g;\n this.b += b;\n this.a += a;\n return this.clamp();\n };\n Color.prototype.clamp = function () {\n if (this.r < 0)\n this.r = 0;\n else if (this.r > 1)\n this.r = 1;\n if (this.g < 0)\n this.g = 0;\n else if (this.g > 1)\n this.g = 1;\n if (this.b < 0)\n this.b = 0;\n else if (this.b > 1)\n this.b = 1;\n if (this.a < 0)\n this.a = 0;\n else if (this.a > 1)\n this.a = 1;\n return this;\n };\n Color.rgba8888ToColor = function (color, value) {\n color.r = ((value & 0xff000000) >>> 24) / 255;\n color.g = ((value & 0x00ff0000) >>> 16) / 255;\n color.b = ((value & 0x0000ff00) >>> 8) / 255;\n color.a = ((value & 0x000000ff)) / 255;\n };\n Color.rgb888ToColor = function (color, value) {\n color.r = ((value & 0x00ff0000) >>> 16) / 255;\n color.g = ((value & 0x0000ff00) >>> 8) / 255;\n color.b = ((value & 0x000000ff)) / 255;\n };\n Color.fromString = function (hex) {\n return new Color().setFromString(hex);\n };\n Color.WHITE = new Color(1, 1, 1, 1);\n Color.RED = new Color(1, 0, 0, 1);\n Color.GREEN = new Color(0, 1, 0, 1);\n Color.BLUE = new Color(0, 0, 1, 1);\n Color.MAGENTA = new Color(1, 0, 1, 1);\n return Color;\n}());\nexport { Color };\nvar MathUtils = /** @class */ (function () {\n function MathUtils() {\n }\n MathUtils.clamp = function (value, min, max) {\n if (value < min)\n return min;\n if (value > max)\n return max;\n return value;\n };\n MathUtils.cosDeg = function (degrees) {\n return Math.cos(degrees * MathUtils.degRad);\n };\n MathUtils.sinDeg = function (degrees) {\n return Math.sin(degrees * MathUtils.degRad);\n };\n MathUtils.signum = function (value) {\n return value > 0 ? 1 : value < 0 ? -1 : 0;\n };\n MathUtils.toInt = function (x) {\n return x > 0 ? Math.floor(x) : Math.ceil(x);\n };\n MathUtils.cbrt = function (x) {\n var y = Math.pow(Math.abs(x), 1 / 3);\n return x < 0 ? -y : y;\n };\n MathUtils.randomTriangular = function (min, max) {\n return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5);\n };\n MathUtils.randomTriangularWith = function (min, max, mode) {\n var u = Math.random();\n var d = max - min;\n if (u <= (mode - min) / d)\n return min + Math.sqrt(u * d * (mode - min));\n return max - Math.sqrt((1 - u) * d * (max - mode));\n };\n MathUtils.isPowerOfTwo = function (value) {\n return value && (value & (value - 1)) === 0;\n };\n MathUtils.PI = 3.1415927;\n MathUtils.PI2 = MathUtils.PI * 2;\n MathUtils.radiansToDegrees = 180 / MathUtils.PI;\n MathUtils.radDeg = MathUtils.radiansToDegrees;\n MathUtils.degreesToRadians = MathUtils.PI / 180;\n MathUtils.degRad = MathUtils.degreesToRadians;\n return MathUtils;\n}());\nexport { MathUtils };\nvar Interpolation = /** @class */ (function () {\n function Interpolation() {\n }\n Interpolation.prototype.apply = function (start, end, a) {\n return start + (end - start) * this.applyInternal(a);\n };\n return Interpolation;\n}());\nexport { Interpolation };\nvar Pow = /** @class */ (function (_super) {\n __extends(Pow, _super);\n function Pow(power) {\n var _this = _super.call(this) || this;\n _this.power = 2;\n _this.power = power;\n return _this;\n }\n Pow.prototype.applyInternal = function (a) {\n if (a <= 0.5)\n return Math.pow(a * 2, this.power) / 2;\n return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1;\n };\n return Pow;\n}(Interpolation));\nexport { Pow };\nvar PowOut = /** @class */ (function (_super) {\n __extends(PowOut, _super);\n function PowOut(power) {\n return _super.call(this, power) || this;\n }\n PowOut.prototype.applyInternal = function (a) {\n return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1;\n };\n return PowOut;\n}(Pow));\nexport { PowOut };\nvar Utils = /** @class */ (function () {\n function Utils() {\n }\n Utils.arrayCopy = function (source, sourceStart, dest, destStart, numElements) {\n for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) {\n dest[j] = source[i];\n }\n };\n Utils.arrayFill = function (array, fromIndex, toIndex, value) {\n for (var i = fromIndex; i < toIndex; i++)\n array[i] = value;\n };\n Utils.setArraySize = function (array, size, value) {\n if (value === void 0) { value = 0; }\n var oldSize = array.length;\n if (oldSize == size)\n return array;\n array.length = size;\n if (oldSize < size) {\n for (var i = oldSize; i < size; i++)\n array[i] = value;\n }\n return array;\n };\n Utils.ensureArrayCapacity = function (array, size, value) {\n if (value === void 0) { value = 0; }\n if (array.length >= size)\n return array;\n return Utils.setArraySize(array, size, value);\n };\n Utils.newArray = function (size, defaultValue) {\n var array = new Array(size);\n for (var i = 0; i < size; i++)\n array[i] = defaultValue;\n return array;\n };\n Utils.newFloatArray = function (size) {\n if (Utils.SUPPORTS_TYPED_ARRAYS)\n return new Float32Array(size);\n else {\n var array = new Array(size);\n for (var i = 0; i < array.length; i++)\n array[i] = 0;\n return array;\n }\n };\n Utils.newShortArray = function (size) {\n if (Utils.SUPPORTS_TYPED_ARRAYS)\n return new Int16Array(size);\n else {\n var array = new Array(size);\n for (var i = 0; i < array.length; i++)\n array[i] = 0;\n return array;\n }\n };\n Utils.toFloatArray = function (array) {\n return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array;\n };\n Utils.toSinglePrecision = function (value) {\n return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value;\n };\n // This function is used to fix WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109\n Utils.webkit602BugfixHelper = function (alpha, blend) {\n };\n Utils.contains = function (array, element, identity) {\n if (identity === void 0) { identity = true; }\n for (var i = 0; i < array.length; i++)\n if (array[i] == element)\n return true;\n return false;\n };\n Utils.enumValue = function (type, name) {\n return type[name[0].toUpperCase() + name.slice(1)];\n };\n Utils.SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== \"undefined\";\n return Utils;\n}());\nexport { Utils };\nvar DebugUtils = /** @class */ (function () {\n function DebugUtils() {\n }\n DebugUtils.logBones = function (skeleton) {\n for (var i = 0; i < skeleton.bones.length; i++) {\n var bone = skeleton.bones[i];\n console.log(bone.data.name + \", \" + bone.a + \", \" + bone.b + \", \" + bone.c + \", \" + bone.d + \", \" + bone.worldX + \", \" + bone.worldY);\n }\n };\n return DebugUtils;\n}());\nexport { DebugUtils };\nvar Pool = /** @class */ (function () {\n function Pool(instantiator) {\n this.items = new Array();\n this.instantiator = instantiator;\n }\n Pool.prototype.obtain = function () {\n return this.items.length > 0 ? this.items.pop() : this.instantiator();\n };\n Pool.prototype.free = function (item) {\n if (item.reset)\n item.reset();\n this.items.push(item);\n };\n Pool.prototype.freeAll = function (items) {\n for (var i = 0; i < items.length; i++)\n this.free(items[i]);\n };\n Pool.prototype.clear = function () {\n this.items.length = 0;\n };\n return Pool;\n}());\nexport { Pool };\nvar Vector2 = /** @class */ (function () {\n function Vector2(x, y) {\n if (x === void 0) { x = 0; }\n if (y === void 0) { y = 0; }\n this.x = x;\n this.y = y;\n }\n Vector2.prototype.set = function (x, y) {\n this.x = x;\n this.y = y;\n return this;\n };\n Vector2.prototype.length = function () {\n var x = this.x;\n var y = this.y;\n return Math.sqrt(x * x + y * y);\n };\n Vector2.prototype.normalize = function () {\n var len = this.length();\n if (len != 0) {\n this.x /= len;\n this.y /= len;\n }\n return this;\n };\n return Vector2;\n}());\nexport { Vector2 };\nvar TimeKeeper = /** @class */ (function () {\n function TimeKeeper() {\n this.maxDelta = 0.064;\n this.framesPerSecond = 0;\n this.delta = 0;\n this.totalTime = 0;\n this.lastTime = Date.now() / 1000;\n this.frameCount = 0;\n this.frameTime = 0;\n }\n TimeKeeper.prototype.update = function () {\n var now = Date.now() / 1000;\n this.delta = now - this.lastTime;\n this.frameTime += this.delta;\n this.totalTime += this.delta;\n if (this.delta > this.maxDelta)\n this.delta = this.maxDelta;\n this.lastTime = now;\n this.frameCount++;\n if (this.frameTime > 1) {\n this.framesPerSecond = this.frameCount / this.frameTime;\n this.frameTime = 0;\n this.frameCount = 0;\n }\n };\n return TimeKeeper;\n}());\nexport { TimeKeeper };\nvar WindowedMean = /** @class */ (function () {\n function WindowedMean(windowSize) {\n if (windowSize === void 0) { windowSize = 32; }\n this.addedValues = 0;\n this.lastValue = 0;\n this.mean = 0;\n this.dirty = true;\n this.values = new Array(windowSize);\n }\n WindowedMean.prototype.hasEnoughData = function () {\n return this.addedValues >= this.values.length;\n };\n WindowedMean.prototype.addValue = function (value) {\n if (this.addedValues < this.values.length)\n this.addedValues++;\n this.values[this.lastValue++] = value;\n if (this.lastValue > this.values.length - 1)\n this.lastValue = 0;\n this.dirty = true;\n };\n WindowedMean.prototype.getMean = function () {\n if (this.hasEnoughData()) {\n if (this.dirty) {\n var mean = 0;\n for (var i = 0; i < this.values.length; i++)\n mean += this.values[i];\n this.mean = mean / this.values.length;\n this.dirty = false;\n }\n return this.mean;\n }\n return 0;\n };\n return WindowedMean;\n}());\nexport { WindowedMean };\n//# sourceMappingURL=Utils.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Utils } from \"../Utils\";\n/** The base class for all attachments. */\nvar Attachment = /** @class */ (function () {\n function Attachment(name) {\n if (!name)\n throw new Error(\"name cannot be null.\");\n this.name = name;\n }\n return Attachment;\n}());\nexport { Attachment };\n/** Base class for an attachment with vertices that are transformed by one or more bones and can be deformed by a slot's\n * {@link Slot#deform}. */\nvar VertexAttachment = /** @class */ (function (_super) {\n __extends(VertexAttachment, _super);\n function VertexAttachment(name) {\n var _this = _super.call(this, name) || this;\n /** The unique ID for this attachment. */\n _this.id = VertexAttachment.nextID++;\n /** The maximum number of world vertex values that can be output by\n * {@link #computeWorldVertices()} using the `count` parameter. */\n _this.worldVerticesLength = 0;\n /** Deform keys for the deform attachment are also applied to this attachment. May be null if no deform keys should be applied. */\n _this.deformAttachment = _this;\n return _this;\n }\n /** Transforms the attachment's local {@link #vertices} to world coordinates. If the slot's {@link Slot#deform} is\n * not empty, it is used to deform the vertices.\n *\n * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine\n * Runtimes Guide.\n * @param start The index of the first {@link #vertices} value to transform. Each vertex has 2 values, x and y.\n * @param count The number of world vertex values to output. Must be <= {@link #worldVerticesLength} - `start`.\n * @param worldVertices The output world vertices. Must have a length >= `offset` + `count` *\n * `stride` / 2.\n * @param offset The `worldVertices` index to begin writing values.\n * @param stride The number of `worldVertices` entries between the value pairs written. */\n VertexAttachment.prototype.computeWorldVertices = function (slot, start, count, worldVertices, offset, stride) {\n count = offset + (count >> 1) * stride;\n var skeleton = slot.bone.skeleton;\n var deformArray = slot.deform;\n var vertices = this.vertices;\n var bones = this.bones;\n if (!bones) {\n if (deformArray.length > 0)\n vertices = deformArray;\n var bone = slot.bone;\n var x = bone.worldX;\n var y = bone.worldY;\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) {\n var vx = vertices[v_1], vy = vertices[v_1 + 1];\n worldVertices[w] = vx * a + vy * b + x;\n worldVertices[w + 1] = vx * c + vy * d + y;\n }\n return;\n }\n var v = 0, skip = 0;\n for (var i = 0; i < start; i += 2) {\n var n = bones[v];\n v += n + 1;\n skip += n;\n }\n var skeletonBones = skeleton.bones;\n if (deformArray.length == 0) {\n for (var w = offset, b = skip * 3; w < count; w += stride) {\n var wx = 0, wy = 0;\n var n = bones[v++];\n n += v;\n for (; v < n; v++, b += 3) {\n var bone = skeletonBones[bones[v]];\n var vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2];\n wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n }\n worldVertices[w] = wx;\n worldVertices[w + 1] = wy;\n }\n }\n else {\n var deform = deformArray;\n for (var w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) {\n var wx = 0, wy = 0;\n var n = bones[v++];\n n += v;\n for (; v < n; v++, b += 3, f += 2) {\n var bone = skeletonBones[bones[v]];\n var vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2];\n wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n }\n worldVertices[w] = wx;\n worldVertices[w + 1] = wy;\n }\n }\n };\n /** Does not copy id (generated) or name (set on construction). **/\n VertexAttachment.prototype.copyTo = function (attachment) {\n if (this.bones) {\n attachment.bones = new Array(this.bones.length);\n Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length);\n }\n else\n attachment.bones = null;\n if (this.vertices) {\n attachment.vertices = Utils.newFloatArray(this.vertices.length);\n Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length);\n }\n else\n attachment.vertices = null;\n attachment.worldVerticesLength = this.worldVerticesLength;\n attachment.deformAttachment = this.deformAttachment;\n };\n VertexAttachment.nextID = 0;\n return VertexAttachment;\n}(Attachment));\nexport { VertexAttachment };\n//# sourceMappingURL=Attachment.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VertexAttachment } from \"./attachments/Attachment\";\nimport { StringSet, Utils, MathUtils } from \"./Utils\";\n/** A simple container for a list of timelines and a name. */\nvar Animation = /** @class */ (function () {\n function Animation(name, timelines, duration) {\n if (!name)\n throw new Error(\"name cannot be null.\");\n this.name = name;\n this.setTimelines(timelines);\n this.duration = duration;\n }\n Animation.prototype.setTimelines = function (timelines) {\n if (!timelines)\n throw new Error(\"timelines cannot be null.\");\n this.timelines = timelines;\n this.timelineIds = new StringSet();\n for (var i = 0; i < timelines.length; i++)\n this.timelineIds.addAll(timelines[i].getPropertyIds());\n };\n Animation.prototype.hasTimeline = function (ids) {\n for (var i = 0; i < ids.length; i++)\n if (this.timelineIds.contains(ids[i]))\n return true;\n return false;\n };\n /** Applies all the animation's timelines to the specified skeleton.\n *\n * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}.\n * @param loop If true, the animation repeats after {@link #getDuration()}.\n * @param events May be null to ignore fired events. */\n Animation.prototype.apply = function (skeleton, lastTime, time, loop, events, alpha, blend, direction) {\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n if (loop && this.duration != 0) {\n time %= this.duration;\n if (lastTime > 0)\n lastTime %= this.duration;\n }\n var timelines = this.timelines;\n for (var i = 0, n = timelines.length; i < n; i++)\n timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction);\n };\n return Animation;\n}());\nexport { Animation };\n/** Controls how a timeline value is mixed with the setup pose value or current pose value when a timeline's `alpha`\n * < 1.\n *\n * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}. */\nexport var MixBlend;\n(function (MixBlend) {\n /** Transitions from the setup value to the timeline value (the current value is not used). Before the first key, the setup\n * value is set. */\n MixBlend[MixBlend[\"setup\"] = 0] = \"setup\";\n /** Transitions from the current value to the timeline value. Before the first key, transitions from the current value to\n * the setup value. Timelines which perform instant transitions, such as {@link DrawOrderTimeline} or\n * {@link AttachmentTimeline}, use the setup value before the first key.\n *\n * `first` is intended for the first animations applied, not for animations layered on top of those. */\n MixBlend[MixBlend[\"first\"] = 1] = \"first\";\n /** Transitions from the current value to the timeline value. No change is made before the first key (the current value is\n * kept until the first key).\n *\n * `replace` is intended for animations layered on top of others, not for the first animations applied. */\n MixBlend[MixBlend[\"replace\"] = 2] = \"replace\";\n /** Transitions from the current value to the current value plus the timeline value. No change is made before the first key\n * (the current value is kept until the first key).\n *\n * `add` is intended for animations layered on top of others, not for the first animations applied. Properties\n * keyed by additive animations must be set manually or by another animation before applying the additive animations, else\n * the property values will increase continually. */\n MixBlend[MixBlend[\"add\"] = 3] = \"add\";\n})(MixBlend || (MixBlend = {}));\n/** Indicates whether a timeline's `alpha` is mixing out over time toward 0 (the setup or current pose value) or\n * mixing in toward 1 (the timeline's value).\n *\n * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}. */\nexport var MixDirection;\n(function (MixDirection) {\n MixDirection[MixDirection[\"mixIn\"] = 0] = \"mixIn\";\n MixDirection[MixDirection[\"mixOut\"] = 1] = \"mixOut\";\n})(MixDirection || (MixDirection = {}));\nvar Property = {\n rotate: 0,\n x: 1,\n y: 2,\n scaleX: 3,\n scaleY: 4,\n shearX: 5,\n shearY: 6,\n rgb: 7,\n alpha: 8,\n rgb2: 9,\n attachment: 10,\n deform: 11,\n event: 12,\n drawOrder: 13,\n ikConstraint: 14,\n transformConstraint: 15,\n pathConstraintPosition: 16,\n pathConstraintSpacing: 17,\n pathConstraintMix: 18\n};\n/** The interface for all timelines. */\nvar Timeline = /** @class */ (function () {\n function Timeline(frameCount, propertyIds) {\n this.propertyIds = propertyIds;\n this.frames = Utils.newFloatArray(frameCount * this.getFrameEntries());\n }\n Timeline.prototype.getPropertyIds = function () {\n return this.propertyIds;\n };\n Timeline.prototype.getFrameEntries = function () {\n return 1;\n };\n Timeline.prototype.getFrameCount = function () {\n return this.frames.length / this.getFrameEntries();\n };\n Timeline.prototype.getDuration = function () {\n return this.frames[this.frames.length - this.getFrameEntries()];\n };\n Timeline.search1 = function (frames, time) {\n var n = frames.length;\n for (var i = 1; i < n; i++)\n if (frames[i] > time)\n return i - 1;\n return n - 1;\n };\n Timeline.search = function (frames, time, step) {\n var n = frames.length;\n for (var i = step; i < n; i += step)\n if (frames[i] > time)\n return i - step;\n return n - step;\n };\n return Timeline;\n}());\nexport { Timeline };\n/** The base class for timelines that use interpolation between key frame values. */\nvar CurveTimeline = /** @class */ (function (_super) {\n __extends(CurveTimeline, _super);\n function CurveTimeline(frameCount, bezierCount, propertyIds) {\n var _this = _super.call(this, frameCount, propertyIds) || this;\n _this.curves = Utils.newFloatArray(frameCount + bezierCount * 18 /*BEZIER_SIZE*/);\n _this.curves[frameCount - 1] = 1 /*STEPPED*/;\n return _this;\n }\n /** Sets the specified key frame to linear interpolation. */\n CurveTimeline.prototype.setLinear = function (frame) {\n this.curves[frame] = 0 /*LINEAR*/;\n };\n /** Sets the specified key frame to stepped interpolation. */\n CurveTimeline.prototype.setStepped = function (frame) {\n this.curves[frame] = 1 /*STEPPED*/;\n };\n /** Shrinks the storage for Bezier curves, for use when \n * After changes are made to the world transform, {@link #updateAppliedTransform()} should be called and {@link #update()} will\n * need to be called on any child bones, recursively. */\n Bone.prototype.rotateWorld = function (degrees) {\n var a = this.a, b = this.b, c = this.c, d = this.d;\n var cos = MathUtils.cosDeg(degrees), sin = MathUtils.sinDeg(degrees);\n this.a = cos * a - sin * c;\n this.b = cos * b - sin * d;\n this.c = sin * a + cos * c;\n this.d = sin * b + cos * d;\n };\n return Bone;\n}());\nexport { Bone };\n//# sourceMappingURL=Bone.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n/** The base class for all constraint datas. */\nvar ConstraintData = /** @class */ (function () {\n function ConstraintData(name, order, skinRequired) {\n this.name = name;\n this.order = order;\n this.skinRequired = skinRequired;\n }\n return ConstraintData;\n}());\nexport { ConstraintData };\n//# sourceMappingURL=ConstraintData.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { TextureAtlas } from \"./TextureAtlas\";\nvar AssetManagerBase = /** @class */ (function () {\n function AssetManagerBase(textureLoader, pathPrefix, downloader) {\n if (pathPrefix === void 0) { pathPrefix = \"\"; }\n if (downloader === void 0) { downloader = null; }\n this.assets = {};\n this.errors = {};\n this.toLoad = 0;\n this.loaded = 0;\n this.textureLoader = textureLoader;\n this.pathPrefix = pathPrefix;\n this.downloader = downloader || new Downloader();\n }\n AssetManagerBase.prototype.start = function (path) {\n this.toLoad++;\n return this.pathPrefix + path;\n };\n AssetManagerBase.prototype.success = function (callback, path, asset) {\n this.toLoad--;\n this.loaded++;\n this.assets[path] = asset;\n if (callback)\n callback(path, asset);\n };\n AssetManagerBase.prototype.error = function (callback, path, message) {\n this.toLoad--;\n this.loaded++;\n this.errors[path] = message;\n if (callback)\n callback(path, message);\n };\n AssetManagerBase.prototype.setRawDataURI = function (path, data) {\n this.downloader.rawDataUris[this.pathPrefix + path] = data;\n };\n AssetManagerBase.prototype.loadBinary = function (path, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n path = this.start(path);\n this.downloader.downloadBinary(path, function (data) {\n _this.success(success, path, data);\n }, function (status, responseText) {\n _this.error(error, path, \"Couldn't load binary \" + path + \": status \" + status + \", \" + responseText);\n });\n };\n AssetManagerBase.prototype.loadText = function (path, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n path = this.start(path);\n this.downloader.downloadText(path, function (data) {\n _this.success(success, path, data);\n }, function (status, responseText) {\n _this.error(error, path, \"Couldn't load text \" + path + \": status \" + status + \", \" + responseText);\n });\n };\n AssetManagerBase.prototype.loadJson = function (path, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n path = this.start(path);\n this.downloader.downloadJson(path, function (data) {\n _this.success(success, path, data);\n }, function (status, responseText) {\n _this.error(error, path, \"Couldn't load JSON \" + path + \": status \" + status + \", \" + responseText);\n });\n };\n AssetManagerBase.prototype.loadTexture = function (path, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n path = this.start(path);\n var isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document);\n var isWebWorker = !isBrowser; // && typeof importScripts !== 'undefined';\n if (isWebWorker) {\n fetch(path, { mode: \"cors\" }).then(function (response) {\n if (response.ok)\n return response.blob();\n _this.error(error, path, \"Couldn't load image: \" + path);\n return null;\n }).then(function (blob) {\n return blob ? createImageBitmap(blob, { premultiplyAlpha: \"none\", colorSpaceConversion: \"none\" }) : null;\n }).then(function (bitmap) {\n if (bitmap)\n _this.success(success, path, _this.textureLoader(bitmap));\n });\n }\n else {\n var image_1 = new Image();\n image_1.crossOrigin = \"anonymous\";\n image_1.onload = function () {\n _this.success(success, path, _this.textureLoader(image_1));\n };\n image_1.onerror = function () {\n _this.error(error, path, \"Couldn't load image: \" + path);\n };\n if (this.downloader.rawDataUris[path])\n path = this.downloader.rawDataUris[path];\n image_1.src = path;\n }\n };\n AssetManagerBase.prototype.loadTextureAtlas = function (path, success, error) {\n var _this = this;\n if (success === void 0) { success = null; }\n if (error === void 0) { error = null; }\n var index = path.lastIndexOf(\"/\");\n var parent = index >= 0 ? path.substring(0, index + 1) : \"\";\n path = this.start(path);\n this.downloader.downloadText(path, function (atlasText) {\n try {\n var atlas_1 = new TextureAtlas(atlasText);\n var toLoad_1 = atlas_1.pages.length, abort_1 = false;\n var _loop_1 = function (page) {\n _this.loadTexture(parent + page.name, function (imagePath, texture) {\n if (!abort_1) {\n page.setTexture(texture);\n if (--toLoad_1 == 0)\n _this.success(success, path, atlas_1);\n }\n }, function (imagePath, message) {\n if (!abort_1)\n _this.error(error, path, \"Couldn't load texture atlas \" + path + \" page image: \" + imagePath);\n abort_1 = true;\n });\n };\n for (var _i = 0, _a = atlas_1.pages; _i < _a.length; _i++) {\n var page = _a[_i];\n _loop_1(page);\n }\n }\n catch (e) {\n _this.error(error, path, \"Couldn't parse texture atlas \" + path + \": \" + e.message);\n }\n }, function (status, responseText) {\n _this.error(error, path, \"Couldn't load texture atlas \" + path + \": status \" + status + \", \" + responseText);\n });\n };\n AssetManagerBase.prototype.get = function (path) {\n return this.assets[this.pathPrefix + path];\n };\n AssetManagerBase.prototype.require = function (path) {\n path = this.pathPrefix + path;\n var asset = this.assets[path];\n if (asset)\n return asset;\n var error = this.errors[path];\n throw Error(\"Asset not found: \" + path + (error ? \"\\n\" + error : \"\"));\n };\n AssetManagerBase.prototype.remove = function (path) {\n path = this.pathPrefix + path;\n var asset = this.assets[path];\n if (asset.dispose)\n asset.dispose();\n delete this.assets[path];\n return asset;\n };\n AssetManagerBase.prototype.removeAll = function () {\n for (var key in this.assets) {\n var asset = this.assets[key];\n if (asset.dispose)\n asset.dispose();\n }\n this.assets = {};\n };\n AssetManagerBase.prototype.isLoadingComplete = function () {\n return this.toLoad == 0;\n };\n AssetManagerBase.prototype.getToLoad = function () {\n return this.toLoad;\n };\n AssetManagerBase.prototype.getLoaded = function () {\n return this.loaded;\n };\n AssetManagerBase.prototype.dispose = function () {\n this.removeAll();\n };\n AssetManagerBase.prototype.hasErrors = function () {\n return Object.keys(this.errors).length > 0;\n };\n AssetManagerBase.prototype.getErrors = function () {\n return this.errors;\n };\n return AssetManagerBase;\n}());\nexport { AssetManagerBase };\nvar Downloader = /** @class */ (function () {\n function Downloader() {\n this.callbacks = {};\n this.rawDataUris = {};\n }\n Downloader.prototype.downloadText = function (url, success, error) {\n var _this = this;\n if (this.rawDataUris[url])\n url = this.rawDataUris[url];\n if (this.start(url, success, error))\n return;\n var request = new XMLHttpRequest();\n request.overrideMimeType(\"text/html\");\n request.open(\"GET\", url, true);\n var done = function () {\n _this.finish(url, request.status, request.responseText);\n };\n request.onload = done;\n request.onerror = done;\n request.send();\n };\n Downloader.prototype.downloadJson = function (url, success, error) {\n this.downloadText(url, function (data) {\n success(JSON.parse(data));\n }, error);\n };\n Downloader.prototype.downloadBinary = function (url, success, error) {\n var _this = this;\n if (this.rawDataUris[url])\n url = this.rawDataUris[url];\n if (this.start(url, success, error))\n return;\n var request = new XMLHttpRequest();\n request.open(\"GET\", url, true);\n request.responseType = \"arraybuffer\";\n var onerror = function () {\n _this.finish(url, request.status, request.responseText);\n };\n request.onload = function () {\n if (request.status == 200)\n _this.finish(url, 200, new Uint8Array(request.response));\n else\n onerror();\n };\n request.onerror = onerror;\n request.send();\n };\n Downloader.prototype.start = function (url, success, error) {\n var callbacks = this.callbacks[url];\n try {\n if (callbacks)\n return true;\n this.callbacks[url] = callbacks = [];\n }\n finally {\n callbacks.push(success, error);\n }\n };\n Downloader.prototype.finish = function (url, status, data) {\n var callbacks = this.callbacks[url];\n delete this.callbacks[url];\n var args = status == 200 ? [data] : [status, data];\n for (var i = args.length - 1, n = callbacks.length; i < n; i += 2)\n callbacks[i].apply(null, args);\n };\n return Downloader;\n}());\nexport { Downloader };\n//# sourceMappingURL=AssetManagerBase.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n/** Stores the current pose values for an {@link Event}.\n *\n * See Timeline {@link Timeline#apply()},\n * AnimationStateListener {@link AnimationStateListener#event()}, and\n * [Events](http://esotericsoftware.com/spine-events) in the Spine User Guide. */\nvar Event = /** @class */ (function () {\n function Event(time, data) {\n if (!data)\n throw new Error(\"data cannot be null.\");\n this.time = time;\n this.data = data;\n }\n return Event;\n}());\nexport { Event };\n//# sourceMappingURL=Event.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n/** Stores the setup pose values for an {@link Event}.\n *\n * See [Events](http://esotericsoftware.com/spine-events) in the Spine User Guide. */\nvar EventData = /** @class */ (function () {\n function EventData(name) {\n this.name = name;\n }\n return EventData;\n}());\nexport { EventData };\n//# sourceMappingURL=EventData.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { TransformMode } from \"./BoneData\";\nimport { MathUtils } from \"./Utils\";\n/** Stores the current pose for an IK constraint. An IK constraint adjusts the rotation of 1 or 2 constrained bones so the tip of\n * the last bone is as close to the target bone as possible.\n *\n * See [IK constraints](http://esotericsoftware.com/spine-ik-constraints) in the Spine User Guide. */\nvar IkConstraint = /** @class */ (function () {\n function IkConstraint(data, skeleton) {\n /** Controls the bend direction of the IK bones, either 1 or -1. */\n this.bendDirection = 0;\n /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */\n this.compress = false;\n /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained\n * and the parent bone has local nonuniform scale, stretch is not applied. */\n this.stretch = false;\n /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */\n this.mix = 1;\n /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */\n this.softness = 0;\n this.active = false;\n if (!data)\n throw new Error(\"data cannot be null.\");\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.mix = data.mix;\n this.softness = data.softness;\n this.bendDirection = data.bendDirection;\n this.compress = data.compress;\n this.stretch = data.stretch;\n this.bones = new Array();\n for (var i = 0; i < data.bones.length; i++)\n this.bones.push(skeleton.findBone(data.bones[i].name));\n this.target = skeleton.findBone(data.target.name);\n }\n IkConstraint.prototype.isActive = function () {\n return this.active;\n };\n IkConstraint.prototype.update = function () {\n if (this.mix == 0)\n return;\n var target = this.target;\n var bones = this.bones;\n switch (bones.length) {\n case 1:\n this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix);\n break;\n case 2:\n this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.data.uniform, this.softness, this.mix);\n break;\n }\n };\n /** Applies 1 bone IK. The target is specified in the world coordinate system. */\n IkConstraint.prototype.apply1 = function (bone, targetX, targetY, compress, stretch, uniform, alpha) {\n var p = bone.parent;\n var pa = p.a, pb = p.b, pc = p.c, pd = p.d;\n var rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0;\n switch (bone.data.transformMode) {\n case TransformMode.OnlyTranslation:\n tx = targetX - bone.worldX;\n ty = targetY - bone.worldY;\n break;\n case TransformMode.NoRotationOrReflection:\n var s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);\n var sa = pa / bone.skeleton.scaleX;\n var sc = pc / bone.skeleton.scaleY;\n pb = -sc * s * bone.skeleton.scaleX;\n pd = sa * s * bone.skeleton.scaleY;\n rotationIK += Math.atan2(sc, sa) * MathUtils.radDeg;\n // Fall through\n default:\n var x = targetX - p.worldX, y = targetY - p.worldY;\n var d = pa * pd - pb * pc;\n tx = (x * pd - y * pb) / d - bone.ax;\n ty = (y * pa - x * pc) / d - bone.ay;\n }\n rotationIK += Math.atan2(ty, tx) * MathUtils.radDeg;\n if (bone.ascaleX < 0)\n rotationIK += 180;\n if (rotationIK > 180)\n rotationIK -= 360;\n else if (rotationIK < -180)\n rotationIK += 360;\n var sx = bone.ascaleX, sy = bone.ascaleY;\n if (compress || stretch) {\n switch (bone.data.transformMode) {\n case TransformMode.NoScale:\n case TransformMode.NoScaleOrReflection:\n tx = targetX - bone.worldX;\n ty = targetY - bone.worldY;\n }\n var b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty);\n if ((compress && dd < b) || (stretch && dd > b) && b > 0.0001) {\n var s = (dd / b - 1) * alpha + 1;\n sx *= s;\n if (uniform)\n sy *= s;\n }\n }\n bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY);\n };\n /** Applies 2 bone IK. The target is specified in the world coordinate system.\n * @param child A direct descendant of the parent bone. */\n IkConstraint.prototype.apply2 = function (parent, child, targetX, targetY, bendDir, stretch, uniform, softness, alpha) {\n var px = parent.ax, py = parent.ay, psx = parent.ascaleX, psy = parent.ascaleY, sx = psx, sy = psy, csx = child.ascaleX;\n var os1 = 0, os2 = 0, s2 = 0;\n if (psx < 0) {\n psx = -psx;\n os1 = 180;\n s2 = -1;\n }\n else {\n os1 = 0;\n s2 = 1;\n }\n if (psy < 0) {\n psy = -psy;\n s2 = -s2;\n }\n if (csx < 0) {\n csx = -csx;\n os2 = 180;\n }\n else\n os2 = 0;\n var cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d;\n var u = Math.abs(psx - psy) <= 0.0001;\n if (!u || stretch) {\n cy = 0;\n cwx = a * cx + parent.worldX;\n cwy = c * cx + parent.worldY;\n }\n else {\n cy = child.ay;\n cwx = a * cx + b * cy + parent.worldX;\n cwy = c * cx + d * cy + parent.worldY;\n }\n var pp = parent.parent;\n a = pp.a;\n b = pp.b;\n c = pp.c;\n d = pp.d;\n var id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY;\n var dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py;\n var l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2;\n if (l1 < 0.0001) {\n this.apply1(parent, targetX, targetY, false, stretch, false, alpha);\n child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);\n return;\n }\n x = targetX - pp.worldX;\n y = targetY - pp.worldY;\n var tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py;\n var dd = tx * tx + ty * ty;\n if (softness != 0) {\n softness *= psx * (csx + 1) * 0.5;\n var td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness;\n if (sd > 0) {\n var p = Math.min(1, sd / (softness * 2)) - 1;\n p = (sd - softness * (1 - p * p)) / td;\n tx -= p * tx;\n ty -= p * ty;\n dd = tx * tx + ty * ty;\n }\n }\n outer: if (u) {\n l2 *= psx;\n var cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2);\n if (cos < -1) {\n cos = -1;\n a2 = Math.PI * bendDir;\n }\n else if (cos > 1) {\n cos = 1;\n a2 = 0;\n if (stretch) {\n a = (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1;\n sx *= a;\n if (uniform)\n sy *= a;\n }\n }\n else\n a2 = Math.acos(cos) * bendDir;\n a = l1 + l2 * cos;\n b = l2 * Math.sin(a2);\n a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b);\n }\n else {\n a = psx * l2;\n b = psy * l2;\n var aa = a * a, bb = b * b, ta = Math.atan2(ty, tx);\n c = bb * l1 * l1 + aa * dd - aa * bb;\n var c1 = -2 * bb * l1, c2 = bb - aa;\n d = c1 * c1 - 4 * c2 * c;\n if (d >= 0) {\n var q = Math.sqrt(d);\n if (c1 < 0)\n q = -q;\n q = -(c1 + q) * 0.5;\n var r0 = q / c2, r1 = c / q;\n var r = Math.abs(r0) < Math.abs(r1) ? r0 : r1;\n if (r * r <= dd) {\n y = Math.sqrt(dd - r * r) * bendDir;\n a1 = ta - Math.atan2(y, r);\n a2 = Math.atan2(y / psy, (r - l1) / psx);\n break outer;\n }\n }\n var minAngle = MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0;\n var maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0;\n c = -a * l1 / (aa - bb);\n if (c >= -1 && c <= 1) {\n c = Math.acos(c);\n x = a * Math.cos(c) + l1;\n y = b * Math.sin(c);\n d = x * x + y * y;\n if (d < minDist) {\n minAngle = c;\n minDist = d;\n minX = x;\n minY = y;\n }\n if (d > maxDist) {\n maxAngle = c;\n maxDist = d;\n maxX = x;\n maxY = y;\n }\n }\n if (dd <= (minDist + maxDist) * 0.5) {\n a1 = ta - Math.atan2(minY * bendDir, minX);\n a2 = minAngle * bendDir;\n }\n else {\n a1 = ta - Math.atan2(maxY * bendDir, maxX);\n a2 = maxAngle * bendDir;\n }\n }\n var os = Math.atan2(cy, cx) * s2;\n var rotation = parent.arotation;\n a1 = (a1 - os) * MathUtils.radDeg + os1 - rotation;\n if (a1 > 180)\n a1 -= 360;\n else if (a1 < -180) //\n a1 += 360;\n parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, sy, 0, 0);\n rotation = child.arotation;\n a2 = ((a2 + os) * MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation;\n if (a2 > 180)\n a2 -= 360;\n else if (a2 < -180) //\n a2 += 360;\n child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);\n };\n return IkConstraint;\n}());\nexport { IkConstraint };\n//# sourceMappingURL=IkConstraint.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ConstraintData } from \"./ConstraintData\";\n/** Stores the setup pose for an {@link IkConstraint}.\n * \n * See [IK constraints](http://esotericsoftware.com/spine-ik-constraints) in the Spine User Guide. */\nvar IkConstraintData = /** @class */ (function (_super) {\n __extends(IkConstraintData, _super);\n function IkConstraintData(name) {\n var _this = _super.call(this, name, 0, false) || this;\n /** The bones that are constrained by this IK constraint. */\n _this.bones = new Array();\n /** Controls the bend direction of the IK bones, either 1 or -1. */\n _this.bendDirection = 1;\n /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */\n _this.compress = false;\n /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained\n * and the parent bone has local nonuniform scale, stretch is not applied. */\n _this.stretch = false;\n /** When true, only a single bone is being constrained, and {@link #getCompress()} or {@link #getStretch()} is used, the bone\n * is scaled on both the X and Y axes. */\n _this.uniform = false;\n /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */\n _this.mix = 1;\n /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */\n _this.softness = 0;\n return _this;\n }\n return IkConstraintData;\n}(ConstraintData));\nexport { IkConstraintData };\n//# sourceMappingURL=IkConstraintData.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ConstraintData } from \"./ConstraintData\";\n/** Stores the setup pose for a {@link PathConstraint}.\n *\n * See [path constraints](http://esotericsoftware.com/spine-path-constraints) in the Spine User Guide. */\nvar PathConstraintData = /** @class */ (function (_super) {\n __extends(PathConstraintData, _super);\n function PathConstraintData(name) {\n var _this = _super.call(this, name, 0, false) || this;\n /** The bones that will be modified by this path constraint. */\n _this.bones = new Array();\n _this.mixRotate = 0;\n _this.mixX = 0;\n _this.mixY = 0;\n return _this;\n }\n return PathConstraintData;\n}(ConstraintData));\nexport { PathConstraintData };\n/** Controls how the first bone is positioned along the path.\n *\n * See [position](http://esotericsoftware.com/spine-path-constraints#Position) in the Spine User Guide. */\nexport var PositionMode;\n(function (PositionMode) {\n PositionMode[PositionMode[\"Fixed\"] = 0] = \"Fixed\";\n PositionMode[PositionMode[\"Percent\"] = 1] = \"Percent\";\n})(PositionMode || (PositionMode = {}));\n/** Controls how bones after the first bone are positioned along the path.\n *\n * See [spacing](http://esotericsoftware.com/spine-path-constraints#Spacing) in the Spine User Guide. */\nexport var SpacingMode;\n(function (SpacingMode) {\n SpacingMode[SpacingMode[\"Length\"] = 0] = \"Length\";\n SpacingMode[SpacingMode[\"Fixed\"] = 1] = \"Fixed\";\n SpacingMode[SpacingMode[\"Percent\"] = 2] = \"Percent\";\n SpacingMode[SpacingMode[\"Proportional\"] = 3] = \"Proportional\";\n})(SpacingMode || (SpacingMode = {}));\n/** Controls how bones are rotated, translated, and scaled to match the path.\n *\n * See [rotate mix](http://esotericsoftware.com/spine-path-constraints#Rotate-mix) in the Spine User Guide. */\nexport var RotateMode;\n(function (RotateMode) {\n RotateMode[RotateMode[\"Tangent\"] = 0] = \"Tangent\";\n RotateMode[RotateMode[\"Chain\"] = 1] = \"Chain\";\n RotateMode[RotateMode[\"ChainScale\"] = 2] = \"ChainScale\";\n})(RotateMode || (RotateMode = {}));\n//# sourceMappingURL=PathConstraintData.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { PathAttachment } from \"./attachments/PathAttachment\";\nimport { RotateMode, SpacingMode, PositionMode } from \"./PathConstraintData\";\nimport { Utils, MathUtils } from \"./Utils\";\n/** Stores the current pose for a path constraint. A path constraint adjusts the rotation, translation, and scale of the\n * constrained bones so they follow a {@link PathAttachment}.\n *\n * See [Path constraints](http://esotericsoftware.com/spine-path-constraints) in the Spine User Guide. */\nvar PathConstraint = /** @class */ (function () {\n function PathConstraint(data, skeleton) {\n /** The position along the path. */\n this.position = 0;\n /** The spacing between bones. */\n this.spacing = 0;\n this.mixRotate = 0;\n this.mixX = 0;\n this.mixY = 0;\n this.spaces = new Array();\n this.positions = new Array();\n this.world = new Array();\n this.curves = new Array();\n this.lengths = new Array();\n this.segments = new Array();\n this.active = false;\n if (!data)\n throw new Error(\"data cannot be null.\");\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.bones = new Array();\n for (var i = 0, n = data.bones.length; i < n; i++)\n this.bones.push(skeleton.findBone(data.bones[i].name));\n this.target = skeleton.findSlot(data.target.name);\n this.position = data.position;\n this.spacing = data.spacing;\n this.mixRotate = data.mixRotate;\n this.mixX = data.mixX;\n this.mixY = data.mixY;\n }\n PathConstraint.prototype.isActive = function () {\n return this.active;\n };\n PathConstraint.prototype.update = function () {\n var attachment = this.target.getAttachment();\n if (!(attachment instanceof PathAttachment))\n return;\n var mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY;\n if (mixRotate == 0 && mixX == 0 && mixY == 0)\n return;\n var data = this.data;\n var tangents = data.rotateMode == RotateMode.Tangent, scale = data.rotateMode == RotateMode.ChainScale;\n var bones = this.bones;\n var boneCount = bones.length, spacesCount = tangents ? boneCount : boneCount + 1;\n var spaces = Utils.setArraySize(this.spaces, spacesCount), lengths = scale ? this.lengths = Utils.setArraySize(this.lengths, boneCount) : null;\n var spacing = this.spacing;\n switch (data.spacingMode) {\n case SpacingMode.Percent:\n if (scale) {\n for (var i = 0, n = spacesCount - 1; i < n; i++) {\n var bone = bones[i];\n var setupLength = bone.data.length;\n if (setupLength < PathConstraint.epsilon)\n lengths[i] = 0;\n else {\n var x = setupLength * bone.a, y = setupLength * bone.c;\n lengths[i] = Math.sqrt(x * x + y * y);\n }\n }\n }\n Utils.arrayFill(spaces, 1, spacesCount, spacing);\n break;\n case SpacingMode.Proportional:\n var sum = 0;\n for (var i = 0, n = spacesCount - 1; i < n;) {\n var bone = bones[i];\n var setupLength = bone.data.length;\n if (setupLength < PathConstraint.epsilon) {\n if (scale)\n lengths[i] = 0;\n spaces[++i] = spacing;\n }\n else {\n var x = setupLength * bone.a, y = setupLength * bone.c;\n var length_1 = Math.sqrt(x * x + y * y);\n if (scale)\n lengths[i] = length_1;\n spaces[++i] = length_1;\n sum += length_1;\n }\n }\n if (sum > 0) {\n sum = spacesCount / sum * spacing;\n for (var i = 1; i < spacesCount; i++)\n spaces[i] *= sum;\n }\n break;\n default:\n var lengthSpacing = data.spacingMode == SpacingMode.Length;\n for (var i = 0, n = spacesCount - 1; i < n;) {\n var bone = bones[i];\n var setupLength = bone.data.length;\n if (setupLength < PathConstraint.epsilon) {\n if (scale)\n lengths[i] = 0;\n spaces[++i] = spacing;\n }\n else {\n var x = setupLength * bone.a, y = setupLength * bone.c;\n var length_2 = Math.sqrt(x * x + y * y);\n if (scale)\n lengths[i] = length_2;\n spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length_2 / setupLength;\n }\n }\n }\n var positions = this.computeWorldPositions(attachment, spacesCount, tangents);\n var boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;\n var tip = false;\n if (offsetRotation == 0)\n tip = data.rotateMode == RotateMode.Chain;\n else {\n tip = false;\n var p = this.target.bone;\n offsetRotation *= p.a * p.d - p.b * p.c > 0 ? MathUtils.degRad : -MathUtils.degRad;\n }\n for (var i = 0, p = 3; i < boneCount; i++, p += 3) {\n var bone = bones[i];\n bone.worldX += (boneX - bone.worldX) * mixX;\n bone.worldY += (boneY - bone.worldY) * mixY;\n var x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY;\n if (scale) {\n var length_3 = lengths[i];\n if (length_3 != 0) {\n var s = (Math.sqrt(dx * dx + dy * dy) / length_3 - 1) * mixRotate + 1;\n bone.a *= s;\n bone.c *= s;\n }\n }\n boneX = x;\n boneY = y;\n if (mixRotate > 0) {\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;\n if (tangents)\n r = positions[p - 1];\n else if (spaces[i + 1] == 0)\n r = positions[p + 2];\n else\n r = Math.atan2(dy, dx);\n r -= Math.atan2(c, a);\n if (tip) {\n cos = Math.cos(r);\n sin = Math.sin(r);\n var length_4 = bone.data.length;\n boneX += (length_4 * (cos * a - sin * c) - dx) * mixRotate;\n boneY += (length_4 * (sin * a + cos * c) - dy) * mixRotate;\n }\n else {\n r += offsetRotation;\n }\n if (r > MathUtils.PI)\n r -= MathUtils.PI2;\n else if (r < -MathUtils.PI) //\n r += MathUtils.PI2;\n r *= mixRotate;\n cos = Math.cos(r);\n sin = Math.sin(r);\n bone.a = cos * a - sin * c;\n bone.b = cos * b - sin * d;\n bone.c = sin * a + cos * c;\n bone.d = sin * b + cos * d;\n }\n bone.updateAppliedTransform();\n }\n };\n PathConstraint.prototype.computeWorldPositions = function (path, spacesCount, tangents) {\n var target = this.target;\n var position = this.position;\n var spaces = this.spaces, out = Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = null;\n var closed = path.closed;\n var verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE;\n if (!path.constantSpeed) {\n var lengths = path.lengths;\n curveCount -= closed ? 1 : 2;\n var pathLength_1 = lengths[curveCount];\n if (this.data.positionMode == PositionMode.Percent)\n position *= pathLength_1;\n var multiplier_1;\n switch (this.data.spacingMode) {\n case SpacingMode.Percent:\n multiplier_1 = pathLength_1;\n break;\n case SpacingMode.Proportional:\n multiplier_1 = pathLength_1 / spacesCount;\n break;\n default:\n multiplier_1 = 1;\n }\n world = Utils.setArraySize(this.world, 8);\n for (var i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) {\n var space = spaces[i] * multiplier_1;\n position += space;\n var p = position;\n if (closed) {\n p %= pathLength_1;\n if (p < 0)\n p += pathLength_1;\n curve = 0;\n }\n else if (p < 0) {\n if (prevCurve != PathConstraint.BEFORE) {\n prevCurve = PathConstraint.BEFORE;\n path.computeWorldVertices(target, 2, 4, world, 0, 2);\n }\n this.addBeforePosition(p, world, 0, out, o);\n continue;\n }\n else if (p > pathLength_1) {\n if (prevCurve != PathConstraint.AFTER) {\n prevCurve = PathConstraint.AFTER;\n path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2);\n }\n this.addAfterPosition(p - pathLength_1, world, 0, out, o);\n continue;\n }\n // Determine curve containing position.\n for (;; curve++) {\n var length_5 = lengths[curve];\n if (p > length_5)\n continue;\n if (curve == 0)\n p /= length_5;\n else {\n var prev = lengths[curve - 1];\n p = (p - prev) / (length_5 - prev);\n }\n break;\n }\n if (curve != prevCurve) {\n prevCurve = curve;\n if (closed && curve == curveCount) {\n path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2);\n path.computeWorldVertices(target, 0, 4, world, 4, 2);\n }\n else\n path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2);\n }\n this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || (i > 0 && space == 0));\n }\n return out;\n }\n // World vertices.\n if (closed) {\n verticesLength += 2;\n world = Utils.setArraySize(this.world, verticesLength);\n path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2);\n path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2);\n world[verticesLength - 2] = world[0];\n world[verticesLength - 1] = world[1];\n }\n else {\n curveCount--;\n verticesLength -= 4;\n world = Utils.setArraySize(this.world, verticesLength);\n path.computeWorldVertices(target, 2, verticesLength, world, 0, 2);\n }\n // Curve lengths.\n var curves = Utils.setArraySize(this.curves, curveCount);\n var pathLength = 0;\n var x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0;\n var tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0;\n for (var i = 0, w = 2; i < curveCount; i++, w += 6) {\n cx1 = world[w];\n cy1 = world[w + 1];\n cx2 = world[w + 2];\n cy2 = world[w + 3];\n x2 = world[w + 4];\n y2 = world[w + 5];\n tmpx = (x1 - cx1 * 2 + cx2) * 0.1875;\n tmpy = (y1 - cy1 * 2 + cy2) * 0.1875;\n dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375;\n dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375;\n ddfx = tmpx * 2 + dddfx;\n ddfy = tmpy * 2 + dddfy;\n dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667;\n dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx;\n dfy += ddfy;\n ddfx += dddfx;\n ddfy += dddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx;\n dfy += ddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx + dddfx;\n dfy += ddfy + dddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n curves[i] = pathLength;\n x1 = x2;\n y1 = y2;\n }\n if (this.data.positionMode == PositionMode.Percent)\n position *= pathLength;\n var multiplier;\n switch (this.data.spacingMode) {\n case SpacingMode.Percent:\n multiplier = pathLength;\n break;\n case SpacingMode.Proportional:\n multiplier = pathLength / spacesCount;\n break;\n default:\n multiplier = 1;\n }\n var segments = this.segments;\n var curveLength = 0;\n for (var i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) {\n var space = spaces[i] * multiplier;\n position += space;\n var p = position;\n if (closed) {\n p %= pathLength;\n if (p < 0)\n p += pathLength;\n curve = 0;\n }\n else if (p < 0) {\n this.addBeforePosition(p, world, 0, out, o);\n continue;\n }\n else if (p > pathLength) {\n this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o);\n continue;\n }\n // Determine curve containing position.\n for (;; curve++) {\n var length_6 = curves[curve];\n if (p > length_6)\n continue;\n if (curve == 0)\n p /= length_6;\n else {\n var prev = curves[curve - 1];\n p = (p - prev) / (length_6 - prev);\n }\n break;\n }\n // Curve segment lengths.\n if (curve != prevCurve) {\n prevCurve = curve;\n var ii = curve * 6;\n x1 = world[ii];\n y1 = world[ii + 1];\n cx1 = world[ii + 2];\n cy1 = world[ii + 3];\n cx2 = world[ii + 4];\n cy2 = world[ii + 5];\n x2 = world[ii + 6];\n y2 = world[ii + 7];\n tmpx = (x1 - cx1 * 2 + cx2) * 0.03;\n tmpy = (y1 - cy1 * 2 + cy2) * 0.03;\n dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006;\n dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006;\n ddfx = tmpx * 2 + dddfx;\n ddfy = tmpy * 2 + dddfy;\n dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667;\n dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667;\n curveLength = Math.sqrt(dfx * dfx + dfy * dfy);\n segments[0] = curveLength;\n for (ii = 1; ii < 8; ii++) {\n dfx += ddfx;\n dfy += ddfy;\n ddfx += dddfx;\n ddfy += dddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[ii] = curveLength;\n }\n dfx += ddfx;\n dfy += ddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[8] = curveLength;\n dfx += ddfx + dddfx;\n dfy += ddfy + dddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[9] = curveLength;\n segment = 0;\n }\n // Weight by segment length.\n p *= curveLength;\n for (;; segment++) {\n var length_7 = segments[segment];\n if (p > length_7)\n continue;\n if (segment == 0)\n p /= length_7;\n else {\n var prev = segments[segment - 1];\n p = segment + (p - prev) / (length_7 - prev);\n }\n break;\n }\n this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0));\n }\n return out;\n };\n PathConstraint.prototype.addBeforePosition = function (p, temp, i, out, o) {\n var x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx);\n out[o] = x1 + p * Math.cos(r);\n out[o + 1] = y1 + p * Math.sin(r);\n out[o + 2] = r;\n };\n PathConstraint.prototype.addAfterPosition = function (p, temp, i, out, o) {\n var x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx);\n out[o] = x1 + p * Math.cos(r);\n out[o + 1] = y1 + p * Math.sin(r);\n out[o + 2] = r;\n };\n PathConstraint.prototype.addCurvePosition = function (p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) {\n if (p == 0 || isNaN(p)) {\n out[o] = x1;\n out[o + 1] = y1;\n out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n return;\n }\n var tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u;\n var ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p;\n var x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt;\n out[o] = x;\n out[o + 1] = y;\n if (tangents) {\n if (p < 0.001)\n out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n else\n out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt));\n }\n };\n PathConstraint.NONE = -1;\n PathConstraint.BEFORE = -2;\n PathConstraint.AFTER = -3;\n PathConstraint.epsilon = 0.00001;\n return PathConstraint;\n}());\nexport { PathConstraint };\n//# sourceMappingURL=PathConstraint.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { VertexAttachment } from \"./attachments/Attachment\";\nimport { Color } from \"./Utils\";\n/** Stores a slot's current pose. Slots organize attachments for {@link Skeleton#drawOrder} purposes and provide a place to store\n * state for an attachment. State cannot be stored in an attachment itself because attachments are stateless and may be shared\n * across multiple skeletons. */\nvar Slot = /** @class */ (function () {\n function Slot(data, bone) {\n /** Values to deform the slot's attachment. For an unweighted mesh, the entries are local positions for each vertex. For a\n * weighted mesh, the entries are an offset for each vertex which will be added to the mesh's local vertex positions.\n *\n * See {@link VertexAttachment#computeWorldVertices()} and {@link DeformTimeline}. */\n this.deform = new Array();\n if (!data)\n throw new Error(\"data cannot be null.\");\n if (!bone)\n throw new Error(\"bone cannot be null.\");\n this.data = data;\n this.bone = bone;\n this.color = new Color();\n this.darkColor = !data.darkColor ? null : new Color();\n this.setToSetupPose();\n }\n /** The skeleton this slot belongs to. */\n Slot.prototype.getSkeleton = function () {\n return this.bone.skeleton;\n };\n /** The current attachment for the slot, or null if the slot has no attachment. */\n Slot.prototype.getAttachment = function () {\n return this.attachment;\n };\n /** Sets the slot's attachment and, if the attachment changed, resets {@link #attachmentTime} and clears the {@link #deform}.\n * The deform is not cleared if the old attachment has the same {@link VertexAttachment#getDeformAttachment()} as the specified\n * attachment.\n * @param attachment May be null. */\n Slot.prototype.setAttachment = function (attachment) {\n if (this.attachment == attachment)\n return;\n if (!(attachment instanceof VertexAttachment) || !(this.attachment instanceof VertexAttachment)\n || attachment.deformAttachment != this.attachment.deformAttachment) {\n this.deform.length = 0;\n }\n this.attachment = attachment;\n this.attachmentTime = this.bone.skeleton.time;\n };\n Slot.prototype.setAttachmentTime = function (time) {\n this.attachmentTime = this.bone.skeleton.time - time;\n };\n /** The time that has elapsed since the last time the attachment was set or cleared. Relies on Skeleton\n * {@link Skeleton#time}. */\n Slot.prototype.getAttachmentTime = function () {\n return this.bone.skeleton.time - this.attachmentTime;\n };\n /** Sets this slot to the setup pose. */\n Slot.prototype.setToSetupPose = function () {\n this.color.setFromColor(this.data.color);\n if (this.darkColor)\n this.darkColor.setFromColor(this.data.darkColor);\n if (!this.data.attachmentName)\n this.attachment = null;\n else {\n this.attachment = null;\n this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName));\n }\n };\n return Slot;\n}());\nexport { Slot };\n//# sourceMappingURL=Slot.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Vector2, MathUtils } from \"./Utils\";\n/** Stores the current pose for a transform constraint. A transform constraint adjusts the world transform of the constrained\n * bones to match that of the target bone.\n *\n * See [Transform constraints](http://esotericsoftware.com/spine-transform-constraints) in the Spine User Guide. */\nvar TransformConstraint = /** @class */ (function () {\n function TransformConstraint(data, skeleton) {\n this.mixRotate = 0;\n this.mixX = 0;\n this.mixY = 0;\n this.mixScaleX = 0;\n this.mixScaleY = 0;\n this.mixShearY = 0;\n this.temp = new Vector2();\n this.active = false;\n if (!data)\n throw new Error(\"data cannot be null.\");\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.mixRotate = data.mixRotate;\n this.mixX = data.mixX;\n this.mixY = data.mixY;\n this.mixScaleX = data.mixScaleX;\n this.mixScaleY = data.mixScaleY;\n this.mixShearY = data.mixShearY;\n this.bones = new Array();\n for (var i = 0; i < data.bones.length; i++)\n this.bones.push(skeleton.findBone(data.bones[i].name));\n this.target = skeleton.findBone(data.target.name);\n }\n TransformConstraint.prototype.isActive = function () {\n return this.active;\n };\n TransformConstraint.prototype.update = function () {\n if (this.mixRotate == 0 && this.mixX == 0 && this.mixY == 0 && this.mixScaleX == 0 && this.mixScaleX == 0 && this.mixShearY == 0)\n return;\n if (this.data.local) {\n if (this.data.relative)\n this.applyRelativeLocal();\n else\n this.applyAbsoluteLocal();\n }\n else {\n if (this.data.relative)\n this.applyRelativeWorld();\n else\n this.applyAbsoluteWorld();\n }\n };\n TransformConstraint.prototype.applyAbsoluteWorld = function () {\n var mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY;\n var translate = mixX != 0 || mixY != 0;\n var target = this.target;\n var ta = target.a, tb = target.b, tc = target.c, td = target.d;\n var degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad;\n var offsetRotation = this.data.offsetRotation * degRadReflect;\n var offsetShearY = this.data.offsetShearY * degRadReflect;\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (mixRotate != 0) {\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n var r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation;\n if (r > MathUtils.PI)\n r -= MathUtils.PI2;\n else if (r < -MathUtils.PI) //\n r += MathUtils.PI2;\n r *= mixRotate;\n var cos = Math.cos(r), sin = Math.sin(r);\n bone.a = cos * a - sin * c;\n bone.b = cos * b - sin * d;\n bone.c = sin * a + cos * c;\n bone.d = sin * b + cos * d;\n }\n if (translate) {\n var temp = this.temp;\n target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n bone.worldX += (temp.x - bone.worldX) * mixX;\n bone.worldY += (temp.y - bone.worldY) * mixY;\n }\n if (mixScaleX != 0) {\n var s = Math.sqrt(bone.a * bone.a + bone.c * bone.c);\n if (s != 0)\n s = (s + (Math.sqrt(ta * ta + tc * tc) - s + this.data.offsetScaleX) * mixScaleX) / s;\n bone.a *= s;\n bone.c *= s;\n }\n if (mixScaleY != 0) {\n var s = Math.sqrt(bone.b * bone.b + bone.d * bone.d);\n if (s != 0)\n s = (s + (Math.sqrt(tb * tb + td * td) - s + this.data.offsetScaleY) * mixScaleY) / s;\n bone.b *= s;\n bone.d *= s;\n }\n if (mixShearY > 0) {\n var b = bone.b, d = bone.d;\n var by = Math.atan2(d, b);\n var r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a));\n if (r > MathUtils.PI)\n r -= MathUtils.PI2;\n else if (r < -MathUtils.PI) //\n r += MathUtils.PI2;\n r = by + (r + offsetShearY) * mixShearY;\n var s = Math.sqrt(b * b + d * d);\n bone.b = Math.cos(r) * s;\n bone.d = Math.sin(r) * s;\n }\n bone.updateAppliedTransform();\n }\n };\n TransformConstraint.prototype.applyRelativeWorld = function () {\n var mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY;\n var translate = mixX != 0 || mixY != 0;\n var target = this.target;\n var ta = target.a, tb = target.b, tc = target.c, td = target.d;\n var degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad;\n var offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect;\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (mixRotate != 0) {\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n var r = Math.atan2(tc, ta) + offsetRotation;\n if (r > MathUtils.PI)\n r -= MathUtils.PI2;\n else if (r < -MathUtils.PI) //\n r += MathUtils.PI2;\n r *= mixRotate;\n var cos = Math.cos(r), sin = Math.sin(r);\n bone.a = cos * a - sin * c;\n bone.b = cos * b - sin * d;\n bone.c = sin * a + cos * c;\n bone.d = sin * b + cos * d;\n }\n if (translate) {\n var temp = this.temp;\n target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n bone.worldX += temp.x * mixX;\n bone.worldY += temp.y * mixY;\n }\n if (mixScaleX != 0) {\n var s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * mixScaleX + 1;\n bone.a *= s;\n bone.c *= s;\n }\n if (mixScaleY != 0) {\n var s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * mixScaleY + 1;\n bone.b *= s;\n bone.d *= s;\n }\n if (mixShearY > 0) {\n var r = Math.atan2(td, tb) - Math.atan2(tc, ta);\n if (r > MathUtils.PI)\n r -= MathUtils.PI2;\n else if (r < -MathUtils.PI) //\n r += MathUtils.PI2;\n var b = bone.b, d = bone.d;\n r = Math.atan2(d, b) + (r - MathUtils.PI / 2 + offsetShearY) * mixShearY;\n var s = Math.sqrt(b * b + d * d);\n bone.b = Math.cos(r) * s;\n bone.d = Math.sin(r) * s;\n }\n bone.updateAppliedTransform();\n }\n };\n TransformConstraint.prototype.applyAbsoluteLocal = function () {\n var mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY;\n var target = this.target;\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n var rotation = bone.arotation;\n if (mixRotate != 0) {\n var r = target.arotation - rotation + this.data.offsetRotation;\n r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n rotation += r * mixRotate;\n }\n var x = bone.ax, y = bone.ay;\n x += (target.ax - x + this.data.offsetX) * mixX;\n y += (target.ay - y + this.data.offsetY) * mixY;\n var scaleX = bone.ascaleX, scaleY = bone.ascaleY;\n if (mixScaleX != 0 && scaleX != 0)\n scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * mixScaleX) / scaleX;\n if (mixScaleY != 0 && scaleY != 0)\n scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * mixScaleY) / scaleY;\n var shearY = bone.ashearY;\n if (mixShearY != 0) {\n var r = target.ashearY - shearY + this.data.offsetShearY;\n r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n shearY += r * mixShearY;\n }\n bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n }\n };\n TransformConstraint.prototype.applyRelativeLocal = function () {\n var mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY;\n var target = this.target;\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n var rotation = bone.arotation + (target.arotation + this.data.offsetRotation) * mixRotate;\n var x = bone.ax + (target.ax + this.data.offsetX) * mixX;\n var y = bone.ay + (target.ay + this.data.offsetY) * mixY;\n var scaleX = (bone.ascaleX * ((target.ascaleX - 1 + this.data.offsetScaleX) * mixScaleX) + 1);\n var scaleY = (bone.ascaleY * ((target.ascaleY - 1 + this.data.offsetScaleY) * mixScaleY) + 1);\n var shearY = bone.ashearY + (target.ashearY + this.data.offsetShearY) * mixShearY;\n bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n }\n };\n return TransformConstraint;\n}());\nexport { TransformConstraint };\n//# sourceMappingURL=TransformConstraint.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { MeshAttachment } from \"./attachments/MeshAttachment\";\nimport { PathAttachment } from \"./attachments/PathAttachment\";\nimport { RegionAttachment } from \"./attachments/RegionAttachment\";\nimport { Bone } from \"./Bone\";\nimport { IkConstraint } from \"./IkConstraint\";\nimport { PathConstraint } from \"./PathConstraint\";\nimport { Slot } from \"./Slot\";\nimport { TransformConstraint } from \"./TransformConstraint\";\nimport { Color, Utils, MathUtils } from \"./Utils\";\n/** Stores the current pose for a skeleton.\n *\n * See [Instance objects](http://esotericsoftware.com/spine-runtime-architecture#Instance-objects) in the Spine Runtimes Guide. */\nvar Skeleton = /** @class */ (function () {\n function Skeleton(data) {\n /** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link #updateCache()}. */\n this._updateCache = new Array();\n /** Returns the skeleton's time. This can be used for tracking, such as with Slot {@link Slot#attachmentTime}.\n * \n * See {@link #update()}. */\n this.time = 0;\n /** Scales the entire skeleton on the X axis. This affects all bones, even if the bone's transform mode disallows scale\n * inheritance. */\n this.scaleX = 1;\n /** Scales the entire skeleton on the Y axis. This affects all bones, even if the bone's transform mode disallows scale\n * inheritance. */\n this.scaleY = 1;\n /** Sets the skeleton X position, which is added to the root bone worldX position. */\n this.x = 0;\n /** Sets the skeleton Y position, which is added to the root bone worldY position. */\n this.y = 0;\n if (!data)\n throw new Error(\"data cannot be null.\");\n this.data = data;\n this.bones = new Array();\n for (var i = 0; i < data.bones.length; i++) {\n var boneData = data.bones[i];\n var bone = void 0;\n if (!boneData.parent)\n bone = new Bone(boneData, this, null);\n else {\n var parent_1 = this.bones[boneData.parent.index];\n bone = new Bone(boneData, this, parent_1);\n parent_1.children.push(bone);\n }\n this.bones.push(bone);\n }\n this.slots = new Array();\n this.drawOrder = new Array();\n for (var i = 0; i < data.slots.length; i++) {\n var slotData = data.slots[i];\n var bone = this.bones[slotData.boneData.index];\n var slot = new Slot(slotData, bone);\n this.slots.push(slot);\n this.drawOrder.push(slot);\n }\n this.ikConstraints = new Array();\n for (var i = 0; i < data.ikConstraints.length; i++) {\n var ikConstraintData = data.ikConstraints[i];\n this.ikConstraints.push(new IkConstraint(ikConstraintData, this));\n }\n this.transformConstraints = new Array();\n for (var i = 0; i < data.transformConstraints.length; i++) {\n var transformConstraintData = data.transformConstraints[i];\n this.transformConstraints.push(new TransformConstraint(transformConstraintData, this));\n }\n this.pathConstraints = new Array();\n for (var i = 0; i < data.pathConstraints.length; i++) {\n var pathConstraintData = data.pathConstraints[i];\n this.pathConstraints.push(new PathConstraint(pathConstraintData, this));\n }\n this.color = new Color(1, 1, 1, 1);\n this.updateCache();\n }\n /** Caches information about bones and constraints. Must be called if the {@link #getSkin()} is modified or if bones,\n * constraints, or weighted path attachments are added or removed. */\n Skeleton.prototype.updateCache = function () {\n var updateCache = this._updateCache;\n updateCache.length = 0;\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n bone.sorted = bone.data.skinRequired;\n bone.active = !bone.sorted;\n }\n if (this.skin) {\n var skinBones = this.skin.bones;\n for (var i = 0, n = this.skin.bones.length; i < n; i++) {\n var bone = this.bones[skinBones[i].index];\n do {\n bone.sorted = false;\n bone.active = true;\n bone = bone.parent;\n } while (bone);\n }\n }\n // IK first, lowest hierarchy depth first.\n var ikConstraints = this.ikConstraints;\n var transformConstraints = this.transformConstraints;\n var pathConstraints = this.pathConstraints;\n var ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length;\n var constraintCount = ikCount + transformCount + pathCount;\n outer: for (var i = 0; i < constraintCount; i++) {\n for (var ii = 0; ii < ikCount; ii++) {\n var constraint = ikConstraints[ii];\n if (constraint.data.order == i) {\n this.sortIkConstraint(constraint);\n continue outer;\n }\n }\n for (var ii = 0; ii < transformCount; ii++) {\n var constraint = transformConstraints[ii];\n if (constraint.data.order == i) {\n this.sortTransformConstraint(constraint);\n continue outer;\n }\n }\n for (var ii = 0; ii < pathCount; ii++) {\n var constraint = pathConstraints[ii];\n if (constraint.data.order == i) {\n this.sortPathConstraint(constraint);\n continue outer;\n }\n }\n }\n for (var i = 0, n = bones.length; i < n; i++)\n this.sortBone(bones[i]);\n };\n Skeleton.prototype.sortIkConstraint = function (constraint) {\n constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));\n if (!constraint.active)\n return;\n var target = constraint.target;\n this.sortBone(target);\n var constrained = constraint.bones;\n var parent = constrained[0];\n this.sortBone(parent);\n if (constrained.length == 1) {\n this._updateCache.push(constraint);\n this.sortReset(parent.children);\n }\n else {\n var child = constrained[constrained.length - 1];\n this.sortBone(child);\n this._updateCache.push(constraint);\n this.sortReset(parent.children);\n child.sorted = true;\n }\n };\n Skeleton.prototype.sortPathConstraint = function (constraint) {\n constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));\n if (!constraint.active)\n return;\n var slot = constraint.target;\n var slotIndex = slot.data.index;\n var slotBone = slot.bone;\n if (this.skin)\n this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);\n if (this.data.defaultSkin && this.data.defaultSkin != this.skin)\n this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);\n for (var i = 0, n = this.data.skins.length; i < n; i++)\n this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);\n var attachment = slot.getAttachment();\n if (attachment instanceof PathAttachment)\n this.sortPathConstraintAttachmentWith(attachment, slotBone);\n var constrained = constraint.bones;\n var boneCount = constrained.length;\n for (var i = 0; i < boneCount; i++)\n this.sortBone(constrained[i]);\n this._updateCache.push(constraint);\n for (var i = 0; i < boneCount; i++)\n this.sortReset(constrained[i].children);\n for (var i = 0; i < boneCount; i++)\n constrained[i].sorted = true;\n };\n Skeleton.prototype.sortTransformConstraint = function (constraint) {\n constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));\n if (!constraint.active)\n return;\n this.sortBone(constraint.target);\n var constrained = constraint.bones;\n var boneCount = constrained.length;\n if (constraint.data.local) {\n for (var i = 0; i < boneCount; i++) {\n var child = constrained[i];\n this.sortBone(child.parent);\n this.sortBone(child);\n }\n }\n else {\n for (var i = 0; i < boneCount; i++) {\n this.sortBone(constrained[i]);\n }\n }\n this._updateCache.push(constraint);\n for (var i = 0; i < boneCount; i++)\n this.sortReset(constrained[i].children);\n for (var i = 0; i < boneCount; i++)\n constrained[i].sorted = true;\n };\n Skeleton.prototype.sortPathConstraintAttachment = function (skin, slotIndex, slotBone) {\n var attachments = skin.attachments[slotIndex];\n if (!attachments)\n return;\n for (var key in attachments) {\n this.sortPathConstraintAttachmentWith(attachments[key], slotBone);\n }\n };\n Skeleton.prototype.sortPathConstraintAttachmentWith = function (attachment, slotBone) {\n if (!(attachment instanceof PathAttachment))\n return;\n var pathBones = attachment.bones;\n if (!pathBones)\n this.sortBone(slotBone);\n else {\n var bones = this.bones;\n for (var i = 0, n = pathBones.length; i < n;) {\n var nn = pathBones[i++];\n nn += i;\n while (i < nn)\n this.sortBone(bones[pathBones[i++]]);\n }\n }\n };\n Skeleton.prototype.sortBone = function (bone) {\n if (bone.sorted)\n return;\n var parent = bone.parent;\n if (parent)\n this.sortBone(parent);\n bone.sorted = true;\n this._updateCache.push(bone);\n };\n Skeleton.prototype.sortReset = function (bones) {\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (!bone.active)\n continue;\n if (bone.sorted)\n this.sortReset(bone.children);\n bone.sorted = false;\n }\n };\n /** Updates the world transform for each bone and applies all constraints.\n *\n * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine\n * Runtimes Guide. */\n Skeleton.prototype.updateWorldTransform = function () {\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n bone.ax = bone.x;\n bone.ay = bone.y;\n bone.arotation = bone.rotation;\n bone.ascaleX = bone.scaleX;\n bone.ascaleY = bone.scaleY;\n bone.ashearX = bone.shearX;\n bone.ashearY = bone.shearY;\n }\n var updateCache = this._updateCache;\n for (var i = 0, n = updateCache.length; i < n; i++)\n updateCache[i].update();\n };\n Skeleton.prototype.updateWorldTransformWith = function (parent) {\n // Apply the parent bone transform to the root bone. The root bone always inherits scale, rotation and reflection.\n var rootBone = this.getRootBone();\n var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n rootBone.worldX = pa * this.x + pb * this.y + parent.worldX;\n rootBone.worldY = pc * this.x + pd * this.y + parent.worldY;\n var rotationY = rootBone.rotation + 90 + rootBone.shearY;\n var la = MathUtils.cosDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;\n var lb = MathUtils.cosDeg(rotationY) * rootBone.scaleY;\n var lc = MathUtils.sinDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;\n var ld = MathUtils.sinDeg(rotationY) * rootBone.scaleY;\n rootBone.a = (pa * la + pb * lc) * this.scaleX;\n rootBone.b = (pa * lb + pb * ld) * this.scaleX;\n rootBone.c = (pc * la + pd * lc) * this.scaleY;\n rootBone.d = (pc * lb + pd * ld) * this.scaleY;\n // Update everything except root bone.\n var updateCache = this._updateCache;\n for (var i = 0, n = updateCache.length; i < n; i++) {\n var updatable = updateCache[i];\n if (updatable != rootBone)\n updatable.update();\n }\n };\n /** Sets the bones, constraints, and slots to their setup pose values. */\n Skeleton.prototype.setToSetupPose = function () {\n this.setBonesToSetupPose();\n this.setSlotsToSetupPose();\n };\n /** Sets the bones and constraints to their setup pose values. */\n Skeleton.prototype.setBonesToSetupPose = function () {\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++)\n bones[i].setToSetupPose();\n var ikConstraints = this.ikConstraints;\n for (var i = 0, n = ikConstraints.length; i < n; i++) {\n var constraint = ikConstraints[i];\n constraint.mix = constraint.data.mix;\n constraint.softness = constraint.data.softness;\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n }\n var transformConstraints = this.transformConstraints;\n for (var i = 0, n = transformConstraints.length; i < n; i++) {\n var constraint = transformConstraints[i];\n var data = constraint.data;\n constraint.mixRotate = data.mixRotate;\n constraint.mixX = data.mixX;\n constraint.mixY = data.mixY;\n constraint.mixScaleX = data.mixScaleX;\n constraint.mixScaleY = data.mixScaleY;\n constraint.mixShearY = data.mixShearY;\n }\n var pathConstraints = this.pathConstraints;\n for (var i = 0, n = pathConstraints.length; i < n; i++) {\n var constraint = pathConstraints[i];\n var data = constraint.data;\n constraint.position = data.position;\n constraint.spacing = data.spacing;\n constraint.mixRotate = data.mixRotate;\n constraint.mixX = data.mixX;\n constraint.mixY = data.mixY;\n }\n };\n /** Sets the slots and draw order to their setup pose values. */\n Skeleton.prototype.setSlotsToSetupPose = function () {\n var slots = this.slots;\n Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);\n for (var i = 0, n = slots.length; i < n; i++)\n slots[i].setToSetupPose();\n };\n /** @returns May return null. */\n Skeleton.prototype.getRootBone = function () {\n if (this.bones.length == 0)\n return null;\n return this.bones[0];\n };\n /** @returns May be null. */\n Skeleton.prototype.findBone = function (boneName) {\n if (!boneName)\n throw new Error(\"boneName cannot be null.\");\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (bone.data.name == boneName)\n return bone;\n }\n return null;\n };\n /** @returns -1 if the bone was not found. */\n Skeleton.prototype.findBoneIndex = function (boneName) {\n if (!boneName)\n throw new Error(\"boneName cannot be null.\");\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++)\n if (bones[i].data.name == boneName)\n return i;\n return -1;\n };\n /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it\n * repeatedly.\n * @returns May be null. */\n Skeleton.prototype.findSlot = function (slotName) {\n if (!slotName)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++) {\n var slot = slots[i];\n if (slot.data.name == slotName)\n return slot;\n }\n return null;\n };\n /** @returns -1 if the bone was not found. */\n Skeleton.prototype.findSlotIndex = function (slotName) {\n if (!slotName)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++)\n if (slots[i].data.name == slotName)\n return i;\n return -1;\n };\n /** Sets a skin by name.\n *\n * See {@link #setSkin()}. */\n Skeleton.prototype.setSkinByName = function (skinName) {\n var skin = this.data.findSkin(skinName);\n if (!skin)\n throw new Error(\"Skin not found: \" + skinName);\n this.setSkin(skin);\n };\n /** Sets the skin used to look up attachments before looking in the {@link SkeletonData#defaultSkin default skin}. If the\n * skin is changed, {@link #updateCache()} is called.\n *\n * Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no\n * old skin, each slot's setup mode attachment is attached from the new skin.\n *\n * After changing the skin, the visible attachments can be reset to those attached in the setup pose by calling\n * {@link #setSlotsToSetupPose()}. Also, often {@link AnimationState#apply()} is called before the next time the\n * skeleton is rendered to allow any attachment keys in the current animation(s) to hide or show attachments from the new skin.\n * @param newSkin May be null. */\n Skeleton.prototype.setSkin = function (newSkin) {\n if (newSkin == this.skin)\n return;\n if (newSkin) {\n if (this.skin)\n newSkin.attachAll(this, this.skin);\n else {\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++) {\n var slot = slots[i];\n var name_1 = slot.data.attachmentName;\n if (name_1) {\n var attachment = newSkin.getAttachment(i, name_1);\n if (attachment)\n slot.setAttachment(attachment);\n }\n }\n }\n }\n this.skin = newSkin;\n this.updateCache();\n };\n /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot name and attachment\n * name.\n *\n * See {@link #getAttachment()}.\n * @returns May be null. */\n Skeleton.prototype.getAttachmentByName = function (slotName, attachmentName) {\n return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName);\n };\n /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot index and\n * attachment name. First the skin is checked and if the attachment was not found, the default skin is checked.\n *\n * See [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide.\n * @returns May be null. */\n Skeleton.prototype.getAttachment = function (slotIndex, attachmentName) {\n if (!attachmentName)\n throw new Error(\"attachmentName cannot be null.\");\n if (this.skin) {\n var attachment = this.skin.getAttachment(slotIndex, attachmentName);\n if (attachment)\n return attachment;\n }\n if (this.data.defaultSkin)\n return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);\n return null;\n };\n /** A convenience method to set an attachment by finding the slot with {@link #findSlot()}, finding the attachment with\n * {@link #getAttachment()}, then setting the slot's {@link Slot#attachment}.\n * @param attachmentName May be null to clear the slot's attachment. */\n Skeleton.prototype.setAttachment = function (slotName, attachmentName) {\n if (!slotName)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++) {\n var slot = slots[i];\n if (slot.data.name == slotName) {\n var attachment = null;\n if (attachmentName) {\n attachment = this.getAttachment(i, attachmentName);\n if (!attachment)\n throw new Error(\"Attachment not found: \" + attachmentName + \", for slot: \" + slotName);\n }\n slot.setAttachment(attachment);\n return;\n }\n }\n throw new Error(\"Slot not found: \" + slotName);\n };\n /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method\n * than to call it repeatedly.\n * @return May be null. */\n Skeleton.prototype.findIkConstraint = function (constraintName) {\n if (!constraintName)\n throw new Error(\"constraintName cannot be null.\");\n var ikConstraints = this.ikConstraints;\n for (var i = 0, n = ikConstraints.length; i < n; i++) {\n var ikConstraint = ikConstraints[i];\n if (ikConstraint.data.name == constraintName)\n return ikConstraint;\n }\n return null;\n };\n /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of\n * this method than to call it repeatedly.\n * @return May be null. */\n Skeleton.prototype.findTransformConstraint = function (constraintName) {\n if (!constraintName)\n throw new Error(\"constraintName cannot be null.\");\n var transformConstraints = this.transformConstraints;\n for (var i = 0, n = transformConstraints.length; i < n; i++) {\n var constraint = transformConstraints[i];\n if (constraint.data.name == constraintName)\n return constraint;\n }\n return null;\n };\n /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method\n * than to call it repeatedly.\n * @return May be null. */\n Skeleton.prototype.findPathConstraint = function (constraintName) {\n if (!constraintName)\n throw new Error(\"constraintName cannot be null.\");\n var pathConstraints = this.pathConstraints;\n for (var i = 0, n = pathConstraints.length; i < n; i++) {\n var constraint = pathConstraints[i];\n if (constraint.data.name == constraintName)\n return constraint;\n }\n return null;\n };\n /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose.\n * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB.\n * @param size An output value, the width and height of the AABB.\n * @param temp Working memory to temporarily store attachments' computed world vertices. */\n Skeleton.prototype.getBounds = function (offset, size, temp) {\n if (temp === void 0) { temp = new Array(2); }\n if (!offset)\n throw new Error(\"offset cannot be null.\");\n if (!size)\n throw new Error(\"size cannot be null.\");\n var drawOrder = this.drawOrder;\n var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n for (var i = 0, n = drawOrder.length; i < n; i++) {\n var slot = drawOrder[i];\n if (!slot.bone.active)\n continue;\n var verticesLength = 0;\n var vertices = null;\n var attachment = slot.getAttachment();\n if (attachment instanceof RegionAttachment) {\n verticesLength = 8;\n vertices = Utils.setArraySize(temp, verticesLength, 0);\n attachment.computeWorldVertices(slot.bone, vertices, 0, 2);\n }\n else if (attachment instanceof MeshAttachment) {\n var mesh = attachment;\n verticesLength = mesh.worldVerticesLength;\n vertices = Utils.setArraySize(temp, verticesLength, 0);\n mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);\n }\n if (vertices) {\n for (var ii = 0, nn = vertices.length; ii < nn; ii += 2) {\n var x = vertices[ii], y = vertices[ii + 1];\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n }\n offset.set(minX, minY);\n size.set(maxX - minX, maxY - minY);\n };\n /** Increments the skeleton's {@link #time}. */\n Skeleton.prototype.update = function (delta) {\n this.time += delta;\n };\n return Skeleton;\n}());\nexport { Skeleton };\n//# sourceMappingURL=Skeleton.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n/** Stores the setup pose and all of the stateless data for a skeleton.\n *\n * See [Data objects](http://esotericsoftware.com/spine-runtime-architecture#Data-objects) in the Spine Runtimes\n * Guide. */\nvar SkeletonData = /** @class */ (function () {\n function SkeletonData() {\n /** The skeleton's bones, sorted parent first. The root bone is always the first bone. */\n this.bones = new Array(); // Ordered parents first.\n /** The skeleton's slots. */\n this.slots = new Array(); // Setup pose draw order.\n this.skins = new Array();\n /** The skeleton's events. */\n this.events = new Array();\n /** The skeleton's animations. */\n this.animations = new Array();\n /** The skeleton's IK constraints. */\n this.ikConstraints = new Array();\n /** The skeleton's transform constraints. */\n this.transformConstraints = new Array();\n /** The skeleton's path constraints. */\n this.pathConstraints = new Array();\n // Nonessential\n /** The dopesheet FPS in Spine. Available only when nonessential data was exported. */\n this.fps = 0;\n }\n /** Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it\n * multiple times.\n * @returns May be null. */\n SkeletonData.prototype.findBone = function (boneName) {\n if (!boneName)\n throw new Error(\"boneName cannot be null.\");\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++) {\n var bone = bones[i];\n if (bone.name == boneName)\n return bone;\n }\n return null;\n };\n SkeletonData.prototype.findBoneIndex = function (boneName) {\n if (!boneName)\n throw new Error(\"boneName cannot be null.\");\n var bones = this.bones;\n for (var i = 0, n = bones.length; i < n; i++)\n if (bones[i].name == boneName)\n return i;\n return -1;\n };\n /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it\n * multiple times.\n * @returns May be null. */\n SkeletonData.prototype.findSlot = function (slotName) {\n if (!slotName)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++) {\n var slot = slots[i];\n if (slot.name == slotName)\n return slot;\n }\n return null;\n };\n SkeletonData.prototype.findSlotIndex = function (slotName) {\n if (!slotName)\n throw new Error(\"slotName cannot be null.\");\n var slots = this.slots;\n for (var i = 0, n = slots.length; i < n; i++)\n if (slots[i].name == slotName)\n return i;\n return -1;\n };\n /** Finds a skin by comparing each skin's name. It is more efficient to cache the results of this method than to call it\n * multiple times.\n * @returns May be null. */\n SkeletonData.prototype.findSkin = function (skinName) {\n if (!skinName)\n throw new Error(\"skinName cannot be null.\");\n var skins = this.skins;\n for (var i = 0, n = skins.length; i < n; i++) {\n var skin = skins[i];\n if (skin.name == skinName)\n return skin;\n }\n return null;\n };\n /** Finds an event by comparing each events's name. It is more efficient to cache the results of this method than to call it\n * multiple times.\n * @returns May be null. */\n SkeletonData.prototype.findEvent = function (eventDataName) {\n if (!eventDataName)\n throw new Error(\"eventDataName cannot be null.\");\n var events = this.events;\n for (var i = 0, n = events.length; i < n; i++) {\n var event_1 = events[i];\n if (event_1.name == eventDataName)\n return event_1;\n }\n return null;\n };\n /** Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to\n * call it multiple times.\n * @returns May be null. */\n SkeletonData.prototype.findAnimation = function (animationName) {\n if (!animationName)\n throw new Error(\"animationName cannot be null.\");\n var animations = this.animations;\n for (var i = 0, n = animations.length; i < n; i++) {\n var animation = animations[i];\n if (animation.name == animationName)\n return animation;\n }\n return null;\n };\n /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method\n * than to call it multiple times.\n * @return May be null. */\n SkeletonData.prototype.findIkConstraint = function (constraintName) {\n if (!constraintName)\n throw new Error(\"constraintName cannot be null.\");\n var ikConstraints = this.ikConstraints;\n for (var i = 0, n = ikConstraints.length; i < n; i++) {\n var constraint = ikConstraints[i];\n if (constraint.name == constraintName)\n return constraint;\n }\n return null;\n };\n /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of\n * this method than to call it multiple times.\n * @return May be null. */\n SkeletonData.prototype.findTransformConstraint = function (constraintName) {\n if (!constraintName)\n throw new Error(\"constraintName cannot be null.\");\n var transformConstraints = this.transformConstraints;\n for (var i = 0, n = transformConstraints.length; i < n; i++) {\n var constraint = transformConstraints[i];\n if (constraint.name == constraintName)\n return constraint;\n }\n return null;\n };\n /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method\n * than to call it multiple times.\n * @return May be null. */\n SkeletonData.prototype.findPathConstraint = function (constraintName) {\n if (!constraintName)\n throw new Error(\"constraintName cannot be null.\");\n var pathConstraints = this.pathConstraints;\n for (var i = 0, n = pathConstraints.length; i < n; i++) {\n var constraint = pathConstraints[i];\n if (constraint.name == constraintName)\n return constraint;\n }\n return null;\n };\n return SkeletonData;\n}());\nexport { SkeletonData };\n//# sourceMappingURL=SkeletonData.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { MeshAttachment } from \"./attachments/MeshAttachment\";\n/** Stores an entry in the skin consisting of the slot index, name, and attachment **/\nvar SkinEntry = /** @class */ (function () {\n function SkinEntry(slotIndex, name, attachment) {\n this.slotIndex = slotIndex;\n this.name = name;\n this.attachment = attachment;\n }\n return SkinEntry;\n}());\nexport { SkinEntry };\n/** Stores attachments by slot index and attachment name.\n *\n * See SkeletonData {@link SkeletonData#defaultSkin}, Skeleton {@link Skeleton#skin}, and\n * [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide. */\nvar Skin = /** @class */ (function () {\n function Skin(name) {\n this.attachments = new Array();\n this.bones = Array();\n this.constraints = new Array();\n if (!name)\n throw new Error(\"name cannot be null.\");\n this.name = name;\n }\n /** Adds an attachment to the skin for the specified slot index and name. */\n Skin.prototype.setAttachment = function (slotIndex, name, attachment) {\n if (!attachment)\n throw new Error(\"attachment cannot be null.\");\n var attachments = this.attachments;\n if (slotIndex >= attachments.length)\n attachments.length = slotIndex + 1;\n if (!attachments[slotIndex])\n attachments[slotIndex] = {};\n attachments[slotIndex][name] = attachment;\n };\n /** Adds all attachments, bones, and constraints from the specified skin to this skin. */\n Skin.prototype.addSkin = function (skin) {\n for (var i = 0; i < skin.bones.length; i++) {\n var bone = skin.bones[i];\n var contained = false;\n for (var ii = 0; ii < this.bones.length; ii++) {\n if (this.bones[ii] == bone) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.bones.push(bone);\n }\n for (var i = 0; i < skin.constraints.length; i++) {\n var constraint = skin.constraints[i];\n var contained = false;\n for (var ii = 0; ii < this.constraints.length; ii++) {\n if (this.constraints[ii] == constraint) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.constraints.push(constraint);\n }\n var attachments = skin.getAttachments();\n for (var i = 0; i < attachments.length; i++) {\n var attachment = attachments[i];\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n };\n /** Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not\n * copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals. */\n Skin.prototype.copySkin = function (skin) {\n for (var i = 0; i < skin.bones.length; i++) {\n var bone = skin.bones[i];\n var contained = false;\n for (var ii = 0; ii < this.bones.length; ii++) {\n if (this.bones[ii] == bone) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.bones.push(bone);\n }\n for (var i = 0; i < skin.constraints.length; i++) {\n var constraint = skin.constraints[i];\n var contained = false;\n for (var ii = 0; ii < this.constraints.length; ii++) {\n if (this.constraints[ii] == constraint) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.constraints.push(constraint);\n }\n var attachments = skin.getAttachments();\n for (var i = 0; i < attachments.length; i++) {\n var attachment = attachments[i];\n if (!attachment.attachment)\n continue;\n if (attachment.attachment instanceof MeshAttachment) {\n attachment.attachment = attachment.attachment.newLinkedMesh();\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n else {\n attachment.attachment = attachment.attachment.copy();\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n }\n };\n /** Returns the attachment for the specified slot index and name, or null. */\n Skin.prototype.getAttachment = function (slotIndex, name) {\n var dictionary = this.attachments[slotIndex];\n return dictionary ? dictionary[name] : null;\n };\n /** Removes the attachment in the skin for the specified slot index and name, if any. */\n Skin.prototype.removeAttachment = function (slotIndex, name) {\n var dictionary = this.attachments[slotIndex];\n if (dictionary)\n dictionary[name] = null;\n };\n /** Returns all attachments in this skin. */\n Skin.prototype.getAttachments = function () {\n var entries = new Array();\n for (var i = 0; i < this.attachments.length; i++) {\n var slotAttachments = this.attachments[i];\n if (slotAttachments) {\n for (var name_1 in slotAttachments) {\n var attachment = slotAttachments[name_1];\n if (attachment)\n entries.push(new SkinEntry(i, name_1, attachment));\n }\n }\n }\n return entries;\n };\n /** Returns all attachments in this skin for the specified slot index. */\n Skin.prototype.getAttachmentsForSlot = function (slotIndex, attachments) {\n var slotAttachments = this.attachments[slotIndex];\n if (slotAttachments) {\n for (var name_2 in slotAttachments) {\n var attachment = slotAttachments[name_2];\n if (attachment)\n attachments.push(new SkinEntry(slotIndex, name_2, attachment));\n }\n }\n };\n /** Clears all attachments, bones, and constraints. */\n Skin.prototype.clear = function () {\n this.attachments.length = 0;\n this.bones.length = 0;\n this.constraints.length = 0;\n };\n /** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */\n Skin.prototype.attachAll = function (skeleton, oldSkin) {\n var slotIndex = 0;\n for (var i = 0; i < skeleton.slots.length; i++) {\n var slot = skeleton.slots[i];\n var slotAttachment = slot.getAttachment();\n if (slotAttachment && slotIndex < oldSkin.attachments.length) {\n var dictionary = oldSkin.attachments[slotIndex];\n for (var key in dictionary) {\n var skinAttachment = dictionary[key];\n if (slotAttachment == skinAttachment) {\n var attachment = this.getAttachment(slotIndex, key);\n if (attachment)\n slot.setAttachment(attachment);\n break;\n }\n }\n }\n slotIndex++;\n }\n };\n return Skin;\n}());\nexport { Skin };\n//# sourceMappingURL=Skin.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Color } from \"./Utils\";\n/** Stores the setup pose for a {@link Slot}. */\nvar SlotData = /** @class */ (function () {\n function SlotData(index, name, boneData) {\n /** The color used to tint the slot's attachment. If {@link #getDarkColor()} is set, this is used as the light color for two\n * color tinting. */\n this.color = new Color(1, 1, 1, 1);\n if (index < 0)\n throw new Error(\"index must be >= 0.\");\n if (!name)\n throw new Error(\"name cannot be null.\");\n if (!boneData)\n throw new Error(\"boneData cannot be null.\");\n this.index = index;\n this.name = name;\n this.boneData = boneData;\n }\n return SlotData;\n}());\nexport { SlotData };\n/** Determines how images are blended with existing pixels when drawn. */\nexport var BlendMode;\n(function (BlendMode) {\n BlendMode[BlendMode[\"Normal\"] = 0] = \"Normal\";\n BlendMode[BlendMode[\"Additive\"] = 1] = \"Additive\";\n BlendMode[BlendMode[\"Multiply\"] = 2] = \"Multiply\";\n BlendMode[BlendMode[\"Screen\"] = 3] = \"Screen\";\n})(BlendMode || (BlendMode = {}));\n//# sourceMappingURL=SlotData.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ConstraintData } from \"./ConstraintData\";\n/** Stores the setup pose for a {@link TransformConstraint}.\n *\n * See [Transform constraints](http://esotericsoftware.com/spine-transform-constraints) in the Spine User Guide. */\nvar TransformConstraintData = /** @class */ (function (_super) {\n __extends(TransformConstraintData, _super);\n function TransformConstraintData(name) {\n var _this = _super.call(this, name, 0, false) || this;\n /** The bones that will be modified by this transform constraint. */\n _this.bones = new Array();\n _this.mixRotate = 0;\n _this.mixX = 0;\n _this.mixY = 0;\n _this.mixScaleX = 0;\n _this.mixScaleY = 0;\n _this.mixShearY = 0;\n /** An offset added to the constrained bone rotation. */\n _this.offsetRotation = 0;\n /** An offset added to the constrained bone X translation. */\n _this.offsetX = 0;\n /** An offset added to the constrained bone Y translation. */\n _this.offsetY = 0;\n /** An offset added to the constrained bone scaleX. */\n _this.offsetScaleX = 0;\n /** An offset added to the constrained bone scaleY. */\n _this.offsetScaleY = 0;\n /** An offset added to the constrained bone shearY. */\n _this.offsetShearY = 0;\n _this.relative = false;\n _this.local = false;\n return _this;\n }\n return TransformConstraintData;\n}(ConstraintData));\nexport { TransformConstraintData };\n//# sourceMappingURL=TransformConstraintData.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { 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\";\nimport { BoneData } from \"./BoneData\";\nimport { Event } from \"./Event\";\nimport { EventData } from \"./EventData\";\nimport { IkConstraintData } from \"./IkConstraintData\";\nimport { PathConstraintData, PositionMode, SpacingMode } from \"./PathConstraintData\";\nimport { SkeletonData } from \"./SkeletonData\";\nimport { Skin } from \"./Skin\";\nimport { SlotData } from \"./SlotData\";\nimport { TransformConstraintData } from \"./TransformConstraintData\";\nimport { Color, Utils } from \"./Utils\";\n/** Loads skeleton data in the Spine binary format.\n *\n * See [Spine binary format](http://esotericsoftware.com/spine-binary-format) and\n * [JSON and binary data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the Spine\n * Runtimes Guide. */\nvar SkeletonBinary = /** @class */ (function () {\n function SkeletonBinary(attachmentLoader) {\n /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at\n * runtime than were used in Spine.\n *\n * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */\n this.scale = 1;\n this.linkedMeshes = new Array();\n this.attachmentLoader = attachmentLoader;\n }\n SkeletonBinary.prototype.readSkeletonData = function (binary) {\n var scale = this.scale;\n var skeletonData = new SkeletonData();\n skeletonData.name = \"\"; // BOZO\n var input = new BinaryInput(binary);\n var lowHash = input.readInt32();\n var highHash = input.readInt32();\n skeletonData.hash = highHash == 0 && lowHash == 0 ? null : highHash.toString(16) + lowHash.toString(16);\n skeletonData.version = input.readString();\n skeletonData.x = input.readFloat();\n skeletonData.y = input.readFloat();\n skeletonData.width = input.readFloat();\n skeletonData.height = input.readFloat();\n var nonessential = input.readBoolean();\n if (nonessential) {\n skeletonData.fps = input.readFloat();\n skeletonData.imagesPath = input.readString();\n skeletonData.audioPath = input.readString();\n }\n var n = 0;\n // Strings.\n n = input.readInt(true);\n for (var i = 0; i < n; i++)\n input.strings.push(input.readString());\n // Bones.\n n = input.readInt(true);\n for (var i = 0; i < n; i++) {\n var name_1 = input.readString();\n var parent_1 = i == 0 ? null : skeletonData.bones[input.readInt(true)];\n var data = new BoneData(i, name_1, parent_1);\n data.rotation = input.readFloat();\n data.x = input.readFloat() * scale;\n data.y = input.readFloat() * scale;\n data.scaleX = input.readFloat();\n data.scaleY = input.readFloat();\n data.shearX = input.readFloat();\n data.shearY = input.readFloat();\n data.length = input.readFloat() * scale;\n data.transformMode = input.readInt(true);\n data.skinRequired = input.readBoolean();\n if (nonessential)\n Color.rgba8888ToColor(data.color, input.readInt32());\n skeletonData.bones.push(data);\n }\n // Slots.\n n = input.readInt(true);\n for (var i = 0; i < n; i++) {\n var slotName = input.readString();\n var boneData = skeletonData.bones[input.readInt(true)];\n var data = new SlotData(i, slotName, boneData);\n Color.rgba8888ToColor(data.color, input.readInt32());\n var darkColor = input.readInt32();\n if (darkColor != -1)\n Color.rgb888ToColor(data.darkColor = new Color(), darkColor);\n data.attachmentName = input.readStringRef();\n data.blendMode = input.readInt(true);\n skeletonData.slots.push(data);\n }\n // IK constraints.\n n = input.readInt(true);\n for (var i = 0, nn = void 0; i < n; i++) {\n var data = new IkConstraintData(input.readString());\n data.order = input.readInt(true);\n data.skinRequired = input.readBoolean();\n nn = input.readInt(true);\n for (var ii = 0; ii < nn; ii++)\n data.bones.push(skeletonData.bones[input.readInt(true)]);\n data.target = skeletonData.bones[input.readInt(true)];\n data.mix = input.readFloat();\n data.softness = input.readFloat() * scale;\n data.bendDirection = input.readByte();\n data.compress = input.readBoolean();\n data.stretch = input.readBoolean();\n data.uniform = input.readBoolean();\n skeletonData.ikConstraints.push(data);\n }\n // Transform constraints.\n n = input.readInt(true);\n for (var i = 0, nn = void 0; i < n; i++) {\n var data = new TransformConstraintData(input.readString());\n data.order = input.readInt(true);\n data.skinRequired = input.readBoolean();\n nn = input.readInt(true);\n for (var ii = 0; ii < nn; ii++)\n data.bones.push(skeletonData.bones[input.readInt(true)]);\n data.target = skeletonData.bones[input.readInt(true)];\n data.local = input.readBoolean();\n data.relative = input.readBoolean();\n data.offsetRotation = input.readFloat();\n data.offsetX = input.readFloat() * scale;\n data.offsetY = input.readFloat() * scale;\n data.offsetScaleX = input.readFloat();\n data.offsetScaleY = input.readFloat();\n data.offsetShearY = input.readFloat();\n data.mixRotate = input.readFloat();\n data.mixX = input.readFloat();\n data.mixY = input.readFloat();\n data.mixScaleX = input.readFloat();\n data.mixScaleY = input.readFloat();\n data.mixShearY = input.readFloat();\n skeletonData.transformConstraints.push(data);\n }\n // Path constraints.\n n = input.readInt(true);\n for (var i = 0, nn = void 0; i < n; i++) {\n var data = new PathConstraintData(input.readString());\n data.order = input.readInt(true);\n data.skinRequired = input.readBoolean();\n nn = input.readInt(true);\n for (var ii = 0; ii < nn; ii++)\n data.bones.push(skeletonData.bones[input.readInt(true)]);\n data.target = skeletonData.slots[input.readInt(true)];\n data.positionMode = input.readInt(true);\n data.spacingMode = input.readInt(true);\n data.rotateMode = input.readInt(true);\n data.offsetRotation = input.readFloat();\n data.position = input.readFloat();\n if (data.positionMode == PositionMode.Fixed)\n data.position *= scale;\n data.spacing = input.readFloat();\n if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)\n data.spacing *= scale;\n data.mixRotate = input.readFloat();\n data.mixX = input.readFloat();\n data.mixY = input.readFloat();\n skeletonData.pathConstraints.push(data);\n }\n // Default skin.\n var defaultSkin = this.readSkin(input, skeletonData, true, nonessential);\n if (defaultSkin) {\n skeletonData.defaultSkin = defaultSkin;\n skeletonData.skins.push(defaultSkin);\n }\n // Skins.\n {\n var i = skeletonData.skins.length;\n Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true));\n for (; i < n; i++)\n skeletonData.skins[i] = this.readSkin(input, skeletonData, false, nonessential);\n }\n // Linked meshes.\n n = this.linkedMeshes.length;\n for (var i = 0; i < n; i++) {\n var linkedMesh = this.linkedMeshes[i];\n var skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n var parent_2 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_2 : linkedMesh.mesh;\n linkedMesh.mesh.setParentMesh(parent_2);\n linkedMesh.mesh.updateUVs();\n }\n this.linkedMeshes.length = 0;\n // Events.\n n = input.readInt(true);\n for (var i = 0; i < n; i++) {\n var data = new EventData(input.readStringRef());\n data.intValue = input.readInt(false);\n data.floatValue = input.readFloat();\n data.stringValue = input.readString();\n data.audioPath = input.readString();\n if (data.audioPath) {\n data.volume = input.readFloat();\n data.balance = input.readFloat();\n }\n skeletonData.events.push(data);\n }\n // Animations.\n n = input.readInt(true);\n for (var i = 0; i < n; i++)\n skeletonData.animations.push(this.readAnimation(input, input.readString(), skeletonData));\n return skeletonData;\n };\n SkeletonBinary.prototype.readSkin = function (input, skeletonData, defaultSkin, nonessential) {\n var skin = null;\n var slotCount = 0;\n if (defaultSkin) {\n slotCount = input.readInt(true);\n if (slotCount == 0)\n return null;\n skin = new Skin(\"default\");\n }\n else {\n skin = new Skin(input.readStringRef());\n skin.bones.length = input.readInt(true);\n for (var i = 0, n = skin.bones.length; i < n; i++)\n skin.bones[i] = skeletonData.bones[input.readInt(true)];\n for (var i = 0, n = input.readInt(true); i < n; i++)\n skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]);\n for (var i = 0, n = input.readInt(true); i < n; i++)\n skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]);\n for (var i = 0, n = input.readInt(true); i < n; i++)\n skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]);\n slotCount = input.readInt(true);\n }\n for (var i = 0; i < slotCount; i++) {\n var slotIndex = input.readInt(true);\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var name_2 = input.readStringRef();\n var attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name_2, nonessential);\n if (attachment)\n skin.setAttachment(slotIndex, name_2, attachment);\n }\n }\n return skin;\n };\n SkeletonBinary.prototype.readAttachment = function (input, skeletonData, skin, slotIndex, attachmentName, nonessential) {\n var scale = this.scale;\n var name = input.readStringRef();\n if (!name)\n name = attachmentName;\n switch (input.readByte()) {\n case AttachmentType.Region: {\n var path = input.readStringRef();\n var rotation = input.readFloat();\n var x = input.readFloat();\n var y = input.readFloat();\n var scaleX = input.readFloat();\n var scaleY = input.readFloat();\n var width = input.readFloat();\n var height = input.readFloat();\n var color = input.readInt32();\n if (!path)\n path = name;\n var region = this.attachmentLoader.newRegionAttachment(skin, name, path);\n if (!region)\n return null;\n region.path = path;\n region.x = x * scale;\n region.y = y * scale;\n region.scaleX = scaleX;\n region.scaleY = scaleY;\n region.rotation = rotation;\n region.width = width * scale;\n region.height = height * scale;\n Color.rgba8888ToColor(region.color, color);\n region.updateOffset();\n return region;\n }\n case AttachmentType.BoundingBox: {\n var vertexCount = input.readInt(true);\n var vertices = this.readVertices(input, vertexCount);\n var color = nonessential ? input.readInt32() : 0;\n var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n if (!box)\n return null;\n box.worldVerticesLength = vertexCount << 1;\n box.vertices = vertices.vertices;\n box.bones = vertices.bones;\n if (nonessential)\n Color.rgba8888ToColor(box.color, color);\n return box;\n }\n case AttachmentType.Mesh: {\n var path = input.readStringRef();\n var color = input.readInt32();\n var vertexCount = input.readInt(true);\n var uvs = this.readFloatArray(input, vertexCount << 1, 1);\n var triangles = this.readShortArray(input);\n var vertices = this.readVertices(input, vertexCount);\n var hullLength = input.readInt(true);\n var edges = null;\n var width = 0, height = 0;\n if (nonessential) {\n edges = this.readShortArray(input);\n width = input.readFloat();\n height = input.readFloat();\n }\n if (!path)\n path = name;\n var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);\n if (!mesh)\n return null;\n mesh.path = path;\n Color.rgba8888ToColor(mesh.color, color);\n mesh.bones = vertices.bones;\n mesh.vertices = vertices.vertices;\n mesh.worldVerticesLength = vertexCount << 1;\n mesh.triangles = triangles;\n mesh.regionUVs = uvs;\n mesh.updateUVs();\n mesh.hullLength = hullLength << 1;\n if (nonessential) {\n mesh.edges = edges;\n mesh.width = width * scale;\n mesh.height = height * scale;\n }\n return mesh;\n }\n case AttachmentType.LinkedMesh: {\n var path = input.readStringRef();\n var color = input.readInt32();\n var skinName = input.readStringRef();\n var parent_3 = input.readStringRef();\n var inheritDeform = input.readBoolean();\n var width = 0, height = 0;\n if (nonessential) {\n width = input.readFloat();\n height = input.readFloat();\n }\n if (!path)\n path = name;\n var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);\n if (!mesh)\n return null;\n mesh.path = path;\n Color.rgba8888ToColor(mesh.color, color);\n if (nonessential) {\n mesh.width = width * scale;\n mesh.height = height * scale;\n }\n this.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent_3, inheritDeform));\n return mesh;\n }\n case AttachmentType.Path: {\n var closed_1 = input.readBoolean();\n var constantSpeed = input.readBoolean();\n var vertexCount = input.readInt(true);\n var vertices = this.readVertices(input, vertexCount);\n var lengths = Utils.newArray(vertexCount / 3, 0);\n for (var i = 0, n = lengths.length; i < n; i++)\n lengths[i] = input.readFloat() * scale;\n var color = nonessential ? input.readInt32() : 0;\n var path = this.attachmentLoader.newPathAttachment(skin, name);\n if (!path)\n return null;\n path.closed = closed_1;\n path.constantSpeed = constantSpeed;\n path.worldVerticesLength = vertexCount << 1;\n path.vertices = vertices.vertices;\n path.bones = vertices.bones;\n path.lengths = lengths;\n if (nonessential)\n Color.rgba8888ToColor(path.color, color);\n return path;\n }\n case AttachmentType.Point: {\n var rotation = input.readFloat();\n var x = input.readFloat();\n var y = input.readFloat();\n var color = nonessential ? input.readInt32() : 0;\n var point = this.attachmentLoader.newPointAttachment(skin, name);\n if (!point)\n return null;\n point.x = x * scale;\n point.y = y * scale;\n point.rotation = rotation;\n if (nonessential)\n Color.rgba8888ToColor(point.color, color);\n return point;\n }\n case AttachmentType.Clipping: {\n var endSlotIndex = input.readInt(true);\n var vertexCount = input.readInt(true);\n var vertices = this.readVertices(input, vertexCount);\n var color = nonessential ? input.readInt32() : 0;\n var clip = this.attachmentLoader.newClippingAttachment(skin, name);\n if (!clip)\n return null;\n clip.endSlot = skeletonData.slots[endSlotIndex];\n clip.worldVerticesLength = vertexCount << 1;\n clip.vertices = vertices.vertices;\n clip.bones = vertices.bones;\n if (nonessential)\n Color.rgba8888ToColor(clip.color, color);\n return clip;\n }\n }\n return null;\n };\n SkeletonBinary.prototype.readVertices = function (input, vertexCount) {\n var scale = this.scale;\n var verticesLength = vertexCount << 1;\n var vertices = new Vertices();\n if (!input.readBoolean()) {\n vertices.vertices = this.readFloatArray(input, verticesLength, scale);\n return vertices;\n }\n var weights = new Array();\n var bonesArray = new Array();\n for (var i = 0; i < vertexCount; i++) {\n var boneCount = input.readInt(true);\n bonesArray.push(boneCount);\n for (var ii = 0; ii < boneCount; ii++) {\n bonesArray.push(input.readInt(true));\n weights.push(input.readFloat() * scale);\n weights.push(input.readFloat() * scale);\n weights.push(input.readFloat());\n }\n }\n vertices.vertices = Utils.toFloatArray(weights);\n vertices.bones = bonesArray;\n return vertices;\n };\n SkeletonBinary.prototype.readFloatArray = function (input, n, scale) {\n var array = new Array(n);\n if (scale == 1) {\n for (var i = 0; i < n; i++)\n array[i] = input.readFloat();\n }\n else {\n for (var i = 0; i < n; i++)\n array[i] = input.readFloat() * scale;\n }\n return array;\n };\n SkeletonBinary.prototype.readShortArray = function (input) {\n var n = input.readInt(true);\n var array = new Array(n);\n for (var i = 0; i < n; i++)\n array[i] = input.readShort();\n return array;\n };\n SkeletonBinary.prototype.readAnimation = function (input, name, skeletonData) {\n input.readInt(true); // Number of timelines.\n var timelines = new Array();\n var scale = this.scale;\n var tempColor1 = new Color();\n var tempColor2 = new Color();\n // Slot timelines.\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var slotIndex = input.readInt(true);\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var timelineType = input.readByte();\n var frameCount = input.readInt(true);\n var frameLast = frameCount - 1;\n switch (timelineType) {\n case SLOT_ATTACHMENT: {\n var timeline = new AttachmentTimeline(frameCount, slotIndex);\n for (var frame = 0; frame < frameCount; frame++)\n timeline.setFrame(frame, input.readFloat(), input.readStringRef());\n timelines.push(timeline);\n break;\n }\n case SLOT_RGBA: {\n var bezierCount = input.readInt(true);\n var timeline = new RGBATimeline(frameCount, bezierCount, slotIndex);\n var time = input.readFloat();\n var r = input.readUnsignedByte() / 255.0;\n var g = input.readUnsignedByte() / 255.0;\n var b = input.readUnsignedByte() / 255.0;\n var a = input.readUnsignedByte() / 255.0;\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, r, g, b, a);\n if (frame == frameLast)\n break;\n var time2 = input.readFloat();\n var r2 = input.readUnsignedByte() / 255.0;\n var g2 = input.readUnsignedByte() / 255.0;\n var b2 = input.readUnsignedByte() / 255.0;\n var a2 = input.readUnsignedByte() / 255.0;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);\n setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);\n setBezier(input, timeline, bezier++, frame, 3, time, time2, a, a2, 1);\n }\n time = time2;\n r = r2;\n g = g2;\n b = b2;\n a = a2;\n }\n timelines.push(timeline);\n break;\n }\n case SLOT_RGB: {\n var bezierCount = input.readInt(true);\n var timeline = new RGBTimeline(frameCount, bezierCount, slotIndex);\n var time = input.readFloat();\n var r = input.readUnsignedByte() / 255.0;\n var g = input.readUnsignedByte() / 255.0;\n var b = input.readUnsignedByte() / 255.0;\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, r, g, b);\n if (frame == frameLast)\n break;\n var time2 = input.readFloat();\n var r2 = input.readUnsignedByte() / 255.0;\n var g2 = input.readUnsignedByte() / 255.0;\n var b2 = input.readUnsignedByte() / 255.0;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);\n setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);\n }\n time = time2;\n r = r2;\n g = g2;\n b = b2;\n }\n timelines.push(timeline);\n break;\n }\n case SLOT_RGBA2: {\n var bezierCount = input.readInt(true);\n var timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex);\n var time = input.readFloat();\n var r = input.readUnsignedByte() / 255.0;\n var g = input.readUnsignedByte() / 255.0;\n var b = input.readUnsignedByte() / 255.0;\n var a = input.readUnsignedByte() / 255.0;\n var r2 = input.readUnsignedByte() / 255.0;\n var g2 = input.readUnsignedByte() / 255.0;\n var b2 = input.readUnsignedByte() / 255.0;\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, r, g, b, a, r2, g2, b2);\n if (frame == frameLast)\n break;\n var time2 = input.readFloat();\n var nr = input.readUnsignedByte() / 255.0;\n var ng = input.readUnsignedByte() / 255.0;\n var nb = input.readUnsignedByte() / 255.0;\n var na = input.readUnsignedByte() / 255.0;\n var nr2 = input.readUnsignedByte() / 255.0;\n var ng2 = input.readUnsignedByte() / 255.0;\n var nb2 = input.readUnsignedByte() / 255.0;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);\n setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);\n setBezier(input, timeline, bezier++, frame, 3, time, time2, a, na, 1);\n setBezier(input, timeline, bezier++, frame, 4, time, time2, r2, nr2, 1);\n setBezier(input, timeline, bezier++, frame, 5, time, time2, g2, ng2, 1);\n setBezier(input, timeline, bezier++, frame, 6, time, time2, b2, nb2, 1);\n }\n time = time2;\n r = nr;\n g = ng;\n b = nb;\n a = na;\n r2 = nr2;\n g2 = ng2;\n b2 = nb2;\n }\n timelines.push(timeline);\n break;\n }\n case SLOT_RGB2: {\n var bezierCount = input.readInt(true);\n var timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex);\n var time = input.readFloat();\n var r = input.readUnsignedByte() / 255.0;\n var g = input.readUnsignedByte() / 255.0;\n var b = input.readUnsignedByte() / 255.0;\n var r2 = input.readUnsignedByte() / 255.0;\n var g2 = input.readUnsignedByte() / 255.0;\n var b2 = input.readUnsignedByte() / 255.0;\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, r, g, b, r2, g2, b2);\n if (frame == frameLast)\n break;\n var time2 = input.readFloat();\n var nr = input.readUnsignedByte() / 255.0;\n var ng = input.readUnsignedByte() / 255.0;\n var nb = input.readUnsignedByte() / 255.0;\n var nr2 = input.readUnsignedByte() / 255.0;\n var ng2 = input.readUnsignedByte() / 255.0;\n var nb2 = input.readUnsignedByte() / 255.0;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);\n setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);\n setBezier(input, timeline, bezier++, frame, 3, time, time2, r2, nr2, 1);\n setBezier(input, timeline, bezier++, frame, 4, time, time2, g2, ng2, 1);\n setBezier(input, timeline, bezier++, frame, 5, time, time2, b2, nb2, 1);\n }\n time = time2;\n r = nr;\n g = ng;\n b = nb;\n r2 = nr2;\n g2 = ng2;\n b2 = nb2;\n }\n timelines.push(timeline);\n break;\n }\n case SLOT_ALPHA: {\n var timeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex);\n var time = input.readFloat(), a = input.readUnsignedByte() / 255;\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, a);\n if (frame == frameLast)\n break;\n var time2 = input.readFloat();\n var a2 = input.readUnsignedByte() / 255;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, a, a2, 1);\n }\n time = time2;\n a = a2;\n }\n timelines.push(timeline);\n break;\n }\n }\n }\n }\n // Bone timelines.\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var boneIndex = input.readInt(true);\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);\n switch (type) {\n case BONE_ROTATE:\n timelines.push(readTimeline1(input, new RotateTimeline(frameCount, bezierCount, boneIndex), 1));\n break;\n case BONE_TRANSLATE:\n timelines.push(readTimeline2(input, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale));\n break;\n case BONE_TRANSLATEX:\n timelines.push(readTimeline1(input, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale));\n break;\n case BONE_TRANSLATEY:\n timelines.push(readTimeline1(input, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale));\n break;\n case BONE_SCALE:\n timelines.push(readTimeline2(input, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1));\n break;\n case BONE_SCALEX:\n timelines.push(readTimeline1(input, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1));\n break;\n case BONE_SCALEY:\n timelines.push(readTimeline1(input, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1));\n break;\n case BONE_SHEAR:\n timelines.push(readTimeline2(input, new ShearTimeline(frameCount, bezierCount, boneIndex), 1));\n break;\n case BONE_SHEARX:\n timelines.push(readTimeline1(input, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1));\n break;\n case BONE_SHEARY:\n timelines.push(readTimeline1(input, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1));\n }\n }\n }\n // IK constraint timelines.\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;\n var timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index);\n var time = input.readFloat(), mix = input.readFloat(), softness = input.readFloat() * scale;\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, mix, softness, input.readByte(), input.readBoolean(), input.readBoolean());\n if (frame == frameLast)\n break;\n var time2 = input.readFloat(), mix2 = input.readFloat(), softness2 = input.readFloat() * scale;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale);\n }\n time = time2;\n mix = mix2;\n softness = softness2;\n }\n timelines.push(timeline);\n }\n // Transform constraint timelines.\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;\n var timeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index);\n var time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat(), mixScaleX = input.readFloat(), mixScaleY = input.readFloat(), mixShearY = input.readFloat();\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);\n if (frame == frameLast)\n break;\n var time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat(), mixScaleX2 = input.readFloat(), mixScaleY2 = input.readFloat(), mixShearY2 = input.readFloat();\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);\n setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);\n setBezier(input, timeline, bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);\n setBezier(input, timeline, bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);\n setBezier(input, timeline, bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1);\n }\n time = time2;\n mixRotate = mixRotate2;\n mixX = mixX2;\n mixY = mixY2;\n mixScaleX = mixScaleX2;\n mixScaleY = mixScaleY2;\n mixShearY = mixShearY2;\n }\n timelines.push(timeline);\n }\n // Path constraint timelines.\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var index = input.readInt(true);\n var data = skeletonData.pathConstraints[index];\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n switch (input.readByte()) {\n case PATH_POSITION:\n timelines\n .push(readTimeline1(input, new PathConstraintPositionTimeline(input.readInt(true), input.readInt(true), index), data.positionMode == PositionMode.Fixed ? scale : 1));\n break;\n case PATH_SPACING:\n timelines\n .push(readTimeline1(input, new PathConstraintSpacingTimeline(input.readInt(true), input.readInt(true), index), data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed ? scale : 1));\n break;\n case PATH_MIX:\n var timeline = new PathConstraintMixTimeline(input.readInt(true), input.readInt(true), index);\n var time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat();\n for (var frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {\n timeline.setFrame(frame, time, mixRotate, mixX, mixY);\n if (frame == frameLast)\n break;\n var time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat();\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);\n setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);\n }\n time = time2;\n mixRotate = mixRotate2;\n mixX = mixX2;\n mixY = mixY2;\n }\n timelines.push(timeline);\n }\n }\n }\n // Deform timelines.\n for (var i = 0, n = input.readInt(true); i < n; i++) {\n var skin = skeletonData.skins[input.readInt(true)];\n for (var ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n var slotIndex = input.readInt(true);\n for (var iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {\n var attachmentName = input.readStringRef();\n var attachment = skin.getAttachment(slotIndex, attachmentName);\n var weighted = attachment.bones;\n var vertices = attachment.vertices;\n var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n var frameCount = input.readInt(true);\n var frameLast = frameCount - 1;\n var bezierCount = input.readInt(true);\n var timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, attachment);\n var time = input.readFloat();\n for (var frame = 0, bezier = 0;; frame++) {\n var deform = void 0;\n var end = input.readInt(true);\n if (end == 0)\n deform = weighted ? Utils.newFloatArray(deformLength) : vertices;\n else {\n deform = Utils.newFloatArray(deformLength);\n var start = input.readInt(true);\n end += start;\n if (scale == 1) {\n for (var v = start; v < end; v++)\n deform[v] = input.readFloat();\n }\n else {\n for (var v = start; v < end; v++)\n deform[v] = input.readFloat() * scale;\n }\n if (!weighted) {\n for (var v = 0, vn = deform.length; v < vn; v++)\n deform[v] += vertices[v];\n }\n }\n timeline.setFrame(frame, time, deform);\n if (frame == frameLast)\n break;\n var time2 = input.readFloat();\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1);\n }\n time = time2;\n }\n timelines.push(timeline);\n }\n }\n }\n // Draw order timeline.\n var drawOrderCount = input.readInt(true);\n if (drawOrderCount > 0) {\n var timeline = new DrawOrderTimeline(drawOrderCount);\n var slotCount = skeletonData.slots.length;\n for (var i = 0; i < drawOrderCount; i++) {\n var time = input.readFloat();\n var offsetCount = input.readInt(true);\n var drawOrder = Utils.newArray(slotCount, 0);\n for (var ii = slotCount - 1; ii >= 0; ii--)\n drawOrder[ii] = -1;\n var unchanged = Utils.newArray(slotCount - offsetCount, 0);\n var originalIndex = 0, unchangedIndex = 0;\n for (var ii = 0; ii < offsetCount; ii++) {\n var slotIndex = input.readInt(true);\n // Collect unchanged items.\n while (originalIndex != slotIndex)\n unchanged[unchangedIndex++] = originalIndex++;\n // Set changed items.\n drawOrder[originalIndex + input.readInt(true)] = originalIndex++;\n }\n // Collect remaining unchanged items.\n while (originalIndex < slotCount)\n unchanged[unchangedIndex++] = originalIndex++;\n // Fill in unchanged items.\n for (var ii = slotCount - 1; ii >= 0; ii--)\n if (drawOrder[ii] == -1)\n drawOrder[ii] = unchanged[--unchangedIndex];\n timeline.setFrame(i, time, drawOrder);\n }\n timelines.push(timeline);\n }\n // Event timeline.\n var eventCount = input.readInt(true);\n if (eventCount > 0) {\n var timeline = new EventTimeline(eventCount);\n for (var i = 0; i < eventCount; i++) {\n var time = input.readFloat();\n var eventData = skeletonData.events[input.readInt(true)];\n var event_1 = new Event(time, eventData);\n event_1.intValue = input.readInt(false);\n event_1.floatValue = input.readFloat();\n event_1.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue;\n if (event_1.data.audioPath) {\n event_1.volume = input.readFloat();\n event_1.balance = input.readFloat();\n }\n timeline.setFrame(i, event_1);\n }\n timelines.push(timeline);\n }\n var duration = 0;\n for (var i = 0, n = timelines.length; i < n; i++)\n duration = Math.max(duration, timelines[i].getDuration());\n return new Animation(name, timelines, duration);\n };\n return SkeletonBinary;\n}());\nexport { SkeletonBinary };\nvar BinaryInput = /** @class */ (function () {\n function BinaryInput(data, strings, index, buffer) {\n if (strings === void 0) { strings = new Array(); }\n if (index === void 0) { index = 0; }\n if (buffer === void 0) { buffer = new DataView(data.buffer); }\n this.strings = strings;\n this.index = index;\n this.buffer = buffer;\n }\n BinaryInput.prototype.readByte = function () {\n return this.buffer.getInt8(this.index++);\n };\n BinaryInput.prototype.readUnsignedByte = function () {\n return this.buffer.getUint8(this.index++);\n };\n BinaryInput.prototype.readShort = function () {\n var value = this.buffer.getInt16(this.index);\n this.index += 2;\n return value;\n };\n BinaryInput.prototype.readInt32 = function () {\n var value = this.buffer.getInt32(this.index);\n this.index += 4;\n return value;\n };\n BinaryInput.prototype.readInt = function (optimizePositive) {\n var b = this.readByte();\n var result = b & 0x7F;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 7;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 14;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 21;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 28;\n }\n }\n }\n }\n return optimizePositive ? result : ((result >>> 1) ^ -(result & 1));\n };\n BinaryInput.prototype.readStringRef = function () {\n var index = this.readInt(true);\n return index == 0 ? null : this.strings[index - 1];\n };\n BinaryInput.prototype.readString = function () {\n var byteCount = this.readInt(true);\n switch (byteCount) {\n case 0:\n return null;\n case 1:\n return \"\";\n }\n byteCount--;\n var chars = \"\";\n var charCount = 0;\n for (var i = 0; i < byteCount;) {\n var b = this.readByte();\n switch (b >> 4) {\n case 12:\n case 13:\n chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F));\n i += 2;\n break;\n case 14:\n chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F));\n i += 3;\n break;\n default:\n chars += String.fromCharCode(b);\n i++;\n }\n }\n return chars;\n };\n BinaryInput.prototype.readFloat = function () {\n var value = this.buffer.getFloat32(this.index);\n this.index += 4;\n return value;\n };\n BinaryInput.prototype.readBoolean = function () {\n return this.readByte() != 0;\n };\n return BinaryInput;\n}());\nexport { BinaryInput };\nvar LinkedMesh = /** @class */ (function () {\n function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) {\n this.mesh = mesh;\n this.skin = skin;\n this.slotIndex = slotIndex;\n this.parent = parent;\n this.inheritDeform = inheritDeform;\n }\n return LinkedMesh;\n}());\nvar Vertices = /** @class */ (function () {\n function Vertices(bones, vertices) {\n if (bones === void 0) { bones = null; }\n if (vertices === void 0) { vertices = null; }\n this.bones = bones;\n this.vertices = vertices;\n }\n return Vertices;\n}());\nvar AttachmentType;\n(function (AttachmentType) {\n AttachmentType[AttachmentType[\"Region\"] = 0] = \"Region\";\n AttachmentType[AttachmentType[\"BoundingBox\"] = 1] = \"BoundingBox\";\n AttachmentType[AttachmentType[\"Mesh\"] = 2] = \"Mesh\";\n AttachmentType[AttachmentType[\"LinkedMesh\"] = 3] = \"LinkedMesh\";\n AttachmentType[AttachmentType[\"Path\"] = 4] = \"Path\";\n AttachmentType[AttachmentType[\"Point\"] = 5] = \"Point\";\n AttachmentType[AttachmentType[\"Clipping\"] = 6] = \"Clipping\";\n})(AttachmentType || (AttachmentType = {}));\nfunction readTimeline1(input, timeline, scale) {\n var time = input.readFloat(), value = input.readFloat() * scale;\n for (var frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {\n timeline.setFrame(frame, time, value);\n if (frame == frameLast)\n break;\n var time2 = input.readFloat(), value2 = input.readFloat() * scale;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, value, value2, scale);\n }\n time = time2;\n value = value2;\n }\n return timeline;\n}\nfunction readTimeline2(input, timeline, scale) {\n var time = input.readFloat(), value1 = input.readFloat() * scale, value2 = input.readFloat() * scale;\n for (var frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {\n timeline.setFrame(frame, time, value1, value2);\n if (frame == frameLast)\n break;\n var time2 = input.readFloat(), nvalue1 = input.readFloat() * scale, nvalue2 = input.readFloat() * scale;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, value1, nvalue1, scale);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, value2, nvalue2, scale);\n }\n time = time2;\n value1 = nvalue1;\n value2 = nvalue2;\n }\n return timeline;\n}\nfunction setBezier(input, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {\n timeline.setBezier(bezier, frame, value, time1, value1, input.readFloat(), input.readFloat() * scale, input.readFloat(), input.readFloat() * scale, time2, value2);\n}\nvar BONE_ROTATE = 0;\nvar BONE_TRANSLATE = 1;\nvar BONE_TRANSLATEX = 2;\nvar BONE_TRANSLATEY = 3;\nvar BONE_SCALE = 4;\nvar BONE_SCALEX = 5;\nvar BONE_SCALEY = 6;\nvar BONE_SHEAR = 7;\nvar BONE_SHEARX = 8;\nvar BONE_SHEARY = 9;\nvar SLOT_ATTACHMENT = 0;\nvar SLOT_RGBA = 1;\nvar SLOT_RGB = 2;\nvar SLOT_RGBA2 = 3;\nvar SLOT_RGB2 = 4;\nvar SLOT_ALPHA = 5;\nvar PATH_POSITION = 0;\nvar PATH_SPACING = 1;\nvar PATH_MIX = 2;\nvar CURVE_LINEAR = 0;\nvar CURVE_STEPPED = 1;\nvar CURVE_BEZIER = 2;\n//# sourceMappingURL=SkeletonBinary.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { BoundingBoxAttachment } from \"./attachments/BoundingBoxAttachment\";\nimport { Pool, Utils } from \"./Utils\";\n/** Collects each visible {@link BoundingBoxAttachment} and computes the world vertices for its polygon. The polygon vertices are\n * provided along with convenience methods for doing hit detection. */\nvar SkeletonBounds = /** @class */ (function () {\n function SkeletonBounds() {\n /** The left edge of the axis aligned bounding box. */\n this.minX = 0;\n /** The bottom edge of the axis aligned bounding box. */\n this.minY = 0;\n /** The right edge of the axis aligned bounding box. */\n this.maxX = 0;\n /** The top edge of the axis aligned bounding box. */\n this.maxY = 0;\n /** The visible bounding boxes. */\n this.boundingBoxes = new Array();\n /** The world vertices for the bounding box polygons. */\n this.polygons = new Array();\n this.polygonPool = new Pool(function () {\n return Utils.newFloatArray(16);\n });\n }\n /** Clears any previous polygons, finds all visible bounding box attachments, and computes the world vertices for each bounding\n * box's polygon.\n * @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the\n * SkeletonBounds AABB methods will always return true. */\n SkeletonBounds.prototype.update = function (skeleton, updateAabb) {\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n var boundingBoxes = this.boundingBoxes;\n var polygons = this.polygons;\n var polygonPool = this.polygonPool;\n var slots = skeleton.slots;\n var slotCount = slots.length;\n boundingBoxes.length = 0;\n polygonPool.freeAll(polygons);\n polygons.length = 0;\n for (var i = 0; i < slotCount; i++) {\n var slot = slots[i];\n if (!slot.bone.active)\n continue;\n var attachment = slot.getAttachment();\n if (attachment instanceof BoundingBoxAttachment) {\n var boundingBox = attachment;\n boundingBoxes.push(boundingBox);\n var polygon = polygonPool.obtain();\n if (polygon.length != boundingBox.worldVerticesLength) {\n polygon = Utils.newFloatArray(boundingBox.worldVerticesLength);\n }\n polygons.push(polygon);\n boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2);\n }\n }\n if (updateAabb) {\n this.aabbCompute();\n }\n else {\n this.minX = Number.POSITIVE_INFINITY;\n this.minY = Number.POSITIVE_INFINITY;\n this.maxX = Number.NEGATIVE_INFINITY;\n this.maxY = Number.NEGATIVE_INFINITY;\n }\n };\n SkeletonBounds.prototype.aabbCompute = function () {\n var minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n var polygons = this.polygons;\n for (var i = 0, n = polygons.length; i < n; i++) {\n var polygon = polygons[i];\n var vertices = polygon;\n for (var ii = 0, nn = polygon.length; ii < nn; ii += 2) {\n var x = vertices[ii];\n var y = vertices[ii + 1];\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n };\n /** Returns true if the axis aligned bounding box contains the point. */\n SkeletonBounds.prototype.aabbContainsPoint = function (x, y) {\n return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;\n };\n /** Returns true if the axis aligned bounding box intersects the line segment. */\n SkeletonBounds.prototype.aabbIntersectsSegment = function (x1, y1, x2, y2) {\n var minX = this.minX;\n var minY = this.minY;\n var maxX = this.maxX;\n var maxY = this.maxY;\n if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY))\n return false;\n var m = (y2 - y1) / (x2 - x1);\n var y = m * (minX - x1) + y1;\n if (y > minY && y < maxY)\n return true;\n y = m * (maxX - x1) + y1;\n if (y > minY && y < maxY)\n return true;\n var x = (minY - y1) / m + x1;\n if (x > minX && x < maxX)\n return true;\n x = (maxY - y1) / m + x1;\n if (x > minX && x < maxX)\n return true;\n return false;\n };\n /** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */\n SkeletonBounds.prototype.aabbIntersectsSkeleton = function (bounds) {\n return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;\n };\n /** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more\n * efficient to only call this method if {@link #aabbContainsPoint(float, float)} returns true. */\n SkeletonBounds.prototype.containsPoint = function (x, y) {\n var polygons = this.polygons;\n for (var i = 0, n = polygons.length; i < n; i++)\n if (this.containsPointPolygon(polygons[i], x, y))\n return this.boundingBoxes[i];\n return null;\n };\n /** Returns true if the polygon contains the point. */\n SkeletonBounds.prototype.containsPointPolygon = function (polygon, x, y) {\n var vertices = polygon;\n var nn = polygon.length;\n var prevIndex = nn - 2;\n var inside = false;\n for (var ii = 0; ii < nn; ii += 2) {\n var vertexY = vertices[ii + 1];\n var prevY = vertices[prevIndex + 1];\n if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) {\n var vertexX = vertices[ii];\n if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x)\n inside = !inside;\n }\n prevIndex = ii;\n }\n return inside;\n };\n /** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it\n * is usually more efficient to only call this method if {@link #aabbIntersectsSegment()} returns\n * true. */\n SkeletonBounds.prototype.intersectsSegment = function (x1, y1, x2, y2) {\n var polygons = this.polygons;\n for (var i = 0, n = polygons.length; i < n; i++)\n if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2))\n return this.boundingBoxes[i];\n return null;\n };\n /** Returns true if the polygon contains any part of the line segment. */\n SkeletonBounds.prototype.intersectsSegmentPolygon = function (polygon, x1, y1, x2, y2) {\n var vertices = polygon;\n var nn = polygon.length;\n var width12 = x1 - x2, height12 = y1 - y2;\n var det1 = x1 * y2 - y1 * x2;\n var x3 = vertices[nn - 2], y3 = vertices[nn - 1];\n for (var ii = 0; ii < nn; ii += 2) {\n var x4 = vertices[ii], y4 = vertices[ii + 1];\n var det2 = x3 * y4 - y3 * x4;\n var width34 = x3 - x4, height34 = y3 - y4;\n var det3 = width12 * height34 - height12 * width34;\n var x = (det1 * width34 - width12 * det2) / det3;\n if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) {\n var y = (det1 * height34 - height12 * det2) / det3;\n if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1)))\n return true;\n }\n x3 = x4;\n y3 = y4;\n }\n return false;\n };\n /** Returns the polygon for the specified bounding box, or null. */\n SkeletonBounds.prototype.getPolygon = function (boundingBox) {\n if (!boundingBox)\n throw new Error(\"boundingBox cannot be null.\");\n var index = this.boundingBoxes.indexOf(boundingBox);\n return index == -1 ? null : this.polygons[index];\n };\n /** The width of the axis aligned bounding box. */\n SkeletonBounds.prototype.getWidth = function () {\n return this.maxX - this.minX;\n };\n /** The height of the axis aligned bounding box. */\n SkeletonBounds.prototype.getHeight = function () {\n return this.maxY - this.minY;\n };\n return SkeletonBounds;\n}());\nexport { SkeletonBounds };\n//# sourceMappingURL=SkeletonBounds.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Pool } from \"./Utils\";\nvar Triangulator = /** @class */ (function () {\n function Triangulator() {\n this.convexPolygons = new Array();\n this.convexPolygonsIndices = new Array();\n this.indicesArray = new Array();\n this.isConcaveArray = new Array();\n this.triangles = new Array();\n this.polygonPool = new Pool(function () {\n return new Array();\n });\n this.polygonIndicesPool = new Pool(function () {\n return new Array();\n });\n }\n Triangulator.prototype.triangulate = function (verticesArray) {\n var vertices = verticesArray;\n var vertexCount = verticesArray.length >> 1;\n var indices = this.indicesArray;\n indices.length = 0;\n for (var i = 0; i < vertexCount; i++)\n indices[i] = i;\n var isConcave = this.isConcaveArray;\n isConcave.length = 0;\n for (var i = 0, n = vertexCount; i < n; ++i)\n isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices);\n var triangles = this.triangles;\n triangles.length = 0;\n while (vertexCount > 3) {\n // Find ear tip.\n var previous = vertexCount - 1, i = 0, next = 1;\n while (true) {\n outer: if (!isConcave[i]) {\n var p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1;\n var p1x = vertices[p1], p1y = vertices[p1 + 1];\n var p2x = vertices[p2], p2y = vertices[p2 + 1];\n var p3x = vertices[p3], p3y = vertices[p3 + 1];\n for (var ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) {\n if (!isConcave[ii])\n continue;\n var v = indices[ii] << 1;\n var vx = vertices[v], vy = vertices[v + 1];\n if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) {\n if (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) {\n if (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy))\n break outer;\n }\n }\n }\n break;\n }\n if (next == 0) {\n do {\n if (!isConcave[i])\n break;\n i--;\n } while (i > 0);\n break;\n }\n previous = i;\n i = next;\n next = (next + 1) % vertexCount;\n }\n // Cut ear tip.\n triangles.push(indices[(vertexCount + i - 1) % vertexCount]);\n triangles.push(indices[i]);\n triangles.push(indices[(i + 1) % vertexCount]);\n indices.splice(i, 1);\n isConcave.splice(i, 1);\n vertexCount--;\n var previousIndex = (vertexCount + i - 1) % vertexCount;\n var nextIndex = i == vertexCount ? 0 : i;\n isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices);\n isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices);\n }\n if (vertexCount == 3) {\n triangles.push(indices[2]);\n triangles.push(indices[0]);\n triangles.push(indices[1]);\n }\n return triangles;\n };\n Triangulator.prototype.decompose = function (verticesArray, triangles) {\n var vertices = verticesArray;\n var convexPolygons = this.convexPolygons;\n this.polygonPool.freeAll(convexPolygons);\n convexPolygons.length = 0;\n var convexPolygonsIndices = this.convexPolygonsIndices;\n this.polygonIndicesPool.freeAll(convexPolygonsIndices);\n convexPolygonsIndices.length = 0;\n var polygonIndices = this.polygonIndicesPool.obtain();\n polygonIndices.length = 0;\n var polygon = this.polygonPool.obtain();\n polygon.length = 0;\n // Merge subsequent triangles if they form a triangle fan.\n var fanBaseIndex = -1, lastWinding = 0;\n for (var i = 0, n = triangles.length; i < n; i += 3) {\n var t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1;\n var x1 = vertices[t1], y1 = vertices[t1 + 1];\n var x2 = vertices[t2], y2 = vertices[t2 + 1];\n var x3 = vertices[t3], y3 = vertices[t3 + 1];\n // If the base of the last triangle is the same as this triangle, check if they form a convex polygon (triangle fan).\n var merged = false;\n if (fanBaseIndex == t1) {\n var o = polygon.length - 4;\n var winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3);\n var winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]);\n if (winding1 == lastWinding && winding2 == lastWinding) {\n polygon.push(x3);\n polygon.push(y3);\n polygonIndices.push(t3);\n merged = true;\n }\n }\n // Otherwise make this triangle the new base.\n if (!merged) {\n if (polygon.length > 0) {\n convexPolygons.push(polygon);\n convexPolygonsIndices.push(polygonIndices);\n }\n else {\n this.polygonPool.free(polygon);\n this.polygonIndicesPool.free(polygonIndices);\n }\n polygon = this.polygonPool.obtain();\n polygon.length = 0;\n polygon.push(x1);\n polygon.push(y1);\n polygon.push(x2);\n polygon.push(y2);\n polygon.push(x3);\n polygon.push(y3);\n polygonIndices = this.polygonIndicesPool.obtain();\n polygonIndices.length = 0;\n polygonIndices.push(t1);\n polygonIndices.push(t2);\n polygonIndices.push(t3);\n lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3);\n fanBaseIndex = t1;\n }\n }\n if (polygon.length > 0) {\n convexPolygons.push(polygon);\n convexPolygonsIndices.push(polygonIndices);\n }\n // Go through the list of polygons and try to merge the remaining triangles with the found triangle fans.\n for (var i = 0, n = convexPolygons.length; i < n; i++) {\n polygonIndices = convexPolygonsIndices[i];\n if (polygonIndices.length == 0)\n continue;\n var firstIndex = polygonIndices[0];\n var lastIndex = polygonIndices[polygonIndices.length - 1];\n polygon = convexPolygons[i];\n var o = polygon.length - 4;\n var prevPrevX = polygon[o], prevPrevY = polygon[o + 1];\n var prevX = polygon[o + 2], prevY = polygon[o + 3];\n var firstX = polygon[0], firstY = polygon[1];\n var secondX = polygon[2], secondY = polygon[3];\n var winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY);\n for (var ii = 0; ii < n; ii++) {\n if (ii == i)\n continue;\n var otherIndices = convexPolygonsIndices[ii];\n if (otherIndices.length != 3)\n continue;\n var otherFirstIndex = otherIndices[0];\n var otherSecondIndex = otherIndices[1];\n var otherLastIndex = otherIndices[2];\n var otherPoly = convexPolygons[ii];\n var x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1];\n if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex)\n continue;\n var winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3);\n var winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY);\n if (winding1 == winding && winding2 == winding) {\n otherPoly.length = 0;\n otherIndices.length = 0;\n polygon.push(x3);\n polygon.push(y3);\n polygonIndices.push(otherLastIndex);\n prevPrevX = prevX;\n prevPrevY = prevY;\n prevX = x3;\n prevY = y3;\n ii = 0;\n }\n }\n }\n // Remove empty polygons that resulted from the merge step above.\n for (var i = convexPolygons.length - 1; i >= 0; i--) {\n polygon = convexPolygons[i];\n if (polygon.length == 0) {\n convexPolygons.splice(i, 1);\n this.polygonPool.free(polygon);\n polygonIndices = convexPolygonsIndices[i];\n convexPolygonsIndices.splice(i, 1);\n this.polygonIndicesPool.free(polygonIndices);\n }\n }\n return convexPolygons;\n };\n Triangulator.isConcave = function (index, vertexCount, vertices, indices) {\n var previous = indices[(vertexCount + index - 1) % vertexCount] << 1;\n var current = indices[index] << 1;\n var next = indices[(index + 1) % vertexCount] << 1;\n return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]);\n };\n Triangulator.positiveArea = function (p1x, p1y, p2x, p2y, p3x, p3y) {\n return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0;\n };\n Triangulator.winding = function (p1x, p1y, p2x, p2y, p3x, p3y) {\n var px = p2x - p1x, py = p2y - p1y;\n return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1;\n };\n return Triangulator;\n}());\nexport { Triangulator };\n//# sourceMappingURL=Triangulator.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Triangulator } from \"./Triangulator\";\nimport { Utils } from \"./Utils\";\nvar SkeletonClipping = /** @class */ (function () {\n function SkeletonClipping() {\n this.triangulator = new Triangulator();\n this.clippingPolygon = new Array();\n this.clipOutput = new Array();\n this.clippedVertices = new Array();\n this.clippedTriangles = new Array();\n this.scratch = new Array();\n }\n SkeletonClipping.prototype.clipStart = function (slot, clip) {\n if (this.clipAttachment)\n return 0;\n this.clipAttachment = clip;\n var n = clip.worldVerticesLength;\n var vertices = Utils.setArraySize(this.clippingPolygon, n);\n clip.computeWorldVertices(slot, 0, n, vertices, 0, 2);\n var clippingPolygon = this.clippingPolygon;\n SkeletonClipping.makeClockwise(clippingPolygon);\n var clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon));\n for (var i = 0, n_1 = clippingPolygons.length; i < n_1; i++) {\n var polygon = clippingPolygons[i];\n SkeletonClipping.makeClockwise(polygon);\n polygon.push(polygon[0]);\n polygon.push(polygon[1]);\n }\n return clippingPolygons.length;\n };\n SkeletonClipping.prototype.clipEndWithSlot = function (slot) {\n if (this.clipAttachment && this.clipAttachment.endSlot == slot.data)\n this.clipEnd();\n };\n SkeletonClipping.prototype.clipEnd = function () {\n if (!this.clipAttachment)\n return;\n this.clipAttachment = null;\n this.clippingPolygons = null;\n this.clippedVertices.length = 0;\n this.clippedTriangles.length = 0;\n this.clippingPolygon.length = 0;\n };\n SkeletonClipping.prototype.isClipping = function () {\n return this.clipAttachment != null;\n };\n SkeletonClipping.prototype.clipTriangles = function (vertices, verticesLength, triangles, trianglesLength, uvs, light, dark, twoColor) {\n var clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;\n var clippedTriangles = this.clippedTriangles;\n var polygons = this.clippingPolygons;\n var polygonsCount = this.clippingPolygons.length;\n var vertexSize = twoColor ? 12 : 8;\n var index = 0;\n clippedVertices.length = 0;\n clippedTriangles.length = 0;\n outer: for (var i = 0; i < trianglesLength; i += 3) {\n var vertexOffset = triangles[i] << 1;\n var x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];\n var u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1];\n vertexOffset = triangles[i + 1] << 1;\n var x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];\n var u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1];\n vertexOffset = triangles[i + 2] << 1;\n var x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];\n var u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1];\n for (var p = 0; p < polygonsCount; p++) {\n var s = clippedVertices.length;\n if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {\n var clipOutputLength = clipOutput.length;\n if (clipOutputLength == 0)\n continue;\n var d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;\n var d = 1 / (d0 * d2 + d1 * (y1 - y3));\n var clipOutputCount = clipOutputLength >> 1;\n var clipOutputItems = this.clipOutput;\n var clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);\n for (var ii = 0; ii < clipOutputLength; ii += 2) {\n var x = clipOutputItems[ii], y = clipOutputItems[ii + 1];\n clippedVerticesItems[s] = x;\n clippedVerticesItems[s + 1] = y;\n clippedVerticesItems[s + 2] = light.r;\n clippedVerticesItems[s + 3] = light.g;\n clippedVerticesItems[s + 4] = light.b;\n clippedVerticesItems[s + 5] = light.a;\n var c0 = x - x3, c1 = y - y3;\n var a = (d0 * c0 + d1 * c1) * d;\n var b = (d4 * c0 + d2 * c1) * d;\n var c = 1 - a - b;\n clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c;\n clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c;\n if (twoColor) {\n clippedVerticesItems[s + 8] = dark.r;\n clippedVerticesItems[s + 9] = dark.g;\n clippedVerticesItems[s + 10] = dark.b;\n clippedVerticesItems[s + 11] = dark.a;\n }\n s += vertexSize;\n }\n s = clippedTriangles.length;\n var clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));\n clipOutputCount--;\n for (var ii = 1; ii < clipOutputCount; ii++) {\n clippedTrianglesItems[s] = index;\n clippedTrianglesItems[s + 1] = (index + ii);\n clippedTrianglesItems[s + 2] = (index + ii + 1);\n s += 3;\n }\n index += clipOutputCount + 1;\n }\n else {\n var clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize);\n clippedVerticesItems[s] = x1;\n clippedVerticesItems[s + 1] = y1;\n clippedVerticesItems[s + 2] = light.r;\n clippedVerticesItems[s + 3] = light.g;\n clippedVerticesItems[s + 4] = light.b;\n clippedVerticesItems[s + 5] = light.a;\n if (!twoColor) {\n clippedVerticesItems[s + 6] = u1;\n clippedVerticesItems[s + 7] = v1;\n clippedVerticesItems[s + 8] = x2;\n clippedVerticesItems[s + 9] = y2;\n clippedVerticesItems[s + 10] = light.r;\n clippedVerticesItems[s + 11] = light.g;\n clippedVerticesItems[s + 12] = light.b;\n clippedVerticesItems[s + 13] = light.a;\n clippedVerticesItems[s + 14] = u2;\n clippedVerticesItems[s + 15] = v2;\n clippedVerticesItems[s + 16] = x3;\n clippedVerticesItems[s + 17] = y3;\n clippedVerticesItems[s + 18] = light.r;\n clippedVerticesItems[s + 19] = light.g;\n clippedVerticesItems[s + 20] = light.b;\n clippedVerticesItems[s + 21] = light.a;\n clippedVerticesItems[s + 22] = u3;\n clippedVerticesItems[s + 23] = v3;\n }\n else {\n clippedVerticesItems[s + 6] = u1;\n clippedVerticesItems[s + 7] = v1;\n clippedVerticesItems[s + 8] = dark.r;\n clippedVerticesItems[s + 9] = dark.g;\n clippedVerticesItems[s + 10] = dark.b;\n clippedVerticesItems[s + 11] = dark.a;\n clippedVerticesItems[s + 12] = x2;\n clippedVerticesItems[s + 13] = y2;\n clippedVerticesItems[s + 14] = light.r;\n clippedVerticesItems[s + 15] = light.g;\n clippedVerticesItems[s + 16] = light.b;\n clippedVerticesItems[s + 17] = light.a;\n clippedVerticesItems[s + 18] = u2;\n clippedVerticesItems[s + 19] = v2;\n clippedVerticesItems[s + 20] = dark.r;\n clippedVerticesItems[s + 21] = dark.g;\n clippedVerticesItems[s + 22] = dark.b;\n clippedVerticesItems[s + 23] = dark.a;\n clippedVerticesItems[s + 24] = x3;\n clippedVerticesItems[s + 25] = y3;\n clippedVerticesItems[s + 26] = light.r;\n clippedVerticesItems[s + 27] = light.g;\n clippedVerticesItems[s + 28] = light.b;\n clippedVerticesItems[s + 29] = light.a;\n clippedVerticesItems[s + 30] = u3;\n clippedVerticesItems[s + 31] = v3;\n clippedVerticesItems[s + 32] = dark.r;\n clippedVerticesItems[s + 33] = dark.g;\n clippedVerticesItems[s + 34] = dark.b;\n clippedVerticesItems[s + 35] = dark.a;\n }\n s = clippedTriangles.length;\n var clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3);\n clippedTrianglesItems[s] = index;\n clippedTrianglesItems[s + 1] = (index + 1);\n clippedTrianglesItems[s + 2] = (index + 2);\n index += 3;\n continue outer;\n }\n }\n }\n };\n /** Clips the input triangle against the convex, clockwise clipping area. If the triangle lies entirely within the clipping\n * area, false is returned. The clipping area must duplicate the first vertex at the end of the vertices list. */\n SkeletonClipping.prototype.clip = function (x1, y1, x2, y2, x3, y3, clippingArea, output) {\n var originalOutput = output;\n var clipped = false;\n // Avoid copy at the end.\n var input = null;\n if (clippingArea.length % 4 >= 2) {\n input = output;\n output = this.scratch;\n }\n else\n input = this.scratch;\n input.length = 0;\n input.push(x1);\n input.push(y1);\n input.push(x2);\n input.push(y2);\n input.push(x3);\n input.push(y3);\n input.push(x1);\n input.push(y1);\n output.length = 0;\n var clippingVertices = clippingArea;\n var clippingVerticesLast = clippingArea.length - 4;\n for (var i = 0;; i += 2) {\n var edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];\n var edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3];\n var deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2;\n var inputVertices = input;\n var inputVerticesLength = input.length - 2, outputStart = output.length;\n for (var ii = 0; ii < inputVerticesLength; ii += 2) {\n var inputX = inputVertices[ii], inputY = inputVertices[ii + 1];\n var inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3];\n var side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0;\n if (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) {\n if (side2) { // v1 inside, v2 inside\n output.push(inputX2);\n output.push(inputY2);\n continue;\n }\n // v1 inside, v2 outside\n var c0 = inputY2 - inputY, c2 = inputX2 - inputX;\n var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);\n if (Math.abs(s) > 0.000001) {\n var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;\n output.push(edgeX + (edgeX2 - edgeX) * ua);\n output.push(edgeY + (edgeY2 - edgeY) * ua);\n }\n else {\n output.push(edgeX);\n output.push(edgeY);\n }\n }\n else if (side2) { // v1 outside, v2 inside\n var c0 = inputY2 - inputY, c2 = inputX2 - inputX;\n var s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);\n if (Math.abs(s) > 0.000001) {\n var ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;\n output.push(edgeX + (edgeX2 - edgeX) * ua);\n output.push(edgeY + (edgeY2 - edgeY) * ua);\n }\n else {\n output.push(edgeX);\n output.push(edgeY);\n }\n output.push(inputX2);\n output.push(inputY2);\n }\n clipped = true;\n }\n if (outputStart == output.length) { // All edges outside.\n originalOutput.length = 0;\n return true;\n }\n output.push(output[0]);\n output.push(output[1]);\n if (i == clippingVerticesLast)\n break;\n var temp = output;\n output = input;\n output.length = 0;\n input = temp;\n }\n if (originalOutput != output) {\n originalOutput.length = 0;\n for (var i = 0, n = output.length - 2; i < n; i++)\n originalOutput[i] = output[i];\n }\n else\n originalOutput.length = originalOutput.length - 2;\n return clipped;\n };\n SkeletonClipping.makeClockwise = function (polygon) {\n var vertices = polygon;\n var verticeslength = polygon.length;\n var area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0;\n for (var i = 0, n = verticeslength - 3; i < n; i += 2) {\n p1x = vertices[i];\n p1y = vertices[i + 1];\n p2x = vertices[i + 2];\n p2y = vertices[i + 3];\n area += p1x * p2y - p2x * p1y;\n }\n if (area < 0)\n return;\n for (var i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) {\n var x = vertices[i], y = vertices[i + 1];\n var other = lastX - i;\n vertices[i] = vertices[other];\n vertices[i + 1] = vertices[other + 1];\n vertices[other] = x;\n vertices[other + 1] = y;\n }\n };\n return SkeletonClipping;\n}());\nexport { SkeletonClipping };\n//# sourceMappingURL=SkeletonClipping.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Animation, AttachmentTimeline, RGBATimeline, RGBTimeline, AlphaTimeline, RGBA2Timeline, RGB2Timeline, RotateTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PathConstraintMixTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline } from \"./Animation\";\nimport { BoneData, TransformMode } from \"./BoneData\";\nimport { EventData } from \"./EventData\";\nimport { Event } from \"./Event\";\nimport { IkConstraintData } from \"./IkConstraintData\";\nimport { PathConstraintData, PositionMode, SpacingMode, RotateMode } from \"./PathConstraintData\";\nimport { SkeletonData } from \"./SkeletonData\";\nimport { Skin } from \"./Skin\";\nimport { SlotData, BlendMode } from \"./SlotData\";\nimport { TransformConstraintData } from \"./TransformConstraintData\";\nimport { Utils, Color } from \"./Utils\";\n/** Loads skeleton data in the Spine JSON format.\n *\n * See [Spine JSON format](http://esotericsoftware.com/spine-json-format) and\n * [JSON and binary data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the Spine\n * Runtimes Guide. */\nvar SkeletonJson = /** @class */ (function () {\n function SkeletonJson(attachmentLoader) {\n /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at\n * runtime than were used in Spine.\n *\n * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */\n this.scale = 1;\n this.linkedMeshes = new Array();\n this.attachmentLoader = attachmentLoader;\n }\n SkeletonJson.prototype.readSkeletonData = function (json) {\n var scale = this.scale;\n var skeletonData = new SkeletonData();\n var root = typeof (json) === \"string\" ? JSON.parse(json) : json;\n // Skeleton\n var skeletonMap = root.skeleton;\n if (skeletonMap) {\n skeletonData.hash = skeletonMap.hash;\n skeletonData.version = skeletonMap.spine;\n skeletonData.x = skeletonMap.x;\n skeletonData.y = skeletonMap.y;\n skeletonData.width = skeletonMap.width;\n skeletonData.height = skeletonMap.height;\n skeletonData.fps = skeletonMap.fps;\n skeletonData.imagesPath = skeletonMap.images;\n }\n // Bones\n if (root.bones) {\n for (var i = 0; i < root.bones.length; i++) {\n var boneMap = root.bones[i];\n var parent_1 = null;\n var parentName = getValue(boneMap, \"parent\", null);\n if (parentName)\n parent_1 = skeletonData.findBone(parentName);\n var data = new BoneData(skeletonData.bones.length, boneMap.name, parent_1);\n data.length = getValue(boneMap, \"length\", 0) * scale;\n data.x = getValue(boneMap, \"x\", 0) * scale;\n data.y = getValue(boneMap, \"y\", 0) * scale;\n data.rotation = getValue(boneMap, \"rotation\", 0);\n data.scaleX = getValue(boneMap, \"scaleX\", 1);\n data.scaleY = getValue(boneMap, \"scaleY\", 1);\n data.shearX = getValue(boneMap, \"shearX\", 0);\n data.shearY = getValue(boneMap, \"shearY\", 0);\n data.transformMode = Utils.enumValue(TransformMode, getValue(boneMap, \"transform\", \"Normal\"));\n data.skinRequired = getValue(boneMap, \"skin\", false);\n var color = getValue(boneMap, \"color\", null);\n if (color)\n data.color.setFromString(color);\n skeletonData.bones.push(data);\n }\n }\n // Slots.\n if (root.slots) {\n for (var i = 0; i < root.slots.length; i++) {\n var slotMap = root.slots[i];\n var boneData = skeletonData.findBone(slotMap.bone);\n var data = new SlotData(skeletonData.slots.length, slotMap.name, boneData);\n var color = getValue(slotMap, \"color\", null);\n if (color)\n data.color.setFromString(color);\n var dark = getValue(slotMap, \"dark\", null);\n if (dark)\n data.darkColor = Color.fromString(dark);\n data.attachmentName = getValue(slotMap, \"attachment\", null);\n data.blendMode = Utils.enumValue(BlendMode, getValue(slotMap, \"blend\", \"normal\"));\n skeletonData.slots.push(data);\n }\n }\n // IK constraints\n if (root.ik) {\n for (var i = 0; i < root.ik.length; i++) {\n var constraintMap = root.ik[i];\n var data = new IkConstraintData(constraintMap.name);\n data.order = getValue(constraintMap, \"order\", 0);\n data.skinRequired = getValue(constraintMap, \"skin\", false);\n for (var ii = 0; ii < constraintMap.bones.length; ii++)\n data.bones.push(skeletonData.findBone(constraintMap.bones[ii]));\n data.target = skeletonData.findBone(constraintMap.target);\n data.mix = getValue(constraintMap, \"mix\", 1);\n data.softness = getValue(constraintMap, \"softness\", 0) * scale;\n data.bendDirection = getValue(constraintMap, \"bendPositive\", true) ? 1 : -1;\n data.compress = getValue(constraintMap, \"compress\", false);\n data.stretch = getValue(constraintMap, \"stretch\", false);\n data.uniform = getValue(constraintMap, \"uniform\", false);\n skeletonData.ikConstraints.push(data);\n }\n }\n // Transform constraints.\n if (root.transform) {\n for (var i = 0; i < root.transform.length; i++) {\n var constraintMap = root.transform[i];\n var data = new TransformConstraintData(constraintMap.name);\n data.order = getValue(constraintMap, \"order\", 0);\n data.skinRequired = getValue(constraintMap, \"skin\", false);\n for (var ii = 0; ii < constraintMap.bones.length; ii++)\n data.bones.push(skeletonData.findBone(constraintMap.bones[ii]));\n var targetName = constraintMap.target;\n data.target = skeletonData.findBone(targetName);\n data.local = getValue(constraintMap, \"local\", false);\n data.relative = getValue(constraintMap, \"relative\", false);\n data.offsetRotation = getValue(constraintMap, \"rotation\", 0);\n data.offsetX = getValue(constraintMap, \"x\", 0) * scale;\n data.offsetY = getValue(constraintMap, \"y\", 0) * scale;\n data.offsetScaleX = getValue(constraintMap, \"scaleX\", 0);\n data.offsetScaleY = getValue(constraintMap, \"scaleY\", 0);\n data.offsetShearY = getValue(constraintMap, \"shearY\", 0);\n data.mixRotate = getValue(constraintMap, \"mixRotate\", 1);\n data.mixX = getValue(constraintMap, \"mixX\", 1);\n data.mixY = getValue(constraintMap, \"mixY\", data.mixX);\n data.mixScaleX = getValue(constraintMap, \"mixScaleX\", 1);\n data.mixScaleY = getValue(constraintMap, \"mixScaleY\", data.mixScaleX);\n data.mixShearY = getValue(constraintMap, \"mixShearY\", 1);\n skeletonData.transformConstraints.push(data);\n }\n }\n // Path constraints.\n if (root.path) {\n for (var i = 0; i < root.path.length; i++) {\n var constraintMap = root.path[i];\n var data = new PathConstraintData(constraintMap.name);\n data.order = getValue(constraintMap, \"order\", 0);\n data.skinRequired = getValue(constraintMap, \"skin\", false);\n for (var ii = 0; ii < constraintMap.bones.length; ii++)\n data.bones.push(skeletonData.findBone(constraintMap.bones[ii]));\n var targetName = constraintMap.target;\n data.target = skeletonData.findSlot(targetName);\n data.positionMode = Utils.enumValue(PositionMode, getValue(constraintMap, \"positionMode\", \"Percent\"));\n data.spacingMode = Utils.enumValue(SpacingMode, getValue(constraintMap, \"spacingMode\", \"Length\"));\n data.rotateMode = Utils.enumValue(RotateMode, getValue(constraintMap, \"rotateMode\", \"Tangent\"));\n data.offsetRotation = getValue(constraintMap, \"rotation\", 0);\n data.position = getValue(constraintMap, \"position\", 0);\n if (data.positionMode == PositionMode.Fixed)\n data.position *= scale;\n data.spacing = getValue(constraintMap, \"spacing\", 0);\n if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)\n data.spacing *= scale;\n data.mixRotate = getValue(constraintMap, \"mixRotate\", 1);\n data.mixX = getValue(constraintMap, \"mixX\", 1);\n data.mixY = getValue(constraintMap, \"mixY\", data.mixX);\n skeletonData.pathConstraints.push(data);\n }\n }\n // Skins.\n if (root.skins) {\n for (var i = 0; i < root.skins.length; i++) {\n var skinMap = root.skins[i];\n var skin = new Skin(skinMap.name);\n if (skinMap.bones) {\n for (var ii = 0; ii < skinMap.bones.length; ii++)\n skin.bones.push(skeletonData.findBone(skinMap.bones[ii]));\n }\n if (skinMap.ik) {\n for (var ii = 0; ii < skinMap.ik.length; ii++)\n skin.constraints.push(skeletonData.findIkConstraint(skinMap.ik[ii]));\n }\n if (skinMap.transform) {\n for (var ii = 0; ii < skinMap.transform.length; ii++)\n skin.constraints.push(skeletonData.findTransformConstraint(skinMap.transform[ii]));\n }\n if (skinMap.path) {\n for (var ii = 0; ii < skinMap.path.length; ii++)\n skin.constraints.push(skeletonData.findPathConstraint(skinMap.path[ii]));\n }\n for (var slotName in skinMap.attachments) {\n var slot = skeletonData.findSlot(slotName);\n var slotMap = skinMap.attachments[slotName];\n for (var entryName in slotMap) {\n var attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData);\n if (attachment)\n skin.setAttachment(slot.index, entryName, attachment);\n }\n }\n skeletonData.skins.push(skin);\n if (skin.name == \"default\")\n skeletonData.defaultSkin = skin;\n }\n }\n // Linked meshes.\n for (var i = 0, n = this.linkedMeshes.length; i < n; i++) {\n var linkedMesh = this.linkedMeshes[i];\n var skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n var parent_2 = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent_2 : linkedMesh.mesh;\n linkedMesh.mesh.setParentMesh(parent_2);\n linkedMesh.mesh.updateUVs();\n }\n this.linkedMeshes.length = 0;\n // Events.\n if (root.events) {\n for (var eventName in root.events) {\n var eventMap = root.events[eventName];\n var data = new EventData(eventName);\n data.intValue = getValue(eventMap, \"int\", 0);\n data.floatValue = getValue(eventMap, \"float\", 0);\n data.stringValue = getValue(eventMap, \"string\", \"\");\n data.audioPath = getValue(eventMap, \"audio\", null);\n if (data.audioPath) {\n data.volume = getValue(eventMap, \"volume\", 1);\n data.balance = getValue(eventMap, \"balance\", 0);\n }\n skeletonData.events.push(data);\n }\n }\n // Animations.\n if (root.animations) {\n for (var animationName in root.animations) {\n var animationMap = root.animations[animationName];\n this.readAnimation(animationMap, animationName, skeletonData);\n }\n }\n return skeletonData;\n };\n SkeletonJson.prototype.readAttachment = function (map, skin, slotIndex, name, skeletonData) {\n var scale = this.scale;\n name = getValue(map, \"name\", name);\n switch (getValue(map, \"type\", \"region\")) {\n case \"region\": {\n var path = getValue(map, \"path\", name);\n var region = this.attachmentLoader.newRegionAttachment(skin, name, path);\n if (!region)\n return null;\n region.path = path;\n region.x = getValue(map, \"x\", 0) * scale;\n region.y = getValue(map, \"y\", 0) * scale;\n region.scaleX = getValue(map, \"scaleX\", 1);\n region.scaleY = getValue(map, \"scaleY\", 1);\n region.rotation = getValue(map, \"rotation\", 0);\n region.width = map.width * scale;\n region.height = map.height * scale;\n var color = getValue(map, \"color\", null);\n if (color)\n region.color.setFromString(color);\n region.updateOffset();\n return region;\n }\n case \"boundingbox\": {\n var box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n if (!box)\n return null;\n this.readVertices(map, box, map.vertexCount << 1);\n var color = getValue(map, \"color\", null);\n if (color)\n box.color.setFromString(color);\n return box;\n }\n case \"mesh\":\n case \"linkedmesh\": {\n var path = getValue(map, \"path\", name);\n var mesh = this.attachmentLoader.newMeshAttachment(skin, name, path);\n if (!mesh)\n return null;\n mesh.path = path;\n var color = getValue(map, \"color\", null);\n if (color)\n mesh.color.setFromString(color);\n mesh.width = getValue(map, \"width\", 0) * scale;\n mesh.height = getValue(map, \"height\", 0) * scale;\n var parent_3 = getValue(map, \"parent\", null);\n if (parent_3) {\n this.linkedMeshes.push(new LinkedMesh(mesh, getValue(map, \"skin\", null), slotIndex, parent_3, getValue(map, \"deform\", true)));\n return mesh;\n }\n var uvs = map.uvs;\n this.readVertices(map, mesh, uvs.length);\n mesh.triangles = map.triangles;\n mesh.regionUVs = uvs;\n mesh.updateUVs();\n mesh.edges = getValue(map, \"edges\", null);\n mesh.hullLength = getValue(map, \"hull\", 0) * 2;\n return mesh;\n }\n case \"path\": {\n var path = this.attachmentLoader.newPathAttachment(skin, name);\n if (!path)\n return null;\n path.closed = getValue(map, \"closed\", false);\n path.constantSpeed = getValue(map, \"constantSpeed\", true);\n var vertexCount = map.vertexCount;\n this.readVertices(map, path, vertexCount << 1);\n var lengths = Utils.newArray(vertexCount / 3, 0);\n for (var i = 0; i < map.lengths.length; i++)\n lengths[i] = map.lengths[i] * scale;\n path.lengths = lengths;\n var color = getValue(map, \"color\", null);\n if (color)\n path.color.setFromString(color);\n return path;\n }\n case \"point\": {\n var point = this.attachmentLoader.newPointAttachment(skin, name);\n if (!point)\n return null;\n point.x = getValue(map, \"x\", 0) * scale;\n point.y = getValue(map, \"y\", 0) * scale;\n point.rotation = getValue(map, \"rotation\", 0);\n var color = getValue(map, \"color\", null);\n if (color)\n point.color.setFromString(color);\n return point;\n }\n case \"clipping\": {\n var clip = this.attachmentLoader.newClippingAttachment(skin, name);\n if (!clip)\n return null;\n var end = getValue(map, \"end\", null);\n if (end)\n clip.endSlot = skeletonData.findSlot(end);\n var vertexCount = map.vertexCount;\n this.readVertices(map, clip, vertexCount << 1);\n var color = getValue(map, \"color\", null);\n if (color)\n clip.color.setFromString(color);\n return clip;\n }\n }\n return null;\n };\n SkeletonJson.prototype.readVertices = function (map, attachment, verticesLength) {\n var scale = this.scale;\n attachment.worldVerticesLength = verticesLength;\n var vertices = map.vertices;\n if (verticesLength == vertices.length) {\n var scaledVertices = Utils.toFloatArray(vertices);\n if (scale != 1) {\n for (var i = 0, n = vertices.length; i < n; i++)\n scaledVertices[i] *= scale;\n }\n attachment.vertices = scaledVertices;\n return;\n }\n var weights = new Array();\n var bones = new Array();\n for (var i = 0, n = vertices.length; i < n;) {\n var boneCount = vertices[i++];\n bones.push(boneCount);\n for (var nn = i + boneCount * 4; i < nn; i += 4) {\n bones.push(vertices[i]);\n weights.push(vertices[i + 1] * scale);\n weights.push(vertices[i + 2] * scale);\n weights.push(vertices[i + 3]);\n }\n }\n attachment.bones = bones;\n attachment.vertices = Utils.toFloatArray(weights);\n };\n SkeletonJson.prototype.readAnimation = function (map, name, skeletonData) {\n var scale = this.scale;\n var timelines = new Array();\n // Slot timelines.\n if (map.slots) {\n for (var slotName in map.slots) {\n var slotMap = map.slots[slotName];\n var slotIndex = skeletonData.findSlotIndex(slotName);\n for (var timelineName in slotMap) {\n var timelineMap = slotMap[timelineName];\n if (!timelineMap)\n continue;\n if (timelineName == \"attachment\") {\n var timeline = new AttachmentTimeline(timelineMap.length, slotIndex);\n for (var frame = 0; frame < timelineMap.length; frame++) {\n var keyMap = timelineMap[frame];\n timeline.setFrame(frame, getValue(keyMap, \"time\", 0), keyMap.name);\n }\n timelines.push(timeline);\n }\n else if (timelineName == \"rgba\") {\n var timeline = new RGBATimeline(timelineMap.length, timelineMap.length << 2, slotIndex);\n var keyMap = timelineMap[0];\n var time = getValue(keyMap, \"time\", 0);\n var color = Color.fromString(keyMap.color);\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, color.r, color.g, color.b, color.a);\n var nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n var time2 = getValue(nextMap, \"time\", 0);\n var newColor = Color.fromString(nextMap.color);\n var curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);\n }\n time = time2;\n color = newColor;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n else if (timelineName == \"rgb\") {\n var timeline = new RGBTimeline(timelineMap.length, timelineMap.length * 3, slotIndex);\n var keyMap = timelineMap[0];\n var time = getValue(keyMap, \"time\", 0);\n var color = Color.fromString(keyMap.color);\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, color.r, color.g, color.b);\n var nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n var time2 = getValue(nextMap, \"time\", 0);\n var newColor = Color.fromString(nextMap.color);\n var curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n }\n time = time2;\n color = newColor;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n else if (timelineName == \"alpha\") {\n timelines.push(readTimeline1(timelineMap, new AlphaTimeline(timelineMap.length, timelineMap.length, slotIndex), 0, 1));\n }\n else if (timelineName == \"rgba2\") {\n var timeline = new RGBA2Timeline(timelineMap.length, timelineMap.length * 7, slotIndex);\n var keyMap = timelineMap[0];\n var time = getValue(keyMap, \"time\", 0);\n var color = Color.fromString(keyMap.light);\n var color2 = Color.fromString(keyMap.dark);\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b);\n var nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n var time2 = getValue(nextMap, \"time\", 0);\n var newColor = Color.fromString(nextMap.light);\n var newColor2 = Color.fromString(nextMap.dark);\n var curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.r, newColor2.r, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.g, newColor2.g, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 6, time, time2, color2.b, newColor2.b, 1);\n }\n time = time2;\n color = newColor;\n color2 = newColor2;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n else if (timelineName == \"rgb2\") {\n var timeline = new RGB2Timeline(timelineMap.length, timelineMap.length * 6, slotIndex);\n var keyMap = timelineMap[0];\n var time = getValue(keyMap, \"time\", 0);\n var color = Color.fromString(keyMap.light);\n var color2 = Color.fromString(keyMap.dark);\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, color.r, color.g, color.b, color2.r, color2.g, color2.b);\n var nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n var time2 = getValue(nextMap, \"time\", 0);\n var newColor = Color.fromString(nextMap.light);\n var newColor2 = Color.fromString(nextMap.dark);\n var curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.r, newColor2.r, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.g, newColor2.g, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.b, newColor2.b, 1);\n }\n time = time2;\n color = newColor;\n color2 = newColor2;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n }\n }\n }\n // Bone timelines.\n if (map.bones) {\n for (var boneName in map.bones) {\n var boneMap = map.bones[boneName];\n var boneIndex = skeletonData.findBoneIndex(boneName);\n for (var timelineName in boneMap) {\n var timelineMap = boneMap[timelineName];\n if (timelineMap.length == 0)\n continue;\n if (timelineName === \"rotate\") {\n timelines.push(readTimeline1(timelineMap, new RotateTimeline(timelineMap.length, timelineMap.length, boneIndex), 0, 1));\n }\n else if (timelineName === \"translate\") {\n var timeline = new TranslateTimeline(timelineMap.length, timelineMap.length << 1, boneIndex);\n timelines.push(readTimeline2(timelineMap, timeline, \"x\", \"y\", 0, scale));\n }\n else if (timelineName === \"translatex\") {\n var timeline = new TranslateXTimeline(timelineMap.length, timelineMap.length, boneIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 0, scale));\n }\n else if (timelineName === \"translatey\") {\n var timeline = new TranslateYTimeline(timelineMap.length, timelineMap.length, boneIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 0, scale));\n }\n else if (timelineName === \"scale\") {\n var timeline = new ScaleTimeline(timelineMap.length, timelineMap.length << 1, boneIndex);\n timelines.push(readTimeline2(timelineMap, timeline, \"x\", \"y\", 1, 1));\n }\n else if (timelineName === \"scalex\") {\n var timeline = new ScaleXTimeline(timelineMap.length, timelineMap.length, boneIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 1, 1));\n }\n else if (timelineName === \"scaley\") {\n var timeline = new ScaleYTimeline(timelineMap.length, timelineMap.length, boneIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 1, 1));\n }\n else if (timelineName === \"shear\") {\n var timeline = new ShearTimeline(timelineMap.length, timelineMap.length << 1, boneIndex);\n timelines.push(readTimeline2(timelineMap, timeline, \"x\", \"y\", 0, 1));\n }\n else if (timelineName === \"shearx\") {\n var timeline = new ShearXTimeline(timelineMap.length, timelineMap.length, boneIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 0, 1));\n }\n else if (timelineName === \"sheary\") {\n var timeline = new ShearYTimeline(timelineMap.length, timelineMap.length, boneIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 0, 1));\n }\n }\n }\n }\n // IK constraint timelines.\n if (map.ik) {\n for (var constraintName in map.ik) {\n var constraintMap = map.ik[constraintName];\n var keyMap = constraintMap[0];\n if (!keyMap)\n continue;\n var constraint = skeletonData.findIkConstraint(constraintName);\n var constraintIndex = skeletonData.ikConstraints.indexOf(constraint);\n var timeline = new IkConstraintTimeline(constraintMap.length, constraintMap.length << 1, constraintIndex);\n var time = getValue(keyMap, \"time\", 0);\n var mix = getValue(keyMap, \"mix\", 1);\n var softness = getValue(keyMap, \"softness\", 0) * scale;\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, mix, softness, getValue(keyMap, \"bendPositive\", true) ? 1 : -1, getValue(keyMap, \"compress\", false), getValue(keyMap, \"stretch\", false));\n var nextMap = constraintMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n var time2 = getValue(nextMap, \"time\", 0);\n var mix2 = getValue(nextMap, \"mix\", 1);\n var softness2 = getValue(nextMap, \"softness\", 0) * scale;\n var curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mix, mix2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, softness, softness2, scale);\n }\n time = time2;\n mix = mix2;\n softness = softness2;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n }\n // Transform constraint timelines.\n if (map.transform) {\n for (var constraintName in map.transform) {\n var timelineMap = map.transform[constraintName];\n var keyMap = timelineMap[0];\n if (!keyMap)\n continue;\n var constraint = skeletonData.findTransformConstraint(constraintName);\n var constraintIndex = skeletonData.transformConstraints.indexOf(constraint);\n var timeline = new TransformConstraintTimeline(timelineMap.length, timelineMap.length << 2, constraintIndex);\n var time = getValue(keyMap, \"time\", 0);\n var mixRotate = getValue(keyMap, \"mixRotate\", 1);\n var mixX = getValue(keyMap, \"mixX\", 1);\n var mixY = getValue(keyMap, \"mixY\", mixX);\n var mixScaleX = getValue(keyMap, \"mixScaleX\", 1);\n var mixScaleY = getValue(keyMap, \"mixScaleY\", mixScaleX);\n var mixShearY = getValue(keyMap, \"mixShearY\", 1);\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);\n var nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n var time2 = getValue(nextMap, \"time\", 0);\n var mixRotate2 = getValue(nextMap, \"mixRotate\", 1);\n var mixX2 = getValue(nextMap, \"mixX\", 1);\n var mixY2 = getValue(nextMap, \"mixY\", mixX2);\n var mixScaleX2 = getValue(nextMap, \"mixScaleX\", 1);\n var mixScaleY2 = getValue(nextMap, \"mixScaleY\", mixScaleX2);\n var mixShearY2 = getValue(nextMap, \"mixShearY\", 1);\n var curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1);\n }\n time = time2;\n mixRotate = mixRotate2;\n mixX = mixX2;\n mixY = mixY2;\n mixScaleX = mixScaleX2;\n mixScaleY = mixScaleY2;\n mixScaleX = mixScaleX2;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n }\n // Path constraint timelines.\n if (map.path) {\n for (var constraintName in map.path) {\n var constraintMap = map.path[constraintName];\n var constraint = skeletonData.findPathConstraint(constraintName);\n var constraintIndex = skeletonData.pathConstraints.indexOf(constraint);\n for (var timelineName in constraintMap) {\n var timelineMap = constraintMap[timelineName];\n var keyMap = timelineMap[0];\n if (!keyMap)\n continue;\n if (timelineName === \"position\") {\n var timeline = new PathConstraintPositionTimeline(timelineMap.length, timelineMap.length, constraintIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 0, constraint.positionMode == PositionMode.Fixed ? scale : 1));\n }\n else if (timelineName === \"spacing\") {\n var timeline = new PathConstraintSpacingTimeline(timelineMap.length, timelineMap.length, constraintIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 0, constraint.spacingMode == SpacingMode.Length || constraint.spacingMode == SpacingMode.Fixed ? scale : 1));\n }\n else if (timelineName === \"mix\") {\n var timeline = new PathConstraintMixTimeline(timelineMap.size, timelineMap.size * 3, constraintIndex);\n var time = getValue(keyMap, \"time\", 0);\n var mixRotate = getValue(keyMap, \"mixRotate\", 1);\n var mixX = getValue(keyMap, \"mixX\", 1);\n var mixY = getValue(keyMap, \"mixY\", mixX);\n for (var frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, mixRotate, mixX, mixY);\n var nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n var time2 = getValue(nextMap, \"time\", 0);\n var mixRotate2 = getValue(nextMap, \"mixRotate\", 1);\n var mixX2 = getValue(nextMap, \"mixX\", 1);\n var mixY2 = getValue(nextMap, \"mixY\", mixX2);\n var curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);\n }\n time = time2;\n mixRotate = mixRotate2;\n mixX = mixX2;\n mixY = mixY2;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n }\n }\n }\n // Deform timelines.\n if (map.deform) {\n for (var deformName in map.deform) {\n var deformMap = map.deform[deformName];\n var skin = skeletonData.findSkin(deformName);\n for (var slotName in deformMap) {\n var slotMap = deformMap[slotName];\n var slotIndex = skeletonData.findSlotIndex(slotName);\n for (var timelineName in slotMap) {\n var timelineMap = slotMap[timelineName];\n var keyMap = timelineMap[0];\n if (!keyMap)\n continue;\n var attachment = skin.getAttachment(slotIndex, timelineName);\n var weighted = attachment.bones;\n var vertices = attachment.vertices;\n var deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n var timeline = new DeformTimeline(timelineMap.length, timelineMap.length, slotIndex, attachment);\n var time = getValue(keyMap, \"time\", 0);\n for (var frame = 0, bezier = 0;; frame++) {\n var deform = void 0;\n var verticesValue = getValue(keyMap, \"vertices\", null);\n if (!verticesValue)\n deform = weighted ? Utils.newFloatArray(deformLength) : vertices;\n else {\n deform = Utils.newFloatArray(deformLength);\n var start = getValue(keyMap, \"offset\", 0);\n Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);\n if (scale != 1) {\n for (var i = start, n = i + verticesValue.length; i < n; i++)\n deform[i] *= scale;\n }\n if (!weighted) {\n for (var i = 0; i < deformLength; i++)\n deform[i] += vertices[i];\n }\n }\n timeline.setFrame(frame, time, deform);\n var nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n var time2 = getValue(nextMap, \"time\", 0);\n var curve = keyMap.curve;\n if (curve)\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1);\n time = time2;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n }\n }\n }\n // Draw order timelines.\n if (map.drawOrder) {\n var timeline = new DrawOrderTimeline(map.drawOrder.length);\n var slotCount = skeletonData.slots.length;\n var frame = 0;\n for (var i = 0; i < map.drawOrder.length; i++, frame++) {\n var drawOrderMap = map.drawOrder[i];\n var drawOrder = null;\n var offsets = getValue(drawOrderMap, \"offsets\", null);\n if (offsets) {\n drawOrder = Utils.newArray(slotCount, -1);\n var unchanged = Utils.newArray(slotCount - offsets.length, 0);\n var originalIndex = 0, unchangedIndex = 0;\n for (var ii = 0; ii < offsets.length; ii++) {\n var offsetMap = offsets[ii];\n var slotIndex = skeletonData.findSlotIndex(offsetMap.slot);\n // Collect unchanged items.\n while (originalIndex != slotIndex)\n unchanged[unchangedIndex++] = originalIndex++;\n // Set changed items.\n drawOrder[originalIndex + offsetMap.offset] = originalIndex++;\n }\n // Collect remaining unchanged items.\n while (originalIndex < slotCount)\n unchanged[unchangedIndex++] = originalIndex++;\n // Fill in unchanged items.\n for (var ii = slotCount - 1; ii >= 0; ii--)\n if (drawOrder[ii] == -1)\n drawOrder[ii] = unchanged[--unchangedIndex];\n }\n timeline.setFrame(frame, getValue(drawOrderMap, \"time\", 0), drawOrder);\n }\n timelines.push(timeline);\n }\n // Event timelines.\n if (map.events) {\n var timeline = new EventTimeline(map.events.length);\n var frame = 0;\n for (var i = 0; i < map.events.length; i++, frame++) {\n var eventMap = map.events[i];\n var eventData = skeletonData.findEvent(eventMap.name);\n var event_1 = new Event(Utils.toSinglePrecision(getValue(eventMap, \"time\", 0)), eventData);\n event_1.intValue = getValue(eventMap, \"int\", eventData.intValue);\n event_1.floatValue = getValue(eventMap, \"float\", eventData.floatValue);\n event_1.stringValue = getValue(eventMap, \"string\", eventData.stringValue);\n if (event_1.data.audioPath) {\n event_1.volume = getValue(eventMap, \"volume\", 1);\n event_1.balance = getValue(eventMap, \"balance\", 0);\n }\n timeline.setFrame(frame, event_1);\n }\n timelines.push(timeline);\n }\n var duration = 0;\n for (var i = 0, n = timelines.length; i < n; i++)\n duration = Math.max(duration, timelines[i].getDuration());\n skeletonData.animations.push(new Animation(name, timelines, duration));\n };\n return SkeletonJson;\n}());\nexport { SkeletonJson };\nvar LinkedMesh = /** @class */ (function () {\n function LinkedMesh(mesh, skin, slotIndex, parent, inheritDeform) {\n this.mesh = mesh;\n this.skin = skin;\n this.slotIndex = slotIndex;\n this.parent = parent;\n this.inheritDeform = inheritDeform;\n }\n return LinkedMesh;\n}());\nfunction readTimeline1(keys, timeline, defaultValue, scale) {\n var keyMap = keys[0];\n var time = getValue(keyMap, \"time\", 0);\n var value = getValue(keyMap, \"value\", defaultValue) * scale;\n var bezier = 0;\n for (var frame = 0;; frame++) {\n timeline.setFrame(frame, time, value);\n var nextMap = keys[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n return timeline;\n }\n var time2 = getValue(nextMap, \"time\", 0);\n var value2 = getValue(nextMap, \"value\", defaultValue) * scale;\n if (keyMap.curve)\n bezier = readCurve(keyMap.curve, timeline, bezier, frame, 0, time, time2, value, value2, scale);\n time = time2;\n value = value2;\n keyMap = nextMap;\n }\n}\nfunction readTimeline2(keys, timeline, name1, name2, defaultValue, scale) {\n var keyMap = keys[0];\n var time = getValue(keyMap, \"time\", 0);\n var value1 = getValue(keyMap, name1, defaultValue) * scale;\n var value2 = getValue(keyMap, name2, defaultValue) * scale;\n var bezier = 0;\n for (var frame = 0;; frame++) {\n timeline.setFrame(frame, time, value1, value2);\n var nextMap = keys[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n return timeline;\n }\n var time2 = getValue(nextMap, \"time\", 0);\n var nvalue1 = getValue(nextMap, name1, defaultValue) * scale;\n var nvalue2 = getValue(nextMap, name2, defaultValue) * scale;\n var curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale);\n }\n time = time2;\n value1 = nvalue1;\n value2 = nvalue2;\n keyMap = nextMap;\n }\n}\nfunction readCurve(curve, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {\n if (curve == \"stepped\") {\n timeline.setStepped(frame);\n return bezier;\n }\n var i = value << 2;\n var cx1 = curve[i];\n var cy1 = curve[i + 1] * scale;\n var cx2 = curve[i + 2];\n var cy2 = curve[i + 3] * scale;\n timeline.setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2);\n return bezier + 1;\n}\nfunction getValue(map, property, defaultValue) {\n return map[property] !== undefined ? map[property] : defaultValue;\n}\n//# sourceMappingURL=SkeletonJson.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n(function () {\n if (typeof Math.fround === \"undefined\") {\n Math.fround = (function (array) {\n return function (x) {\n return array[0] = x, array[0];\n };\n })(new Float32Array(1));\n }\n})();\nexport {};\n//# sourceMappingURL=polyfills.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { MathUtils } from \"../Utils\";\nvar JitterEffect = /** @class */ (function () {\n function JitterEffect(jitterX, jitterY) {\n this.jitterX = 0;\n this.jitterY = 0;\n this.jitterX = jitterX;\n this.jitterY = jitterY;\n }\n JitterEffect.prototype.begin = function (skeleton) {\n };\n JitterEffect.prototype.transform = function (position, uv, light, dark) {\n position.x += MathUtils.randomTriangular(-this.jitterX, this.jitterY);\n position.y += MathUtils.randomTriangular(-this.jitterX, this.jitterY);\n };\n JitterEffect.prototype.end = function () {\n };\n return JitterEffect;\n}());\nexport { JitterEffect };\n//# sourceMappingURL=JitterEffect.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { PowOut, MathUtils } from \"../Utils\";\nvar SwirlEffect = /** @class */ (function () {\n function SwirlEffect(radius) {\n this.centerX = 0;\n this.centerY = 0;\n this.radius = 0;\n this.angle = 0;\n this.worldX = 0;\n this.worldY = 0;\n this.radius = radius;\n }\n SwirlEffect.prototype.begin = function (skeleton) {\n this.worldX = skeleton.x + this.centerX;\n this.worldY = skeleton.y + this.centerY;\n };\n SwirlEffect.prototype.transform = function (position, uv, light, dark) {\n var radAngle = this.angle * MathUtils.degreesToRadians;\n var x = position.x - this.worldX;\n var y = position.y - this.worldY;\n var dist = Math.sqrt(x * x + y * y);\n if (dist < this.radius) {\n var theta = SwirlEffect.interpolation.apply(0, radAngle, (this.radius - dist) / this.radius);\n var cos = Math.cos(theta);\n var sin = Math.sin(theta);\n position.x = cos * x - sin * y + this.worldX;\n position.y = sin * x + cos * y + this.worldY;\n }\n };\n SwirlEffect.prototype.end = function () {\n };\n SwirlEffect.interpolation = new PowOut(2);\n return SwirlEffect;\n}());\nexport { SwirlEffect };\n//# sourceMappingURL=SwirlEffect.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Texture } from \"../../spine-core/dist/index\";\nvar CanvasTexture = /** @class */ (function (_super) {\n __extends(CanvasTexture, _super);\n function CanvasTexture(image) {\n return _super.call(this, image) || this;\n }\n CanvasTexture.prototype.setFilters = function (minFilter, magFilter) { };\n CanvasTexture.prototype.setWraps = function (uWrap, vWrap) { };\n CanvasTexture.prototype.dispose = function () { };\n return CanvasTexture;\n}(Texture));\nexport { CanvasTexture };\n//# sourceMappingURL=CanvasTexture.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { AssetManagerBase } from \"../../spine-core/dist/index\";\nimport { CanvasTexture } from \"./CanvasTexture\";\nvar AssetManager = /** @class */ (function (_super) {\n __extends(AssetManager, _super);\n function AssetManager(pathPrefix, downloader) {\n if (pathPrefix === void 0) { pathPrefix = \"\"; }\n if (downloader === void 0) { downloader = null; }\n return _super.call(this, function (image) { return new CanvasTexture(image); }, pathPrefix, downloader) || this;\n }\n return AssetManager;\n}(AssetManagerBase));\nexport { AssetManager };\n//# sourceMappingURL=AssetManager.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Utils, Color, RegionAttachment, MeshAttachment } from \"../../spine-core/dist/index\";\nvar SkeletonRenderer = /** @class */ (function () {\n function SkeletonRenderer(context) {\n this.triangleRendering = false;\n this.debugRendering = false;\n this.vertices = Utils.newFloatArray(8 * 1024);\n this.tempColor = new Color();\n this.ctx = context;\n }\n SkeletonRenderer.prototype.draw = function (skeleton) {\n if (this.triangleRendering)\n this.drawTriangles(skeleton);\n else\n this.drawImages(skeleton);\n };\n SkeletonRenderer.prototype.drawImages = function (skeleton) {\n var ctx = this.ctx;\n var color = this.tempColor;\n var skeletonColor = skeleton.color;\n var drawOrder = skeleton.drawOrder;\n if (this.debugRendering)\n ctx.strokeStyle = \"green\";\n for (var i = 0, n = drawOrder.length; i < n; i++) {\n var slot = drawOrder[i];\n var bone = slot.bone;\n if (!bone.active)\n continue;\n var attachment = slot.getAttachment();\n if (!(attachment instanceof RegionAttachment))\n continue;\n var region = attachment.region;\n var image = region.page.texture.getImage();\n var slotColor = slot.color;\n var regionColor = attachment.color;\n 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);\n ctx.save();\n ctx.transform(bone.a, bone.c, bone.b, bone.d, bone.worldX, bone.worldY);\n ctx.translate(attachment.offset[0], attachment.offset[1]);\n ctx.rotate(attachment.rotation * Math.PI / 180);\n var atlasScale = attachment.width / region.originalWidth;\n ctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY);\n var w = region.width, h = region.height;\n ctx.translate(w / 2, h / 2);\n if (attachment.region.degrees == 90) {\n var t = w;\n w = h;\n h = t;\n ctx.rotate(-Math.PI / 2);\n }\n ctx.scale(1, -1);\n ctx.translate(-w / 2, -h / 2);\n if (color.r != 1 || color.g != 1 || color.b != 1 || color.a != 1) {\n ctx.globalAlpha = color.a;\n // experimental tinting via compositing, doesn't work\n // ctx.globalCompositeOperation = \"source-atop\";\n // ctx.fillStyle = \"rgba(\" + (color.r * 255 | 0) + \", \" + (color.g * 255 | 0) + \", \" + (color.b * 255 | 0) + \", \" + color.a + \")\";\n // ctx.fillRect(0, 0, w, h);\n }\n ctx.drawImage(image, region.x, region.y, w, h, 0, 0, w, h);\n if (this.debugRendering)\n ctx.strokeRect(0, 0, w, h);\n ctx.restore();\n }\n };\n SkeletonRenderer.prototype.drawTriangles = function (skeleton) {\n var ctx = this.ctx;\n var color = this.tempColor;\n var skeletonColor = skeleton.color;\n var drawOrder = skeleton.drawOrder;\n var blendMode = null;\n var vertices = this.vertices;\n var triangles = null;\n for (var i = 0, n = drawOrder.length; i < n; i++) {\n var slot = drawOrder[i];\n var attachment = slot.getAttachment();\n var texture = void 0;\n var region = void 0;\n if (attachment instanceof RegionAttachment) {\n var regionAttachment = attachment;\n vertices = this.computeRegionVertices(slot, regionAttachment, false);\n triangles = SkeletonRenderer.QUAD_TRIANGLES;\n region = regionAttachment.region;\n texture = region.page.texture.getImage();\n }\n else if (attachment instanceof MeshAttachment) {\n var mesh = attachment;\n vertices = this.computeMeshVertices(slot, mesh, false);\n triangles = mesh.triangles;\n texture = mesh.region.renderObject.page.texture.getImage();\n }\n else\n continue;\n if (texture) {\n if (slot.data.blendMode != blendMode)\n blendMode = slot.data.blendMode;\n var slotColor = slot.color;\n var attachmentColor = attachment.color;\n 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);\n if (color.r != 1 || color.g != 1 || color.b != 1 || color.a != 1) {\n ctx.globalAlpha = color.a;\n // experimental tinting via compositing, doesn't work\n // ctx.globalCompositeOperation = \"source-atop\";\n // ctx.fillStyle = \"rgba(\" + (color.r * 255 | 0) + \", \" + (color.g * 255 | 0) + \", \" + (color.b * 255 | 0) + \", \" + color.a + \")\";\n // ctx.fillRect(0, 0, w, h);\n }\n for (var j = 0; j < triangles.length; j += 3) {\n var t1 = triangles[j] * 8, t2 = triangles[j + 1] * 8, t3 = triangles[j + 2] * 8;\n var x0 = vertices[t1], y0 = vertices[t1 + 1], u0 = vertices[t1 + 6], v0 = vertices[t1 + 7];\n var x1 = vertices[t2], y1 = vertices[t2 + 1], u1 = vertices[t2 + 6], v1 = vertices[t2 + 7];\n var x2 = vertices[t3], y2 = vertices[t3 + 1], u2 = vertices[t3 + 6], v2 = vertices[t3 + 7];\n this.drawTriangle(texture, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2);\n if (this.debugRendering) {\n ctx.strokeStyle = \"green\";\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.stroke();\n }\n }\n }\n }\n this.ctx.globalAlpha = 1;\n };\n // Adapted from http://extremelysatisfactorytotalitarianism.com/blog/?p=2120\n // Apache 2 licensed\n SkeletonRenderer.prototype.drawTriangle = function (img, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2) {\n var ctx = this.ctx;\n u0 *= img.width;\n v0 *= img.height;\n u1 *= img.width;\n v1 *= img.height;\n u2 *= img.width;\n v2 *= img.height;\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.closePath();\n x1 -= x0;\n y1 -= y0;\n x2 -= x0;\n y2 -= y0;\n u1 -= u0;\n v1 -= v0;\n u2 -= u0;\n v2 -= v0;\n var det = 1 / (u1 * v2 - u2 * v1), \n // linear transformation\n a = (v2 * x1 - v1 * x2) * det, b = (v2 * y1 - v1 * y2) * det, c = (u1 * x2 - u2 * x1) * det, d = (u1 * y2 - u2 * y1) * det, \n // translation\n e = x0 - a * u0 - c * v0, f = y0 - b * u0 - d * v0;\n ctx.save();\n ctx.transform(a, b, c, d, e, f);\n ctx.clip();\n ctx.drawImage(img, 0, 0);\n ctx.restore();\n };\n SkeletonRenderer.prototype.computeRegionVertices = function (slot, region, pma) {\n var skeletonColor = slot.bone.skeleton.color;\n var slotColor = slot.color;\n var regionColor = region.color;\n var alpha = skeletonColor.a * slotColor.a * regionColor.a;\n var multiplier = pma ? alpha : 1;\n var color = this.tempColor;\n color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha);\n region.computeWorldVertices(slot.bone, this.vertices, 0, SkeletonRenderer.VERTEX_SIZE);\n var vertices = this.vertices;\n var uvs = region.uvs;\n vertices[RegionAttachment.C1R] = color.r;\n vertices[RegionAttachment.C1G] = color.g;\n vertices[RegionAttachment.C1B] = color.b;\n vertices[RegionAttachment.C1A] = color.a;\n vertices[RegionAttachment.U1] = uvs[0];\n vertices[RegionAttachment.V1] = uvs[1];\n vertices[RegionAttachment.C2R] = color.r;\n vertices[RegionAttachment.C2G] = color.g;\n vertices[RegionAttachment.C2B] = color.b;\n vertices[RegionAttachment.C2A] = color.a;\n vertices[RegionAttachment.U2] = uvs[2];\n vertices[RegionAttachment.V2] = uvs[3];\n vertices[RegionAttachment.C3R] = color.r;\n vertices[RegionAttachment.C3G] = color.g;\n vertices[RegionAttachment.C3B] = color.b;\n vertices[RegionAttachment.C3A] = color.a;\n vertices[RegionAttachment.U3] = uvs[4];\n vertices[RegionAttachment.V3] = uvs[5];\n vertices[RegionAttachment.C4R] = color.r;\n vertices[RegionAttachment.C4G] = color.g;\n vertices[RegionAttachment.C4B] = color.b;\n vertices[RegionAttachment.C4A] = color.a;\n vertices[RegionAttachment.U4] = uvs[6];\n vertices[RegionAttachment.V4] = uvs[7];\n return vertices;\n };\n SkeletonRenderer.prototype.computeMeshVertices = function (slot, mesh, pma) {\n var skeletonColor = slot.bone.skeleton.color;\n var slotColor = slot.color;\n var regionColor = mesh.color;\n var alpha = skeletonColor.a * slotColor.a * regionColor.a;\n var multiplier = pma ? alpha : 1;\n var color = this.tempColor;\n color.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier, skeletonColor.g * slotColor.g * regionColor.g * multiplier, skeletonColor.b * slotColor.b * regionColor.b * multiplier, alpha);\n var vertexCount = mesh.worldVerticesLength / 2;\n var vertices = this.vertices;\n if (vertices.length < mesh.worldVerticesLength)\n this.vertices = vertices = Utils.newFloatArray(mesh.worldVerticesLength);\n mesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, SkeletonRenderer.VERTEX_SIZE);\n var uvs = mesh.uvs;\n for (var i = 0, u = 0, v = 2; i < vertexCount; i++) {\n vertices[v++] = color.r;\n vertices[v++] = color.g;\n vertices[v++] = color.b;\n vertices[v++] = color.a;\n vertices[v++] = uvs[u++];\n vertices[v++] = uvs[u++];\n v += 2;\n }\n return vertices;\n };\n SkeletonRenderer.QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];\n SkeletonRenderer.VERTEX_SIZE = 2 + 2 + 4;\n return SkeletonRenderer;\n}());\nexport { SkeletonRenderer };\n//# sourceMappingURL=SkeletonRenderer.js.map","import { AssetManager } from \"./AssetManager\";\nimport { CanvasTexture } from \"./CanvasTexture\";\nimport { SkeletonRenderer } from \"./SkeletonRenderer\";\nexport * from \"./AssetManager\";\nexport * from \"./CanvasTexture\";\nexport * from \"./SkeletonRenderer\";\nexport * from \"../../spine-core/dist/index\";\nif (globalThis.spine) {\n globalThis.spine.canvas = {\n AssetManager: AssetManager,\n CanvasTexture: CanvasTexture,\n SkeletonRenderer: SkeletonRenderer\n };\n}\n//# sourceMappingURL=index.js.map"],"names":["__extends","this","MixBlend","MixDirection","EventType","TextureFilter","TextureWrap","TransformMode","PositionMode","SpacingMode","RotateMode","BlendMode","LinkedMesh","readTimeline1","readTimeline2"],"mappings":"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,KAAK,CAAC,CAAC,CAAC;IACjD,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACjD,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACjD,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACjD,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACjD,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACjD,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACjD,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACjD,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACjD,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACjD,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACjD,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAA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"}
\ No newline at end of file
+{
+ "version": 3,
+ "sources": ["../spine-canvas/src/index.ts", "../spine-core/src/Utils.ts", "../spine-core/src/attachments/Attachment.ts", "../spine-core/src/Animation.ts", "../spine-core/src/AnimationState.ts", "../spine-core/src/AnimationStateData.ts", "../spine-core/src/attachments/BoundingBoxAttachment.ts", "../spine-core/src/attachments/ClippingAttachment.ts", "../spine-core/src/Texture.ts", "../spine-core/src/TextureAtlas.ts", "../spine-core/src/attachments/MeshAttachment.ts", "../spine-core/src/attachments/PathAttachment.ts", "../spine-core/src/attachments/PointAttachment.ts", "../spine-core/src/attachments/RegionAttachment.ts", "../spine-core/src/AtlasAttachmentLoader.ts", "../spine-core/src/BoneData.ts", "../spine-core/src/Bone.ts", "../spine-core/src/ConstraintData.ts", "../spine-core/src/AssetManagerBase.ts", "../spine-core/src/Event.ts", "../spine-core/src/EventData.ts", "../spine-core/src/IkConstraint.ts", "../spine-core/src/IkConstraintData.ts", "../spine-core/src/PathConstraintData.ts", "../spine-core/src/PathConstraint.ts", "../spine-core/src/Slot.ts", "../spine-core/src/TransformConstraint.ts", "../spine-core/src/Skeleton.ts", "../spine-core/src/SkeletonData.ts", "../spine-core/src/Skin.ts", "../spine-core/src/SlotData.ts", "../spine-core/src/TransformConstraintData.ts", "../spine-core/src/SkeletonBinary.ts", "../spine-core/src/SkeletonBounds.ts", "../spine-core/src/Triangulator.ts", "../spine-core/src/SkeletonClipping.ts", "../spine-core/src/SkeletonJson.ts", "../spine-core/src/polyfills.ts", "../spine-core/src/vertexeffects/JitterEffect.ts", "../spine-core/src/vertexeffects/SwirlEffect.ts", "../spine-canvas/src/CanvasTexture.ts", "../spine-canvas/src/AssetManager.ts", "../spine-canvas/src/SkeletonRenderer.ts"],
+ "sourcesContent": ["export * from \"./AssetManager\";\nexport * from \"./CanvasTexture\";\nexport * from \"./SkeletonRenderer\";\n\nexport * from \"spine-core\";\n\n// Before modularization, we would expose spine-core on the global\n// `spine` object, and spine-canvas on the global `spine.canvas` object.\n// This was used by clients when including spine-canvas via bezierCount (specified in the constructor) was larger\n * than the actual number of Bezier curves. */\n CurveTimeline.prototype.shrink = function (bezierCount) {\n var size = this.getFrameCount() + bezierCount * 18 /*BEZIER_SIZE*/;\n if (this.curves.length > size) {\n var newCurves = Utils.newFloatArray(size);\n Utils.arrayCopy(this.curves, 0, newCurves, 0, size);\n this.curves = newCurves;\n }\n };\n /** Stores the segments for the specified Bezier curve. For timelines that modify multiple values, there may be more than\n * one curve per frame.\n * @param bezier The ordinal of this Bezier curve for this timeline, between 0 and bezierCount - 1 (specified\n * in the constructor), inclusive.\n * @param frame Between 0 and frameCount - 1, inclusive.\n * @param value The index of the value for this frame that this curve is used for.\n * @param time1 The time for the first key.\n * @param value1 The value for the first key.\n * @param cx1 The time for the first Bezier handle.\n * @param cy1 The value for the first Bezier handle.\n * @param cx2 The time of the second Bezier handle.\n * @param cy2 The value for the second Bezier handle.\n * @param time2 The time for the second key.\n * @param value2 The value for the second key. */\n CurveTimeline.prototype.setBezier = function (bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) {\n var curves = this.curves;\n var i = this.getFrameCount() + bezier * 18 /*BEZIER_SIZE*/;\n if (value == 0)\n curves[frame] = 2 /*BEZIER*/ + i;\n var tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = (value1 - cy1 * 2 + cy2) * 0.03;\n var dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006, dddy = ((cy1 - cy2) * 3 - value1 + value2) * 0.006;\n var ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy;\n var dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = (cy1 - value1) * 0.3 + tmpy + dddy * 0.16666667;\n var x = time1 + dx, y = value1 + dy;\n for (var n = i + 18 /*BEZIER_SIZE*/; i < n; i += 2) {\n curves[i] = x;\n curves[i + 1] = y;\n dx += ddx;\n dy += ddy;\n ddx += dddx;\n ddy += dddy;\n x += dx;\n y += dy;\n }\n };\n /** Returns the Bezier interpolated value for the specified time.\n * @param frameIndex The index into {@link #getFrames()} for the values of the frame before time.\n * @param valueOffset The offset from frameIndex to the value this curve is used for.\n * @param i The index of the Bezier segments. See {@link #getCurveType(int)}. */\n CurveTimeline.prototype.getBezierValue = function (time, frameIndex, valueOffset, i) {\n var curves = this.curves;\n if (curves[i] > time) {\n var x_1 = this.frames[frameIndex], y_1 = this.frames[frameIndex + valueOffset];\n return y_1 + (time - x_1) / (curves[i] - x_1) * (curves[i + 1] - y_1);\n }\n var n = i + 18 /*BEZIER_SIZE*/;\n for (i += 2; i < n; i += 2) {\n if (curves[i] >= time) {\n var x_2 = curves[i - 2], y_2 = curves[i - 1];\n return y_2 + (time - x_2) / (curves[i] - x_2) * (curves[i + 1] - y_2);\n }\n }\n frameIndex += this.getFrameEntries();\n var x = curves[n - 2], y = curves[n - 1];\n return y + (time - x) / (this.frames[frameIndex] - x) * (this.frames[frameIndex + valueOffset] - y);\n };\n return CurveTimeline;\n}(Timeline));\nexport { CurveTimeline };\nvar CurveTimeline1 = /** @class */ (function (_super) {\n __extends(CurveTimeline1, _super);\n function CurveTimeline1(frameCount, bezierCount, propertyId) {\n return _super.call(this, frameCount, bezierCount, [propertyId]) || this;\n }\n CurveTimeline1.prototype.getFrameEntries = function () {\n return 2 /*ENTRIES*/;\n };\n /** Sets the time and value for the specified frame.\n * @param frame Between 0 and frameCount, inclusive.\n * @param time The frame time in seconds. */\n CurveTimeline1.prototype.setFrame = function (frame, time, value) {\n frame <<= 1;\n this.frames[frame] = time;\n this.frames[frame + 1 /*VALUE*/] = value;\n };\n /** Returns the interpolated value for the specified time. */\n CurveTimeline1.prototype.getCurveValue = function (time) {\n var frames = this.frames;\n var i = frames.length - 2;\n for (var ii = 2; ii <= i; ii += 2) {\n if (frames[ii] > time) {\n i = ii - 2;\n break;\n }\n }\n var curveType = this.curves[i >> 1];\n switch (curveType) {\n case 0 /*LINEAR*/:\n var before = frames[i], value = frames[i + 1 /*VALUE*/];\n return value + (time - before) / (frames[i + 2 /*ENTRIES*/] - before) * (frames[i + 2 /*ENTRIES*/ + 1 /*VALUE*/] - value);\n case 1 /*STEPPED*/:\n return frames[i + 1 /*VALUE*/];\n }\n return this.getBezierValue(time, i, 1 /*VALUE*/, curveType - 2 /*BEZIER*/);\n };\n return CurveTimeline1;\n}(CurveTimeline));\nexport { CurveTimeline1 };\n/** The base class for a {@link CurveTimeline} which sets two properties. */\nvar CurveTimeline2 = /** @class */ (function (_super) {\n __extends(CurveTimeline2, _super);\n /** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(int)}.\n * @param propertyIds Unique identifiers for the properties the timeline modifies. */\n function CurveTimeline2(frameCount, bezierCount, propertyId1, propertyId2) {\n return _super.call(this, frameCount, bezierCount, [propertyId1, propertyId2]) || this;\n }\n CurveTimeline2.prototype.getFrameEntries = function () {\n return 3 /*ENTRIES*/;\n };\n /** Sets the time and values for the specified frame.\n * @param frame Between 0 and frameCount, inclusive.\n * @param time The frame time in seconds. */\n CurveTimeline2.prototype.setFrame = function (frame, time, value1, value2) {\n frame *= 3 /*ENTRIES*/;\n this.frames[frame] = time;\n this.frames[frame + 1 /*VALUE1*/] = value1;\n this.frames[frame + 2 /*VALUE2*/] = value2;\n };\n return CurveTimeline2;\n}(CurveTimeline));\nexport { CurveTimeline2 };\n/** Changes a bone's local {@link Bone#rotation}. */\nvar RotateTimeline = /** @class */ (function (_super) {\n __extends(RotateTimeline, _super);\n function RotateTimeline(frameCount, bezierCount, boneIndex) {\n var _this = _super.call(this, frameCount, bezierCount, Property.rotate + \"|\" + boneIndex) || this;\n _this.boneIndex = 0;\n _this.boneIndex = boneIndex;\n return _this;\n }\n RotateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.rotation = bone.data.rotation;\n return;\n case MixBlend.first:\n bone.rotation += (bone.data.rotation - bone.rotation) * alpha;\n }\n return;\n }\n var r = this.getCurveValue(time);\n switch (blend) {\n case MixBlend.setup:\n bone.rotation = bone.data.rotation + r * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n r += bone.data.rotation - bone.rotation;\n case MixBlend.add:\n bone.rotation += r * alpha;\n }\n };\n return RotateTimeline;\n}(CurveTimeline1));\nexport { RotateTimeline };\n/** Changes a bone's local {@link Bone#x} and {@link Bone#y}. */\nvar TranslateTimeline = /** @class */ (function (_super) {\n __extends(TranslateTimeline, _super);\n function TranslateTimeline(frameCount, bezierCount, boneIndex) {\n var _this = _super.call(this, frameCount, bezierCount, Property.x + \"|\" + boneIndex, Property.y + \"|\" + boneIndex) || this;\n _this.boneIndex = 0;\n _this.boneIndex = boneIndex;\n return _this;\n }\n TranslateTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.x = bone.data.x;\n bone.y = bone.data.y;\n return;\n case MixBlend.first:\n bone.x += (bone.data.x - bone.x) * alpha;\n bone.y += (bone.data.y - bone.y) * alpha;\n }\n return;\n }\n var x = 0, y = 0;\n var i = Timeline.search(frames, time, 3 /*ENTRIES*/);\n var curveType = this.curves[i / 3 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n var before = frames[i];\n x = frames[i + 1 /*VALUE1*/];\n y = frames[i + 2 /*VALUE2*/];\n var t = (time - before) / (frames[i + 3 /*ENTRIES*/] - before);\n x += (frames[i + 3 /*ENTRIES*/ + 1 /*VALUE1*/] - x) * t;\n y += (frames[i + 3 /*ENTRIES*/ + 2 /*VALUE2*/] - y) * t;\n break;\n case 1 /*STEPPED*/:\n x = frames[i + 1 /*VALUE1*/];\n y = frames[i + 2 /*VALUE2*/];\n break;\n default:\n x = this.getBezierValue(time, i, 1 /*VALUE1*/, curveType - 2 /*BEZIER*/);\n y = this.getBezierValue(time, i, 2 /*VALUE2*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n }\n switch (blend) {\n case MixBlend.setup:\n bone.x = bone.data.x + x * alpha;\n bone.y = bone.data.y + y * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bone.x += (bone.data.x + x - bone.x) * alpha;\n bone.y += (bone.data.y + y - bone.y) * alpha;\n break;\n case MixBlend.add:\n bone.x += x * alpha;\n bone.y += y * alpha;\n }\n };\n return TranslateTimeline;\n}(CurveTimeline2));\nexport { TranslateTimeline };\n/** Changes a bone's local {@link Bone#x}. */\nvar TranslateXTimeline = /** @class */ (function (_super) {\n __extends(TranslateXTimeline, _super);\n function TranslateXTimeline(frameCount, bezierCount, boneIndex) {\n var _this = _super.call(this, frameCount, bezierCount, Property.x + \"|\" + boneIndex) || this;\n _this.boneIndex = 0;\n _this.boneIndex = boneIndex;\n return _this;\n }\n TranslateXTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.x = bone.data.x;\n return;\n case MixBlend.first:\n bone.x += (bone.data.x - bone.x) * alpha;\n }\n return;\n }\n var x = this.getCurveValue(time);\n switch (blend) {\n case MixBlend.setup:\n bone.x = bone.data.x + x * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bone.x += (bone.data.x + x - bone.x) * alpha;\n break;\n case MixBlend.add:\n bone.x += x * alpha;\n }\n };\n return TranslateXTimeline;\n}(CurveTimeline1));\nexport { TranslateXTimeline };\n/** Changes a bone's local {@link Bone#x}. */\nvar TranslateYTimeline = /** @class */ (function (_super) {\n __extends(TranslateYTimeline, _super);\n function TranslateYTimeline(frameCount, bezierCount, boneIndex) {\n var _this = _super.call(this, frameCount, bezierCount, Property.y + \"|\" + boneIndex) || this;\n _this.boneIndex = 0;\n _this.boneIndex = boneIndex;\n return _this;\n }\n TranslateYTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.y = bone.data.y;\n return;\n case MixBlend.first:\n bone.y += (bone.data.y - bone.y) * alpha;\n }\n return;\n }\n var y = this.getCurveValue(time);\n switch (blend) {\n case MixBlend.setup:\n bone.y = bone.data.y + y * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bone.y += (bone.data.y + y - bone.y) * alpha;\n break;\n case MixBlend.add:\n bone.y += y * alpha;\n }\n };\n return TranslateYTimeline;\n}(CurveTimeline1));\nexport { TranslateYTimeline };\n/** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}. */\nvar ScaleTimeline = /** @class */ (function (_super) {\n __extends(ScaleTimeline, _super);\n function ScaleTimeline(frameCount, bezierCount, boneIndex) {\n var _this = _super.call(this, frameCount, bezierCount, Property.scaleX + \"|\" + boneIndex, Property.scaleY + \"|\" + boneIndex) || this;\n _this.boneIndex = 0;\n _this.boneIndex = boneIndex;\n return _this;\n }\n ScaleTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.scaleX = bone.data.scaleX;\n bone.scaleY = bone.data.scaleY;\n return;\n case MixBlend.first:\n bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;\n bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;\n }\n return;\n }\n var x, y;\n var i = Timeline.search(frames, time, 3 /*ENTRIES*/);\n var curveType = this.curves[i / 3 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n var before = frames[i];\n x = frames[i + 1 /*VALUE1*/];\n y = frames[i + 2 /*VALUE2*/];\n var t = (time - before) / (frames[i + 3 /*ENTRIES*/] - before);\n x += (frames[i + 3 /*ENTRIES*/ + 1 /*VALUE1*/] - x) * t;\n y += (frames[i + 3 /*ENTRIES*/ + 2 /*VALUE2*/] - y) * t;\n break;\n case 1 /*STEPPED*/:\n x = frames[i + 1 /*VALUE1*/];\n y = frames[i + 2 /*VALUE2*/];\n break;\n default:\n x = this.getBezierValue(time, i, 1 /*VALUE1*/, curveType - 2 /*BEZIER*/);\n y = this.getBezierValue(time, i, 2 /*VALUE2*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n }\n x *= bone.data.scaleX;\n y *= bone.data.scaleY;\n if (alpha == 1) {\n if (blend == MixBlend.add) {\n bone.scaleX += x - bone.data.scaleX;\n bone.scaleY += y - bone.data.scaleY;\n }\n else {\n bone.scaleX = x;\n bone.scaleY = y;\n }\n }\n else {\n var bx = 0, by = 0;\n if (direction == MixDirection.mixOut) {\n switch (blend) {\n case MixBlend.setup:\n bx = bone.data.scaleX;\n by = bone.data.scaleY;\n bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bx = bone.scaleX;\n by = bone.scaleY;\n bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n break;\n case MixBlend.add:\n bx = bone.scaleX;\n by = bone.scaleY;\n bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bone.data.scaleX) * alpha;\n bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - bone.data.scaleY) * alpha;\n }\n }\n else {\n switch (blend) {\n case MixBlend.setup:\n bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x);\n by = Math.abs(bone.data.scaleY) * MathUtils.signum(y);\n bone.scaleX = bx + (x - bx) * alpha;\n bone.scaleY = by + (y - by) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bx = Math.abs(bone.scaleX) * MathUtils.signum(x);\n by = Math.abs(bone.scaleY) * MathUtils.signum(y);\n bone.scaleX = bx + (x - bx) * alpha;\n bone.scaleY = by + (y - by) * alpha;\n break;\n case MixBlend.add:\n bx = MathUtils.signum(x);\n by = MathUtils.signum(y);\n bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha;\n bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha;\n }\n }\n }\n };\n return ScaleTimeline;\n}(CurveTimeline2));\nexport { ScaleTimeline };\n/** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}. */\nvar ScaleXTimeline = /** @class */ (function (_super) {\n __extends(ScaleXTimeline, _super);\n function ScaleXTimeline(frameCount, bezierCount, boneIndex) {\n var _this = _super.call(this, frameCount, bezierCount, Property.scaleX + \"|\" + boneIndex) || this;\n _this.boneIndex = 0;\n _this.boneIndex = boneIndex;\n return _this;\n }\n ScaleXTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.scaleX = bone.data.scaleX;\n return;\n case MixBlend.first:\n bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;\n }\n return;\n }\n var x = this.getCurveValue(time) * bone.data.scaleX;\n if (alpha == 1) {\n if (blend == MixBlend.add)\n bone.scaleX += x - bone.data.scaleX;\n else\n bone.scaleX = x;\n }\n else {\n // Mixing out uses sign of setup or current pose, else use sign of key.\n var bx = 0;\n if (direction == MixDirection.mixOut) {\n switch (blend) {\n case MixBlend.setup:\n bx = bone.data.scaleX;\n bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bx = bone.scaleX;\n bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n break;\n case MixBlend.add:\n bx = bone.scaleX;\n bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bone.data.scaleX) * alpha;\n }\n }\n else {\n switch (blend) {\n case MixBlend.setup:\n bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x);\n bone.scaleX = bx + (x - bx) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bx = Math.abs(bone.scaleX) * MathUtils.signum(x);\n bone.scaleX = bx + (x - bx) * alpha;\n break;\n case MixBlend.add:\n bx = MathUtils.signum(x);\n bone.scaleX = Math.abs(bone.scaleX) * bx + (x - Math.abs(bone.data.scaleX) * bx) * alpha;\n }\n }\n }\n };\n return ScaleXTimeline;\n}(CurveTimeline1));\nexport { ScaleXTimeline };\n/** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}. */\nvar ScaleYTimeline = /** @class */ (function (_super) {\n __extends(ScaleYTimeline, _super);\n function ScaleYTimeline(frameCount, bezierCount, boneIndex) {\n var _this = _super.call(this, frameCount, bezierCount, Property.scaleY + \"|\" + boneIndex) || this;\n _this.boneIndex = 0;\n _this.boneIndex = boneIndex;\n return _this;\n }\n ScaleYTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.scaleY = bone.data.scaleY;\n return;\n case MixBlend.first:\n bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;\n }\n return;\n }\n var y = this.getCurveValue(time) * bone.data.scaleY;\n if (alpha == 1) {\n if (blend == MixBlend.add)\n bone.scaleY += y - bone.data.scaleY;\n else\n bone.scaleY = y;\n }\n else {\n // Mixing out uses sign of setup or current pose, else use sign of key.\n var by = 0;\n if (direction == MixDirection.mixOut) {\n switch (blend) {\n case MixBlend.setup:\n by = bone.data.scaleY;\n bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n by = bone.scaleY;\n bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n break;\n case MixBlend.add:\n by = bone.scaleY;\n bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - bone.data.scaleY) * alpha;\n }\n }\n else {\n switch (blend) {\n case MixBlend.setup:\n by = Math.abs(bone.data.scaleY) * MathUtils.signum(y);\n bone.scaleY = by + (y - by) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n by = Math.abs(bone.scaleY) * MathUtils.signum(y);\n bone.scaleY = by + (y - by) * alpha;\n break;\n case MixBlend.add:\n by = MathUtils.signum(y);\n bone.scaleY = Math.abs(bone.scaleY) * by + (y - Math.abs(bone.data.scaleY) * by) * alpha;\n }\n }\n }\n };\n return ScaleYTimeline;\n}(CurveTimeline1));\nexport { ScaleYTimeline };\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */\nvar ShearTimeline = /** @class */ (function (_super) {\n __extends(ShearTimeline, _super);\n function ShearTimeline(frameCount, bezierCount, boneIndex) {\n var _this = _super.call(this, frameCount, bezierCount, Property.shearX + \"|\" + boneIndex, Property.shearY + \"|\" + boneIndex) || this;\n _this.boneIndex = 0;\n _this.boneIndex = boneIndex;\n return _this;\n }\n ShearTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.shearX = bone.data.shearX;\n bone.shearY = bone.data.shearY;\n return;\n case MixBlend.first:\n bone.shearX += (bone.data.shearX - bone.shearX) * alpha;\n bone.shearY += (bone.data.shearY - bone.shearY) * alpha;\n }\n return;\n }\n var x = 0, y = 0;\n var i = Timeline.search(frames, time, 3 /*ENTRIES*/);\n var curveType = this.curves[i / 3 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n var before = frames[i];\n x = frames[i + 1 /*VALUE1*/];\n y = frames[i + 2 /*VALUE2*/];\n var t = (time - before) / (frames[i + 3 /*ENTRIES*/] - before);\n x += (frames[i + 3 /*ENTRIES*/ + 1 /*VALUE1*/] - x) * t;\n y += (frames[i + 3 /*ENTRIES*/ + 2 /*VALUE2*/] - y) * t;\n break;\n case 1 /*STEPPED*/:\n x = frames[i + 1 /*VALUE1*/];\n y = frames[i + 2 /*VALUE2*/];\n break;\n default:\n x = this.getBezierValue(time, i, 1 /*VALUE1*/, curveType - 2 /*BEZIER*/);\n y = this.getBezierValue(time, i, 2 /*VALUE2*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n }\n switch (blend) {\n case MixBlend.setup:\n bone.shearX = bone.data.shearX + x * alpha;\n bone.shearY = bone.data.shearY + y * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;\n bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;\n break;\n case MixBlend.add:\n bone.shearX += x * alpha;\n bone.shearY += y * alpha;\n }\n };\n return ShearTimeline;\n}(CurveTimeline2));\nexport { ShearTimeline };\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */\nvar ShearXTimeline = /** @class */ (function (_super) {\n __extends(ShearXTimeline, _super);\n function ShearXTimeline(frameCount, bezierCount, boneIndex) {\n var _this = _super.call(this, frameCount, bezierCount, Property.shearX + \"|\" + boneIndex) || this;\n _this.boneIndex = 0;\n _this.boneIndex = boneIndex;\n return _this;\n }\n ShearXTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.shearX = bone.data.shearX;\n return;\n case MixBlend.first:\n bone.shearX += (bone.data.shearX - bone.shearX) * alpha;\n }\n return;\n }\n var x = this.getCurveValue(time);\n switch (blend) {\n case MixBlend.setup:\n bone.shearX = bone.data.shearX + x * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;\n break;\n case MixBlend.add:\n bone.shearX += x * alpha;\n }\n };\n return ShearXTimeline;\n}(CurveTimeline1));\nexport { ShearXTimeline };\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */\nvar ShearYTimeline = /** @class */ (function (_super) {\n __extends(ShearYTimeline, _super);\n function ShearYTimeline(frameCount, bezierCount, boneIndex) {\n var _this = _super.call(this, frameCount, bezierCount, Property.shearY + \"|\" + boneIndex) || this;\n _this.boneIndex = 0;\n _this.boneIndex = boneIndex;\n return _this;\n }\n ShearYTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.shearY = bone.data.shearY;\n return;\n case MixBlend.first:\n bone.shearY += (bone.data.shearY - bone.shearY) * alpha;\n }\n return;\n }\n var y = this.getCurveValue(time);\n switch (blend) {\n case MixBlend.setup:\n bone.shearY = bone.data.shearY + y * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;\n break;\n case MixBlend.add:\n bone.shearY += y * alpha;\n }\n };\n return ShearYTimeline;\n}(CurveTimeline1));\nexport { ShearYTimeline };\n/** Changes a slot's {@link Slot#color}. */\nvar RGBATimeline = /** @class */ (function (_super) {\n __extends(RGBATimeline, _super);\n function RGBATimeline(frameCount, bezierCount, slotIndex) {\n var _this = _super.call(this, frameCount, bezierCount, [\n Property.rgb + \"|\" + slotIndex,\n Property.alpha + \"|\" + slotIndex\n ]) || this;\n _this.slotIndex = 0;\n _this.slotIndex = slotIndex;\n return _this;\n }\n RGBATimeline.prototype.getFrameEntries = function () {\n return 5 /*ENTRIES*/;\n };\n /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */\n RGBATimeline.prototype.setFrame = function (frame, time, r, g, b, a) {\n frame *= 5 /*ENTRIES*/;\n this.frames[frame] = time;\n this.frames[frame + 1 /*R*/] = r;\n this.frames[frame + 2 /*G*/] = g;\n this.frames[frame + 3 /*B*/] = b;\n this.frames[frame + 4 /*A*/] = a;\n };\n RGBATimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n var frames = this.frames;\n var color = slot.color;\n if (time < frames[0]) {\n var setup = slot.data.color;\n switch (blend) {\n case MixBlend.setup:\n color.setFromColor(setup);\n return;\n case MixBlend.first:\n color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha);\n }\n return;\n }\n var r = 0, g = 0, b = 0, a = 0;\n var i = Timeline.search(frames, time, 5 /*ENTRIES*/);\n var curveType = this.curves[i / 5 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n var before = frames[i];\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n a = frames[i + 4 /*A*/];\n var t = (time - before) / (frames[i + 5 /*ENTRIES*/] - before);\n r += (frames[i + 5 /*ENTRIES*/ + 1 /*R*/] - r) * t;\n g += (frames[i + 5 /*ENTRIES*/ + 2 /*G*/] - g) * t;\n b += (frames[i + 5 /*ENTRIES*/ + 3 /*B*/] - b) * t;\n a += (frames[i + 5 /*ENTRIES*/ + 4 /*A*/] - a) * t;\n break;\n case 1 /*STEPPED*/:\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n a = frames[i + 4 /*A*/];\n break;\n default:\n r = this.getBezierValue(time, i, 1 /*R*/, curveType - 2 /*BEZIER*/);\n g = this.getBezierValue(time, i, 2 /*G*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n b = this.getBezierValue(time, i, 3 /*B*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);\n a = this.getBezierValue(time, i, 4 /*A*/, curveType + 18 /*BEZIER_SIZE*/ * 3 - 2 /*BEZIER*/);\n }\n if (alpha == 1)\n color.set(r, g, b, a);\n else {\n if (blend == MixBlend.setup)\n color.setFromColor(slot.data.color);\n color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha);\n }\n };\n return RGBATimeline;\n}(CurveTimeline));\nexport { RGBATimeline };\n/** Changes a slot's {@link Slot#color}. */\nvar RGBTimeline = /** @class */ (function (_super) {\n __extends(RGBTimeline, _super);\n function RGBTimeline(frameCount, bezierCount, slotIndex) {\n var _this = _super.call(this, frameCount, bezierCount, [\n Property.rgb + \"|\" + slotIndex\n ]) || this;\n _this.slotIndex = 0;\n _this.slotIndex = slotIndex;\n return _this;\n }\n RGBTimeline.prototype.getFrameEntries = function () {\n return 4 /*ENTRIES*/;\n };\n /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */\n RGBTimeline.prototype.setFrame = function (frame, time, r, g, b) {\n frame <<= 2;\n this.frames[frame] = time;\n this.frames[frame + 1 /*R*/] = r;\n this.frames[frame + 2 /*G*/] = g;\n this.frames[frame + 3 /*B*/] = b;\n };\n RGBTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n var frames = this.frames;\n var color = slot.color;\n if (time < frames[0]) {\n var setup = slot.data.color;\n switch (blend) {\n case MixBlend.setup:\n color.r = setup.r;\n color.g = setup.g;\n color.b = setup.b;\n return;\n case MixBlend.first:\n color.r += (setup.r - color.r) * alpha;\n color.g += (setup.g - color.g) * alpha;\n color.b += (setup.b - color.b) * alpha;\n }\n return;\n }\n var r = 0, g = 0, b = 0;\n var i = Timeline.search(frames, time, 4 /*ENTRIES*/);\n var curveType = this.curves[i >> 2];\n switch (curveType) {\n case 0 /*LINEAR*/:\n var before = frames[i];\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n var t = (time - before) / (frames[i + 4 /*ENTRIES*/] - before);\n r += (frames[i + 4 /*ENTRIES*/ + 1 /*R*/] - r) * t;\n g += (frames[i + 4 /*ENTRIES*/ + 2 /*G*/] - g) * t;\n b += (frames[i + 4 /*ENTRIES*/ + 3 /*B*/] - b) * t;\n break;\n case 1 /*STEPPED*/:\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n break;\n default:\n r = this.getBezierValue(time, i, 1 /*R*/, curveType - 2 /*BEZIER*/);\n g = this.getBezierValue(time, i, 2 /*G*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n b = this.getBezierValue(time, i, 3 /*B*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);\n }\n if (alpha == 1) {\n color.r = r;\n color.g = g;\n color.b = b;\n }\n else {\n if (blend == MixBlend.setup) {\n var setup = slot.data.color;\n color.r = setup.r;\n color.g = setup.g;\n color.b = setup.b;\n }\n color.r += (r - color.r) * alpha;\n color.g += (g - color.g) * alpha;\n color.b += (b - color.b) * alpha;\n }\n };\n return RGBTimeline;\n}(CurveTimeline));\nexport { RGBTimeline };\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */\nvar AlphaTimeline = /** @class */ (function (_super) {\n __extends(AlphaTimeline, _super);\n function AlphaTimeline(frameCount, bezierCount, slotIndex) {\n var _this = _super.call(this, frameCount, bezierCount, Property.alpha + \"|\" + slotIndex) || this;\n _this.slotIndex = 0;\n _this.slotIndex = slotIndex;\n return _this;\n }\n AlphaTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n var color = slot.color;\n if (time < this.frames[0]) { // Time is before first frame.\n var setup = slot.data.color;\n switch (blend) {\n case MixBlend.setup:\n color.a = setup.a;\n return;\n case MixBlend.first:\n color.a += (setup.a - color.a) * alpha;\n }\n return;\n }\n var a = this.getCurveValue(time);\n if (alpha == 1)\n color.a = a;\n else {\n if (blend == MixBlend.setup)\n color.a = slot.data.color.a;\n color.a += (a - color.a) * alpha;\n }\n };\n return AlphaTimeline;\n}(CurveTimeline1));\nexport { AlphaTimeline };\n/** Changes a slot's {@link Slot#color} and {@link Slot#darkColor} for two color tinting. */\nvar RGBA2Timeline = /** @class */ (function (_super) {\n __extends(RGBA2Timeline, _super);\n function RGBA2Timeline(frameCount, bezierCount, slotIndex) {\n var _this = _super.call(this, frameCount, bezierCount, [\n Property.rgb + \"|\" + slotIndex,\n Property.alpha + \"|\" + slotIndex,\n Property.rgb2 + \"|\" + slotIndex\n ]) || this;\n _this.slotIndex = 0;\n _this.slotIndex = slotIndex;\n return _this;\n }\n RGBA2Timeline.prototype.getFrameEntries = function () {\n return 8 /*ENTRIES*/;\n };\n /** Sets the time in seconds, light, and dark colors for the specified key frame. */\n RGBA2Timeline.prototype.setFrame = function (frame, time, r, g, b, a, r2, g2, b2) {\n frame <<= 3;\n this.frames[frame] = time;\n this.frames[frame + 1 /*R*/] = r;\n this.frames[frame + 2 /*G*/] = g;\n this.frames[frame + 3 /*B*/] = b;\n this.frames[frame + 4 /*A*/] = a;\n this.frames[frame + 5 /*R2*/] = r2;\n this.frames[frame + 6 /*G2*/] = g2;\n this.frames[frame + 7 /*B2*/] = b2;\n };\n RGBA2Timeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n var frames = this.frames;\n var light = slot.color, dark = slot.darkColor;\n if (time < frames[0]) {\n var setupLight = slot.data.color, setupDark = slot.data.darkColor;\n switch (blend) {\n case MixBlend.setup:\n light.setFromColor(setupLight);\n dark.r = setupDark.r;\n dark.g = setupDark.g;\n dark.b = setupDark.b;\n return;\n case MixBlend.first:\n light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha);\n dark.r += (setupDark.r - dark.r) * alpha;\n dark.g += (setupDark.g - dark.g) * alpha;\n dark.b += (setupDark.b - dark.b) * alpha;\n }\n return;\n }\n var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0;\n var i = Timeline.search(frames, time, 8 /*ENTRIES*/);\n var curveType = this.curves[i >> 3];\n switch (curveType) {\n case 0 /*LINEAR*/:\n var before = frames[i];\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n a = frames[i + 4 /*A*/];\n r2 = frames[i + 5 /*R2*/];\n g2 = frames[i + 6 /*G2*/];\n b2 = frames[i + 7 /*B2*/];\n var t = (time - before) / (frames[i + 8 /*ENTRIES*/] - before);\n r += (frames[i + 8 /*ENTRIES*/ + 1 /*R*/] - r) * t;\n g += (frames[i + 8 /*ENTRIES*/ + 2 /*G*/] - g) * t;\n b += (frames[i + 8 /*ENTRIES*/ + 3 /*B*/] - b) * t;\n a += (frames[i + 8 /*ENTRIES*/ + 4 /*A*/] - a) * t;\n r2 += (frames[i + 8 /*ENTRIES*/ + 5 /*R2*/] - r2) * t;\n g2 += (frames[i + 8 /*ENTRIES*/ + 6 /*G2*/] - g2) * t;\n b2 += (frames[i + 8 /*ENTRIES*/ + 7 /*B2*/] - b2) * t;\n break;\n case 1 /*STEPPED*/:\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n a = frames[i + 4 /*A*/];\n r2 = frames[i + 5 /*R2*/];\n g2 = frames[i + 6 /*G2*/];\n b2 = frames[i + 7 /*B2*/];\n break;\n default:\n r = this.getBezierValue(time, i, 1 /*R*/, curveType - 2 /*BEZIER*/);\n g = this.getBezierValue(time, i, 2 /*G*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n b = this.getBezierValue(time, i, 3 /*B*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);\n a = this.getBezierValue(time, i, 4 /*A*/, curveType + 18 /*BEZIER_SIZE*/ * 3 - 2 /*BEZIER*/);\n r2 = this.getBezierValue(time, i, 5 /*R2*/, curveType + 18 /*BEZIER_SIZE*/ * 4 - 2 /*BEZIER*/);\n g2 = this.getBezierValue(time, i, 6 /*G2*/, curveType + 18 /*BEZIER_SIZE*/ * 5 - 2 /*BEZIER*/);\n b2 = this.getBezierValue(time, i, 7 /*B2*/, curveType + 18 /*BEZIER_SIZE*/ * 6 - 2 /*BEZIER*/);\n }\n if (alpha == 1) {\n light.set(r, g, b, a);\n dark.r = r2;\n dark.g = g2;\n dark.b = b2;\n }\n else {\n if (blend == MixBlend.setup) {\n light.setFromColor(slot.data.color);\n var setupDark = slot.data.darkColor;\n dark.r = setupDark.r;\n dark.g = setupDark.g;\n dark.b = setupDark.b;\n }\n light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);\n dark.r += (r2 - dark.r) * alpha;\n dark.g += (g2 - dark.g) * alpha;\n dark.b += (b2 - dark.b) * alpha;\n }\n };\n return RGBA2Timeline;\n}(CurveTimeline));\nexport { RGBA2Timeline };\n/** Changes a slot's {@link Slot#color} and {@link Slot#darkColor} for two color tinting. */\nvar RGB2Timeline = /** @class */ (function (_super) {\n __extends(RGB2Timeline, _super);\n function RGB2Timeline(frameCount, bezierCount, slotIndex) {\n var _this = _super.call(this, frameCount, bezierCount, [\n Property.rgb + \"|\" + slotIndex,\n Property.rgb2 + \"|\" + slotIndex\n ]) || this;\n _this.slotIndex = 0;\n _this.slotIndex = slotIndex;\n return _this;\n }\n RGB2Timeline.prototype.getFrameEntries = function () {\n return 7 /*ENTRIES*/;\n };\n /** Sets the time in seconds, light, and dark colors for the specified key frame. */\n RGB2Timeline.prototype.setFrame = function (frame, time, r, g, b, r2, g2, b2) {\n frame *= 7 /*ENTRIES*/;\n this.frames[frame] = time;\n this.frames[frame + 1 /*R*/] = r;\n this.frames[frame + 2 /*G*/] = g;\n this.frames[frame + 3 /*B*/] = b;\n this.frames[frame + 4 /*R2*/] = r2;\n this.frames[frame + 5 /*G2*/] = g2;\n this.frames[frame + 6 /*B2*/] = b2;\n };\n RGB2Timeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n var frames = this.frames;\n var light = slot.color, dark = slot.darkColor;\n if (time < frames[0]) {\n var setupLight = slot.data.color, setupDark = slot.data.darkColor;\n switch (blend) {\n case MixBlend.setup:\n light.r = setupLight.r;\n light.g = setupLight.g;\n light.b = setupLight.b;\n dark.r = setupDark.r;\n dark.g = setupDark.g;\n dark.b = setupDark.b;\n return;\n case MixBlend.first:\n light.r += (setupLight.r - light.r) * alpha;\n light.g += (setupLight.g - light.g) * alpha;\n light.b += (setupLight.b - light.b) * alpha;\n dark.r += (setupDark.r - dark.r) * alpha;\n dark.g += (setupDark.g - dark.g) * alpha;\n dark.b += (setupDark.b - dark.b) * alpha;\n }\n return;\n }\n var r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0;\n var i = Timeline.search(frames, time, 7 /*ENTRIES*/);\n var curveType = this.curves[i / 7 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n var before = frames[i];\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n r2 = frames[i + 4 /*R2*/];\n g2 = frames[i + 5 /*G2*/];\n b2 = frames[i + 6 /*B2*/];\n var t = (time - before) / (frames[i + 7 /*ENTRIES*/] - before);\n r += (frames[i + 7 /*ENTRIES*/ + 1 /*R*/] - r) * t;\n g += (frames[i + 7 /*ENTRIES*/ + 2 /*G*/] - g) * t;\n b += (frames[i + 7 /*ENTRIES*/ + 3 /*B*/] - b) * t;\n r2 += (frames[i + 7 /*ENTRIES*/ + 4 /*R2*/] - r2) * t;\n g2 += (frames[i + 7 /*ENTRIES*/ + 5 /*G2*/] - g2) * t;\n b2 += (frames[i + 7 /*ENTRIES*/ + 6 /*B2*/] - b2) * t;\n break;\n case 1 /*STEPPED*/:\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n r2 = frames[i + 4 /*R2*/];\n g2 = frames[i + 5 /*G2*/];\n b2 = frames[i + 6 /*B2*/];\n break;\n default:\n r = this.getBezierValue(time, i, 1 /*R*/, curveType - 2 /*BEZIER*/);\n g = this.getBezierValue(time, i, 2 /*G*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n b = this.getBezierValue(time, i, 3 /*B*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);\n r2 = this.getBezierValue(time, i, 4 /*R2*/, curveType + 18 /*BEZIER_SIZE*/ * 3 - 2 /*BEZIER*/);\n g2 = this.getBezierValue(time, i, 5 /*G2*/, curveType + 18 /*BEZIER_SIZE*/ * 4 - 2 /*BEZIER*/);\n b2 = this.getBezierValue(time, i, 6 /*B2*/, curveType + 18 /*BEZIER_SIZE*/ * 5 - 2 /*BEZIER*/);\n }\n if (alpha == 1) {\n light.r = r;\n light.g = g;\n light.b = b;\n dark.r = r2;\n dark.g = g2;\n dark.b = b2;\n }\n else {\n if (blend == MixBlend.setup) {\n var setupLight = slot.data.color, setupDark = slot.data.darkColor;\n light.r = setupLight.r;\n light.g = setupLight.g;\n light.b = setupLight.b;\n dark.r = setupDark.r;\n dark.g = setupDark.g;\n dark.b = setupDark.b;\n }\n light.r += (r - light.r) * alpha;\n light.g += (g - light.g) * alpha;\n light.b += (b - light.b) * alpha;\n dark.r += (r2 - dark.r) * alpha;\n dark.g += (g2 - dark.g) * alpha;\n dark.b += (b2 - dark.b) * alpha;\n }\n };\n return RGB2Timeline;\n}(CurveTimeline));\nexport { RGB2Timeline };\n/** Changes a slot's {@link Slot#attachment}. */\nvar AttachmentTimeline = /** @class */ (function (_super) {\n __extends(AttachmentTimeline, _super);\n function AttachmentTimeline(frameCount, slotIndex) {\n var _this = _super.call(this, frameCount, [\n Property.attachment + \"|\" + slotIndex\n ]) || this;\n _this.slotIndex = 0;\n _this.slotIndex = slotIndex;\n _this.attachmentNames = new Array(frameCount);\n return _this;\n }\n AttachmentTimeline.prototype.getFrameCount = function () {\n return this.frames.length;\n };\n /** Sets the time in seconds and the attachment name for the specified key frame. */\n AttachmentTimeline.prototype.setFrame = function (frame, time, attachmentName) {\n this.frames[frame] = time;\n this.attachmentNames[frame] = attachmentName;\n };\n AttachmentTimeline.prototype.apply = function (skeleton, lastTime, time, events, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n if (direction == MixDirection.mixOut) {\n if (blend == MixBlend.setup)\n this.setAttachment(skeleton, slot, slot.data.attachmentName);\n return;\n }\n if (time < this.frames[0]) {\n if (blend == MixBlend.setup || blend == MixBlend.first)\n this.setAttachment(skeleton, slot, slot.data.attachmentName);\n return;\n }\n this.setAttachment(skeleton, slot, this.attachmentNames[Timeline.search1(this.frames, time)]);\n };\n AttachmentTimeline.prototype.setAttachment = function (skeleton, slot, attachmentName) {\n slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName));\n };\n return AttachmentTimeline;\n}(Timeline));\nexport { AttachmentTimeline };\n/** Changes a slot's {@link Slot#deform} to deform a {@link VertexAttachment}. */\nvar DeformTimeline = /** @class */ (function (_super) {\n __extends(DeformTimeline, _super);\n function DeformTimeline(frameCount, bezierCount, slotIndex, attachment) {\n var _this = _super.call(this, frameCount, bezierCount, [\n Property.deform + \"|\" + slotIndex + \"|\" + attachment.id\n ]) || this;\n _this.slotIndex = 0;\n _this.slotIndex = slotIndex;\n _this.attachment = attachment;\n _this.vertices = new Array(frameCount);\n return _this;\n }\n DeformTimeline.prototype.getFrameCount = function () {\n return this.frames.length;\n };\n /** Sets the time in seconds and the vertices for the specified key frame.\n * @param vertices Vertex positions for an unweighted VertexAttachment, or deform offsets if it has weights. */\n DeformTimeline.prototype.setFrame = function (frame, time, vertices) {\n this.frames[frame] = time;\n this.vertices[frame] = vertices;\n };\n /** @param value1 Ignored (0 is used for a deform timeline).\n * @param value2 Ignored (1 is used for a deform timeline). */\n DeformTimeline.prototype.setBezier = function (bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) {\n var curves = this.curves;\n var i = this.getFrameCount() + bezier * 18 /*BEZIER_SIZE*/;\n if (value == 0)\n curves[frame] = 2 /*BEZIER*/ + i;\n var tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = cy2 * 0.03 - cy1 * 0.06;\n var dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006, dddy = (cy1 - cy2 + 0.33333333) * 0.018;\n var ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy;\n var dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = cy1 * 0.3 + tmpy + dddy * 0.16666667;\n var x = time1 + dx, y = dy;\n for (var n = i + 18 /*BEZIER_SIZE*/; i < n; i += 2) {\n curves[i] = x;\n curves[i + 1] = y;\n dx += ddx;\n dy += ddy;\n ddx += dddx;\n ddy += dddy;\n x += dx;\n y += dy;\n }\n };\n DeformTimeline.prototype.getCurvePercent = function (time, frame) {\n var curves = this.curves;\n var i = curves[frame];\n switch (i) {\n case 0 /*LINEAR*/:\n var x_3 = this.frames[frame];\n return (time - x_3) / (this.frames[frame + this.getFrameEntries()] - x_3);\n case 1 /*STEPPED*/:\n return 0;\n }\n i -= 2 /*BEZIER*/;\n if (curves[i] > time) {\n var x_4 = this.frames[frame];\n return curves[i + 1] * (time - x_4) / (curves[i] - x_4);\n }\n var n = i + 18 /*BEZIER_SIZE*/;\n for (i += 2; i < n; i += 2) {\n if (curves[i] >= time) {\n var x_5 = curves[i - 2], y_3 = curves[i - 1];\n return y_3 + (time - x_5) / (curves[i] - x_5) * (curves[i + 1] - y_3);\n }\n }\n var x = curves[n - 2], y = curves[n - 1];\n return y + (1 - y) * (time - x) / (this.frames[frame + this.getFrameEntries()] - x);\n };\n DeformTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n var slotAttachment = slot.getAttachment();\n if (!(slotAttachment instanceof VertexAttachment) || slotAttachment.deformAttachment != this.attachment)\n return;\n var deform = slot.deform;\n if (deform.length == 0)\n blend = MixBlend.setup;\n var vertices = this.vertices;\n var vertexCount = vertices[0].length;\n var frames = this.frames;\n if (time < frames[0]) {\n var vertexAttachment = slotAttachment;\n switch (blend) {\n case MixBlend.setup:\n deform.length = 0;\n return;\n case MixBlend.first:\n if (alpha == 1) {\n deform.length = 0;\n return;\n }\n deform.length = vertexCount;\n if (!vertexAttachment.bones) {\n // Unweighted vertex positions.\n var setupVertices = vertexAttachment.vertices;\n for (var i = 0; i < vertexCount; i++)\n deform[i] += (setupVertices[i] - deform[i]) * alpha;\n }\n else {\n // Weighted deform offsets.\n alpha = 1 - alpha;\n for (var i = 0; i < vertexCount; i++)\n deform[i] *= alpha;\n }\n }\n return;\n }\n deform.length = vertexCount;\n if (time >= frames[frames.length - 1]) { // Time is after last frame.\n var lastVertices = vertices[frames.length - 1];\n if (alpha == 1) {\n if (blend == MixBlend.add) {\n var vertexAttachment = slotAttachment;\n if (!vertexAttachment.bones) {\n // Unweighted vertex positions, with alpha.\n var setupVertices = vertexAttachment.vertices;\n for (var i_1 = 0; i_1 < vertexCount; i_1++)\n deform[i_1] += lastVertices[i_1] - setupVertices[i_1];\n }\n else {\n // Weighted deform offsets, with alpha.\n for (var i_2 = 0; i_2 < vertexCount; i_2++)\n deform[i_2] += lastVertices[i_2];\n }\n }\n else\n Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount);\n }\n else {\n switch (blend) {\n case MixBlend.setup: {\n var vertexAttachment_1 = slotAttachment;\n if (!vertexAttachment_1.bones) {\n // Unweighted vertex positions, with alpha.\n var setupVertices = vertexAttachment_1.vertices;\n for (var i_3 = 0; i_3 < vertexCount; i_3++) {\n var setup = setupVertices[i_3];\n deform[i_3] = setup + (lastVertices[i_3] - setup) * alpha;\n }\n }\n else {\n // Weighted deform offsets, with alpha.\n for (var i_4 = 0; i_4 < vertexCount; i_4++)\n deform[i_4] = lastVertices[i_4] * alpha;\n }\n break;\n }\n case MixBlend.first:\n case MixBlend.replace:\n for (var i_5 = 0; i_5 < vertexCount; i_5++)\n deform[i_5] += (lastVertices[i_5] - deform[i_5]) * alpha;\n break;\n case MixBlend.add:\n var vertexAttachment = slotAttachment;\n if (!vertexAttachment.bones) {\n // Unweighted vertex positions, with alpha.\n var setupVertices = vertexAttachment.vertices;\n for (var i_6 = 0; i_6 < vertexCount; i_6++)\n deform[i_6] += (lastVertices[i_6] - setupVertices[i_6]) * alpha;\n }\n else {\n // Weighted deform offsets, with alpha.\n for (var i_7 = 0; i_7 < vertexCount; i_7++)\n deform[i_7] += lastVertices[i_7] * alpha;\n }\n }\n }\n return;\n }\n // Interpolate between the previous frame and the current frame.\n var frame = Timeline.search1(frames, time);\n var percent = this.getCurvePercent(time, frame);\n var prevVertices = vertices[frame];\n var nextVertices = vertices[frame + 1];\n if (alpha == 1) {\n if (blend == MixBlend.add) {\n var vertexAttachment = slotAttachment;\n if (!vertexAttachment.bones) {\n // Unweighted vertex positions, with alpha.\n var setupVertices = vertexAttachment.vertices;\n for (var i_8 = 0; i_8 < vertexCount; i_8++) {\n var prev = prevVertices[i_8];\n deform[i_8] += prev + (nextVertices[i_8] - prev) * percent - setupVertices[i_8];\n }\n }\n else {\n // Weighted deform offsets, with alpha.\n for (var i_9 = 0; i_9 < vertexCount; i_9++) {\n var prev = prevVertices[i_9];\n deform[i_9] += prev + (nextVertices[i_9] - prev) * percent;\n }\n }\n }\n else {\n for (var i_10 = 0; i_10 < vertexCount; i_10++) {\n var prev = prevVertices[i_10];\n deform[i_10] = prev + (nextVertices[i_10] - prev) * percent;\n }\n }\n }\n else {\n switch (blend) {\n case MixBlend.setup: {\n var vertexAttachment_2 = slotAttachment;\n if (!vertexAttachment_2.bones) {\n // Unweighted vertex positions, with alpha.\n var setupVertices = vertexAttachment_2.vertices;\n for (var i_11 = 0; i_11 < vertexCount; i_11++) {\n var prev = prevVertices[i_11], setup = setupVertices[i_11];\n deform[i_11] = setup + (prev + (nextVertices[i_11] - prev) * percent - setup) * alpha;\n }\n }\n else {\n // Weighted deform offsets, with alpha.\n for (var i_12 = 0; i_12 < vertexCount; i_12++) {\n var prev = prevVertices[i_12];\n deform[i_12] = (prev + (nextVertices[i_12] - prev) * percent) * alpha;\n }\n }\n break;\n }\n case MixBlend.first:\n case MixBlend.replace:\n for (var i_13 = 0; i_13 < vertexCount; i_13++) {\n var prev = prevVertices[i_13];\n deform[i_13] += (prev + (nextVertices[i_13] - prev) * percent - deform[i_13]) * alpha;\n }\n break;\n case MixBlend.add:\n var vertexAttachment = slotAttachment;\n if (!vertexAttachment.bones) {\n // Unweighted vertex positions, with alpha.\n var setupVertices = vertexAttachment.vertices;\n for (var i_14 = 0; i_14 < vertexCount; i_14++) {\n var prev = prevVertices[i_14];\n deform[i_14] += (prev + (nextVertices[i_14] - prev) * percent - setupVertices[i_14]) * alpha;\n }\n }\n else {\n // Weighted deform offsets, with alpha.\n for (var i_15 = 0; i_15 < vertexCount; i_15++) {\n var prev = prevVertices[i_15];\n deform[i_15] += (prev + (nextVertices[i_15] - prev) * percent) * alpha;\n }\n }\n }\n }\n };\n return DeformTimeline;\n}(CurveTimeline));\nexport { DeformTimeline };\n/** Fires an {@link Event} when specific animation times are reached. */\nvar EventTimeline = /** @class */ (function (_super) {\n __extends(EventTimeline, _super);\n function EventTimeline(frameCount) {\n var _this = _super.call(this, frameCount, EventTimeline.propertyIds) || this;\n _this.events = new Array(frameCount);\n return _this;\n }\n EventTimeline.prototype.getFrameCount = function () {\n return this.frames.length;\n };\n /** Sets the time in seconds and the event for the specified key frame. */\n EventTimeline.prototype.setFrame = function (frame, event) {\n this.frames[frame] = event.time;\n this.events[frame] = event;\n };\n /** Fires events for frames > `lastTime` and <= `time`. */\n EventTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n if (!firedEvents)\n return;\n var frames = this.frames;\n var frameCount = this.frames.length;\n if (lastTime > time) { // Fire events after last time for looped animations.\n this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction);\n lastTime = -1;\n }\n else if (lastTime >= frames[frameCount - 1]) // Last time is after last frame.\n return;\n if (time < frames[0])\n return; // Time is before first frame.\n var i = 0;\n if (lastTime < frames[0])\n i = 0;\n else {\n i = Timeline.search1(frames, lastTime) + 1;\n var frameTime = frames[i];\n while (i > 0) { // Fire multiple events with the same frame.\n if (frames[i - 1] != frameTime)\n break;\n i--;\n }\n }\n for (; i < frameCount && time >= frames[i]; i++)\n firedEvents.push(this.events[i]);\n };\n EventTimeline.propertyIds = [\"\" + Property.event];\n return EventTimeline;\n}(Timeline));\nexport { EventTimeline };\n/** Changes a skeleton's {@link Skeleton#drawOrder}. */\nvar DrawOrderTimeline = /** @class */ (function (_super) {\n __extends(DrawOrderTimeline, _super);\n function DrawOrderTimeline(frameCount) {\n var _this = _super.call(this, frameCount, DrawOrderTimeline.propertyIds) || this;\n _this.drawOrders = new Array(frameCount);\n return _this;\n }\n DrawOrderTimeline.prototype.getFrameCount = function () {\n return this.frames.length;\n };\n /** Sets the time in seconds and the draw order for the specified key frame.\n * @param drawOrder For each slot in {@link Skeleton#slots}, the index of the new draw order. May be null to use setup pose\n * draw order. */\n DrawOrderTimeline.prototype.setFrame = function (frame, time, drawOrder) {\n this.frames[frame] = time;\n this.drawOrders[frame] = drawOrder;\n };\n DrawOrderTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n if (direction == MixDirection.mixOut) {\n if (blend == MixBlend.setup)\n Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n return;\n }\n if (time < this.frames[0]) {\n if (blend == MixBlend.setup || blend == MixBlend.first)\n Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n return;\n }\n var drawOrderToSetupIndex = this.drawOrders[Timeline.search1(this.frames, time)];\n if (!drawOrderToSetupIndex)\n Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n else {\n var drawOrder = skeleton.drawOrder;\n var slots = skeleton.slots;\n for (var i = 0, n = drawOrderToSetupIndex.length; i < n; i++)\n drawOrder[i] = slots[drawOrderToSetupIndex[i]];\n }\n };\n DrawOrderTimeline.propertyIds = [\"\" + Property.drawOrder];\n return DrawOrderTimeline;\n}(Timeline));\nexport { DrawOrderTimeline };\n/** Changes an IK constraint's {@link IkConstraint#mix}, {@link IkConstraint#softness},\n * {@link IkConstraint#bendDirection}, {@link IkConstraint#stretch}, and {@link IkConstraint#compress}. */\nvar IkConstraintTimeline = /** @class */ (function (_super) {\n __extends(IkConstraintTimeline, _super);\n function IkConstraintTimeline(frameCount, bezierCount, ikConstraintIndex) {\n var _this = _super.call(this, frameCount, bezierCount, [\n Property.ikConstraint + \"|\" + ikConstraintIndex\n ]) || this;\n _this.ikConstraintIndex = ikConstraintIndex;\n return _this;\n }\n IkConstraintTimeline.prototype.getFrameEntries = function () {\n return 6 /*ENTRIES*/;\n };\n /** Sets the time in seconds, mix, softness, bend direction, compress, and stretch for the specified key frame. */\n IkConstraintTimeline.prototype.setFrame = function (frame, time, mix, softness, bendDirection, compress, stretch) {\n frame *= 6 /*ENTRIES*/;\n this.frames[frame] = time;\n this.frames[frame + 1 /*MIX*/] = mix;\n this.frames[frame + 2 /*SOFTNESS*/] = softness;\n this.frames[frame + 3 /*BEND_DIRECTION*/] = bendDirection;\n this.frames[frame + 4 /*COMPRESS*/] = compress ? 1 : 0;\n this.frames[frame + 5 /*STRETCH*/] = stretch ? 1 : 0;\n };\n IkConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var constraint = skeleton.ikConstraints[this.ikConstraintIndex];\n if (!constraint.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.mix = constraint.data.mix;\n constraint.softness = constraint.data.softness;\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n return;\n case MixBlend.first:\n constraint.mix += (constraint.data.mix - constraint.mix) * alpha;\n constraint.softness += (constraint.data.softness - constraint.softness) * alpha;\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n }\n return;\n }\n var mix = 0, softness = 0;\n var i = Timeline.search(frames, time, 6 /*ENTRIES*/);\n var curveType = this.curves[i / 6 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n var before = frames[i];\n mix = frames[i + 1 /*MIX*/];\n softness = frames[i + 2 /*SOFTNESS*/];\n var t = (time - before) / (frames[i + 6 /*ENTRIES*/] - before);\n mix += (frames[i + 6 /*ENTRIES*/ + 1 /*MIX*/] - mix) * t;\n softness += (frames[i + 6 /*ENTRIES*/ + 2 /*SOFTNESS*/] - softness) * t;\n break;\n case 1 /*STEPPED*/:\n mix = frames[i + 1 /*MIX*/];\n softness = frames[i + 2 /*SOFTNESS*/];\n break;\n default:\n mix = this.getBezierValue(time, i, 1 /*MIX*/, curveType - 2 /*BEZIER*/);\n softness = this.getBezierValue(time, i, 2 /*SOFTNESS*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n }\n if (blend == MixBlend.setup) {\n constraint.mix = constraint.data.mix + (mix - constraint.data.mix) * alpha;\n constraint.softness = constraint.data.softness + (softness - constraint.data.softness) * alpha;\n if (direction == MixDirection.mixOut) {\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n }\n else {\n constraint.bendDirection = frames[i + 3 /*BEND_DIRECTION*/];\n constraint.compress = frames[i + 4 /*COMPRESS*/] != 0;\n constraint.stretch = frames[i + 5 /*STRETCH*/] != 0;\n }\n }\n else {\n constraint.mix += (mix - constraint.mix) * alpha;\n constraint.softness += (softness - constraint.softness) * alpha;\n if (direction == MixDirection.mixIn) {\n constraint.bendDirection = frames[i + 3 /*BEND_DIRECTION*/];\n constraint.compress = frames[i + 4 /*COMPRESS*/] != 0;\n constraint.stretch = frames[i + 5 /*STRETCH*/] != 0;\n }\n }\n };\n return IkConstraintTimeline;\n}(CurveTimeline));\nexport { IkConstraintTimeline };\n/** Changes a transform constraint's {@link TransformConstraint#rotateMix}, {@link TransformConstraint#translateMix},\n * {@link TransformConstraint#scaleMix}, and {@link TransformConstraint#shearMix}. */\nvar TransformConstraintTimeline = /** @class */ (function (_super) {\n __extends(TransformConstraintTimeline, _super);\n function TransformConstraintTimeline(frameCount, bezierCount, transformConstraintIndex) {\n var _this = _super.call(this, frameCount, bezierCount, [\n Property.transformConstraint + \"|\" + transformConstraintIndex\n ]) || this;\n _this.transformConstraintIndex = transformConstraintIndex;\n return _this;\n }\n TransformConstraintTimeline.prototype.getFrameEntries = function () {\n return 7 /*ENTRIES*/;\n };\n /** The time in seconds, rotate mix, translate mix, scale mix, and shear mix for the specified key frame. */\n TransformConstraintTimeline.prototype.setFrame = function (frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY) {\n var frames = this.frames;\n frame *= 7 /*ENTRIES*/;\n frames[frame] = time;\n frames[frame + 1 /*ROTATE*/] = mixRotate;\n frames[frame + 2 /*X*/] = mixX;\n frames[frame + 3 /*Y*/] = mixY;\n frames[frame + 4 /*SCALEX*/] = mixScaleX;\n frames[frame + 5 /*SCALEY*/] = mixScaleY;\n frames[frame + 6 /*SHEARY*/] = mixShearY;\n };\n TransformConstraintTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var constraint = skeleton.transformConstraints[this.transformConstraintIndex];\n if (!constraint.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n var data = constraint.data;\n switch (blend) {\n case MixBlend.setup:\n constraint.mixRotate = data.mixRotate;\n constraint.mixX = data.mixX;\n constraint.mixY = data.mixY;\n constraint.mixScaleX = data.mixScaleX;\n constraint.mixScaleY = data.mixScaleY;\n constraint.mixShearY = data.mixShearY;\n return;\n case MixBlend.first:\n constraint.mixRotate += (data.mixRotate - constraint.mixRotate) * alpha;\n constraint.mixX += (data.mixX - constraint.mixX) * alpha;\n constraint.mixY += (data.mixY - constraint.mixY) * alpha;\n constraint.mixScaleX += (data.mixScaleX - constraint.mixScaleX) * alpha;\n constraint.mixScaleY += (data.mixScaleY - constraint.mixScaleY) * alpha;\n constraint.mixShearY += (data.mixShearY - constraint.mixShearY) * alpha;\n }\n return;\n }\n var rotate, x, y, scaleX, scaleY, shearY;\n var i = Timeline.search(frames, time, 7 /*ENTRIES*/);\n var curveType = this.curves[i / 7 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n var before = frames[i];\n rotate = frames[i + 1 /*ROTATE*/];\n x = frames[i + 2 /*X*/];\n y = frames[i + 3 /*Y*/];\n scaleX = frames[i + 4 /*SCALEX*/];\n scaleY = frames[i + 5 /*SCALEY*/];\n shearY = frames[i + 6 /*SHEARY*/];\n var t = (time - before) / (frames[i + 7 /*ENTRIES*/] - before);\n rotate += (frames[i + 7 /*ENTRIES*/ + 1 /*ROTATE*/] - rotate) * t;\n x += (frames[i + 7 /*ENTRIES*/ + 2 /*X*/] - x) * t;\n y += (frames[i + 7 /*ENTRIES*/ + 3 /*Y*/] - y) * t;\n scaleX += (frames[i + 7 /*ENTRIES*/ + 4 /*SCALEX*/] - scaleX) * t;\n scaleY += (frames[i + 7 /*ENTRIES*/ + 5 /*SCALEY*/] - scaleY) * t;\n shearY += (frames[i + 7 /*ENTRIES*/ + 6 /*SHEARY*/] - shearY) * t;\n break;\n case 1 /*STEPPED*/:\n rotate = frames[i + 1 /*ROTATE*/];\n x = frames[i + 2 /*X*/];\n y = frames[i + 3 /*Y*/];\n scaleX = frames[i + 4 /*SCALEX*/];\n scaleY = frames[i + 5 /*SCALEY*/];\n shearY = frames[i + 6 /*SHEARY*/];\n break;\n default:\n rotate = this.getBezierValue(time, i, 1 /*ROTATE*/, curveType - 2 /*BEZIER*/);\n x = this.getBezierValue(time, i, 2 /*X*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n y = this.getBezierValue(time, i, 3 /*Y*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);\n scaleX = this.getBezierValue(time, i, 4 /*SCALEX*/, curveType + 18 /*BEZIER_SIZE*/ * 3 - 2 /*BEZIER*/);\n scaleY = this.getBezierValue(time, i, 5 /*SCALEY*/, curveType + 18 /*BEZIER_SIZE*/ * 4 - 2 /*BEZIER*/);\n shearY = this.getBezierValue(time, i, 6 /*SHEARY*/, curveType + 18 /*BEZIER_SIZE*/ * 5 - 2 /*BEZIER*/);\n }\n if (blend == MixBlend.setup) {\n var data = constraint.data;\n constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha;\n constraint.mixX = data.mixX + (x - data.mixX) * alpha;\n constraint.mixY = data.mixY + (y - data.mixY) * alpha;\n constraint.mixScaleX = data.mixScaleX + (scaleX - data.mixScaleX) * alpha;\n constraint.mixScaleY = data.mixScaleY + (scaleY - data.mixScaleY) * alpha;\n constraint.mixShearY = data.mixShearY + (shearY - data.mixShearY) * alpha;\n }\n else {\n constraint.mixRotate += (rotate - constraint.mixRotate) * alpha;\n constraint.mixX += (x - constraint.mixX) * alpha;\n constraint.mixY += (y - constraint.mixY) * alpha;\n constraint.mixScaleX += (scaleX - constraint.mixScaleX) * alpha;\n constraint.mixScaleY += (scaleY - constraint.mixScaleY) * alpha;\n constraint.mixShearY += (shearY - constraint.mixShearY) * alpha;\n }\n };\n return TransformConstraintTimeline;\n}(CurveTimeline));\nexport { TransformConstraintTimeline };\n/** Changes a path constraint's {@link PathConstraint#position}. */\nvar PathConstraintPositionTimeline = /** @class */ (function (_super) {\n __extends(PathConstraintPositionTimeline, _super);\n function PathConstraintPositionTimeline(frameCount, bezierCount, pathConstraintIndex) {\n var _this = _super.call(this, frameCount, bezierCount, Property.pathConstraintPosition + \"|\" + pathConstraintIndex) || this;\n _this.pathConstraintIndex = pathConstraintIndex;\n return _this;\n }\n PathConstraintPositionTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n if (!constraint.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.position = constraint.data.position;\n return;\n case MixBlend.first:\n constraint.position += (constraint.data.position - constraint.position) * alpha;\n }\n return;\n }\n var position = this.getCurveValue(time);\n if (blend == MixBlend.setup)\n constraint.position = constraint.data.position + (position - constraint.data.position) * alpha;\n else\n constraint.position += (position - constraint.position) * alpha;\n };\n return PathConstraintPositionTimeline;\n}(CurveTimeline1));\nexport { PathConstraintPositionTimeline };\n/** Changes a path constraint's {@link PathConstraint#spacing}. */\nvar PathConstraintSpacingTimeline = /** @class */ (function (_super) {\n __extends(PathConstraintSpacingTimeline, _super);\n function PathConstraintSpacingTimeline(frameCount, bezierCount, pathConstraintIndex) {\n var _this = _super.call(this, frameCount, bezierCount, Property.pathConstraintSpacing + \"|\" + pathConstraintIndex) || this;\n /** The index of the path constraint slot in {@link Skeleton#getPathConstraints()} that will be changed. */\n _this.pathConstraintIndex = 0;\n _this.pathConstraintIndex = pathConstraintIndex;\n return _this;\n }\n PathConstraintSpacingTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n if (!constraint.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.spacing = constraint.data.spacing;\n return;\n case MixBlend.first:\n constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha;\n }\n return;\n }\n var spacing = this.getCurveValue(time);\n if (blend == MixBlend.setup)\n constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha;\n else\n constraint.spacing += (spacing - constraint.spacing) * alpha;\n };\n return PathConstraintSpacingTimeline;\n}(CurveTimeline1));\nexport { PathConstraintSpacingTimeline };\n/** Changes a transform constraint's {@link PathConstraint#getMixRotate()}, {@link PathConstraint#getMixX()}, and\n * {@link PathConstraint#getMixY()}. */\nvar PathConstraintMixTimeline = /** @class */ (function (_super) {\n __extends(PathConstraintMixTimeline, _super);\n function PathConstraintMixTimeline(frameCount, bezierCount, pathConstraintIndex) {\n var _this = _super.call(this, frameCount, bezierCount, [\n Property.pathConstraintMix + \"|\" + pathConstraintIndex\n ]) || this;\n /** The index of the path constraint slot in {@link Skeleton#getPathConstraints()} that will be changed. */\n _this.pathConstraintIndex = 0;\n _this.pathConstraintIndex = pathConstraintIndex;\n return _this;\n }\n PathConstraintMixTimeline.prototype.getFrameEntries = function () {\n return 4 /*ENTRIES*/;\n };\n PathConstraintMixTimeline.prototype.setFrame = function (frame, time, mixRotate, mixX, mixY) {\n var frames = this.frames;\n frame <<= 2;\n frames[frame] = time;\n frames[frame + 1 /*ROTATE*/] = mixRotate;\n frames[frame + 2 /*X*/] = mixX;\n frames[frame + 3 /*Y*/] = mixY;\n };\n PathConstraintMixTimeline.prototype.apply = function (skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n var constraint = skeleton.pathConstraints[this.pathConstraintIndex];\n if (!constraint.active)\n return;\n var frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.mixRotate = constraint.data.mixRotate;\n constraint.mixX = constraint.data.mixX;\n constraint.mixY = constraint.data.mixY;\n return;\n case MixBlend.first:\n constraint.mixRotate += (constraint.data.mixRotate - constraint.mixRotate) * alpha;\n constraint.mixX += (constraint.data.mixX - constraint.mixX) * alpha;\n constraint.mixY += (constraint.data.mixY - constraint.mixY) * alpha;\n }\n return;\n }\n var rotate, x, y;\n var i = Timeline.search(frames, time, 4 /*ENTRIES*/);\n var curveType = this.curves[i >> 2];\n switch (curveType) {\n case 0 /*LINEAR*/:\n var before = frames[i];\n rotate = frames[i + 1 /*ROTATE*/];\n x = frames[i + 2 /*X*/];\n y = frames[i + 3 /*Y*/];\n var t = (time - before) / (frames[i + 4 /*ENTRIES*/] - before);\n rotate += (frames[i + 4 /*ENTRIES*/ + 1 /*ROTATE*/] - rotate) * t;\n x += (frames[i + 4 /*ENTRIES*/ + 2 /*X*/] - x) * t;\n y += (frames[i + 4 /*ENTRIES*/ + 3 /*Y*/] - y) * t;\n break;\n case 1 /*STEPPED*/:\n rotate = frames[i + 1 /*ROTATE*/];\n x = frames[i + 2 /*X*/];\n y = frames[i + 3 /*Y*/];\n break;\n default:\n rotate = this.getBezierValue(time, i, 1 /*ROTATE*/, curveType - 2 /*BEZIER*/);\n x = this.getBezierValue(time, i, 2 /*X*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n y = this.getBezierValue(time, i, 3 /*Y*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);\n }\n if (blend == MixBlend.setup) {\n var data = constraint.data;\n constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha;\n constraint.mixX = data.mixX + (x - data.mixX) * alpha;\n constraint.mixY = data.mixY + (y - data.mixY) * alpha;\n }\n else {\n constraint.mixRotate += (rotate - constraint.mixRotate) * alpha;\n constraint.mixX += (x - constraint.mixX) * alpha;\n constraint.mixY += (y - constraint.mixY) * alpha;\n }\n };\n return PathConstraintMixTimeline;\n}(CurveTimeline));\nexport { PathConstraintMixTimeline };\n//# sourceMappingURL=Animation.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Animation, MixBlend, AttachmentTimeline, MixDirection, RotateTimeline, DrawOrderTimeline, Timeline, EventTimeline } from \"./Animation\";\nimport { StringSet, Pool, Utils, MathUtils } from \"./Utils\";\n/** Applies animations over time, queues animations for later playback, mixes (crossfading) between animations, and applies\n * multiple animations on top of each other (layering).\n *\n * See [Applying Animations](http://esotericsoftware.com/spine-applying-animations/) in the Spine Runtimes Guide. */\nvar AnimationState = /** @class */ (function () {\n function AnimationState(data) {\n /** The list of tracks that currently have animations, which may contain null entries. */\n this.tracks = new Array();\n /** Multiplier for the delta time when the animation state is updated, causing time for all animations and mixes to play slower\n * or faster. Defaults to 1.\n *\n * See TrackEntry {@link TrackEntry#timeScale} for affecting a single animation. */\n this.timeScale = 1;\n this.unkeyedState = 0;\n this.events = new Array();\n this.listeners = new Array();\n this.queue = new EventQueue(this);\n this.propertyIDs = new StringSet();\n this.animationsChanged = false;\n this.trackEntryPool = new Pool(function () { return new TrackEntry(); });\n this.data = data;\n }\n AnimationState.emptyAnimation = function () {\n if (!_emptyAnimation)\n _emptyAnimation = new Animation(\"
\n * 2) The next track entry to be applied does have a timeline to set this property.
\n * 3) The next track entry after that one does not have a timeline to set this property.
\n * Result: Mix from the current pose to the timeline pose, but do not mix out. This avoids \"dipping\" when crossfading\n * animations that key the same property. A subsequent timeline will set this property using a mix. */\nexport var HOLD_SUBSEQUENT = 2;\n/** 1) This is the first timeline to set this property.
\n * 2) The next track entry to be applied does have a timeline to set this property.
\n * 3) The next track entry after that one does not have a timeline to set this property.
\n * Result: Mix from the setup pose to the timeline pose, but do not mix out. This avoids \"dipping\" when crossfading animations\n * that key the same property. A subsequent timeline will set this property using a mix. */\nexport var HOLD_FIRST = 3;\n/** 1. This is the first timeline to set this property.\n * 2. The next track entry to be applied does have a timeline to set this property.\n * 3. The next track entry after that one does have a timeline to set this property.\n * 4. timelineHoldMix stores the first subsequent track entry that does not have a timeline to set this property.\n *\n * Result: The same as HOLD except the mix percentage from the timelineHoldMix track entry is used. This handles when more than\n * 2 track entries in a row have a timeline that sets the same property.\n *\n * Eg, A -> B -> C -> D where A, B, and C have a timeline setting same property, but D does not. When A is applied, to avoid\n * \"dipping\" A is not mixed out, however D (the first entry that doesn't set the property) mixing in is used to mix out A\n * (which affects B and C). Without using D to mix out, A would be applied fully until mixing completes, then snap into\n * place. */\nexport var HOLD_MIX = 4;\nexport var SETUP = 1;\nexport var CURRENT = 2;\nvar _emptyAnimation = null;\n//# sourceMappingURL=AnimationState.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n/** Stores mix (crossfade) durations to be applied when {@link AnimationState} animations are changed. */\nvar AnimationStateData = /** @class */ (function () {\n function AnimationStateData(skeletonData) {\n this.animationToMixTime = {};\n /** The mix duration to use when no mix duration has been defined between two animations. */\n this.defaultMix = 0;\n if (!skeletonData)\n throw new Error(\"skeletonData cannot be null.\");\n this.skeletonData = skeletonData;\n }\n /** Sets a mix duration by animation name.\n *\n * See {@link #setMixWith()}. */\n AnimationStateData.prototype.setMix = function (fromName, toName, duration) {\n var from = this.skeletonData.findAnimation(fromName);\n if (!from)\n throw new Error(\"Animation not found: \" + fromName);\n var to = this.skeletonData.findAnimation(toName);\n if (!to)\n throw new Error(\"Animation not found: \" + toName);\n this.setMixWith(from, to, duration);\n };\n /** Sets the mix duration when changing from the specified animation to the other.\n *\n * See {@link TrackEntry#mixDuration}. */\n AnimationStateData.prototype.setMixWith = function (from, to, duration) {\n if (!from)\n throw new Error(\"from cannot be null.\");\n if (!to)\n throw new Error(\"to cannot be null.\");\n var key = from.name + \".\" + to.name;\n this.animationToMixTime[key] = duration;\n };\n /** Returns the mix duration to use when changing from the specified animation to the other, or the {@link #defaultMix} if\n * no mix duration has been set. */\n AnimationStateData.prototype.getMix = function (from, to) {\n var key = from.name + \".\" + to.name;\n var value = this.animationToMixTime[key];\n return value === undefined ? this.defaultMix : value;\n };\n return AnimationStateData;\n}());\nexport { AnimationStateData };\n//# sourceMappingURL=AnimationStateData.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Color } from \"../Utils\";\nimport { VertexAttachment } from \"./Attachment\";\n/** An attachment with vertices that make up a polygon. Can be used for hit detection, creating physics bodies, spawning particle\n * effects, and more.\n *\n * See {@link SkeletonBounds} and [Bounding Boxes](http://esotericsoftware.com/spine-bounding-boxes) in the Spine User\n * Guide. */\nvar BoundingBoxAttachment = /** @class */ (function (_super) {\n __extends(BoundingBoxAttachment, _super);\n function BoundingBoxAttachment(name) {\n var _this = _super.call(this, name) || this;\n _this.color = new Color(1, 1, 1, 1);\n return _this;\n }\n BoundingBoxAttachment.prototype.copy = function () {\n var copy = new BoundingBoxAttachment(this.name);\n this.copyTo(copy);\n copy.color.setFromColor(this.color);\n return copy;\n };\n return BoundingBoxAttachment;\n}(VertexAttachment));\nexport { BoundingBoxAttachment };\n//# sourceMappingURL=BoundingBoxAttachment.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Color } from \"../Utils\";\nimport { VertexAttachment } from \"./Attachment\";\n/** An attachment with vertices that make up a polygon used for clipping the rendering of other attachments. */\nvar ClippingAttachment = /** @class */ (function (_super) {\n __extends(ClippingAttachment, _super);\n function ClippingAttachment(name) {\n var _this = _super.call(this, name) || this;\n // Nonessential.\n /** The color of the clipping polygon as it was in Spine. Available only when nonessential data was exported. Clipping polygons\n * are not usually rendered at runtime. */\n _this.color = new Color(0.2275, 0.2275, 0.8078, 1); // ce3a3aff\n return _this;\n }\n ClippingAttachment.prototype.copy = function () {\n var copy = new ClippingAttachment(this.name);\n this.copyTo(copy);\n copy.endSlot = this.endSlot;\n copy.color.setFromColor(this.color);\n return copy;\n };\n return ClippingAttachment;\n}(VertexAttachment));\nexport { ClippingAttachment };\n//# sourceMappingURL=ClippingAttachment.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar Texture = /** @class */ (function () {\n function Texture(image) {\n this._image = image;\n }\n Texture.prototype.getImage = function () {\n return this._image;\n };\n return Texture;\n}());\nexport { Texture };\nexport var TextureFilter;\n(function (TextureFilter) {\n TextureFilter[TextureFilter[\"Nearest\"] = 9728] = \"Nearest\";\n TextureFilter[TextureFilter[\"Linear\"] = 9729] = \"Linear\";\n TextureFilter[TextureFilter[\"MipMap\"] = 9987] = \"MipMap\";\n TextureFilter[TextureFilter[\"MipMapNearestNearest\"] = 9984] = \"MipMapNearestNearest\";\n TextureFilter[TextureFilter[\"MipMapLinearNearest\"] = 9985] = \"MipMapLinearNearest\";\n TextureFilter[TextureFilter[\"MipMapNearestLinear\"] = 9986] = \"MipMapNearestLinear\";\n TextureFilter[TextureFilter[\"MipMapLinearLinear\"] = 9987] = \"MipMapLinearLinear\"; // WebGLRenderingContext.LINEAR_MIPMAP_LINEAR\n})(TextureFilter || (TextureFilter = {}));\nexport var TextureWrap;\n(function (TextureWrap) {\n TextureWrap[TextureWrap[\"MirroredRepeat\"] = 33648] = \"MirroredRepeat\";\n TextureWrap[TextureWrap[\"ClampToEdge\"] = 33071] = \"ClampToEdge\";\n TextureWrap[TextureWrap[\"Repeat\"] = 10497] = \"Repeat\"; // WebGLRenderingContext.REPEAT\n})(TextureWrap || (TextureWrap = {}));\nvar TextureRegion = /** @class */ (function () {\n function TextureRegion() {\n this.u = 0;\n this.v = 0;\n this.u2 = 0;\n this.v2 = 0;\n this.width = 0;\n this.height = 0;\n this.degrees = 0;\n this.offsetX = 0;\n this.offsetY = 0;\n this.originalWidth = 0;\n this.originalHeight = 0;\n }\n return TextureRegion;\n}());\nexport { TextureRegion };\nvar FakeTexture = /** @class */ (function (_super) {\n __extends(FakeTexture, _super);\n function FakeTexture() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n FakeTexture.prototype.setFilters = function (minFilter, magFilter) { };\n FakeTexture.prototype.setWraps = function (uWrap, vWrap) { };\n FakeTexture.prototype.dispose = function () { };\n return FakeTexture;\n}(Texture));\nexport { FakeTexture };\n//# sourceMappingURL=Texture.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TextureFilter, TextureWrap, TextureRegion } from \"./Texture\";\nimport { Utils } from \"./Utils\";\nvar TextureAtlas = /** @class */ (function () {\n function TextureAtlas(atlasText) {\n this.pages = new Array();\n this.regions = new Array();\n var reader = new TextureAtlasReader(atlasText);\n var entry = new Array(4);\n var page = null;\n var region = null;\n var pageFields = {};\n pageFields[\"size\"] = function () {\n page.width = parseInt(entry[1]);\n page.height = parseInt(entry[2]);\n };\n pageFields[\"format\"] = function () {\n // page.format = Format[tuple[0]]; we don't need format in WebGL\n };\n pageFields[\"filter\"] = function () {\n page.minFilter = Utils.enumValue(TextureFilter, entry[1]);\n page.magFilter = Utils.enumValue(TextureFilter, entry[2]);\n };\n pageFields[\"repeat\"] = function () {\n if (entry[1].indexOf('x') != -1)\n page.uWrap = TextureWrap.Repeat;\n if (entry[1].indexOf('y') != -1)\n page.vWrap = TextureWrap.Repeat;\n };\n pageFields[\"pma\"] = function () {\n page.pma = entry[1] == \"true\";\n };\n var regionFields = {};\n regionFields[\"xy\"] = function () {\n region.x = parseInt(entry[1]);\n region.y = parseInt(entry[2]);\n };\n regionFields[\"size\"] = function () {\n region.width = parseInt(entry[1]);\n region.height = parseInt(entry[2]);\n };\n regionFields[\"bounds\"] = function () {\n region.x = parseInt(entry[1]);\n region.y = parseInt(entry[2]);\n region.width = parseInt(entry[3]);\n region.height = parseInt(entry[4]);\n };\n regionFields[\"offset\"] = function () {\n region.offsetX = parseInt(entry[1]);\n region.offsetY = parseInt(entry[2]);\n };\n regionFields[\"orig\"] = function () {\n region.originalWidth = parseInt(entry[1]);\n region.originalHeight = parseInt(entry[2]);\n };\n regionFields[\"offsets\"] = function () {\n region.offsetX = parseInt(entry[1]);\n region.offsetY = parseInt(entry[2]);\n region.originalWidth = parseInt(entry[3]);\n region.originalHeight = parseInt(entry[4]);\n };\n regionFields[\"rotate\"] = function () {\n var value = entry[1];\n if (value == \"true\")\n region.degrees = 90;\n else if (value != \"false\")\n region.degrees = parseInt(value);\n };\n regionFields[\"index\"] = function () {\n region.index = parseInt(entry[1]);\n };\n var line = reader.readLine();\n // Ignore empty lines before first entry.\n while (line && line.trim().length == 0)\n line = reader.readLine();\n // Header entries.\n while (true) {\n if (!line || line.trim().length == 0)\n break;\n if (reader.readEntry(entry, line) == 0)\n break; // Silently ignore all header fields.\n line = reader.readLine();\n }\n // Page and region entries.\n var names = null;\n var values = null;\n while (true) {\n if (line === null)\n break;\n if (line.trim().length == 0) {\n page = null;\n line = reader.readLine();\n }\n else if (!page) {\n page = new TextureAtlasPage();\n page.name = line.trim();\n while (true) {\n if (reader.readEntry(entry, line = reader.readLine()) == 0)\n break;\n var field = pageFields[entry[0]];\n if (field)\n field();\n }\n this.pages.push(page);\n }\n else {\n region = new TextureAtlasRegion();\n region.page = page;\n region.name = line;\n while (true) {\n var count = reader.readEntry(entry, line = reader.readLine());\n if (count == 0)\n break;\n var field = regionFields[entry[0]];\n if (field)\n field();\n else {\n if (!names) {\n names = [];\n values = [];\n }\n names.push(entry[0]);\n var entryValues = [];\n for (var i = 0; i < count; i++)\n entryValues.push(parseInt(entry[i + 1]));\n values.push(entryValues);\n }\n }\n if (region.originalWidth == 0 && region.originalHeight == 0) {\n region.originalWidth = region.width;\n region.originalHeight = region.height;\n }\n if (names && names.length > 0) {\n region.names = names;\n region.values = values;\n names = null;\n values = null;\n }\n region.u = region.x / page.width;\n region.v = region.y / page.height;\n if (region.degrees == 90) {\n region.u2 = (region.x + region.height) / page.width;\n region.v2 = (region.y + region.width) / page.height;\n }\n else {\n region.u2 = (region.x + region.width) / page.width;\n region.v2 = (region.y + region.height) / page.height;\n }\n this.regions.push(region);\n }\n }\n }\n TextureAtlas.prototype.findRegion = function (name) {\n for (var i = 0; i < this.regions.length; i++) {\n if (this.regions[i].name == name) {\n return this.regions[i];\n }\n }\n return null;\n };\n TextureAtlas.prototype.setTextures = function (assetManager, pathPrefix) {\n if (pathPrefix === void 0) { pathPrefix = \"\"; }\n for (var _i = 0, _a = this.pages; _i < _a.length; _i++) {\n var page = _a[_i];\n page.setTexture(assetManager.get(pathPrefix + page.name));\n }\n };\n TextureAtlas.prototype.dispose = function () {\n for (var i = 0; i < this.pages.length; i++) {\n this.pages[i].texture.dispose();\n }\n };\n return TextureAtlas;\n}());\nexport { TextureAtlas };\nvar TextureAtlasReader = /** @class */ (function () {\n function TextureAtlasReader(text) {\n this.index = 0;\n this.lines = text.split(/\\r\\n|\\r|\\n/);\n }\n TextureAtlasReader.prototype.readLine = function () {\n if (this.index >= this.lines.length)\n return null;\n return this.lines[this.index++];\n };\n TextureAtlasReader.prototype.readEntry = function (entry, line) {\n if (!line)\n return 0;\n line = line.trim();\n if (line.length == 0)\n return 0;\n var colon = line.indexOf(':');\n if (colon == -1)\n return 0;\n entry[0] = line.substr(0, colon).trim();\n for (var i = 1, lastMatch = colon + 1;; i++) {\n var comma = line.indexOf(',', lastMatch);\n if (comma == -1) {\n entry[i] = line.substr(lastMatch).trim();\n return i;\n }\n entry[i] = line.substr(lastMatch, comma - lastMatch).trim();\n lastMatch = comma + 1;\n if (i == 4)\n return 4;\n }\n };\n return TextureAtlasReader;\n}());\nvar TextureAtlasPage = /** @class */ (function () {\n function TextureAtlasPage() {\n this.minFilter = TextureFilter.Nearest;\n this.magFilter = TextureFilter.Nearest;\n this.uWrap = TextureWrap.ClampToEdge;\n this.vWrap = TextureWrap.ClampToEdge;\n }\n TextureAtlasPage.prototype.setTexture = function (texture) {\n this.texture = texture;\n texture.setFilters(this.minFilter, this.magFilter);\n texture.setWraps(this.uWrap, this.vWrap);\n };\n return TextureAtlasPage;\n}());\nexport { TextureAtlasPage };\nvar TextureAtlasRegion = /** @class */ (function (_super) {\n __extends(TextureAtlasRegion, _super);\n function TextureAtlasRegion() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return TextureAtlasRegion;\n}(TextureRegion));\nexport { TextureAtlasRegion };\n//# sourceMappingURL=TextureAtlas.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TextureAtlasRegion } from \"../TextureAtlas\";\nimport { Color, Utils } from \"../Utils\";\nimport { VertexAttachment } from \"./Attachment\";\n/** An attachment that displays a textured mesh. A mesh has hull vertices and internal vertices within the hull. Holes are not\n * supported. Each vertex has UVs (texture coordinates) and triangles are used to map an image on to the mesh.\n *\n * See [Mesh attachments](http://esotericsoftware.com/spine-meshes) in the Spine User Guide. */\nvar MeshAttachment = /** @class */ (function (_super) {\n __extends(MeshAttachment, _super);\n function MeshAttachment(name) {\n var _this = _super.call(this, name) || this;\n /** The color to tint the mesh. */\n _this.color = new Color(1, 1, 1, 1);\n _this.tempColor = new Color(0, 0, 0, 0);\n return _this;\n }\n /** Calculates {@link #uvs} using {@link #regionUVs} and the {@link #region}. Must be called after changing the region UVs or\n * region. */\n MeshAttachment.prototype.updateUVs = function () {\n var regionUVs = this.regionUVs;\n if (!this.uvs || this.uvs.length != regionUVs.length)\n this.uvs = Utils.newFloatArray(regionUVs.length);\n var uvs = this.uvs;\n var n = this.uvs.length;\n var u = this.region.u, v = this.region.v, width = 0, height = 0;\n if (this.region instanceof TextureAtlasRegion) {\n var region = this.region, image = region.page.texture.getImage();\n var textureWidth = image.width, textureHeight = image.height;\n switch (region.degrees) {\n case 90:\n u -= (region.originalHeight - region.offsetY - region.height) / textureWidth;\n v -= (region.originalWidth - region.offsetX - region.width) / textureHeight;\n width = region.originalHeight / textureWidth;\n height = region.originalWidth / textureHeight;\n for (var i = 0; i < n; i += 2) {\n uvs[i] = u + regionUVs[i + 1] * width;\n uvs[i + 1] = v + (1 - regionUVs[i]) * height;\n }\n return;\n case 180:\n u -= (region.originalWidth - region.offsetX - region.width) / textureWidth;\n v -= region.offsetY / textureHeight;\n width = region.originalWidth / textureWidth;\n height = region.originalHeight / textureHeight;\n for (var i = 0; i < n; i += 2) {\n uvs[i] = u + (1 - regionUVs[i]) * width;\n uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height;\n }\n return;\n case 270:\n u -= region.offsetY / textureWidth;\n v -= region.offsetX / textureHeight;\n width = region.originalHeight / textureWidth;\n height = region.originalWidth / textureHeight;\n for (var i = 0; i < n; i += 2) {\n uvs[i] = u + (1 - regionUVs[i + 1]) * width;\n uvs[i + 1] = v + regionUVs[i] * height;\n }\n return;\n }\n u -= region.offsetX / textureWidth;\n v -= (region.originalHeight - region.offsetY - region.height) / textureHeight;\n width = region.originalWidth / textureWidth;\n height = region.originalHeight / textureHeight;\n }\n else if (!this.region) {\n u = v = 0;\n width = height = 1;\n }\n else {\n width = this.region.u2 - u;\n height = this.region.v2 - v;\n }\n for (var i = 0; i < n; i += 2) {\n uvs[i] = u + regionUVs[i] * width;\n uvs[i + 1] = v + regionUVs[i + 1] * height;\n }\n };\n /** The parent mesh if this is a linked mesh, else null. A linked mesh shares the {@link #bones}, {@link #vertices},\n * {@link #regionUVs}, {@link #triangles}, {@link #hullLength}, {@link #edges}, {@link #width}, and {@link #height} with the\n * parent mesh, but may have a different {@link #name} or {@link #path} (and therefore a different texture). */\n MeshAttachment.prototype.getParentMesh = function () {\n return this.parentMesh;\n };\n /** @param parentMesh May be null. */\n MeshAttachment.prototype.setParentMesh = function (parentMesh) {\n this.parentMesh = parentMesh;\n if (parentMesh) {\n this.bones = parentMesh.bones;\n this.vertices = parentMesh.vertices;\n this.worldVerticesLength = parentMesh.worldVerticesLength;\n this.regionUVs = parentMesh.regionUVs;\n this.triangles = parentMesh.triangles;\n this.hullLength = parentMesh.hullLength;\n this.worldVerticesLength = parentMesh.worldVerticesLength;\n }\n };\n MeshAttachment.prototype.copy = function () {\n if (this.parentMesh)\n return this.newLinkedMesh();\n var copy = new MeshAttachment(this.name);\n copy.region = this.region;\n copy.path = this.path;\n copy.color.setFromColor(this.color);\n this.copyTo(copy);\n copy.regionUVs = new Array(this.regionUVs.length);\n Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length);\n copy.uvs = new Array(this.uvs.length);\n Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length);\n copy.triangles = new Array(this.triangles.length);\n Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length);\n copy.hullLength = this.hullLength;\n // Nonessential.\n if (this.edges) {\n copy.edges = new Array(this.edges.length);\n Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length);\n }\n copy.width = this.width;\n copy.height = this.height;\n return copy;\n };\n /** Returns a new mesh with the {@link #parentMesh} set to this mesh's parent mesh, if any, else to this mesh. **/\n MeshAttachment.prototype.newLinkedMesh = function () {\n var copy = new MeshAttachment(this.name);\n copy.region = this.region;\n copy.path = this.path;\n copy.color.setFromColor(this.color);\n copy.deformAttachment = this.deformAttachment;\n copy.setParentMesh(this.parentMesh ? this.parentMesh : this);\n copy.updateUVs();\n return copy;\n };\n return MeshAttachment;\n}(VertexAttachment));\nexport { MeshAttachment };\n//# sourceMappingURL=MeshAttachment.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Color, Utils } from \"../Utils\";\nimport { VertexAttachment } from \"./Attachment\";\n/** An attachment whose vertices make up a composite Bezier curve.\n *\n * See {@link PathConstraint} and [Paths](http://esotericsoftware.com/spine-paths) in the Spine User Guide. */\nvar PathAttachment = /** @class */ (function (_super) {\n __extends(PathAttachment, _super);\n function PathAttachment(name) {\n var _this = _super.call(this, name) || this;\n /** If true, the start and end knots are connected. */\n _this.closed = false;\n /** If true, additional calculations are performed to make calculating positions along the path more accurate. If false, fewer\n * calculations are performed but calculating positions along the path is less accurate. */\n _this.constantSpeed = false;\n /** The color of the path as it was in Spine. Available only when nonessential data was exported. Paths are not usually\n * rendered at runtime. */\n _this.color = new Color(1, 1, 1, 1);\n return _this;\n }\n PathAttachment.prototype.copy = function () {\n var copy = new PathAttachment(this.name);\n this.copyTo(copy);\n copy.lengths = new Array(this.lengths.length);\n Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length);\n copy.closed = closed;\n copy.constantSpeed = this.constantSpeed;\n copy.color.setFromColor(this.color);\n return copy;\n };\n return PathAttachment;\n}(VertexAttachment));\nexport { PathAttachment };\n//# sourceMappingURL=PathAttachment.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Color, MathUtils } from \"../Utils\";\nimport { VertexAttachment } from \"./Attachment\";\n/** An attachment which is a single point and a rotation. This can be used to spawn projectiles, particles, etc. A bone can be\n * used in similar ways, but a PointAttachment is slightly less expensive to compute and can be hidden, shown, and placed in a\n * skin.\n *\n * See [Point Attachments](http://esotericsoftware.com/spine-point-attachments) in the Spine User Guide. */\nvar PointAttachment = /** @class */ (function (_super) {\n __extends(PointAttachment, _super);\n function PointAttachment(name) {\n var _this = _super.call(this, name) || this;\n /** The color of the point attachment as it was in Spine. Available only when nonessential data was exported. Point attachments\n * are not usually rendered at runtime. */\n _this.color = new Color(0.38, 0.94, 0, 1);\n return _this;\n }\n PointAttachment.prototype.computeWorldPosition = function (bone, point) {\n point.x = this.x * bone.a + this.y * bone.b + bone.worldX;\n point.y = this.x * bone.c + this.y * bone.d + bone.worldY;\n return point;\n };\n PointAttachment.prototype.computeWorldRotation = function (bone) {\n var cos = MathUtils.cosDeg(this.rotation), sin = MathUtils.sinDeg(this.rotation);\n var x = cos * bone.a + sin * bone.b;\n var y = cos * bone.c + sin * bone.d;\n return Math.atan2(y, x) * MathUtils.radDeg;\n };\n PointAttachment.prototype.copy = function () {\n var copy = new PointAttachment(this.name);\n copy.x = this.x;\n copy.y = this.y;\n copy.rotation = this.rotation;\n copy.color.setFromColor(this.color);\n return copy;\n };\n return PointAttachment;\n}(VertexAttachment));\nexport { PointAttachment };\n//# sourceMappingURL=PointAttachment.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Color, Utils } from \"../Utils\";\nimport { Attachment } from \"./Attachment\";\n/** An attachment that displays a textured quadrilateral.\n *\n * See [Region attachments](http://esotericsoftware.com/spine-regions) in the Spine User Guide. */\nvar RegionAttachment = /** @class */ (function (_super) {\n __extends(RegionAttachment, _super);\n function RegionAttachment(name) {\n var _this = _super.call(this, name) || this;\n /** The local x translation. */\n _this.x = 0;\n /** The local y translation. */\n _this.y = 0;\n /** The local scaleX. */\n _this.scaleX = 1;\n /** The local scaleY. */\n _this.scaleY = 1;\n /** The local rotation. */\n _this.rotation = 0;\n /** The width of the region attachment in Spine. */\n _this.width = 0;\n /** The height of the region attachment in Spine. */\n _this.height = 0;\n /** The color to tint the region attachment. */\n _this.color = new Color(1, 1, 1, 1);\n /** For each of the 4 vertices, a pair of x,y values that is the local position of the vertex.\n *\n * See {@link #updateOffset()}. */\n _this.offset = Utils.newFloatArray(8);\n _this.uvs = Utils.newFloatArray(8);\n _this.tempColor = new Color(1, 1, 1, 1);\n return _this;\n }\n /** Calculates the {@link #offset} using the region settings. Must be called after changing region settings. */\n RegionAttachment.prototype.updateOffset = function () {\n var region = this.region;\n var regionScaleX = this.width / this.region.originalWidth * this.scaleX;\n var regionScaleY = this.height / this.region.originalHeight * this.scaleY;\n var localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX;\n var localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY;\n var localX2 = localX + this.region.width * regionScaleX;\n var localY2 = localY + this.region.height * regionScaleY;\n var radians = this.rotation * Math.PI / 180;\n var cos = Math.cos(radians);\n var sin = Math.sin(radians);\n var x = this.x, y = this.y;\n var localXCos = localX * cos + x;\n var localXSin = localX * sin;\n var localYCos = localY * cos + y;\n var localYSin = localY * sin;\n var localX2Cos = localX2 * cos + x;\n var localX2Sin = localX2 * sin;\n var localY2Cos = localY2 * cos + y;\n var localY2Sin = localY2 * sin;\n var offset = this.offset;\n offset[0] = localXCos - localYSin;\n offset[1] = localYCos + localXSin;\n offset[2] = localXCos - localY2Sin;\n offset[3] = localY2Cos + localXSin;\n offset[4] = localX2Cos - localY2Sin;\n offset[5] = localY2Cos + localX2Sin;\n offset[6] = localX2Cos - localYSin;\n offset[7] = localYCos + localX2Sin;\n };\n RegionAttachment.prototype.setRegion = function (region) {\n this.region = region;\n var uvs = this.uvs;\n if (region.degrees == 90) {\n uvs[2] = region.u;\n uvs[3] = region.v2;\n uvs[4] = region.u;\n uvs[5] = region.v;\n uvs[6] = region.u2;\n uvs[7] = region.v;\n uvs[0] = region.u2;\n uvs[1] = region.v2;\n }\n else {\n uvs[0] = region.u;\n uvs[1] = region.v2;\n uvs[2] = region.u;\n uvs[3] = region.v;\n uvs[4] = region.u2;\n uvs[5] = region.v;\n uvs[6] = region.u2;\n uvs[7] = region.v2;\n }\n };\n /** Transforms the attachment's four vertices to world coordinates.\n *\n * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine\n * Runtimes Guide.\n * @param worldVertices The output world vertices. Must have a length >= `offset` + 8.\n * @param offset The `worldVertices` index to begin writing values.\n * @param stride The number of `worldVertices` entries between the value pairs written. */\n RegionAttachment.prototype.computeWorldVertices = function (bone, worldVertices, offset, stride) {\n var vertexOffset = this.offset;\n var x = bone.worldX, y = bone.worldY;\n var a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n var offsetX = 0, offsetY = 0;\n offsetX = vertexOffset[0];\n offsetY = vertexOffset[1];\n worldVertices[offset] = offsetX * a + offsetY * b + x; // br\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n offset += stride;\n offsetX = vertexOffset[2];\n offsetY = vertexOffset[3];\n worldVertices[offset] = offsetX * a + offsetY * b + x; // bl\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n offset += stride;\n offsetX = vertexOffset[4];\n offsetY = vertexOffset[5];\n worldVertices[offset] = offsetX * a + offsetY * b + x; // ul\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n offset += stride;\n offsetX = vertexOffset[6];\n offsetY = vertexOffset[7];\n worldVertices[offset] = offsetX * a + offsetY * b + x; // ur\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n };\n RegionAttachment.prototype.copy = function () {\n var copy = new RegionAttachment(this.name);\n copy.region = this.region;\n copy.rendererObject = this.rendererObject;\n copy.path = this.path;\n copy.x = this.x;\n copy.y = this.y;\n copy.scaleX = this.scaleX;\n copy.scaleY = this.scaleY;\n copy.rotation = this.rotation;\n copy.width = this.width;\n copy.height = this.height;\n Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8);\n Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8);\n copy.color.setFromColor(this.color);\n return copy;\n };\n RegionAttachment.X1 = 0;\n RegionAttachment.Y1 = 1;\n RegionAttachment.C1R = 2;\n RegionAttachment.C1G = 3;\n RegionAttachment.C1B = 4;\n RegionAttachment.C1A = 5;\n RegionAttachment.U1 = 6;\n RegionAttachment.V1 = 7;\n RegionAttachment.X2 = 8;\n RegionAttachment.Y2 = 9;\n RegionAttachment.C2R = 10;\n RegionAttachment.C2G = 11;\n RegionAttachment.C2B = 12;\n RegionAttachment.C2A = 13;\n RegionAttachment.U2 = 14;\n RegionAttachment.V2 = 15;\n RegionAttachment.X3 = 16;\n RegionAttachment.Y3 = 17;\n RegionAttachment.C3R = 18;\n RegionAttachment.C3G = 19;\n RegionAttachment.C3B = 20;\n RegionAttachment.C3A = 21;\n RegionAttachment.U3 = 22;\n RegionAttachment.V3 = 23;\n RegionAttachment.X4 = 24;\n RegionAttachment.Y4 = 25;\n RegionAttachment.C4R = 26;\n RegionAttachment.C4G = 27;\n RegionAttachment.C4B = 28;\n RegionAttachment.C4A = 29;\n RegionAttachment.U4 = 30;\n RegionAttachment.V4 = 31;\n return RegionAttachment;\n}(Attachment));\nexport { RegionAttachment };\n//# sourceMappingURL=RegionAttachment.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { BoundingBoxAttachment } from \"./attachments/BoundingBoxAttachment\";\nimport { ClippingAttachment } from \"./attachments/ClippingAttachment\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment\";\nimport { PathAttachment } from \"./attachments/PathAttachment\";\nimport { PointAttachment } from \"./attachments/PointAttachment\";\nimport { RegionAttachment } from \"./attachments/RegionAttachment\";\n/** An {@link AttachmentLoader} that configures attachments using texture regions from an {@link TextureAtlas}.\n *\n * See [Loading skeleton data](http://esotericsoftware.com/spine-loading-skeleton-data#JSON-and-binary-data) in the\n * Spine Runtimes Guide. */\nvar AtlasAttachmentLoader = /** @class */ (function () {\n function AtlasAttachmentLoader(atlas) {\n this.atlas = atlas;\n }\n AtlasAttachmentLoader.prototype.newRegionAttachment = function (skin, name, path) {\n var region = this.atlas.findRegion(path);\n if (!region)\n throw new Error(\"Region not found in atlas: \" + path + \" (region attachment: \" + name + \")\");\n region.renderObject = region;\n var attachment = new RegionAttachment(name);\n attachment.setRegion(region);\n return attachment;\n };\n AtlasAttachmentLoader.prototype.newMeshAttachment = function (skin, name, path) {\n var region = this.atlas.findRegion(path);\n if (!region)\n throw new Error(\"Region not found in atlas: \" + path + \" (mesh attachment: \" + name + \")\");\n region.renderObject = region;\n var attachment = new MeshAttachment(name);\n attachment.region = region;\n return attachment;\n };\n AtlasAttachmentLoader.prototype.newBoundingBoxAttachment = function (skin, name) {\n return new BoundingBoxAttachment(name);\n };\n AtlasAttachmentLoader.prototype.newPathAttachment = function (skin, name) {\n return new PathAttachment(name);\n };\n AtlasAttachmentLoader.prototype.newPointAttachment = function (skin, name) {\n return new PointAttachment(name);\n };\n AtlasAttachmentLoader.prototype.newClippingAttachment = function (skin, name) {\n return new ClippingAttachment(name);\n };\n return AtlasAttachmentLoader;\n}());\nexport { AtlasAttachmentLoader };\n//# sourceMappingURL=AtlasAttachmentLoader.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Color } from \"./Utils\";\n/** Stores the setup pose for a {@link Bone}. */\nvar BoneData = /** @class */ (function () {\n function BoneData(index, name, parent) {\n /** The local x translation. */\n this.x = 0;\n /** The local y translation. */\n this.y = 0;\n /** The local rotation. */\n this.rotation = 0;\n /** The local scaleX. */\n this.scaleX = 1;\n /** The local scaleY. */\n this.scaleY = 1;\n /** The local shearX. */\n this.shearX = 0;\n /** The local shearX. */\n this.shearY = 0;\n /** The transform mode for how parent world transforms affect this bone. */\n this.transformMode = TransformMode.Normal;\n /** When true, {@link Skeleton#updateWorldTransform()} only updates this bone if the {@link Skeleton#skin} contains this\n * bone.\n * @see Skin#bones */\n this.skinRequired = false;\n /** The color of the bone as it was in Spine. Available only when nonessential data was exported. Bones are not usually\n * rendered at runtime. */\n this.color = new Color();\n if (index < 0)\n throw new Error(\"index must be >= 0.\");\n if (!name)\n throw new Error(\"name cannot be null.\");\n this.index = index;\n this.name = name;\n this.parent = parent;\n }\n return BoneData;\n}());\nexport { BoneData };\n/** Determines how a bone inherits world transforms from parent bones. */\nexport var TransformMode;\n(function (TransformMode) {\n TransformMode[TransformMode[\"Normal\"] = 0] = \"Normal\";\n TransformMode[TransformMode[\"OnlyTranslation\"] = 1] = \"OnlyTranslation\";\n TransformMode[TransformMode[\"NoRotationOrReflection\"] = 2] = \"NoRotationOrReflection\";\n TransformMode[TransformMode[\"NoScale\"] = 3] = \"NoScale\";\n TransformMode[TransformMode[\"NoScaleOrReflection\"] = 4] = \"NoScaleOrReflection\";\n})(TransformMode || (TransformMode = {}));\n//# sourceMappingURL=BoneData.js.map","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated January 1, 2020. Replaces all prior versions.\n *\n * Copyright (c) 2013-2020, Esoteric Software LLC\n *\n * Integration of the Spine Runtimes into software or otherwise creating\n * derivative works of the Spine Runtimes is permitted under the terms and\n * conditions of Section 2 of the Spine Editor License Agreement:\n * http://esotericsoftware.com/spine-editor-license\n *\n * Otherwise, it is permitted to integrate the Spine Runtimes into software\n * or otherwise create derivative works of the Spine Runtimes (collectively,\n * \"Products\"), provided that each user of the Products must obtain their own\n * Spine Editor license and redistribution of the Products in any form must\n * include this license and copyright notice.\n *\n * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC \"AS IS\" AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,\n * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { TransformMode } from \"./BoneData\";\nimport { MathUtils } from \"./Utils\";\n/** Stores a bone's current pose.\n *\n * A bone has a local transform which is used to compute its world transform. A bone also has an applied transform, which is a\n * local transform that can be applied to compute the world transform. The local transform and applied transform may differ if a\n * constraint or application code modifies the world transform after it was computed from the local transform. */\nvar Bone = /** @class */ (function () {\n /** @param parent May be null. */\n function Bone(data, skeleton, parent) {\n /** The immediate children of this bone. */\n this.children = new Array();\n /** The local x translation. */\n this.x = 0;\n /** The local y translation. */\n this.y = 0;\n /** The local rotation in degrees, counter clockwise. */\n this.rotation = 0;\n /** The local scaleX. */\n this.scaleX = 0;\n /** The local scaleY. */\n this.scaleY = 0;\n /** The local shearX. */\n this.shearX = 0;\n /** The local shearY. */\n this.shearY = 0;\n /** The applied local x translation. */\n this.ax = 0;\n /** The applied local y translation. */\n this.ay = 0;\n /** The applied local rotation in degrees, counter clockwise. */\n this.arotation = 0;\n /** The applied local scaleX. */\n this.ascaleX = 0;\n /** The applied local scaleY. */\n this.ascaleY = 0;\n /** The applied local shearX. */\n this.ashearX = 0;\n /** The applied local shearY. */\n this.ashearY = 0;\n /** Part of the world transform matrix for the X axis. If changed, {@link #updateAppliedTransform()} should be called. */\n this.a = 0;\n /** Part of the world transform matrix for the Y axis. If changed, {@link #updateAppliedTransform()} should be called. */\n this.b = 0;\n /** Part of the world transform matrix for the X axis. If changed, {@link #updateAppliedTransform()} should be called. */\n this.c = 0;\n /** Part of the world transform matrix for the Y axis. If changed, {@link #updateAppliedTransform()} should be called. */\n this.d = 0;\n /** The world X position. If changed, {@link #updateAppliedTransform()} should be called. */\n this.worldY = 0;\n /** The world Y position. If changed, {@link #updateAppliedTransform()} should be called. */\n this.worldX = 0;\n this.sorted = false;\n this.active = false;\n if (!data)\n throw new Error(\"data cannot be null.\");\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.skeleton = skeleton;\n this.parent = parent;\n this.setToSetupPose();\n }\n /** Returns false when the bone has not been computed because {@link BoneData#skinRequired} is true and the\n * {@link Skeleton#skin active skin} does not {@link Skin#bones contain} this bone. */\n Bone.prototype.isActive = function () {\n return this.active;\n };\n /** Computes the world transform using the parent bone and this bone's local applied transform. */\n Bone.prototype.update = function () {\n this.updateWorldTransformWith(this.ax, this.ay, this.arotation, this.ascaleX, this.ascaleY, this.ashearX, this.ashearY);\n };\n /** Computes the world transform using the parent bone and this bone's local transform.\n *\n * See {@link #updateWorldTransformWith()}. */\n Bone.prototype.updateWorldTransform = function () {\n this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);\n };\n /** Computes the world transform using the parent bone and the specified local transform. The applied transform is set to the\n * specified local transform. Child bones are not updated.\n *\n * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine\n * Runtimes Guide. */\n Bone.prototype.updateWorldTransformWith = function (x, y, rotation, scaleX, scaleY, shearX, shearY) {\n this.ax = x;\n this.ay = y;\n this.arotation = rotation;\n this.ascaleX = scaleX;\n this.ascaleY = scaleY;\n this.ashearX = shearX;\n this.ashearY = shearY;\n var parent = this.parent;\n if (!parent) { // Root bone.\n var skeleton = this.skeleton;\n var rotationY = rotation + 90 + shearY;\n var sx = skeleton.scaleX;\n var sy = skeleton.scaleY;\n this.a = MathUtils.cosDeg(rotation + shearX) * scaleX * sx;\n this.b = MathUtils.cosDeg(rotationY) * scaleY * sx;\n this.c = MathUtils.sinDeg(rotation + shearX) * scaleX * sy;\n this.d = MathUtils.sinDeg(rotationY) * scaleY * sy;\n this.worldX = x * sx + skeleton.x;\n this.worldY = y * sy + skeleton.y;\n return;\n }\n var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n this.worldX = pa * x + pb * y + parent.worldX;\n this.worldY = pc * x + pd * y + parent.worldY;\n switch (this.data.transformMode) {\n case TransformMode.Normal: {\n var rotationY = rotation + 90 + shearY;\n var la = MathUtils.cosDeg(rotation + shearX) * scaleX;\n var lb = MathUtils.cosDeg(rotationY) * scaleY;\n var lc = MathUtils.sinDeg(rotation + shearX) * scaleX;\n var ld = MathUtils.sinDeg(rotationY) * scaleY;\n this.a = pa * la + pb * lc;\n this.b = pa * lb + pb * ld;\n this.c = pc * la + pd * lc;\n this.d = pc * lb + pd * ld;\n return;\n }\n case TransformMode.OnlyTranslation: {\n var rotationY = rotation + 90 + shearY;\n this.a = MathUtils.cosDeg(rotation + shearX) * scaleX;\n this.b = MathUtils.cosDeg(rotationY) * scaleY;\n this.c = MathUtils.sinDeg(rotation + shearX) * scaleX;\n this.d = MathUtils.sinDeg(rotationY) * scaleY;\n break;\n }\n case TransformMode.NoRotationOrReflection: {\n var s = pa * pa + pc * pc;\n var prx = 0;\n if (s > 0.0001) {\n s = Math.abs(pa * pd - pb * pc) / s;\n pa /= this.skeleton.scaleX;\n pc /= this.skeleton.scaleY;\n pb = pc * s;\n pd = pa * s;\n prx = Math.atan2(pc, pa) * MathUtils.radDeg;\n }\n else {\n pa = 0;\n pc = 0;\n prx = 90 - Math.atan2(pd, pb) * MathUtils.radDeg;\n }\n var rx = rotation + shearX - prx;\n var ry = rotation + shearY - prx + 90;\n var la = MathUtils.cosDeg(rx) * scaleX;\n var lb = MathUtils.cosDeg(ry) * scaleY;\n var lc = MathUtils.sinDeg(rx) * scaleX;\n var ld = MathUtils.sinDeg(ry) * scaleY;\n this.a = pa * la - pb * lc;\n this.b = pa * lb - pb * ld;\n this.c = pc * la + pd * lc;\n this.d = pc * lb + pd * ld;\n break;\n }\n case TransformMode.NoScale:\n case TransformMode.NoScaleOrReflection: {\n var cos = MathUtils.cosDeg(rotation);\n var sin = MathUtils.sinDeg(rotation);\n var za = (pa * cos + pb * sin) / this.skeleton.scaleX;\n var zc = (pc * cos + pd * sin) / this.skeleton.scaleY;\n var s = Math.sqrt(za * za + zc * zc);\n if (s > 0.00001)\n s = 1 / s;\n za *= s;\n zc *= s;\n s = Math.sqrt(za * za + zc * zc);\n if (this.data.transformMode == TransformMode.NoScale\n && (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0))\n s = -s;\n var r = Math.PI / 2 + Math.atan2(zc, za);\n var zb = Math.cos(r) * s;\n var zd = Math.sin(r) * s;\n var la = MathUtils.cosDeg(shearX) * scaleX;\n var lb = MathUtils.cosDeg(90 + shearY) * scaleY;\n var lc = MathUtils.sinDeg(shearX) * scaleX;\n var ld = MathUtils.sinDeg(90 + shearY) * scaleY;\n this.a = za * la + zb * lc;\n this.b = za * lb + zb * ld;\n this.c = zc * la + zd * lc;\n this.d = zc * lb + zd * ld;\n break;\n }\n }\n this.a *= this.skeleton.scaleX;\n this.b *= this.skeleton.scaleX;\n this.c *= this.skeleton.scaleY;\n this.d *= this.skeleton.scaleY;\n };\n /** Sets this bone's local transform to the setup pose. */\n Bone.prototype.setToSetupPose = function () {\n var data = this.data;\n this.x = data.x;\n this.y = data.y;\n this.rotation = data.rotation;\n this.scaleX = data.scaleX;\n this.scaleY = data.scaleY;\n this.shearX = data.shearX;\n this.shearY = data.shearY;\n };\n /** The world rotation for the X axis, calculated using {@link #a} and {@link #c}. */\n Bone.prototype.getWorldRotationX = function () {\n return Math.atan2(this.c, this.a) * MathUtils.radDeg;\n };\n /** The world rotation for the Y axis, calculated using {@link #b} and {@link #d}. */\n Bone.prototype.getWorldRotationY = function () {\n return Math.atan2(this.d, this.b) * MathUtils.radDeg;\n };\n /** The magnitude (always positive) of the world scale X, calculated using {@link #a} and {@link #c}. */\n Bone.prototype.getWorldScaleX = function () {\n return Math.sqrt(this.a * this.a + this.c * this.c);\n };\n /** The magnitude (always positive) of the world scale Y, calculated using {@link #b} and {@link #d}. */\n Bone.prototype.getWorldScaleY = function () {\n return Math.sqrt(this.b * this.b + this.d * this.d);\n };\n /** Computes the applied transform values from the world transform.\n *\n * If the world transform is modified (by a constraint, {@link #rotateWorld(float)}, etc) then this method should be called so\n * the applied transform matches the world transform. The applied transform may be needed by other code (eg to apply other\n * constraints).\n *\n * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The applied transform after\n * calling this method is equivalent to the local transform used to compute the world transform, but may not be identical. */\n Bone.prototype.updateAppliedTransform = function () {\n var parent = this.parent;\n if (!parent) {\n this.ax = this.worldX;\n this.ay = this.worldY;\n this.arotation = Math.atan2(this.c, this.a) * MathUtils.radDeg;\n this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c);\n this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d);\n this.ashearX = 0;\n this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * MathUtils.radDeg;\n return;\n }\n var pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n var pid = 1 / (pa * pd - pb * pc);\n var dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;\n this.ax = (dx * pd * pid - dy * pb * pid);\n this.ay = (dy * pa * pid - dx * pc * pid);\n var ia = pid * pd;\n var id = pid * pa;\n var ib = pid * pb;\n var ic = pid * pc;\n var ra = ia * this.a - ib * this.c;\n var rb = ia * this.b - ib * this.d;\n var rc = id * this.c - ic * this.a;\n var rd = id * this.d - ic * this.b;\n this.ashearX = 0;\n this.ascaleX = Math.sqrt(ra * ra + rc * rc);\n if (this.ascaleX > 0.0001) {\n var det = ra * rd - rb * rc;\n this.ascaleY = det / this.ascaleX;\n this.ashearY = Math.atan2(ra * rb + rc * rd, det) * MathUtils.radDeg;\n this.arotation = Math.atan2(rc, ra) * MathUtils.radDeg;\n }\n else {\n this.ascaleX = 0;\n this.ascaleY = Math.sqrt(rb * rb + rd * rd);\n this.ashearY = 0;\n this.arotation = 90 - Math.atan2(rd, rb) * MathUtils.radDeg;\n }\n };\n /** Transforms a point from world coordinates to the bone's local coordinates. */\n Bone.prototype.worldToLocal = function (world) {\n var invDet = 1 / (this.a * this.d - this.b * this.c);\n var x = world.x - this.worldX, y = world.y - this.worldY;\n world.x = x * this.d * invDet - y * this.b * invDet;\n world.y = y * this.a * invDet - x * this.c * invDet;\n return world;\n };\n /** Transforms a point from the bone's local coordinates to world coordinates. */\n Bone.prototype.localToWorld = function (local) {\n var x = local.x, y = local.y;\n local.x = x * this.a + y * this.b + this.worldX;\n local.y = x * this.c + y * this.d + this.worldY;\n return local;\n };\n /** Transforms a world rotation to a local rotation. */\n Bone.prototype.worldToLocalRotation = function (worldRotation) {\n var sin = MathUtils.sinDeg(worldRotation), cos = MathUtils.cosDeg(worldRotation);\n return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * MathUtils.radDeg + this.rotation - this.shearX;\n };\n /** Transforms a local rotation to a world rotation. */\n Bone.prototype.localToWorldRotation = function (localRotation) {\n localRotation -= this.rotation - this.shearX;\n var sin = MathUtils.sinDeg(localRotation), cos = MathUtils.cosDeg(localRotation);\n return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * MathUtils.radDeg;\n };\n /** Rotates the world transform the specified amount.\n *