From 79f0abf765ddeca26c6138be9d219d600b3e2b18 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Wed, 25 Aug 2021 19:30:46 +0200 Subject: [PATCH] [ts] Refactor module resolution, switch to esbuild --- .gitignore | 6 +- spine-ts/README.md | 2 + spine-ts/build/spine-canvas.js | 20002 +++++++--------- spine-ts/build/spine-canvas.js.map | 8 +- spine-ts/build/spine-core.d.ts | 3299 --- spine-ts/build/spine-core.js | 10990 --------- spine-ts/build/spine-core.js.map | 1 - spine-ts/package-lock.json | 261 +- spine-ts/package.json | 4 +- spine-ts/rollup.config.js | 34 - spine-ts/spine-canvas/src/AssetManager.ts | 2 +- spine-ts/spine-canvas/src/CanvasTexture.ts | 2 +- spine-ts/spine-canvas/src/SkeletonRenderer.ts | 2 +- spine-ts/spine-canvas/src/index.ts | 43 +- spine-ts/spine-canvas/tsconfig.json | 7 +- spine-ts/spine-core/tsconfig.json | 3 +- spine-ts/spine-webgl/package.json | 26 + spine-ts/spine-webgl/src/AssetManager.ts | 16 +- spine-ts/spine-webgl/src/Camera.ts | 105 +- spine-ts/spine-webgl/src/GLTexture.ts | 149 +- spine-ts/spine-webgl/src/Input.ts | 354 +- spine-ts/spine-webgl/src/LoadingScreen.ts | 169 +- spine-ts/spine-webgl/src/Matrix4.ts | 576 +- spine-ts/spine-webgl/src/Mesh.ts | 329 +- spine-ts/spine-webgl/src/PolygonBatcher.ts | 202 +- spine-ts/spine-webgl/src/SceneRenderer.ts | 949 +- spine-ts/spine-webgl/src/Shader.ts | 327 +- spine-ts/spine-webgl/src/ShapeRenderer.ts | 569 +- .../spine-webgl/src/SkeletonDebugRenderer.ts | 358 +- spine-ts/spine-webgl/src/SkeletonRenderer.ts | 518 +- spine-ts/spine-webgl/src/Vector3.ts | 154 +- spine-ts/spine-webgl/src/WebGL.ts | 130 +- spine-ts/spine-webgl/src/index.ts | 43 + spine-ts/spine-webgl/tsconfig.json | 24 + spine-ts/tsconfig.base.json | 8 +- spine-ts/tsconfig.json | 5 +- 36 files changed, 11613 insertions(+), 28064 deletions(-) delete mode 100644 spine-ts/build/spine-core.d.ts delete mode 100644 spine-ts/build/spine-core.js delete mode 100644 spine-ts/build/spine-core.js.map delete mode 100644 spine-ts/rollup.config.js create mode 100644 spine-ts/spine-webgl/package.json create mode 100644 spine-ts/spine-webgl/src/index.ts create mode 100644 spine-ts/spine-webgl/tsconfig.json diff --git a/.gitignore b/.gitignore index c57aa6ac3..70fa58fd2 100644 --- a/.gitignore +++ b/.gitignore @@ -149,5 +149,9 @@ cmake-build-debug-visual-studio spine-cocos2dx/build-v4/ spine-cocos2dx/example-v4/cocos2d spine-cocos2dx/example-v4/cocos2dx.zip -spine-ts/spine-canvas/dist + spine-ts/spine-core/dist +spine-ts/spine-canvas/dist +spine-ts/spine-webgl/dist +spine-ts/spine-player/dist +spine-ts/spine-threejs/dist \ No newline at end of file diff --git a/spine-ts/README.md b/spine-ts/README.md index 52fad4a0a..ae3e9a86a 100644 --- a/spine-ts/README.md +++ b/spine-ts/README.md @@ -1,5 +1,7 @@ # spine-ts +# In VS Code config, set Extensions > TypeScript > Import Module Specifier to non-relative + The spine-ts runtime provides functionality to load and manipulate [Spine](http://esotericsoftware.com) skeletal animation data using TypeScript and JavaScript. spine-ts is split up into multiple modules: diff --git a/spine-ts/build/spine-canvas.js b/spine-ts/build/spine-canvas.js index 899c739fa..12f3c29f8 100644 --- a/spine-ts/build/spine-canvas.js +++ b/spine-ts/build/spine-canvas.js @@ -1,11361 +1,8887 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.spine = {})); -}(this, (function (exports) { 'use strict'; +var spine = (() => { + var __defProp = Object.defineProperty; + var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); + var __export = (target, all) => { + __markAsModule(target); + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); + }; - /****************************************************************************** - * 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$f = (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 IntSet = /** @class */ (function () { - function IntSet() { - this.array = new Array(); - } - IntSet.prototype.add = function (value) { - var contains = this.contains(value); - this.array[value | 0] = value | 0; - return !contains; - }; - IntSet.prototype.contains = function (value) { - return this.array[value | 0] != undefined; - }; - IntSet.prototype.remove = function (value) { - this.array[value | 0] = undefined; - }; - IntSet.prototype.clear = function () { - this.array.length = 0; - }; - return IntSet; - }()); - var StringSet = /** @class */ (function () { - function StringSet() { - this.entries = {}; - this.size = 0; - } - StringSet.prototype.add = function (value) { - var contains = this.entries[value]; - this.entries[value] = true; - if (!contains) { - this.size++; - return true; - } - return false; - }; - StringSet.prototype.addAll = function (values) { - var oldSize = this.size; - for (var i = 0, n = values.length; i < n; i++) - this.add(values[i]); - return oldSize != this.size; - }; - StringSet.prototype.contains = function (value) { - return this.entries[value]; - }; - StringSet.prototype.clear = function () { - this.entries = {}; - this.size = 0; - }; - return StringSet; - }()); - var Color = /** @class */ (function () { - function Color(r, g, b, a) { - if (r === void 0) { r = 0; } - if (g === void 0) { g = 0; } - if (b === void 0) { b = 0; } - if (a === void 0) { a = 0; } - this.r = r; - this.g = g; - this.b = b; - this.a = a; - } - Color.prototype.set = function (r, g, b, a) { - this.r = r; - this.g = g; - this.b = b; - this.a = a; - return this.clamp(); - }; - Color.prototype.setFromColor = function (c) { - this.r = c.r; - this.g = c.g; - this.b = c.b; - this.a = c.a; - return this; - }; - Color.prototype.setFromString = function (hex) { - hex = hex.charAt(0) == '#' ? hex.substr(1) : hex; - this.r = parseInt(hex.substr(0, 2), 16) / 255; - this.g = parseInt(hex.substr(2, 2), 16) / 255; - this.b = parseInt(hex.substr(4, 2), 16) / 255; - this.a = hex.length != 8 ? 1 : parseInt(hex.substr(6, 2), 16) / 255; - return this; - }; - Color.prototype.add = function (r, g, b, a) { - this.r += r; - this.g += g; - this.b += b; - this.a += a; - return this.clamp(); - }; - Color.prototype.clamp = function () { - if (this.r < 0) - this.r = 0; - else if (this.r > 1) - this.r = 1; - if (this.g < 0) - this.g = 0; - else if (this.g > 1) - this.g = 1; - if (this.b < 0) - this.b = 0; - else if (this.b > 1) - this.b = 1; - if (this.a < 0) - this.a = 0; - else if (this.a > 1) - this.a = 1; - return this; - }; - Color.rgba8888ToColor = function (color, value) { - color.r = ((value & 0xff000000) >>> 24) / 255; - color.g = ((value & 0x00ff0000) >>> 16) / 255; - color.b = ((value & 0x0000ff00) >>> 8) / 255; - color.a = ((value & 0x000000ff)) / 255; - }; - Color.rgb888ToColor = function (color, value) { - color.r = ((value & 0x00ff0000) >>> 16) / 255; - color.g = ((value & 0x0000ff00) >>> 8) / 255; - color.b = ((value & 0x000000ff)) / 255; - }; - Color.fromString = function (hex) { - return new Color().setFromString(hex); - }; - Color.WHITE = new Color(1, 1, 1, 1); - Color.RED = new Color(1, 0, 0, 1); - Color.GREEN = new Color(0, 1, 0, 1); - Color.BLUE = new Color(0, 0, 1, 1); - Color.MAGENTA = new Color(1, 0, 1, 1); - return Color; - }()); - var MathUtils = /** @class */ (function () { - function MathUtils() { - } - MathUtils.clamp = function (value, min, max) { - if (value < min) - return min; - if (value > max) - return max; - return value; - }; - MathUtils.cosDeg = function (degrees) { - return Math.cos(degrees * MathUtils.degRad); - }; - MathUtils.sinDeg = function (degrees) { - return Math.sin(degrees * MathUtils.degRad); - }; - MathUtils.signum = function (value) { - return value > 0 ? 1 : value < 0 ? -1 : 0; - }; - MathUtils.toInt = function (x) { - return x > 0 ? Math.floor(x) : Math.ceil(x); - }; - MathUtils.cbrt = function (x) { - var y = Math.pow(Math.abs(x), 1 / 3); - return x < 0 ? -y : y; - }; - MathUtils.randomTriangular = function (min, max) { - return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5); - }; - MathUtils.randomTriangularWith = function (min, max, mode) { - var u = Math.random(); - var d = max - min; - if (u <= (mode - min) / d) - return min + Math.sqrt(u * d * (mode - min)); - return max - Math.sqrt((1 - u) * d * (max - mode)); - }; - MathUtils.isPowerOfTwo = function (value) { - return value && (value & (value - 1)) === 0; - }; - MathUtils.PI = 3.1415927; - MathUtils.PI2 = MathUtils.PI * 2; - MathUtils.radiansToDegrees = 180 / MathUtils.PI; - MathUtils.radDeg = MathUtils.radiansToDegrees; - MathUtils.degreesToRadians = MathUtils.PI / 180; - MathUtils.degRad = MathUtils.degreesToRadians; - return MathUtils; - }()); - var Interpolation = /** @class */ (function () { - function Interpolation() { - } - Interpolation.prototype.apply = function (start, end, a) { - return start + (end - start) * this.applyInternal(a); - }; - return Interpolation; - }()); - var Pow = /** @class */ (function (_super) { - __extends$f(Pow, _super); - function Pow(power) { - var _this = _super.call(this) || this; - _this.power = 2; - _this.power = power; - return _this; - } - Pow.prototype.applyInternal = function (a) { - if (a <= 0.5) - return Math.pow(a * 2, this.power) / 2; - return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1; - }; - return Pow; - }(Interpolation)); - var PowOut = /** @class */ (function (_super) { - __extends$f(PowOut, _super); - function PowOut(power) { - return _super.call(this, power) || this; - } - PowOut.prototype.applyInternal = function (a) { - return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1; - }; - return PowOut; - }(Pow)); - var Utils = /** @class */ (function () { - function Utils() { - } - Utils.arrayCopy = function (source, sourceStart, dest, destStart, numElements) { - for (var i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) { - dest[j] = source[i]; - } - }; - Utils.arrayFill = function (array, fromIndex, toIndex, value) { - for (var i = fromIndex; i < toIndex; i++) - array[i] = value; - }; - Utils.setArraySize = function (array, size, value) { - if (value === void 0) { value = 0; } - var oldSize = array.length; - if (oldSize == size) - return array; - array.length = size; - if (oldSize < size) { - for (var i = oldSize; i < size; i++) - array[i] = value; - } - return array; - }; - Utils.ensureArrayCapacity = function (array, size, value) { - if (value === void 0) { value = 0; } - if (array.length >= size) - return array; - return Utils.setArraySize(array, size, value); - }; - Utils.newArray = function (size, defaultValue) { - var array = new Array(size); - for (var i = 0; i < size; i++) - array[i] = defaultValue; - return array; - }; - Utils.newFloatArray = function (size) { - if (Utils.SUPPORTS_TYPED_ARRAYS) - return new Float32Array(size); - else { - var array = new Array(size); - for (var i = 0; i < array.length; i++) - array[i] = 0; - return array; - } - }; - Utils.newShortArray = function (size) { - if (Utils.SUPPORTS_TYPED_ARRAYS) - return new Int16Array(size); - else { - var array = new Array(size); - for (var i = 0; i < array.length; i++) - array[i] = 0; - return array; - } - }; - Utils.toFloatArray = function (array) { - return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; - }; - Utils.toSinglePrecision = function (value) { - return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; - }; - // This function is used to fix WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109 - Utils.webkit602BugfixHelper = function (alpha, blend) { - }; - Utils.contains = function (array, element, identity) { - for (var i = 0; i < array.length; i++) - if (array[i] == element) - return true; - return false; - }; - Utils.enumValue = function (type, name) { - return type[name[0].toUpperCase() + name.slice(1)]; - }; - Utils.SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== "undefined"; - return Utils; - }()); - var DebugUtils = /** @class */ (function () { - function DebugUtils() { - } - DebugUtils.logBones = function (skeleton) { - for (var i = 0; i < skeleton.bones.length; i++) { - var bone = skeleton.bones[i]; - console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY); - } - }; - return DebugUtils; - }()); - var Pool = /** @class */ (function () { - function Pool(instantiator) { - this.items = new Array(); - this.instantiator = instantiator; - } - Pool.prototype.obtain = function () { - return this.items.length > 0 ? this.items.pop() : this.instantiator(); - }; - Pool.prototype.free = function (item) { - if (item.reset) - item.reset(); - this.items.push(item); - }; - Pool.prototype.freeAll = function (items) { - for (var i = 0; i < items.length; i++) - this.free(items[i]); - }; - Pool.prototype.clear = function () { - this.items.length = 0; - }; - return Pool; - }()); - var Vector2 = /** @class */ (function () { - function Vector2(x, y) { - if (x === void 0) { x = 0; } - if (y === void 0) { y = 0; } - this.x = x; - this.y = y; - } - Vector2.prototype.set = function (x, y) { - this.x = x; - this.y = y; - return this; - }; - Vector2.prototype.length = function () { - var x = this.x; - var y = this.y; - return Math.sqrt(x * x + y * y); - }; - Vector2.prototype.normalize = function () { - var len = this.length(); - if (len != 0) { - this.x /= len; - this.y /= len; - } - return this; - }; - return Vector2; - }()); - var TimeKeeper = /** @class */ (function () { - function TimeKeeper() { - this.maxDelta = 0.064; - this.framesPerSecond = 0; - this.delta = 0; - this.totalTime = 0; - this.lastTime = Date.now() / 1000; - this.frameCount = 0; - this.frameTime = 0; - } - TimeKeeper.prototype.update = function () { - var now = Date.now() / 1000; - this.delta = now - this.lastTime; - this.frameTime += this.delta; - this.totalTime += this.delta; - if (this.delta > this.maxDelta) - this.delta = this.maxDelta; - this.lastTime = now; - this.frameCount++; - if (this.frameTime > 1) { - this.framesPerSecond = this.frameCount / this.frameTime; - this.frameTime = 0; - this.frameCount = 0; - } - }; - return TimeKeeper; - }()); - var WindowedMean = /** @class */ (function () { - function WindowedMean(windowSize) { - if (windowSize === void 0) { windowSize = 32; } - this.addedValues = 0; - this.lastValue = 0; - this.mean = 0; - this.dirty = true; - this.values = new Array(windowSize); - } - WindowedMean.prototype.hasEnoughData = function () { - return this.addedValues >= this.values.length; - }; - WindowedMean.prototype.addValue = function (value) { - if (this.addedValues < this.values.length) - this.addedValues++; - this.values[this.lastValue++] = value; - if (this.lastValue > this.values.length - 1) - this.lastValue = 0; - this.dirty = true; - }; - WindowedMean.prototype.getMean = function () { - if (this.hasEnoughData()) { - if (this.dirty) { - var mean = 0; - for (var i = 0; i < this.values.length; i++) - mean += this.values[i]; - this.mean = mean / this.values.length; - this.dirty = false; - } - return this.mean; - } - return 0; - }; - return WindowedMean; - }()); + // spine-canvas/src/index.ts + var src_exports = {}; + __export(src_exports, { + AlphaTimeline: () => AlphaTimeline, + Animation: () => Animation, + AnimationState: () => AnimationState, + AnimationStateAdapter: () => AnimationStateAdapter, + AnimationStateData: () => AnimationStateData, + AssetManager: () => AssetManager, + AssetManagerBase: () => AssetManagerBase, + AtlasAttachmentLoader: () => AtlasAttachmentLoader, + Attachment: () => Attachment, + AttachmentTimeline: () => AttachmentTimeline, + BinaryInput: () => BinaryInput, + BlendMode: () => BlendMode, + Bone: () => Bone, + BoneData: () => BoneData, + BoundingBoxAttachment: () => BoundingBoxAttachment, + CURRENT: () => CURRENT, + CanvasTexture: () => CanvasTexture, + ClippingAttachment: () => ClippingAttachment, + Color: () => Color, + ConstraintData: () => ConstraintData, + CurveTimeline: () => CurveTimeline, + CurveTimeline1: () => CurveTimeline1, + CurveTimeline2: () => CurveTimeline2, + DebugUtils: () => DebugUtils, + DeformTimeline: () => DeformTimeline, + Downloader: () => Downloader, + DrawOrderTimeline: () => DrawOrderTimeline, + Event: () => Event, + EventData: () => EventData, + EventQueue: () => EventQueue, + EventTimeline: () => EventTimeline, + EventType: () => EventType, + FIRST: () => FIRST, + FakeTexture: () => FakeTexture, + HOLD_FIRST: () => HOLD_FIRST, + HOLD_MIX: () => HOLD_MIX, + HOLD_SUBSEQUENT: () => HOLD_SUBSEQUENT, + IkConstraint: () => IkConstraint, + IkConstraintData: () => IkConstraintData, + IkConstraintTimeline: () => IkConstraintTimeline, + IntSet: () => IntSet, + Interpolation: () => Interpolation, + JitterEffect: () => JitterEffect, + MathUtils: () => MathUtils, + MeshAttachment: () => MeshAttachment, + MixBlend: () => MixBlend, + MixDirection: () => MixDirection, + PathAttachment: () => PathAttachment, + PathConstraint: () => PathConstraint, + PathConstraintData: () => PathConstraintData, + PathConstraintMixTimeline: () => PathConstraintMixTimeline, + PathConstraintPositionTimeline: () => PathConstraintPositionTimeline, + PathConstraintSpacingTimeline: () => PathConstraintSpacingTimeline, + PointAttachment: () => PointAttachment, + Pool: () => Pool, + PositionMode: () => PositionMode, + Pow: () => Pow, + PowOut: () => PowOut, + RGB2Timeline: () => RGB2Timeline, + RGBA2Timeline: () => RGBA2Timeline, + RGBATimeline: () => RGBATimeline, + RGBTimeline: () => RGBTimeline, + RegionAttachment: () => RegionAttachment, + RotateMode: () => RotateMode, + RotateTimeline: () => RotateTimeline, + SETUP: () => SETUP, + SUBSEQUENT: () => SUBSEQUENT, + ScaleTimeline: () => ScaleTimeline, + ScaleXTimeline: () => ScaleXTimeline, + ScaleYTimeline: () => ScaleYTimeline, + ShearTimeline: () => ShearTimeline, + ShearXTimeline: () => ShearXTimeline, + ShearYTimeline: () => ShearYTimeline, + Skeleton: () => Skeleton, + SkeletonBinary: () => SkeletonBinary, + SkeletonBounds: () => SkeletonBounds, + SkeletonClipping: () => SkeletonClipping, + SkeletonData: () => SkeletonData, + SkeletonJson: () => SkeletonJson, + SkeletonRenderer: () => SkeletonRenderer, + Skin: () => Skin, + SkinEntry: () => SkinEntry, + Slot: () => Slot, + SlotData: () => SlotData, + SpacingMode: () => SpacingMode, + StringSet: () => StringSet, + SwirlEffect: () => SwirlEffect, + Texture: () => Texture, + TextureAtlas: () => TextureAtlas, + TextureAtlasPage: () => TextureAtlasPage, + TextureAtlasRegion: () => TextureAtlasRegion, + TextureFilter: () => TextureFilter, + TextureRegion: () => TextureRegion, + TextureWrap: () => TextureWrap, + TimeKeeper: () => TimeKeeper, + Timeline: () => Timeline, + TrackEntry: () => TrackEntry, + TransformConstraint: () => TransformConstraint, + TransformConstraintData: () => TransformConstraintData, + TransformConstraintTimeline: () => TransformConstraintTimeline, + TransformMode: () => TransformMode, + TranslateTimeline: () => TranslateTimeline, + TranslateXTimeline: () => TranslateXTimeline, + TranslateYTimeline: () => TranslateYTimeline, + Triangulator: () => Triangulator, + Utils: () => Utils, + Vector2: () => Vector2, + VertexAttachment: () => VertexAttachment, + WindowedMean: () => WindowedMean + }); - /****************************************************************************** - * 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$e = (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 __()); - }; - })(); - /** The base class for all attachments. */ - var Attachment = /** @class */ (function () { - function Attachment(name) { - if (!name) - throw new Error("name cannot be null."); - this.name = name; + // spine-core/src/Utils.ts + var IntSet = class { + constructor() { + this.array = new Array(); + } + add(value) { + let contains = this.contains(value); + this.array[value | 0] = value | 0; + return !contains; + } + contains(value) { + return this.array[value | 0] != void 0; + } + remove(value) { + this.array[value | 0] = void 0; + } + clear() { + this.array.length = 0; + } + }; + var StringSet = class { + constructor() { + this.entries = {}; + this.size = 0; + } + add(value) { + let contains = this.entries[value]; + this.entries[value] = true; + if (!contains) { + this.size++; + return true; + } + return false; + } + addAll(values) { + let oldSize = this.size; + for (var i = 0, n = values.length; i < n; i++) + this.add(values[i]); + return oldSize != this.size; + } + contains(value) { + return this.entries[value]; + } + clear() { + this.entries = {}; + this.size = 0; + } + }; + var _Color = class { + constructor(r = 0, g = 0, b = 0, a = 0) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } + set(r, g, b, a) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + return this.clamp(); + } + setFromColor(c) { + this.r = c.r; + this.g = c.g; + this.b = c.b; + this.a = c.a; + return this; + } + setFromString(hex) { + hex = hex.charAt(0) == "#" ? hex.substr(1) : hex; + this.r = parseInt(hex.substr(0, 2), 16) / 255; + this.g = parseInt(hex.substr(2, 2), 16) / 255; + this.b = parseInt(hex.substr(4, 2), 16) / 255; + this.a = hex.length != 8 ? 1 : parseInt(hex.substr(6, 2), 16) / 255; + return this; + } + add(r, g, b, a) { + this.r += r; + this.g += g; + this.b += b; + this.a += a; + return this.clamp(); + } + clamp() { + if (this.r < 0) + this.r = 0; + else if (this.r > 1) + this.r = 1; + if (this.g < 0) + this.g = 0; + else if (this.g > 1) + this.g = 1; + if (this.b < 0) + this.b = 0; + else if (this.b > 1) + this.b = 1; + if (this.a < 0) + this.a = 0; + else if (this.a > 1) + this.a = 1; + return this; + } + static rgba8888ToColor(color, value) { + color.r = ((value & 4278190080) >>> 24) / 255; + color.g = ((value & 16711680) >>> 16) / 255; + color.b = ((value & 65280) >>> 8) / 255; + color.a = (value & 255) / 255; + } + static rgb888ToColor(color, value) { + color.r = ((value & 16711680) >>> 16) / 255; + color.g = ((value & 65280) >>> 8) / 255; + color.b = (value & 255) / 255; + } + static fromString(hex) { + return new _Color().setFromString(hex); + } + }; + var Color = _Color; + Color.WHITE = new _Color(1, 1, 1, 1); + Color.RED = new _Color(1, 0, 0, 1); + Color.GREEN = new _Color(0, 1, 0, 1); + Color.BLUE = new _Color(0, 0, 1, 1); + Color.MAGENTA = new _Color(1, 0, 1, 1); + var _MathUtils = class { + static clamp(value, min, max) { + if (value < min) + return min; + if (value > max) + return max; + return value; + } + static cosDeg(degrees) { + return Math.cos(degrees * _MathUtils.degRad); + } + static sinDeg(degrees) { + return Math.sin(degrees * _MathUtils.degRad); + } + static signum(value) { + return value > 0 ? 1 : value < 0 ? -1 : 0; + } + static toInt(x) { + return x > 0 ? Math.floor(x) : Math.ceil(x); + } + static cbrt(x) { + let y = Math.pow(Math.abs(x), 1 / 3); + return x < 0 ? -y : y; + } + static randomTriangular(min, max) { + return _MathUtils.randomTriangularWith(min, max, (min + max) * 0.5); + } + static randomTriangularWith(min, max, mode) { + let u = Math.random(); + let d = max - min; + if (u <= (mode - min) / d) + return min + Math.sqrt(u * d * (mode - min)); + return max - Math.sqrt((1 - u) * d * (max - mode)); + } + static isPowerOfTwo(value) { + return value && (value & value - 1) === 0; + } + }; + var MathUtils = _MathUtils; + MathUtils.PI = 3.1415927; + MathUtils.PI2 = _MathUtils.PI * 2; + MathUtils.radiansToDegrees = 180 / _MathUtils.PI; + MathUtils.radDeg = _MathUtils.radiansToDegrees; + MathUtils.degreesToRadians = _MathUtils.PI / 180; + MathUtils.degRad = _MathUtils.degreesToRadians; + var Interpolation = class { + apply(start, end, a) { + return start + (end - start) * this.applyInternal(a); + } + }; + var Pow = class extends Interpolation { + constructor(power) { + super(); + this.power = 2; + this.power = power; + } + applyInternal(a) { + if (a <= 0.5) + return Math.pow(a * 2, this.power) / 2; + return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1; + } + }; + var PowOut = class extends Pow { + constructor(power) { + super(power); + } + applyInternal(a) { + return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1; + } + }; + var _Utils = class { + static arrayCopy(source, sourceStart, dest, destStart, numElements) { + for (let i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) { + dest[j] = source[i]; + } + } + static arrayFill(array, fromIndex, toIndex, value) { + for (let i = fromIndex; i < toIndex; i++) + array[i] = value; + } + static setArraySize(array, size, value = 0) { + let oldSize = array.length; + if (oldSize == size) + return array; + array.length = size; + if (oldSize < size) { + for (let i = oldSize; i < size; i++) + array[i] = value; + } + return array; + } + static ensureArrayCapacity(array, size, value = 0) { + if (array.length >= size) + return array; + return _Utils.setArraySize(array, size, value); + } + static newArray(size, defaultValue) { + let array = new Array(size); + for (let i = 0; i < size; i++) + array[i] = defaultValue; + return array; + } + static newFloatArray(size) { + if (_Utils.SUPPORTS_TYPED_ARRAYS) + return new Float32Array(size); + else { + let array = new Array(size); + for (let i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + } + static newShortArray(size) { + if (_Utils.SUPPORTS_TYPED_ARRAYS) + return new Int16Array(size); + else { + let array = new Array(size); + for (let i = 0; i < array.length; i++) + array[i] = 0; + return array; + } + } + static toFloatArray(array) { + return _Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array; + } + static toSinglePrecision(value) { + return _Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value; + } + static webkit602BugfixHelper(alpha, blend) { + } + static contains(array, element, identity = true) { + for (var i = 0; i < array.length; i++) + if (array[i] == element) + return true; + return false; + } + static enumValue(type, name) { + return type[name[0].toUpperCase() + name.slice(1)]; + } + }; + var Utils = _Utils; + Utils.SUPPORTS_TYPED_ARRAYS = typeof Float32Array !== "undefined"; + var DebugUtils = class { + static logBones(skeleton) { + for (let i = 0; i < skeleton.bones.length; i++) { + let bone = skeleton.bones[i]; + console.log(bone.data.name + ", " + bone.a + ", " + bone.b + ", " + bone.c + ", " + bone.d + ", " + bone.worldX + ", " + bone.worldY); + } + } + }; + var Pool = class { + constructor(instantiator) { + this.items = new Array(); + this.instantiator = instantiator; + } + obtain() { + return this.items.length > 0 ? this.items.pop() : this.instantiator(); + } + free(item) { + if (item.reset) + item.reset(); + this.items.push(item); + } + freeAll(items) { + for (let i = 0; i < items.length; i++) + this.free(items[i]); + } + clear() { + this.items.length = 0; + } + }; + var Vector2 = class { + constructor(x = 0, y = 0) { + this.x = x; + this.y = y; + } + set(x, y) { + this.x = x; + this.y = y; + return this; + } + length() { + let x = this.x; + let y = this.y; + return Math.sqrt(x * x + y * y); + } + normalize() { + let len = this.length(); + if (len != 0) { + this.x /= len; + this.y /= len; + } + return this; + } + }; + var TimeKeeper = class { + constructor() { + this.maxDelta = 0.064; + this.framesPerSecond = 0; + this.delta = 0; + this.totalTime = 0; + this.lastTime = Date.now() / 1e3; + this.frameCount = 0; + this.frameTime = 0; + } + update() { + let now = Date.now() / 1e3; + this.delta = now - this.lastTime; + this.frameTime += this.delta; + this.totalTime += this.delta; + if (this.delta > this.maxDelta) + this.delta = this.maxDelta; + this.lastTime = now; + this.frameCount++; + if (this.frameTime > 1) { + this.framesPerSecond = this.frameCount / this.frameTime; + this.frameTime = 0; + this.frameCount = 0; + } + } + }; + var WindowedMean = class { + constructor(windowSize = 32) { + this.addedValues = 0; + this.lastValue = 0; + this.mean = 0; + this.dirty = true; + this.values = new Array(windowSize); + } + hasEnoughData() { + return this.addedValues >= this.values.length; + } + addValue(value) { + if (this.addedValues < this.values.length) + this.addedValues++; + this.values[this.lastValue++] = value; + if (this.lastValue > this.values.length - 1) + this.lastValue = 0; + this.dirty = true; + } + getMean() { + if (this.hasEnoughData()) { + if (this.dirty) { + let mean = 0; + for (let i = 0; i < this.values.length; i++) + mean += this.values[i]; + this.mean = mean / this.values.length; + this.dirty = false; } - return Attachment; - }()); - /** Base class for an attachment with vertices that are transformed by one or more bones and can be deformed by a slot's - * {@link Slot#deform}. */ - var VertexAttachment = /** @class */ (function (_super) { - __extends$e(VertexAttachment, _super); - function VertexAttachment(name) { - var _this = _super.call(this, name) || this; - /** The unique ID for this attachment. */ - _this.id = VertexAttachment.nextID++; - /** The maximum number of world vertex values that can be output by - * {@link #computeWorldVertices()} using the `count` parameter. */ - _this.worldVerticesLength = 0; - /** Deform keys for the deform attachment are also applied to this attachment. May be null if no deform keys should be applied. */ - _this.deformAttachment = _this; - return _this; - } - /** Transforms the attachment's local {@link #vertices} to world coordinates. If the slot's {@link Slot#deform} is - * not empty, it is used to deform the vertices. - * - * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine - * Runtimes Guide. - * @param start The index of the first {@link #vertices} value to transform. Each vertex has 2 values, x and y. - * @param count The number of world vertex values to output. Must be <= {@link #worldVerticesLength} - `start`. - * @param worldVertices The output world vertices. Must have a length >= `offset` + `count` * - * `stride` / 2. - * @param offset The `worldVertices` index to begin writing values. - * @param stride The number of `worldVertices` entries between the value pairs written. */ - VertexAttachment.prototype.computeWorldVertices = function (slot, start, count, worldVertices, offset, stride) { - count = offset + (count >> 1) * stride; - var skeleton = slot.bone.skeleton; - var deformArray = slot.deform; - var vertices = this.vertices; - var bones = this.bones; - if (!bones) { - if (deformArray.length > 0) - vertices = deformArray; - var bone = slot.bone; - var x = bone.worldX; - var y = bone.worldY; - var a = bone.a, b = bone.b, c = bone.c, d = bone.d; - for (var v_1 = start, w = offset; w < count; v_1 += 2, w += stride) { - var vx = vertices[v_1], vy = vertices[v_1 + 1]; - worldVertices[w] = vx * a + vy * b + x; - worldVertices[w + 1] = vx * c + vy * d + y; - } - return; - } - var v = 0, skip = 0; - for (var i = 0; i < start; i += 2) { - var n = bones[v]; - v += n + 1; - skip += n; - } - var skeletonBones = skeleton.bones; - if (deformArray.length == 0) { - for (var w = offset, b = skip * 3; w < count; w += stride) { - var wx = 0, wy = 0; - var n = bones[v++]; - n += v; - for (; v < n; v++, b += 3) { - var bone = skeletonBones[bones[v]]; - var vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; - wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; - wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; - } - worldVertices[w] = wx; - worldVertices[w + 1] = wy; - } - } - else { - var deform = deformArray; - for (var w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) { - var wx = 0, wy = 0; - var n = bones[v++]; - n += v; - for (; v < n; v++, b += 3, f += 2) { - var bone = skeletonBones[bones[v]]; - var vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; - wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; - wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; - } - worldVertices[w] = wx; - worldVertices[w + 1] = wy; - } - } - }; - /** Does not copy id (generated) or name (set on construction). **/ - VertexAttachment.prototype.copyTo = function (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; - }; - VertexAttachment.nextID = 0; - return VertexAttachment; - }(Attachment)); + return this.mean; + } + return 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$d = (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 __()); - }; - })(); - /** A simple container for a list of timelines and a name. */ - var Animation = /** @class */ (function () { - function Animation(name, timelines, duration) { - if (!name) - throw new Error("name cannot be null."); - this.name = name; - this.setTimelines(timelines); - this.duration = duration; + // spine-core/src/attachments/Attachment.ts + var Attachment = class { + constructor(name) { + if (!name) + throw new Error("name cannot be null."); + this.name = name; + } + }; + var _VertexAttachment = class extends Attachment { + constructor(name) { + super(name); + this.id = _VertexAttachment.nextID++; + this.worldVerticesLength = 0; + this.deformAttachment = this; + } + computeWorldVertices(slot, start, count, worldVertices, offset, stride) { + count = offset + (count >> 1) * stride; + let skeleton = slot.bone.skeleton; + let deformArray = slot.deform; + let vertices = this.vertices; + let bones = this.bones; + if (!bones) { + if (deformArray.length > 0) + vertices = deformArray; + let bone = slot.bone; + let x = bone.worldX; + let y = bone.worldY; + let a = bone.a, b = bone.b, c = bone.c, d = bone.d; + for (let v2 = start, w = offset; w < count; v2 += 2, w += stride) { + let vx = vertices[v2], vy = vertices[v2 + 1]; + worldVertices[w] = vx * a + vy * b + x; + worldVertices[w + 1] = vx * c + vy * d + y; } - Animation.prototype.setTimelines = function (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()); - }; - Animation.prototype.hasTimeline = function (ids) { - for (var i = 0; i < ids.length; i++) - if (this.timelineIds.contains(ids[i])) - return true; - return false; - }; - /** Applies all the animation's timelines to the specified skeleton. - * - * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}. - * @param loop If true, the animation repeats after {@link #getDuration()}. - * @param events May be null to ignore fired events. */ - Animation.prototype.apply = function (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; - } - var timelines = this.timelines; - for (var i = 0, n = timelines.length; i < n; i++) - timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction); - }; - return Animation; - }()); - /** Controls how a timeline value is mixed with the setup pose value or current pose value when a timeline's `alpha` - * < 1. - * - * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}. */ - exports.MixBlend = void 0; - (function (MixBlend) { - /** Transitions from the setup value to the timeline value (the current value is not used). Before the first key, the setup - * value is set. */ - MixBlend[MixBlend["setup"] = 0] = "setup"; - /** Transitions from the current value to the timeline value. Before the first key, transitions from the current value to - * the setup value. Timelines which perform instant transitions, such as {@link DrawOrderTimeline} or - * {@link AttachmentTimeline}, use the setup value before the first key. - * - * `first` is intended for the first animations applied, not for animations layered on top of those. */ - MixBlend[MixBlend["first"] = 1] = "first"; - /** Transitions from the current value to the timeline value. No change is made before the first key (the current value is - * kept until the first key). - * - * `replace` is intended for animations layered on top of others, not for the first animations applied. */ - MixBlend[MixBlend["replace"] = 2] = "replace"; - /** Transitions from the current value to the current value plus the timeline value. No change is made before the first key - * (the current value is kept until the first key). - * - * `add` is intended for animations layered on top of others, not for the first animations applied. Properties - * keyed by additive animations must be set manually or by another animation before applying the additive animations, else - * the property values will increase continually. */ - MixBlend[MixBlend["add"] = 3] = "add"; - })(exports.MixBlend || (exports.MixBlend = {})); - /** Indicates whether a timeline's `alpha` is mixing out over time toward 0 (the setup or current pose value) or - * mixing in toward 1 (the timeline's value). - * - * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}. */ - exports.MixDirection = void 0; - (function (MixDirection) { - MixDirection[MixDirection["mixIn"] = 0] = "mixIn"; - MixDirection[MixDirection["mixOut"] = 1] = "mixOut"; - })(exports.MixDirection || (exports.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 - }; - /** The interface for all timelines. */ - var Timeline = /** @class */ (function () { - function Timeline(frameCount, propertyIds) { - this.propertyIds = propertyIds; - this.frames = Utils.newFloatArray(frameCount * this.getFrameEntries()); + return; + } + let v = 0, skip = 0; + for (let i = 0; i < start; i += 2) { + let n = bones[v]; + v += n + 1; + skip += n; + } + let skeletonBones = skeleton.bones; + if (deformArray.length == 0) { + for (let w = offset, b = skip * 3; w < count; w += stride) { + let wx = 0, wy = 0; + let n = bones[v++]; + n += v; + for (; v < n; v++, b += 3) { + let bone = skeletonBones[bones[v]]; + let vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; } - Timeline.prototype.getPropertyIds = function () { - return this.propertyIds; - }; - Timeline.prototype.getFrameEntries = function () { - return 1; - }; - Timeline.prototype.getFrameCount = function () { - return this.frames.length / this.getFrameEntries(); - }; - Timeline.prototype.getDuration = function () { - return this.frames[this.frames.length - this.getFrameEntries()]; - }; - Timeline.search1 = function (frames, time) { - var n = frames.length; - for (var i = 1; i < n; i++) - if (frames[i] > time) - return i - 1; - return n - 1; - }; - Timeline.search = function (frames, time, step) { - var n = frames.length; - for (var i = step; i < n; i += step) - if (frames[i] > time) - return i - step; - return n - step; - }; - return Timeline; - }()); - /** The base class for timelines that use interpolation between key frame values. */ - var CurveTimeline = /** @class */ (function (_super) { - __extends$d(CurveTimeline, _super); - function CurveTimeline(frameCount, bezierCount, propertyIds) { - var _this = _super.call(this, frameCount, propertyIds) || this; - _this.curves = Utils.newFloatArray(frameCount + bezierCount * 18 /*BEZIER_SIZE*/); - _this.curves[frameCount - 1] = 1 /*STEPPED*/; - return _this; + } else { + let deform = deformArray; + for (let w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) { + let wx = 0, wy = 0; + let n = bones[v++]; + n += v; + for (; v < n; v++, b += 3, f += 2) { + let bone = skeletonBones[bones[v]]; + let vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2]; + wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight; + wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight; + } + worldVertices[w] = wx; + worldVertices[w + 1] = wy; } - /** Sets the specified key frame to linear interpolation. */ - CurveTimeline.prototype.setLinear = function (frame) { - this.curves[frame] = 0 /*LINEAR*/; - }; - /** Sets the specified key frame to stepped interpolation. */ - CurveTimeline.prototype.setStepped = function (frame) { - this.curves[frame] = 1 /*STEPPED*/; - }; - /** Shrinks the storage for Bezier curves, for use when 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("", [], 0); + return _emptyAnimation; + } + update(delta) { + delta *= this.timeScale; + let tracks = this.tracks; + for (let i = 0, n = tracks.length; i < n; i++) { + let current = tracks[i]; + if (!current) + continue; + current.animationLast = current.nextAnimationLast; + current.trackLast = current.nextTrackLast; + let currentDelta = delta * current.timeScale; + if (current.delay > 0) { + current.delay -= currentDelta; + if (current.delay > 0) + continue; + currentDelta = -current.delay; + current.delay = 0; + } + let next = current.next; + if (next) { + let nextTime = current.trackLast - next.delay; + if (nextTime >= 0) { + next.delay = 0; + next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; + current.trackTime += currentDelta; + this.setCurrent(i, next, true); + while (next.mixingFrom) { + next.mixTime += delta; + next = next.mixingFrom; } - var position = this.getCurveValue(time); - if (blend == exports.MixBlend.setup) - constraint.position = constraint.data.position + (position - constraint.data.position) * alpha; + continue; + } + } else if (current.trackLast >= current.trackEnd && !current.mixingFrom) { + tracks[i] = null; + this.queue.end(current); + this.clearNext(current); + continue; + } + if (current.mixingFrom && this.updateMixingFrom(current, delta)) { + let from = current.mixingFrom; + current.mixingFrom = null; + if (from) + from.mixingTo = null; + while (from) { + this.queue.end(from); + from = from.mixingFrom; + } + } + current.trackTime += currentDelta; + } + this.queue.drain(); + } + updateMixingFrom(to, delta) { + let from = to.mixingFrom; + if (!from) + return true; + let finished = this.updateMixingFrom(from, delta); + from.animationLast = from.nextAnimationLast; + from.trackLast = from.nextTrackLast; + if (to.mixTime > 0 && to.mixTime >= to.mixDuration) { + if (from.totalAlpha == 0 || to.mixDuration == 0) { + to.mixingFrom = from.mixingFrom; + if (from.mixingFrom) + from.mixingFrom.mixingTo = to; + to.interruptAlpha = from.interruptAlpha; + this.queue.end(from); + } + return finished; + } + from.trackTime += delta * from.timeScale; + to.mixTime += delta; + return false; + } + apply(skeleton) { + if (!skeleton) + throw new Error("skeleton cannot be null."); + if (this.animationsChanged) + this._animationsChanged(); + let events = this.events; + let tracks = this.tracks; + let applied = false; + for (let i2 = 0, n2 = tracks.length; i2 < n2; i2++) { + let current = tracks[i2]; + if (!current || current.delay > 0) + continue; + applied = true; + let blend = i2 == 0 ? MixBlend.first : current.mixBlend; + let mix = current.alpha; + if (current.mixingFrom) + mix *= this.applyMixingFrom(current, skeleton, blend); + else if (current.trackTime >= current.trackEnd && !current.next) + mix = 0; + let animationLast = current.animationLast, animationTime = current.getAnimationTime(), applyTime = animationTime; + let applyEvents = events; + if (current.reverse) { + applyTime = current.animation.duration - applyTime; + applyEvents = null; + } + let timelines = current.animation.timelines; + let timelineCount = timelines.length; + if (i2 == 0 && mix == 1 || blend == MixBlend.add) { + for (let ii = 0; ii < timelineCount; ii++) { + Utils.webkit602BugfixHelper(mix, blend); + var timeline = timelines[ii]; + if (timeline instanceof AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, applyTime, blend, true); else - constraint.position += (position - constraint.position) * alpha; - }; - return PathConstraintPositionTimeline; - }(CurveTimeline1)); - /** Changes a path constraint's {@link PathConstraint#spacing}. */ - var PathConstraintSpacingTimeline = /** @class */ (function (_super) { - __extends$d(PathConstraintSpacingTimeline, _super); - function PathConstraintSpacingTimeline(frameCount, bezierCount, pathConstraintIndex) { - var _this = _super.call(this, frameCount, bezierCount, Property.pathConstraintSpacing + "|" + pathConstraintIndex) || this; - /** The index of the path constraint slot in {@link Skeleton#getPathConstraints()} that will be changed. */ - _this.pathConstraintIndex = 0; - _this.pathConstraintIndex = pathConstraintIndex; - return _this; + timeline.apply(skeleton, animationLast, applyTime, applyEvents, mix, blend, MixDirection.mixIn); + } + } else { + let timelineMode = current.timelineMode; + let firstFrame = current.timelinesRotation.length != timelineCount << 1; + if (firstFrame) + current.timelinesRotation.length = timelineCount << 1; + for (let ii = 0; ii < timelineCount; ii++) { + let timeline2 = timelines[ii]; + let timelineBlend = timelineMode[ii] == SUBSEQUENT ? blend : MixBlend.setup; + if (timeline2 instanceof RotateTimeline) { + this.applyRotateTimeline(timeline2, skeleton, applyTime, mix, timelineBlend, current.timelinesRotation, ii << 1, firstFrame); + } else if (timeline2 instanceof AttachmentTimeline) { + this.applyAttachmentTimeline(timeline2, skeleton, applyTime, blend, true); + } else { + Utils.webkit602BugfixHelper(mix, blend); + timeline2.apply(skeleton, animationLast, applyTime, applyEvents, mix, timelineBlend, MixDirection.mixIn); + } + } } - PathConstraintSpacingTimeline.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.spacing = constraint.data.spacing; - return; - case exports.MixBlend.first: - constraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha; - } - return; - } - var spacing = this.getCurveValue(time); - if (blend == exports.MixBlend.setup) - constraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha; - else - constraint.spacing += (spacing - constraint.spacing) * alpha; - }; - return PathConstraintSpacingTimeline; - }(CurveTimeline1)); - /** Changes a transform constraint's {@link PathConstraint#getMixRotate()}, {@link PathConstraint#getMixX()}, and - * {@link PathConstraint#getMixY()}. */ - var PathConstraintMixTimeline = /** @class */ (function (_super) { - __extends$d(PathConstraintMixTimeline, _super); - function PathConstraintMixTimeline(frameCount, bezierCount, pathConstraintIndex) { - var _this = _super.call(this, frameCount, bezierCount, [ - Property.pathConstraintMix + "|" + pathConstraintIndex - ]) || this; - /** The index of the path constraint slot in {@link Skeleton#getPathConstraints()} that will be changed. */ - _this.pathConstraintIndex = 0; - _this.pathConstraintIndex = pathConstraintIndex; - return _this; + this.queueEvents(current, animationTime); + events.length = 0; + current.nextAnimationLast = animationTime; + current.nextTrackLast = current.trackTime; + } + var setupState = this.unkeyedState + SETUP; + var slots = skeleton.slots; + for (var i = 0, n = skeleton.slots.length; i < n; i++) { + var slot = slots[i]; + if (slot.attachmentState == setupState) { + var attachmentName = slot.data.attachmentName; + slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName)); } - PathConstraintMixTimeline.prototype.getFrameEntries = function () { - return 4 /*ENTRIES*/; - }; - PathConstraintMixTimeline.prototype.setFrame = function (frame, time, mixRotate, mixX, mixY) { - var frames = this.frames; - frame <<= 2; - frames[frame] = time; - frames[frame + 1 /*ROTATE*/] = mixRotate; - frames[frame + 2 /*X*/] = mixX; - frames[frame + 3 /*Y*/] = mixY; - }; - PathConstraintMixTimeline.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.mixRotate = constraint.data.mixRotate; - constraint.mixX = constraint.data.mixX; - constraint.mixY = constraint.data.mixY; - return; - case exports.MixBlend.first: - 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; - } - var rotate, x, y; - var i = Timeline.search(frames, time, 4 /*ENTRIES*/); - var curveType = this.curves[i >> 2]; - switch (curveType) { - case 0 /*LINEAR*/: - var before = frames[i]; - rotate = frames[i + 1 /*ROTATE*/]; - x = frames[i + 2 /*X*/]; - y = frames[i + 3 /*Y*/]; - var t = (time - before) / (frames[i + 4 /*ENTRIES*/] - before); - rotate += (frames[i + 4 /*ENTRIES*/ + 1 /*ROTATE*/] - rotate) * t; - x += (frames[i + 4 /*ENTRIES*/ + 2 /*X*/] - x) * t; - y += (frames[i + 4 /*ENTRIES*/ + 3 /*Y*/] - y) * t; - break; - case 1 /*STEPPED*/: - rotate = frames[i + 1 /*ROTATE*/]; - x = frames[i + 2 /*X*/]; - y = frames[i + 3 /*Y*/]; - 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*/); - } - 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; + } + this.unkeyedState += 2; + this.queue.drain(); + return applied; + } + applyMixingFrom(to, skeleton, blend) { + let from = to.mixingFrom; + if (from.mixingFrom) + this.applyMixingFrom(from, skeleton, blend); + let mix = 0; + if (to.mixDuration == 0) { + mix = 1; + if (blend == MixBlend.first) + blend = MixBlend.setup; + } else { + mix = to.mixTime / to.mixDuration; + if (mix > 1) + mix = 1; + if (blend != MixBlend.first) + blend = from.mixBlend; + } + let attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold; + let timelines = from.animation.timelines; + let timelineCount = timelines.length; + let alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); + let animationLast = from.animationLast, animationTime = from.getAnimationTime(), applyTime = animationTime; + let events = null; + if (from.reverse) + applyTime = from.animation.duration - applyTime; + else if (mix < from.eventThreshold) + events = this.events; + if (blend == MixBlend.add) { + for (let i = 0; i < timelineCount; i++) + timelines[i].apply(skeleton, animationLast, applyTime, events, alphaMix, blend, MixDirection.mixOut); + } else { + let timelineMode = from.timelineMode; + let timelineHoldMix = from.timelineHoldMix; + let firstFrame = from.timelinesRotation.length != timelineCount << 1; + if (firstFrame) + from.timelinesRotation.length = timelineCount << 1; + from.totalAlpha = 0; + for (let i = 0; i < timelineCount; i++) { + let timeline = timelines[i]; + let direction = MixDirection.mixOut; + let timelineBlend; + let alpha = 0; + switch (timelineMode[i]) { + case SUBSEQUENT: + if (!drawOrder && timeline instanceof DrawOrderTimeline) + continue; + timelineBlend = blend; + alpha = alphaMix; + break; + case FIRST: + timelineBlend = MixBlend.setup; + alpha = alphaMix; + break; + case HOLD_SUBSEQUENT: + timelineBlend = blend; + alpha = alphaHold; + break; + case HOLD_FIRST: + timelineBlend = MixBlend.setup; + alpha = alphaHold; + break; + default: + timelineBlend = MixBlend.setup; + let holdMix = timelineHoldMix[i]; + alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); + break; + } + from.totalAlpha += alpha; + if (timeline instanceof RotateTimeline) + this.applyRotateTimeline(timeline, skeleton, applyTime, alpha, timelineBlend, from.timelinesRotation, i << 1, firstFrame); + else if (timeline instanceof AttachmentTimeline) + this.applyAttachmentTimeline(timeline, skeleton, applyTime, timelineBlend, attachments); + else { + Utils.webkit602BugfixHelper(alpha, blend); + if (drawOrder && timeline instanceof DrawOrderTimeline && timelineBlend == MixBlend.setup) + direction = MixDirection.mixIn; + timeline.apply(skeleton, animationLast, applyTime, events, alpha, timelineBlend, direction); + } + } + } + if (to.mixDuration > 0) + this.queueEvents(from, animationTime); + this.events.length = 0; + from.nextAnimationLast = animationTime; + from.nextTrackLast = from.trackTime; + return mix; + } + applyAttachmentTimeline(timeline, skeleton, time, blend, attachments) { + var slot = skeleton.slots[timeline.slotIndex]; + if (!slot.bone.active) + return; + if (time < timeline.frames[0]) { + if (blend == MixBlend.setup || blend == MixBlend.first) + this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments); + } else + this.setAttachment(skeleton, slot, timeline.attachmentNames[Timeline.search1(timeline.frames, time)], attachments); + if (slot.attachmentState <= this.unkeyedState) + slot.attachmentState = this.unkeyedState + SETUP; + } + setAttachment(skeleton, slot, attachmentName, attachments) { + slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + if (attachments) + slot.attachmentState = this.unkeyedState + CURRENT; + } + applyRotateTimeline(timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) { + if (firstFrame) + timelinesRotation[i] = 0; + if (alpha == 1) { + timeline.apply(skeleton, 0, time, null, 1, blend, MixDirection.mixIn); + return; + } + let bone = skeleton.bones[timeline.boneIndex]; + if (!bone.active) + return; + let frames = timeline.frames; + let r1 = 0, r2 = 0; + if (time < frames[0]) { + switch (blend) { + case MixBlend.setup: + bone.rotation = bone.data.rotation; + default: + return; + case MixBlend.first: + r1 = bone.rotation; + r2 = bone.data.rotation; + } + } else { + r1 = blend == MixBlend.setup ? bone.data.rotation : bone.rotation; + r2 = bone.data.rotation + timeline.getCurveValue(time); + } + let total = 0, diff = r2 - r1; + diff -= (16384 - (16384.499999999996 - diff / 360 | 0)) * 360; + if (diff == 0) { + total = timelinesRotation[i]; + } else { + let lastTotal = 0, lastDiff = 0; + if (firstFrame) { + lastTotal = 0; + lastDiff = diff; + } else { + lastTotal = timelinesRotation[i]; + lastDiff = timelinesRotation[i + 1]; + } + let current = diff > 0, dir = lastTotal >= 0; + if (MathUtils.signum(lastDiff) != MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) { + if (Math.abs(lastTotal) > 180) + lastTotal += 360 * MathUtils.signum(lastTotal); + dir = current; + } + total = diff + lastTotal - lastTotal % 360; + if (dir != current) + total += 360 * MathUtils.signum(lastTotal); + timelinesRotation[i] = total; + } + timelinesRotation[i + 1] = diff; + bone.rotation = r1 + total * alpha; + } + queueEvents(entry, animationTime) { + let animationStart = entry.animationStart, animationEnd = entry.animationEnd; + let duration = animationEnd - animationStart; + let trackLastWrapped = entry.trackLast % duration; + let events = this.events; + let i = 0, n = events.length; + for (; i < n; i++) { + let event = events[i]; + if (event.time < trackLastWrapped) + break; + if (event.time > animationEnd) + continue; + this.queue.event(entry, event); + } + let complete = false; + if (entry.loop) + complete = duration == 0 || trackLastWrapped > entry.trackTime % duration; + else + complete = animationTime >= animationEnd && entry.animationLast < animationEnd; + if (complete) + this.queue.complete(entry); + for (; i < n; i++) { + let event = events[i]; + if (event.time < animationStart) + continue; + this.queue.event(entry, event); + } + } + clearTracks() { + let oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (let i = 0, n = this.tracks.length; i < n; i++) + this.clearTrack(i); + this.tracks.length = 0; + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + } + clearTrack(trackIndex) { + if (trackIndex >= this.tracks.length) + return; + let current = this.tracks[trackIndex]; + if (!current) + return; + this.queue.end(current); + this.clearNext(current); + let entry = current; + while (true) { + let from = entry.mixingFrom; + if (!from) + break; + this.queue.end(from); + entry.mixingFrom = null; + entry.mixingTo = null; + entry = from; + } + this.tracks[current.trackIndex] = null; + this.queue.drain(); + } + setCurrent(index, current, interrupt) { + let from = this.expandToIndex(index); + this.tracks[index] = current; + current.previous = null; + if (from) { + if (interrupt) + this.queue.interrupt(from); + current.mixingFrom = from; + from.mixingTo = current; + current.mixTime = 0; + if (from.mixingFrom && from.mixDuration > 0) + current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration); + from.timelinesRotation.length = 0; + } + this.queue.start(current); + } + setAnimation(trackIndex, animationName, loop = false) { + let animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) + throw new Error("Animation not found: " + animationName); + return this.setAnimationWith(trackIndex, animation, loop); + } + setAnimationWith(trackIndex, animation, loop = false) { + if (!animation) + throw new Error("animation cannot be null."); + let interrupt = true; + let current = this.expandToIndex(trackIndex); + if (current) { + if (current.nextTrackLast == -1) { + this.tracks[trackIndex] = current.mixingFrom; + this.queue.interrupt(current); + this.queue.end(current); + this.clearNext(current); + current = current.mixingFrom; + interrupt = false; + } else + this.clearNext(current); + } + let entry = this.trackEntry(trackIndex, animation, loop, current); + this.setCurrent(trackIndex, entry, interrupt); + this.queue.drain(); + return entry; + } + addAnimation(trackIndex, animationName, loop = false, delay = 0) { + let animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) + throw new Error("Animation not found: " + animationName); + return this.addAnimationWith(trackIndex, animation, loop, delay); + } + addAnimationWith(trackIndex, animation, loop = false, delay = 0) { + if (!animation) + throw new Error("animation cannot be null."); + let last = this.expandToIndex(trackIndex); + if (last) { + while (last.next) + last = last.next; + } + let entry = this.trackEntry(trackIndex, animation, loop, last); + if (!last) { + this.setCurrent(trackIndex, entry, true); + this.queue.drain(); + } else { + last.next = entry; + entry.previous = last; + if (delay <= 0) + delay += last.getTrackComplete() - entry.mixDuration; + } + entry.delay = delay; + return entry; + } + setEmptyAnimation(trackIndex, mixDuration = 0) { + let entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation(), false); + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + } + addEmptyAnimation(trackIndex, mixDuration = 0, delay = 0) { + let entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation(), false, delay); + if (delay <= 0) + entry.delay += entry.mixDuration - mixDuration; + entry.mixDuration = mixDuration; + entry.trackEnd = mixDuration; + return entry; + } + setEmptyAnimations(mixDuration = 0) { + let oldDrainDisabled = this.queue.drainDisabled; + this.queue.drainDisabled = true; + for (let i = 0, n = this.tracks.length; i < n; i++) { + let current = this.tracks[i]; + if (current) + this.setEmptyAnimation(current.trackIndex, mixDuration); + } + this.queue.drainDisabled = oldDrainDisabled; + this.queue.drain(); + } + expandToIndex(index) { + if (index < this.tracks.length) + return this.tracks[index]; + Utils.ensureArrayCapacity(this.tracks, index + 1, null); + this.tracks.length = index + 1; + return null; + } + trackEntry(trackIndex, animation, loop, last) { + let entry = this.trackEntryPool.obtain(); + entry.trackIndex = trackIndex; + entry.animation = animation; + entry.loop = loop; + entry.holdPrevious = false; + entry.eventThreshold = 0; + entry.attachmentThreshold = 0; + entry.drawOrderThreshold = 0; + entry.animationStart = 0; + entry.animationEnd = animation.duration; + entry.animationLast = -1; + entry.nextAnimationLast = -1; + entry.delay = 0; + entry.trackTime = 0; + entry.trackLast = -1; + entry.nextTrackLast = -1; + entry.trackEnd = Number.MAX_VALUE; + entry.timeScale = 1; + entry.alpha = 1; + entry.interruptAlpha = 1; + entry.mixTime = 0; + entry.mixDuration = !last ? 0 : this.data.getMix(last.animation, animation); + entry.mixBlend = MixBlend.replace; + return entry; + } + clearNext(entry) { + let next = entry.next; + while (next) { + this.queue.dispose(next); + next = next.next; + } + entry.next = null; + } + _animationsChanged() { + this.animationsChanged = false; + this.propertyIDs.clear(); + let tracks = this.tracks; + for (let i = 0, n = tracks.length; i < n; i++) { + let entry = tracks[i]; + if (!entry) + continue; + while (entry.mixingFrom) + entry = entry.mixingFrom; + do { + if (!entry.mixingTo || entry.mixBlend != MixBlend.add) + this.computeHold(entry); + entry = entry.mixingTo; + } while (entry); + } + } + computeHold(entry) { + let to = entry.mixingTo; + let timelines = entry.animation.timelines; + let timelinesCount = entry.animation.timelines.length; + let timelineMode = entry.timelineMode; + timelineMode.length = timelinesCount; + let timelineHoldMix = entry.timelineHoldMix; + timelineHoldMix.length = 0; + let propertyIDs = this.propertyIDs; + if (to && to.holdPrevious) { + for (let i = 0; i < timelinesCount; i++) + timelineMode[i] = propertyIDs.addAll(timelines[i].getPropertyIds()) ? HOLD_FIRST : HOLD_SUBSEQUENT; + return; + } + outer: + for (let i = 0; i < timelinesCount; i++) { + let timeline = timelines[i]; + let ids = timeline.getPropertyIds(); + if (!propertyIDs.addAll(ids)) + timelineMode[i] = SUBSEQUENT; + else if (!to || timeline instanceof AttachmentTimeline || timeline instanceof DrawOrderTimeline || timeline instanceof EventTimeline || !to.animation.hasTimeline(ids)) { + timelineMode[i] = FIRST; + } else { + for (let next = to.mixingTo; next; next = next.mixingTo) { + if (next.animation.hasTimeline(ids)) + continue; + if (entry.mixDuration > 0) { + timelineMode[i] = HOLD_MIX; + timelineHoldMix[i] = next; + continue outer; + } + break; } + timelineMode[i] = HOLD_FIRST; + } + } + } + getCurrent(trackIndex) { + if (trackIndex >= this.tracks.length) + return null; + return this.tracks[trackIndex]; + } + addListener(listener) { + if (!listener) + throw new Error("listener cannot be null."); + this.listeners.push(listener); + } + removeListener(listener) { + let index = this.listeners.indexOf(listener); + if (index >= 0) + this.listeners.splice(index, 1); + } + clearListeners() { + this.listeners.length = 0; + } + clearListenerNotifications() { + this.queue.clear(); + } + }; + var TrackEntry = class { + constructor() { + this.mixBlend = MixBlend.replace; + this.timelineMode = new Array(); + this.timelineHoldMix = new Array(); + this.timelinesRotation = new Array(); + } + reset() { + this.next = null; + this.previous = null; + this.mixingFrom = null; + this.mixingTo = null; + this.animation = null; + this.listener = null; + this.timelineMode.length = 0; + this.timelineHoldMix.length = 0; + this.timelinesRotation.length = 0; + } + getAnimationTime() { + if (this.loop) { + let duration = this.animationEnd - this.animationStart; + if (duration == 0) + return this.animationStart; + return this.trackTime % duration + this.animationStart; + } + return Math.min(this.trackTime + this.animationStart, this.animationEnd); + } + setAnimationLast(animationLast) { + this.animationLast = animationLast; + this.nextAnimationLast = animationLast; + } + isComplete() { + return this.trackTime >= this.animationEnd - this.animationStart; + } + resetRotationDirections() { + this.timelinesRotation.length = 0; + } + getTrackComplete() { + let duration = this.animationEnd - this.animationStart; + if (duration != 0) { + if (this.loop) + return duration * (1 + (this.trackTime / duration | 0)); + if (this.trackTime < duration) + return duration; + } + return this.trackTime; + } + }; + var EventQueue = class { + constructor(animState) { + this.objects = []; + this.drainDisabled = false; + this.animState = animState; + } + start(entry) { + this.objects.push(EventType.start); + this.objects.push(entry); + this.animState.animationsChanged = true; + } + interrupt(entry) { + this.objects.push(EventType.interrupt); + this.objects.push(entry); + } + end(entry) { + this.objects.push(EventType.end); + this.objects.push(entry); + this.animState.animationsChanged = true; + } + dispose(entry) { + this.objects.push(EventType.dispose); + this.objects.push(entry); + } + complete(entry) { + this.objects.push(EventType.complete); + this.objects.push(entry); + } + event(entry, event) { + this.objects.push(EventType.event); + this.objects.push(entry); + this.objects.push(event); + } + drain() { + if (this.drainDisabled) + return; + this.drainDisabled = true; + let objects = this.objects; + let listeners = this.animState.listeners; + for (let i = 0; i < objects.length; i += 2) { + let type = objects[i]; + let entry = objects[i + 1]; + switch (type) { + case EventType.start: + if (entry.listener && entry.listener.start) + entry.listener.start(entry); + for (let ii = 0; ii < listeners.length; ii++) + if (listeners[ii].start) + listeners[ii].start(entry); + break; + case EventType.interrupt: + if (entry.listener && entry.listener.interrupt) + entry.listener.interrupt(entry); + for (let ii = 0; ii < listeners.length; ii++) + if (listeners[ii].interrupt) + listeners[ii].interrupt(entry); + break; + case EventType.end: + if (entry.listener && entry.listener.end) + entry.listener.end(entry); + for (let ii = 0; ii < listeners.length; ii++) + if (listeners[ii].end) + listeners[ii].end(entry); + case EventType.dispose: + if (entry.listener && entry.listener.dispose) + entry.listener.dispose(entry); + for (let ii = 0; ii < listeners.length; ii++) + if (listeners[ii].dispose) + listeners[ii].dispose(entry); + this.animState.trackEntryPool.free(entry); + break; + case EventType.complete: + if (entry.listener && entry.listener.complete) + entry.listener.complete(entry); + for (let ii = 0; ii < listeners.length; ii++) + if (listeners[ii].complete) + listeners[ii].complete(entry); + break; + case EventType.event: + let event = objects[i++ + 2]; + if (entry.listener && entry.listener.event) + entry.listener.event(entry, event); + for (let ii = 0; ii < listeners.length; ii++) + if (listeners[ii].event) + listeners[ii].event(entry, event); + break; + } + } + this.clear(); + this.drainDisabled = false; + } + clear() { + this.objects.length = 0; + } + }; + var EventType; + (function(EventType2) { + EventType2[EventType2["start"] = 0] = "start"; + EventType2[EventType2["interrupt"] = 1] = "interrupt"; + EventType2[EventType2["end"] = 2] = "end"; + EventType2[EventType2["dispose"] = 3] = "dispose"; + EventType2[EventType2["complete"] = 4] = "complete"; + EventType2[EventType2["event"] = 5] = "event"; + })(EventType || (EventType = {})); + var AnimationStateAdapter = class { + start(entry) { + } + interrupt(entry) { + } + end(entry) { + } + dispose(entry) { + } + complete(entry) { + } + event(entry, event) { + } + }; + var SUBSEQUENT = 0; + var FIRST = 1; + var HOLD_SUBSEQUENT = 2; + var HOLD_FIRST = 3; + var HOLD_MIX = 4; + var SETUP = 1; + var CURRENT = 2; + var _emptyAnimation = null; + + // spine-core/src/AnimationStateData.ts + var AnimationStateData = class { + constructor(skeletonData) { + this.animationToMixTime = {}; + this.defaultMix = 0; + if (!skeletonData) + throw new Error("skeletonData cannot be null."); + this.skeletonData = skeletonData; + } + setMix(fromName, toName, duration) { + let from = this.skeletonData.findAnimation(fromName); + if (!from) + throw new Error("Animation not found: " + fromName); + let to = this.skeletonData.findAnimation(toName); + if (!to) + throw new Error("Animation not found: " + toName); + this.setMixWith(from, to, duration); + } + setMixWith(from, to, duration) { + if (!from) + throw new Error("from cannot be null."); + if (!to) + throw new Error("to cannot be null."); + let key = from.name + "." + to.name; + this.animationToMixTime[key] = duration; + } + getMix(from, to) { + let key = from.name + "." + to.name; + let value = this.animationToMixTime[key]; + return value === void 0 ? this.defaultMix : value; + } + }; + + // spine-core/src/attachments/BoundingBoxAttachment.ts + var BoundingBoxAttachment = class extends VertexAttachment { + constructor(name) { + super(name); + this.color = new Color(1, 1, 1, 1); + } + copy() { + let copy = new BoundingBoxAttachment(this.name); + this.copyTo(copy); + copy.color.setFromColor(this.color); + return copy; + } + }; + + // spine-core/src/attachments/ClippingAttachment.ts + var ClippingAttachment = class extends VertexAttachment { + constructor(name) { + super(name); + this.color = new Color(0.2275, 0.2275, 0.8078, 1); + } + copy() { + let copy = new ClippingAttachment(this.name); + this.copyTo(copy); + copy.endSlot = this.endSlot; + copy.color.setFromColor(this.color); + return copy; + } + }; + + // spine-core/src/Texture.ts + var Texture = class { + constructor(image) { + this._image = image; + } + getImage() { + return this._image; + } + }; + var TextureFilter; + (function(TextureFilter3) { + TextureFilter3[TextureFilter3["Nearest"] = 9728] = "Nearest"; + TextureFilter3[TextureFilter3["Linear"] = 9729] = "Linear"; + TextureFilter3[TextureFilter3["MipMap"] = 9987] = "MipMap"; + TextureFilter3[TextureFilter3["MipMapNearestNearest"] = 9984] = "MipMapNearestNearest"; + TextureFilter3[TextureFilter3["MipMapLinearNearest"] = 9985] = "MipMapLinearNearest"; + TextureFilter3[TextureFilter3["MipMapNearestLinear"] = 9986] = "MipMapNearestLinear"; + TextureFilter3[TextureFilter3["MipMapLinearLinear"] = 9987] = "MipMapLinearLinear"; + })(TextureFilter || (TextureFilter = {})); + var TextureWrap; + (function(TextureWrap3) { + TextureWrap3[TextureWrap3["MirroredRepeat"] = 33648] = "MirroredRepeat"; + TextureWrap3[TextureWrap3["ClampToEdge"] = 33071] = "ClampToEdge"; + TextureWrap3[TextureWrap3["Repeat"] = 10497] = "Repeat"; + })(TextureWrap || (TextureWrap = {})); + var TextureRegion = class { + constructor() { + this.u = 0; + this.v = 0; + this.u2 = 0; + this.v2 = 0; + this.width = 0; + this.height = 0; + this.degrees = 0; + this.offsetX = 0; + this.offsetY = 0; + this.originalWidth = 0; + this.originalHeight = 0; + } + }; + var FakeTexture = class extends Texture { + setFilters(minFilter, magFilter) { + } + setWraps(uWrap, vWrap) { + } + dispose() { + } + }; + + // spine-core/src/TextureAtlas.ts + var TextureAtlas = class { + constructor(atlasText) { + this.pages = new Array(); + this.regions = new Array(); + let reader = new TextureAtlasReader(atlasText); + let entry = new Array(4); + let page = null; + let region = null; + let pageFields = {}; + pageFields["size"] = () => { + page.width = parseInt(entry[1]); + page.height = parseInt(entry[2]); + }; + pageFields["format"] = () => { + }; + pageFields["filter"] = () => { + page.minFilter = Utils.enumValue(TextureFilter, entry[1]); + page.magFilter = Utils.enumValue(TextureFilter, entry[2]); + }; + pageFields["repeat"] = () => { + if (entry[1].indexOf("x") != -1) + page.uWrap = TextureWrap.Repeat; + if (entry[1].indexOf("y") != -1) + page.vWrap = TextureWrap.Repeat; + }; + pageFields["pma"] = () => { + page.pma = entry[1] == "true"; + }; + var regionFields = {}; + regionFields["xy"] = () => { + region.x = parseInt(entry[1]); + region.y = parseInt(entry[2]); + }; + regionFields["size"] = () => { + region.width = parseInt(entry[1]); + region.height = parseInt(entry[2]); + }; + regionFields["bounds"] = () => { + region.x = parseInt(entry[1]); + region.y = parseInt(entry[2]); + region.width = parseInt(entry[3]); + region.height = parseInt(entry[4]); + }; + regionFields["offset"] = () => { + region.offsetX = parseInt(entry[1]); + region.offsetY = parseInt(entry[2]); + }; + regionFields["orig"] = () => { + region.originalWidth = parseInt(entry[1]); + region.originalHeight = parseInt(entry[2]); + }; + regionFields["offsets"] = () => { + region.offsetX = parseInt(entry[1]); + region.offsetY = parseInt(entry[2]); + region.originalWidth = parseInt(entry[3]); + region.originalHeight = parseInt(entry[4]); + }; + regionFields["rotate"] = () => { + let value = entry[1]; + if (value == "true") + region.degrees = 90; + else if (value != "false") + region.degrees = parseInt(value); + }; + regionFields["index"] = () => { + region.index = parseInt(entry[1]); + }; + let line = reader.readLine(); + while (line && line.trim().length == 0) + line = reader.readLine(); + while (true) { + if (!line || line.trim().length == 0) + break; + if (reader.readEntry(entry, line) == 0) + break; + line = reader.readLine(); + } + let names = null; + let values = null; + while (true) { + if (line === null) + break; + if (line.trim().length == 0) { + page = null; + line = reader.readLine(); + } else if (!page) { + page = new TextureAtlasPage(); + page.name = line.trim(); + while (true) { + if (reader.readEntry(entry, line = reader.readLine()) == 0) + break; + let field = pageFields[entry[0]]; + if (field) + field(); + } + this.pages.push(page); + } else { + region = new TextureAtlasRegion(); + region.page = page; + region.name = line; + while (true) { + let count = reader.readEntry(entry, line = reader.readLine()); + if (count == 0) + break; + let field = regionFields[entry[0]]; + if (field) + field(); else { - constraint.mixRotate += (rotate - constraint.mixRotate) * alpha; - constraint.mixX += (x - constraint.mixX) * alpha; - constraint.mixY += (y - constraint.mixY) * alpha; + if (!names) { + names = []; + values = []; + } + names.push(entry[0]); + let entryValues = []; + for (let i = 0; i < count; i++) + entryValues.push(parseInt(entry[i + 1])); + values.push(entryValues); } - }; - return PathConstraintMixTimeline; - }(CurveTimeline)); + } + if (region.originalWidth == 0 && region.originalHeight == 0) { + region.originalWidth = region.width; + region.originalHeight = region.height; + } + if (names && names.length > 0) { + region.names = names; + region.values = values; + names = null; + values = null; + } + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.degrees == 90) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + this.regions.push(region); + } + } + } + findRegion(name) { + for (let i = 0; i < this.regions.length; i++) { + if (this.regions[i].name == name) { + return this.regions[i]; + } + } + return null; + } + setTextures(assetManager, pathPrefix = "") { + for (let page of this.pages) + page.setTexture(assetManager.get(pathPrefix + page.name)); + } + dispose() { + for (let i = 0; i < this.pages.length; i++) { + this.pages[i].texture.dispose(); + } + } + }; + var TextureAtlasReader = class { + constructor(text) { + this.index = 0; + this.lines = text.split(/\r\n|\r|\n/); + } + readLine() { + if (this.index >= this.lines.length) + return null; + return this.lines[this.index++]; + } + readEntry(entry, line) { + if (!line) + return 0; + line = line.trim(); + if (line.length == 0) + return 0; + let colon = line.indexOf(":"); + if (colon == -1) + return 0; + entry[0] = line.substr(0, colon).trim(); + for (let i = 1, lastMatch = colon + 1; ; i++) { + let comma = line.indexOf(",", lastMatch); + if (comma == -1) { + entry[i] = line.substr(lastMatch).trim(); + return i; + } + entry[i] = line.substr(lastMatch, comma - lastMatch).trim(); + lastMatch = comma + 1; + if (i == 4) + return 4; + } + } + }; + var TextureAtlasPage = class { + constructor() { + this.minFilter = TextureFilter.Nearest; + this.magFilter = TextureFilter.Nearest; + this.uWrap = TextureWrap.ClampToEdge; + this.vWrap = TextureWrap.ClampToEdge; + } + setTexture(texture) { + this.texture = texture; + texture.setFilters(this.minFilter, this.magFilter); + texture.setWraps(this.uWrap, this.vWrap); + } + }; + var TextureAtlasRegion = class extends TextureRegion { + }; - /****************************************************************************** - * 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. - *****************************************************************************/ - /** Applies animations over time, queues animations for later playback, mixes (crossfading) between animations, and applies - * multiple animations on top of each other (layering). - * - * See [Applying Animations](http://esotericsoftware.com/spine-applying-animations/) in the Spine Runtimes Guide. */ - var AnimationState = /** @class */ (function () { - function AnimationState(data) { - /** The list of tracks that currently have animations, which may contain null entries. */ - this.tracks = new Array(); - /** Multiplier for the delta time when the animation state is updated, causing time for all animations and mixes to play slower - * or faster. Defaults to 1. - * - * See TrackEntry {@link TrackEntry#timeScale} for affecting a single animation. */ - 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(function () { return new TrackEntry(); }); - this.data = data; + // spine-core/src/attachments/MeshAttachment.ts + var MeshAttachment = class extends VertexAttachment { + constructor(name) { + super(name); + this.color = new Color(1, 1, 1, 1); + this.tempColor = new Color(0, 0, 0, 0); + } + updateUVs() { + let regionUVs = this.regionUVs; + if (!this.uvs || this.uvs.length != regionUVs.length) + this.uvs = Utils.newFloatArray(regionUVs.length); + let uvs = this.uvs; + let n = this.uvs.length; + let u = this.region.u, v = this.region.v, width = 0, height = 0; + if (this.region instanceof TextureAtlasRegion) { + let region = this.region, image = region.page.texture.getImage(); + let textureWidth = image.width, textureHeight = image.height; + switch (region.degrees) { + case 90: + u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; + v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (let i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i + 1] * width; + uvs[i + 1] = v + (1 - regionUVs[i]) * height; + } + return; + case 180: + u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; + v -= region.offsetY / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + for (let i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i]) * width; + uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; + } + return; + case 270: + u -= region.offsetY / textureWidth; + v -= region.offsetX / textureHeight; + width = region.originalHeight / textureWidth; + height = region.originalWidth / textureHeight; + for (let i = 0; i < n; i += 2) { + uvs[i] = u + (1 - regionUVs[i + 1]) * width; + uvs[i + 1] = v + regionUVs[i] * height; + } + return; } - AnimationState.emptyAnimation = function () { - if (!_emptyAnimation) - _emptyAnimation = new Animation("", [], 0); - return _emptyAnimation; - }; - /** Increments each track entry {@link TrackEntry#trackTime()}, setting queued animations as current if needed. */ - AnimationState.prototype.update = function (delta) { - delta *= this.timeScale; - var tracks = this.tracks; - for (var i = 0, n = tracks.length; i < n; i++) { - var current = tracks[i]; - if (!current) - continue; - current.animationLast = current.nextAnimationLast; - current.trackLast = current.nextTrackLast; - var currentDelta = delta * current.timeScale; - if (current.delay > 0) { - current.delay -= currentDelta; - if (current.delay > 0) - continue; - currentDelta = -current.delay; - current.delay = 0; - } - var next = current.next; - if (next) { - // When the next entry's delay is passed, change to the next entry, preserving leftover time. - var nextTime = current.trackLast - next.delay; - if (nextTime >= 0) { - next.delay = 0; - next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; - current.trackTime += currentDelta; - this.setCurrent(i, next, true); - while (next.mixingFrom) { - next.mixTime += delta; - next = next.mixingFrom; - } - continue; - } - } - else if (current.trackLast >= current.trackEnd && !current.mixingFrom) { - tracks[i] = null; - this.queue.end(current); - this.clearNext(current); - continue; - } - if (current.mixingFrom && this.updateMixingFrom(current, delta)) { - // End mixing from entries once all have completed. - var from = current.mixingFrom; - current.mixingFrom = null; - if (from) - from.mixingTo = null; - while (from) { - this.queue.end(from); - from = from.mixingFrom; - } - } - current.trackTime += currentDelta; - } - this.queue.drain(); - }; - /** Returns true when all mixing from entries are complete. */ - AnimationState.prototype.updateMixingFrom = function (to, delta) { - var from = to.mixingFrom; - if (!from) - return true; - var finished = this.updateMixingFrom(from, delta); - from.animationLast = from.nextAnimationLast; - from.trackLast = from.nextTrackLast; - // Require mixTime > 0 to ensure the mixing from entry was applied at least once. - if (to.mixTime > 0 && to.mixTime >= to.mixDuration) { - // Require totalAlpha == 0 to ensure mixing is complete, unless mixDuration == 0 (the transition is a single frame). - if (from.totalAlpha == 0 || to.mixDuration == 0) { - to.mixingFrom = from.mixingFrom; - if (from.mixingFrom) - from.mixingFrom.mixingTo = to; - to.interruptAlpha = from.interruptAlpha; - this.queue.end(from); - } - return finished; - } - from.trackTime += delta * from.timeScale; - to.mixTime += delta; - return false; - }; - /** Poses the skeleton using the track entry animations. There are no side effects other than invoking listeners, so the - * animation state can be applied to multiple skeletons to pose them identically. - * @returns True if any animations were applied. */ - AnimationState.prototype.apply = function (skeleton) { - if (!skeleton) - throw new Error("skeleton cannot be null."); - if (this.animationsChanged) - this._animationsChanged(); - var events = this.events; - var tracks = this.tracks; - var applied = false; - for (var i_1 = 0, n_1 = tracks.length; i_1 < n_1; i_1++) { - var current = tracks[i_1]; - if (!current || current.delay > 0) - continue; - applied = true; - var blend = i_1 == 0 ? exports.MixBlend.first : current.mixBlend; - // Apply mixing from entries first. - var mix = current.alpha; - if (current.mixingFrom) - mix *= this.applyMixingFrom(current, skeleton, blend); - else if (current.trackTime >= current.trackEnd && !current.next) - mix = 0; - // Apply current entry. - var animationLast = current.animationLast, animationTime = current.getAnimationTime(), applyTime = animationTime; - var applyEvents = events; - if (current.reverse) { - applyTime = current.animation.duration - applyTime; - applyEvents = null; - } - var timelines = current.animation.timelines; - var timelineCount = timelines.length; - if ((i_1 == 0 && mix == 1) || blend == exports.MixBlend.add) { - for (var ii = 0; ii < timelineCount; ii++) { - // Fixes issue #302 on IOS9 where mix, blend sometimes became undefined and caused assets - // to sometimes stop rendering when using color correction, as their RGBA values become NaN. - // (https://github.com/pixijs/pixi-spine/issues/302) - Utils.webkit602BugfixHelper(mix, blend); - var timeline = timelines[ii]; - if (timeline instanceof AttachmentTimeline) - this.applyAttachmentTimeline(timeline, skeleton, applyTime, blend, true); - else - timeline.apply(skeleton, animationLast, applyTime, applyEvents, mix, blend, exports.MixDirection.mixIn); - } - } - else { - var timelineMode = current.timelineMode; - var firstFrame = current.timelinesRotation.length != timelineCount << 1; - if (firstFrame) - current.timelinesRotation.length = timelineCount << 1; - for (var ii = 0; ii < timelineCount; ii++) { - var timeline_1 = timelines[ii]; - var timelineBlend = timelineMode[ii] == SUBSEQUENT ? blend : exports.MixBlend.setup; - if (timeline_1 instanceof RotateTimeline) { - this.applyRotateTimeline(timeline_1, skeleton, applyTime, mix, timelineBlend, current.timelinesRotation, ii << 1, firstFrame); - } - else if (timeline_1 instanceof AttachmentTimeline) { - this.applyAttachmentTimeline(timeline_1, skeleton, applyTime, blend, true); - } - else { - // This fixes the WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109 - Utils.webkit602BugfixHelper(mix, blend); - timeline_1.apply(skeleton, animationLast, applyTime, applyEvents, mix, timelineBlend, exports.MixDirection.mixIn); - } - } - } - this.queueEvents(current, animationTime); - events.length = 0; - current.nextAnimationLast = animationTime; - current.nextTrackLast = current.trackTime; - } - // Set slots attachments to the setup pose, if needed. This occurs if an animation that is mixing out sets attachments so - // subsequent timelines see any deform, but the subsequent timelines don't set an attachment (eg they are also mixing out or - // the time is before the first key). - var setupState = this.unkeyedState + SETUP; - var slots = skeleton.slots; - for (var i = 0, n = skeleton.slots.length; i < n; i++) { - var slot = slots[i]; - if (slot.attachmentState == setupState) { - var attachmentName = slot.data.attachmentName; - slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName)); - } - } - this.unkeyedState += 2; // Increasing after each use avoids the need to reset attachmentState for every slot. - this.queue.drain(); - return applied; - }; - AnimationState.prototype.applyMixingFrom = function (to, skeleton, blend) { - var from = to.mixingFrom; - if (from.mixingFrom) - this.applyMixingFrom(from, skeleton, blend); - var mix = 0; - if (to.mixDuration == 0) { // Single frame mix to undo mixingFrom changes. - mix = 1; - if (blend == exports.MixBlend.first) - blend = exports.MixBlend.setup; - } - else { - mix = to.mixTime / to.mixDuration; - if (mix > 1) - mix = 1; - if (blend != exports.MixBlend.first) - blend = from.mixBlend; - } - var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold; - var timelines = from.animation.timelines; - var timelineCount = timelines.length; - var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix); - var animationLast = from.animationLast, animationTime = from.getAnimationTime(), applyTime = animationTime; - var events = null; - if (from.reverse) - applyTime = from.animation.duration - applyTime; - else if (mix < from.eventThreshold) - events = this.events; - if (blend == exports.MixBlend.add) { - for (var i = 0; i < timelineCount; i++) - timelines[i].apply(skeleton, animationLast, applyTime, events, alphaMix, blend, exports.MixDirection.mixOut); - } - else { - var timelineMode = from.timelineMode; - var timelineHoldMix = from.timelineHoldMix; - var firstFrame = from.timelinesRotation.length != timelineCount << 1; - if (firstFrame) - from.timelinesRotation.length = timelineCount << 1; - from.totalAlpha = 0; - for (var i = 0; i < timelineCount; i++) { - var timeline = timelines[i]; - var direction = exports.MixDirection.mixOut; - var timelineBlend = void 0; - var alpha = 0; - switch (timelineMode[i]) { - case SUBSEQUENT: - if (!drawOrder && timeline instanceof DrawOrderTimeline) - continue; - timelineBlend = blend; - alpha = alphaMix; - break; - case FIRST: - timelineBlend = exports.MixBlend.setup; - alpha = alphaMix; - break; - case HOLD_SUBSEQUENT: - timelineBlend = blend; - alpha = alphaHold; - break; - case HOLD_FIRST: - timelineBlend = exports.MixBlend.setup; - alpha = alphaHold; - break; - default: - timelineBlend = exports.MixBlend.setup; - var holdMix = timelineHoldMix[i]; - alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration); - break; - } - from.totalAlpha += alpha; - if (timeline instanceof RotateTimeline) - this.applyRotateTimeline(timeline, skeleton, applyTime, alpha, timelineBlend, from.timelinesRotation, i << 1, firstFrame); - else if (timeline instanceof AttachmentTimeline) - this.applyAttachmentTimeline(timeline, skeleton, applyTime, timelineBlend, attachments); - else { - // This fixes the WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109 - Utils.webkit602BugfixHelper(alpha, blend); - if (drawOrder && timeline instanceof DrawOrderTimeline && timelineBlend == exports.MixBlend.setup) - direction = exports.MixDirection.mixIn; - timeline.apply(skeleton, animationLast, applyTime, events, alpha, timelineBlend, direction); - } - } - } - if (to.mixDuration > 0) - this.queueEvents(from, animationTime); - this.events.length = 0; - from.nextAnimationLast = animationTime; - from.nextTrackLast = from.trackTime; - return mix; - }; - AnimationState.prototype.applyAttachmentTimeline = function (timeline, skeleton, time, blend, attachments) { - var slot = skeleton.slots[timeline.slotIndex]; - if (!slot.bone.active) - return; - if (time < timeline.frames[0]) { // Time is before first frame. - if (blend == exports.MixBlend.setup || blend == exports.MixBlend.first) - this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments); - } - else - this.setAttachment(skeleton, slot, timeline.attachmentNames[Timeline.search1(timeline.frames, time)], attachments); - // If an attachment wasn't set (ie before the first frame or attachments is false), set the setup attachment later. - if (slot.attachmentState <= this.unkeyedState) - slot.attachmentState = this.unkeyedState + SETUP; - }; - AnimationState.prototype.setAttachment = function (skeleton, slot, attachmentName, attachments) { - slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName)); - if (attachments) - slot.attachmentState = this.unkeyedState + CURRENT; - }; - AnimationState.prototype.applyRotateTimeline = function (timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) { - if (firstFrame) - timelinesRotation[i] = 0; - if (alpha == 1) { - timeline.apply(skeleton, 0, time, null, 1, blend, exports.MixDirection.mixIn); - return; - } - var bone = skeleton.bones[timeline.boneIndex]; - if (!bone.active) - return; - var frames = timeline.frames; - var r1 = 0, r2 = 0; - if (time < frames[0]) { - switch (blend) { - case exports.MixBlend.setup: - bone.rotation = bone.data.rotation; - default: - return; - case exports.MixBlend.first: - r1 = bone.rotation; - r2 = bone.data.rotation; - } - } - else { - r1 = blend == exports.MixBlend.setup ? bone.data.rotation : bone.rotation; - r2 = bone.data.rotation + timeline.getCurveValue(time); - } - // Mix between rotations using the direction of the shortest route on the first frame while detecting crosses. - var total = 0, diff = r2 - r1; - diff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360; - if (diff == 0) { - total = timelinesRotation[i]; - } - else { - var lastTotal = 0, lastDiff = 0; - if (firstFrame) { - lastTotal = 0; - lastDiff = diff; - } - else { - lastTotal = timelinesRotation[i]; // Angle and direction of mix, including loops. - lastDiff = timelinesRotation[i + 1]; // Difference between bones. - } - var current = diff > 0, dir = lastTotal >= 0; - // Detect cross at 0 (not 180). - if (MathUtils.signum(lastDiff) != MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) { - // A cross after a 360 rotation is a loop. - if (Math.abs(lastTotal) > 180) - lastTotal += 360 * MathUtils.signum(lastTotal); - dir = current; - } - total = diff + lastTotal - lastTotal % 360; // Store loops as part of lastTotal. - if (dir != current) - total += 360 * MathUtils.signum(lastTotal); - timelinesRotation[i] = total; - } - timelinesRotation[i + 1] = diff; - bone.rotation = r1 + total * alpha; - }; - AnimationState.prototype.queueEvents = function (entry, animationTime) { - var animationStart = entry.animationStart, animationEnd = entry.animationEnd; - var duration = animationEnd - animationStart; - var trackLastWrapped = entry.trackLast % duration; - // Queue events before complete. - var events = this.events; - var i = 0, n = events.length; - for (; i < n; i++) { - var event_1 = events[i]; - if (event_1.time < trackLastWrapped) - break; - if (event_1.time > animationEnd) - continue; // Discard events outside animation start/end. - this.queue.event(entry, event_1); - } - // Queue complete if completed a loop iteration or the animation. - var complete = false; - if (entry.loop) - complete = duration == 0 || trackLastWrapped > entry.trackTime % duration; - else - complete = animationTime >= animationEnd && entry.animationLast < animationEnd; - if (complete) - this.queue.complete(entry); - // Queue events after complete. - for (; i < n; i++) { - var event_2 = events[i]; - if (event_2.time < animationStart) - continue; // Discard events outside animation start/end. - this.queue.event(entry, event_2); - } - }; - /** Removes all animations from all tracks, leaving skeletons in their current pose. - * - * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose, - * rather than leaving them in their current pose. */ - AnimationState.prototype.clearTracks = function () { - var oldDrainDisabled = this.queue.drainDisabled; - this.queue.drainDisabled = true; - for (var i = 0, n = this.tracks.length; i < n; i++) - this.clearTrack(i); - this.tracks.length = 0; - this.queue.drainDisabled = oldDrainDisabled; - this.queue.drain(); - }; - /** Removes all animations from the track, leaving skeletons in their current pose. - * - * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose, - * rather than leaving them in their current pose. */ - AnimationState.prototype.clearTrack = function (trackIndex) { - if (trackIndex >= this.tracks.length) - return; - var current = this.tracks[trackIndex]; - if (!current) - return; - this.queue.end(current); - this.clearNext(current); - var entry = current; - while (true) { - var from = entry.mixingFrom; - if (!from) - break; - this.queue.end(from); - entry.mixingFrom = null; - entry.mixingTo = null; - entry = from; - } - this.tracks[current.trackIndex] = null; - this.queue.drain(); - }; - AnimationState.prototype.setCurrent = function (index, current, interrupt) { - var from = this.expandToIndex(index); - this.tracks[index] = current; - current.previous = null; - if (from) { - if (interrupt) - this.queue.interrupt(from); - current.mixingFrom = from; - from.mixingTo = current; - current.mixTime = 0; - // Store the interrupted mix percentage. - if (from.mixingFrom && from.mixDuration > 0) - current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration); - from.timelinesRotation.length = 0; // Reset rotation for mixing out, in case entry was mixed in. - } - this.queue.start(current); - }; - /** Sets an animation by name. - * - * See {@link #setAnimationWith()}. */ - AnimationState.prototype.setAnimation = function (trackIndex, animationName, loop) { - if (loop === void 0) { loop = false; } - var animation = this.data.skeletonData.findAnimation(animationName); - if (!animation) - throw new Error("Animation not found: " + animationName); - return this.setAnimationWith(trackIndex, animation, loop); - }; - /** Sets the current animation for a track, discarding any queued animations. If the formerly current track entry was never - * applied to a skeleton, it is replaced (not mixed from). - * @param loop If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its - * duration. In either case {@link TrackEntry#trackEnd} determines when the track is cleared. - * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept - * after the {@link AnimationStateListener#dispose()} event occurs. */ - AnimationState.prototype.setAnimationWith = function (trackIndex, animation, loop) { - if (loop === void 0) { loop = false; } - if (!animation) - throw new Error("animation cannot be null."); - var interrupt = true; - var current = this.expandToIndex(trackIndex); - if (current) { - if (current.nextTrackLast == -1) { - // Don't mix from an entry that was never applied. - this.tracks[trackIndex] = current.mixingFrom; - this.queue.interrupt(current); - this.queue.end(current); - this.clearNext(current); - current = current.mixingFrom; - interrupt = false; - } - else - this.clearNext(current); - } - var entry = this.trackEntry(trackIndex, animation, loop, current); - this.setCurrent(trackIndex, entry, interrupt); - this.queue.drain(); - return entry; - }; - /** Queues an animation by name. - * - * See {@link #addAnimationWith()}. */ - AnimationState.prototype.addAnimation = function (trackIndex, animationName, loop, delay) { - if (loop === void 0) { loop = false; } - if (delay === void 0) { delay = 0; } - var animation = this.data.skeletonData.findAnimation(animationName); - if (!animation) - throw new Error("Animation not found: " + animationName); - return this.addAnimationWith(trackIndex, animation, loop, delay); - }; - /** Adds an animation to be played after the current or last queued animation for a track. If the track is empty, it is - * equivalent to calling {@link #setAnimationWith()}. - * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry - * minus any mix duration (from the {@link AnimationStateData}) plus the specified `delay` (ie the mix - * ends at (`delay` = 0) or before (`delay` < 0) the previous track entry duration). If the - * previous entry is looping, its next loop completion is used instead of its duration. - * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept - * after the {@link AnimationStateListener#dispose()} event occurs. */ - AnimationState.prototype.addAnimationWith = function (trackIndex, animation, loop, delay) { - if (loop === void 0) { loop = false; } - if (delay === void 0) { delay = 0; } - if (!animation) - throw new Error("animation cannot be null."); - var last = this.expandToIndex(trackIndex); - if (last) { - while (last.next) - last = last.next; - } - var entry = this.trackEntry(trackIndex, animation, loop, last); - if (!last) { - this.setCurrent(trackIndex, entry, true); - this.queue.drain(); - } - else { - last.next = entry; - entry.previous = last; - if (delay <= 0) - delay += last.getTrackComplete() - entry.mixDuration; - } - entry.delay = delay; - return entry; - }; - /** Sets an empty animation for a track, discarding any queued animations, and sets the track entry's - * {@link TrackEntry#mixduration}. An empty animation has no timelines and serves as a placeholder for mixing in or out. - * - * Mixing out is done by setting an empty animation with a mix duration using either {@link #setEmptyAnimation()}, - * {@link #setEmptyAnimations()}, or {@link #addEmptyAnimation()}. Mixing to an empty animation causes - * the previous animation to be applied less and less over the mix duration. Properties keyed in the previous animation - * transition to the value from lower tracks or to the setup pose value if no lower tracks key the property. A mix duration of - * 0 still mixes out over one frame. - * - * Mixing in is done by first setting an empty animation, then adding an animation using - * {@link #addAnimation()} and on the returned track entry, set the - * {@link TrackEntry#setMixDuration()}. Mixing from an empty animation causes the new animation to be applied more and - * more over the mix duration. Properties keyed in the new animation transition from the value from lower tracks or from the - * setup pose value if no lower tracks key the property to the value keyed in the new animation. */ - AnimationState.prototype.setEmptyAnimation = function (trackIndex, mixDuration) { - if (mixDuration === void 0) { mixDuration = 0; } - var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation(), false); - entry.mixDuration = mixDuration; - entry.trackEnd = mixDuration; - return entry; - }; - /** Adds an empty animation to be played after the current or last queued animation for a track, and sets the track entry's - * {@link TrackEntry#mixDuration}. If the track is empty, it is equivalent to calling - * {@link #setEmptyAnimation()}. - * - * See {@link #setEmptyAnimation()}. - * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry - * minus any mix duration plus the specified `delay` (ie the mix ends at (`delay` = 0) or - * before (`delay` < 0) the previous track entry duration). If the previous entry is looping, its next - * loop completion is used instead of its duration. - * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept - * after the {@link AnimationStateListener#dispose()} event occurs. */ - AnimationState.prototype.addEmptyAnimation = function (trackIndex, mixDuration, delay) { - if (mixDuration === void 0) { mixDuration = 0; } - if (delay === void 0) { delay = 0; } - var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation(), false, delay); - if (delay <= 0) - entry.delay += entry.mixDuration - mixDuration; - entry.mixDuration = mixDuration; - entry.trackEnd = mixDuration; - return entry; - }; - /** Sets an empty animation for every track, discarding any queued animations, and mixes to it over the specified mix - * duration. */ - AnimationState.prototype.setEmptyAnimations = function (mixDuration) { - if (mixDuration === void 0) { mixDuration = 0; } - var oldDrainDisabled = this.queue.drainDisabled; - this.queue.drainDisabled = true; - for (var i = 0, n = this.tracks.length; i < n; i++) { - var current = this.tracks[i]; - if (current) - this.setEmptyAnimation(current.trackIndex, mixDuration); - } - this.queue.drainDisabled = oldDrainDisabled; - this.queue.drain(); - }; - AnimationState.prototype.expandToIndex = function (index) { - if (index < this.tracks.length) - return this.tracks[index]; - Utils.ensureArrayCapacity(this.tracks, index + 1, null); - this.tracks.length = index + 1; - return null; - }; - /** @param last May be null. */ - AnimationState.prototype.trackEntry = function (trackIndex, animation, loop, last) { - var entry = this.trackEntryPool.obtain(); - entry.trackIndex = trackIndex; - entry.animation = animation; - entry.loop = loop; - entry.holdPrevious = false; - entry.eventThreshold = 0; - entry.attachmentThreshold = 0; - entry.drawOrderThreshold = 0; - entry.animationStart = 0; - entry.animationEnd = animation.duration; - entry.animationLast = -1; - entry.nextAnimationLast = -1; - entry.delay = 0; - entry.trackTime = 0; - entry.trackLast = -1; - entry.nextTrackLast = -1; - entry.trackEnd = Number.MAX_VALUE; - entry.timeScale = 1; - entry.alpha = 1; - entry.interruptAlpha = 1; - entry.mixTime = 0; - entry.mixDuration = !last ? 0 : this.data.getMix(last.animation, animation); - entry.mixBlend = exports.MixBlend.replace; - return entry; - }; - /** Removes the {@link TrackEntry#getNext() next entry} and all entries after it for the specified entry. */ - AnimationState.prototype.clearNext = function (entry) { - var next = entry.next; - while (next) { - this.queue.dispose(next); - next = next.next; - } - entry.next = null; - }; - AnimationState.prototype._animationsChanged = function () { - this.animationsChanged = false; - this.propertyIDs.clear(); - var tracks = this.tracks; - for (var i = 0, n = tracks.length; i < n; i++) { - var entry = tracks[i]; - if (!entry) - continue; - while (entry.mixingFrom) - entry = entry.mixingFrom; - do { - if (!entry.mixingTo || entry.mixBlend != exports.MixBlend.add) - this.computeHold(entry); - entry = entry.mixingTo; - } while (entry); - } - }; - AnimationState.prototype.computeHold = function (entry) { - var to = entry.mixingTo; - var timelines = entry.animation.timelines; - var timelinesCount = entry.animation.timelines.length; - var timelineMode = entry.timelineMode; - timelineMode.length = timelinesCount; - var timelineHoldMix = entry.timelineHoldMix; - timelineHoldMix.length = 0; - var propertyIDs = this.propertyIDs; - if (to && to.holdPrevious) { - for (var i = 0; i < timelinesCount; i++) - timelineMode[i] = propertyIDs.addAll(timelines[i].getPropertyIds()) ? HOLD_FIRST : HOLD_SUBSEQUENT; - return; - } - outer: for (var i = 0; i < timelinesCount; i++) { - var timeline = timelines[i]; - var ids = timeline.getPropertyIds(); - if (!propertyIDs.addAll(ids)) - timelineMode[i] = SUBSEQUENT; - else if (!to || timeline instanceof AttachmentTimeline || timeline instanceof DrawOrderTimeline - || timeline instanceof EventTimeline || !to.animation.hasTimeline(ids)) { - timelineMode[i] = FIRST; - } - else { - for (var next = to.mixingTo; next; next = next.mixingTo) { - if (next.animation.hasTimeline(ids)) - continue; - if (entry.mixDuration > 0) { - timelineMode[i] = HOLD_MIX; - timelineHoldMix[i] = next; - continue outer; - } - break; - } - timelineMode[i] = HOLD_FIRST; - } - } - }; - /** Returns the track entry for the animation currently playing on the track, or null if no animation is currently playing. */ - AnimationState.prototype.getCurrent = function (trackIndex) { - if (trackIndex >= this.tracks.length) - return null; - return this.tracks[trackIndex]; - }; - /** Adds a listener to receive events for all track entries. */ - AnimationState.prototype.addListener = function (listener) { - if (!listener) - throw new Error("listener cannot be null."); - this.listeners.push(listener); - }; - /** Removes the listener added with {@link #addListener()}. */ - AnimationState.prototype.removeListener = function (listener) { - var index = this.listeners.indexOf(listener); - if (index >= 0) - this.listeners.splice(index, 1); - }; - /** Removes all listeners added with {@link #addListener()}. */ - AnimationState.prototype.clearListeners = function () { - this.listeners.length = 0; - }; - /** Discards all listener notifications that have not yet been delivered. This can be useful to call from an - * {@link AnimationStateListener} when it is known that further notifications that may have been already queued for delivery - * are not wanted because new animations are being set. */ - AnimationState.prototype.clearListenerNotifications = function () { - this.queue.clear(); - }; - return AnimationState; - }()); - /** Stores settings and other state for the playback of an animation on an {@link AnimationState} track. - * - * References to a track entry must not be kept after the {@link AnimationStateListener#dispose()} event occurs. */ - var TrackEntry = /** @class */ (function () { - function TrackEntry() { - /** Controls how properties keyed in the animation are mixed with lower tracks. Defaults to {@link MixBlend#replace}, which - * replaces the values from the lower tracks with the animation values. {@link MixBlend#add} adds the animation values to - * the values from the lower tracks. - * - * The `mixBlend` can be set for a new track entry only before {@link AnimationState#apply()} is first - * called. */ - this.mixBlend = exports.MixBlend.replace; - this.timelineMode = new Array(); - this.timelineHoldMix = new Array(); - this.timelinesRotation = new Array(); - } - TrackEntry.prototype.reset = function () { - this.next = null; - this.previous = null; - this.mixingFrom = null; - this.mixingTo = null; - this.animation = null; - this.listener = null; - this.timelineMode.length = 0; - this.timelineHoldMix.length = 0; - this.timelinesRotation.length = 0; - }; - /** Uses {@link #trackTime} to compute the `animationTime`, which is between {@link #animationStart} - * and {@link #animationEnd}. When the `trackTime` is 0, the `animationTime` is equal to the - * `animationStart` time. */ - TrackEntry.prototype.getAnimationTime = function () { - if (this.loop) { - var duration = this.animationEnd - this.animationStart; - if (duration == 0) - return this.animationStart; - return (this.trackTime % duration) + this.animationStart; - } - return Math.min(this.trackTime + this.animationStart, this.animationEnd); - }; - TrackEntry.prototype.setAnimationLast = function (animationLast) { - this.animationLast = animationLast; - this.nextAnimationLast = animationLast; - }; - /** Returns true if at least one loop has been completed. - * - * See {@link AnimationStateListener#complete()}. */ - TrackEntry.prototype.isComplete = function () { - return this.trackTime >= this.animationEnd - this.animationStart; - }; - /** Resets the rotation directions for mixing this entry's rotate timelines. This can be useful to avoid bones rotating the - * long way around when using {@link #alpha} and starting animations on other tracks. - * - * Mixing with {@link MixBlend#replace} involves finding a rotation between two others, which has two possible solutions: - * the short way or the long way around. The two rotations likely change over time, so which direction is the short or long - * way also changes. If the short way was always chosen, bones would flip to the other side when that direction became the - * long way. TrackEntry chooses the short way the first time it is applied and remembers that direction. */ - TrackEntry.prototype.resetRotationDirections = function () { - this.timelinesRotation.length = 0; - }; - TrackEntry.prototype.getTrackComplete = function () { - var duration = this.animationEnd - this.animationStart; - if (duration != 0) { - if (this.loop) - return duration * (1 + ((this.trackTime / duration) | 0)); // Completion of next loop. - if (this.trackTime < duration) - return duration; // Before duration. - } - return this.trackTime; // Next update. - }; - return TrackEntry; - }()); - var EventQueue = /** @class */ (function () { - function EventQueue(animState) { - this.objects = []; - this.drainDisabled = false; - this.animState = animState; - } - EventQueue.prototype.start = function (entry) { - this.objects.push(exports.EventType.start); - this.objects.push(entry); - this.animState.animationsChanged = true; - }; - EventQueue.prototype.interrupt = function (entry) { - this.objects.push(exports.EventType.interrupt); - this.objects.push(entry); - }; - EventQueue.prototype.end = function (entry) { - this.objects.push(exports.EventType.end); - this.objects.push(entry); - this.animState.animationsChanged = true; - }; - EventQueue.prototype.dispose = function (entry) { - this.objects.push(exports.EventType.dispose); - this.objects.push(entry); - }; - EventQueue.prototype.complete = function (entry) { - this.objects.push(exports.EventType.complete); - this.objects.push(entry); - }; - EventQueue.prototype.event = function (entry, event) { - this.objects.push(exports.EventType.event); - this.objects.push(entry); - this.objects.push(event); - }; - EventQueue.prototype.drain = function () { - if (this.drainDisabled) - return; - this.drainDisabled = true; - var objects = this.objects; - var listeners = this.animState.listeners; - for (var i = 0; i < objects.length; i += 2) { - var type = objects[i]; - var entry = objects[i + 1]; - switch (type) { - case exports.EventType.start: - if (entry.listener && entry.listener.start) - entry.listener.start(entry); - for (var ii = 0; ii < listeners.length; ii++) - if (listeners[ii].start) - listeners[ii].start(entry); - break; - case exports.EventType.interrupt: - if (entry.listener && entry.listener.interrupt) - entry.listener.interrupt(entry); - for (var ii = 0; ii < listeners.length; ii++) - if (listeners[ii].interrupt) - listeners[ii].interrupt(entry); - break; - case exports.EventType.end: - if (entry.listener && entry.listener.end) - entry.listener.end(entry); - for (var ii = 0; ii < listeners.length; ii++) - if (listeners[ii].end) - listeners[ii].end(entry); - // Fall through. - case exports.EventType.dispose: - if (entry.listener && entry.listener.dispose) - entry.listener.dispose(entry); - for (var ii = 0; ii < listeners.length; ii++) - if (listeners[ii].dispose) - listeners[ii].dispose(entry); - this.animState.trackEntryPool.free(entry); - break; - case exports.EventType.complete: - if (entry.listener && entry.listener.complete) - entry.listener.complete(entry); - for (var ii = 0; ii < listeners.length; ii++) - if (listeners[ii].complete) - listeners[ii].complete(entry); - break; - case exports.EventType.event: - var event_3 = objects[i++ + 2]; - if (entry.listener && entry.listener.event) - entry.listener.event(entry, event_3); - for (var ii = 0; ii < listeners.length; ii++) - if (listeners[ii].event) - listeners[ii].event(entry, event_3); - break; - } - } - this.clear(); - this.drainDisabled = false; - }; - EventQueue.prototype.clear = function () { - this.objects.length = 0; - }; - return EventQueue; - }()); - exports.EventType = void 0; - (function (EventType) { - EventType[EventType["start"] = 0] = "start"; - EventType[EventType["interrupt"] = 1] = "interrupt"; - EventType[EventType["end"] = 2] = "end"; - EventType[EventType["dispose"] = 3] = "dispose"; - EventType[EventType["complete"] = 4] = "complete"; - EventType[EventType["event"] = 5] = "event"; - })(exports.EventType || (exports.EventType = {})); - var AnimationStateAdapter = /** @class */ (function () { - function AnimationStateAdapter() { - } - AnimationStateAdapter.prototype.start = function (entry) { - }; - AnimationStateAdapter.prototype.interrupt = function (entry) { - }; - AnimationStateAdapter.prototype.end = function (entry) { - }; - AnimationStateAdapter.prototype.dispose = function (entry) { - }; - AnimationStateAdapter.prototype.complete = function (entry) { - }; - AnimationStateAdapter.prototype.event = function (entry, event) { - }; - return AnimationStateAdapter; - }()); - /** 1. A previously applied timeline has set this property. - * - * Result: Mix from the current pose to the timeline pose. */ - var SUBSEQUENT = 0; - /** 1. This is the first timeline to set this property. - * 2. The next track entry applied after this one does not have a timeline to set this property. - * - * Result: Mix from the setup pose to the timeline pose. */ - var FIRST = 1; - /** 1) A previously applied timeline has set this property.
- * 2) The next track entry to be applied does have a timeline to set this property.
- * 3) The next track entry after that one does not have a timeline to set this property.
- * Result: Mix from the current pose to the timeline pose, but do not mix out. This avoids "dipping" when crossfading - * animations that key the same property. A subsequent timeline will set this property using a mix. */ - var HOLD_SUBSEQUENT = 2; - /** 1) This is the first timeline to set this property.
- * 2) The next track entry to be applied does have a timeline to set this property.
- * 3) The next track entry after that one does not have a timeline to set this property.
- * Result: Mix from the setup pose to the timeline pose, but do not mix out. This avoids "dipping" when crossfading animations - * that key the same property. A subsequent timeline will set this property using a mix. */ - var HOLD_FIRST = 3; - /** 1. This is the first timeline to set this property. - * 2. The next track entry to be applied does have a timeline to set this property. - * 3. The next track entry after that one does have a timeline to set this property. - * 4. timelineHoldMix stores the first subsequent track entry that does not have a timeline to set this property. - * - * Result: The same as HOLD except the mix percentage from the timelineHoldMix track entry is used. This handles when more than - * 2 track entries in a row have a timeline that sets the same property. - * - * 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 - * "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 - * (which affects B and C). Without using D to mix out, A would be applied fully until mixing completes, then snap into - * place. */ - var HOLD_MIX = 4; - var SETUP = 1; - var CURRENT = 2; - var _emptyAnimation = null; + u -= region.offsetX / textureWidth; + v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; + width = region.originalWidth / textureWidth; + height = region.originalHeight / textureHeight; + } else if (!this.region) { + u = v = 0; + width = height = 1; + } else { + width = this.region.u2 - u; + height = this.region.v2 - v; + } + for (let i = 0; i < n; i += 2) { + uvs[i] = u + regionUVs[i] * width; + uvs[i + 1] = v + regionUVs[i + 1] * height; + } + } + getParentMesh() { + return this.parentMesh; + } + setParentMesh(parentMesh) { + this.parentMesh = parentMesh; + if (parentMesh) { + this.bones = parentMesh.bones; + this.vertices = parentMesh.vertices; + this.worldVerticesLength = parentMesh.worldVerticesLength; + this.regionUVs = parentMesh.regionUVs; + this.triangles = parentMesh.triangles; + this.hullLength = parentMesh.hullLength; + this.worldVerticesLength = parentMesh.worldVerticesLength; + } + } + copy() { + if (this.parentMesh) + return this.newLinkedMesh(); + let copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + this.copyTo(copy); + copy.regionUVs = new Array(this.regionUVs.length); + Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); + copy.uvs = new Array(this.uvs.length); + Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length); + copy.triangles = new Array(this.triangles.length); + Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); + copy.hullLength = this.hullLength; + if (this.edges) { + copy.edges = new Array(this.edges.length); + Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); + } + copy.width = this.width; + copy.height = this.height; + return copy; + } + newLinkedMesh() { + let copy = new MeshAttachment(this.name); + copy.region = this.region; + copy.path = this.path; + copy.color.setFromColor(this.color); + copy.deformAttachment = this.deformAttachment; + copy.setParentMesh(this.parentMesh ? this.parentMesh : this); + copy.updateUVs(); + return copy; + } + }; - /****************************************************************************** - * 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 mix (crossfade) durations to be applied when {@link AnimationState} animations are changed. */ - var AnimationStateData = /** @class */ (function () { - function AnimationStateData(skeletonData) { - this.animationToMixTime = {}; - /** The mix duration to use when no mix duration has been defined between two animations. */ - this.defaultMix = 0; - if (!skeletonData) - throw new Error("skeletonData cannot be null."); - this.skeletonData = skeletonData; - } - /** Sets a mix duration by animation name. - * - * See {@link #setMixWith()}. */ - AnimationStateData.prototype.setMix = function (fromName, toName, duration) { - var from = this.skeletonData.findAnimation(fromName); - if (!from) - throw new Error("Animation not found: " + fromName); - var to = this.skeletonData.findAnimation(toName); - if (!to) - throw new Error("Animation not found: " + toName); - this.setMixWith(from, to, duration); - }; - /** Sets the mix duration when changing from the specified animation to the other. - * - * See {@link TrackEntry#mixDuration}. */ - AnimationStateData.prototype.setMixWith = function (from, to, duration) { - if (!from) - throw new Error("from cannot be null."); - if (!to) - throw new Error("to cannot be null."); - var key = from.name + "." + to.name; - this.animationToMixTime[key] = duration; - }; - /** Returns the mix duration to use when changing from the specified animation to the other, or the {@link #defaultMix} if - * no mix duration has been set. */ - AnimationStateData.prototype.getMix = function (from, to) { - var key = from.name + "." + to.name; - var value = this.animationToMixTime[key]; - return value === undefined ? this.defaultMix : value; - }; - return AnimationStateData; - }()); + // spine-core/src/attachments/PathAttachment.ts + var PathAttachment = class extends VertexAttachment { + constructor(name) { + super(name); + this.closed = false; + this.constantSpeed = false; + this.color = new Color(1, 1, 1, 1); + } + copy() { + let copy = new PathAttachment(this.name); + this.copyTo(copy); + copy.lengths = new Array(this.lengths.length); + Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length); + copy.closed = closed; + copy.constantSpeed = this.constantSpeed; + copy.color.setFromColor(this.color); + return copy; + } + }; - /****************************************************************************** - * 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$c = (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 __()); - }; - })(); - /** An attachment with vertices that make up a polygon. Can be used for hit detection, creating physics bodies, spawning particle - * effects, and more. - * - * See {@link SkeletonBounds} and [Bounding Boxes](http://esotericsoftware.com/spine-bounding-boxes) in the Spine User - * Guide. */ - var BoundingBoxAttachment = /** @class */ (function (_super) { - __extends$c(BoundingBoxAttachment, _super); - function BoundingBoxAttachment(name) { - var _this = _super.call(this, name) || this; - _this.color = new Color(1, 1, 1, 1); - return _this; - } - BoundingBoxAttachment.prototype.copy = function () { - var copy = new BoundingBoxAttachment(this.name); - this.copyTo(copy); - copy.color.setFromColor(this.color); - return copy; - }; - return BoundingBoxAttachment; - }(VertexAttachment)); + // spine-core/src/attachments/PointAttachment.ts + var PointAttachment = class extends VertexAttachment { + constructor(name) { + super(name); + this.color = new Color(0.38, 0.94, 0, 1); + } + computeWorldPosition(bone, point) { + point.x = this.x * bone.a + this.y * bone.b + bone.worldX; + point.y = this.x * bone.c + this.y * bone.d + bone.worldY; + return point; + } + computeWorldRotation(bone) { + let cos = MathUtils.cosDeg(this.rotation), sin = MathUtils.sinDeg(this.rotation); + let x = cos * bone.a + sin * bone.b; + let y = cos * bone.c + sin * bone.d; + return Math.atan2(y, x) * MathUtils.radDeg; + } + copy() { + let copy = new PointAttachment(this.name); + copy.x = this.x; + copy.y = this.y; + copy.rotation = this.rotation; + copy.color.setFromColor(this.color); + return copy; + } + }; - /****************************************************************************** - * 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$b = (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 __()); - }; - })(); - /** An attachment with vertices that make up a polygon used for clipping the rendering of other attachments. */ - var ClippingAttachment = /** @class */ (function (_super) { - __extends$b(ClippingAttachment, _super); - function ClippingAttachment(name) { - var _this = _super.call(this, name) || this; - // Nonessential. - /** The color of the clipping polygon as it was in Spine. Available only when nonessential data was exported. Clipping polygons - * are not usually rendered at runtime. */ - _this.color = new Color(0.2275, 0.2275, 0.8078, 1); // ce3a3aff - return _this; - } - ClippingAttachment.prototype.copy = function () { - var copy = new ClippingAttachment(this.name); - this.copyTo(copy); - copy.endSlot = this.endSlot; - copy.color.setFromColor(this.color); - return copy; - }; - return ClippingAttachment; - }(VertexAttachment)); + // spine-core/src/attachments/RegionAttachment.ts + var _RegionAttachment = class extends Attachment { + constructor(name) { + super(name); + this.x = 0; + this.y = 0; + this.scaleX = 1; + this.scaleY = 1; + this.rotation = 0; + this.width = 0; + this.height = 0; + this.color = new Color(1, 1, 1, 1); + this.offset = Utils.newFloatArray(8); + this.uvs = Utils.newFloatArray(8); + this.tempColor = new Color(1, 1, 1, 1); + } + updateOffset() { + let region = this.region; + let regionScaleX = this.width / this.region.originalWidth * this.scaleX; + let regionScaleY = this.height / this.region.originalHeight * this.scaleY; + let localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX; + let localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY; + let localX2 = localX + this.region.width * regionScaleX; + let localY2 = localY + this.region.height * regionScaleY; + let radians = this.rotation * Math.PI / 180; + let cos = Math.cos(radians); + let sin = Math.sin(radians); + let x = this.x, y = this.y; + let localXCos = localX * cos + x; + let localXSin = localX * sin; + let localYCos = localY * cos + y; + let localYSin = localY * sin; + let localX2Cos = localX2 * cos + x; + let localX2Sin = localX2 * sin; + let localY2Cos = localY2 * cos + y; + let localY2Sin = localY2 * sin; + let 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; + } + setRegion(region) { + this.region = region; + let 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; + } + } + computeWorldVertices(bone, worldVertices, offset, stride) { + let vertexOffset = this.offset; + let x = bone.worldX, y = bone.worldY; + let a = bone.a, b = bone.b, c = bone.c, d = bone.d; + let offsetX = 0, offsetY = 0; + offsetX = vertexOffset[0]; + offsetY = vertexOffset[1]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[2]; + offsetY = vertexOffset[3]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[4]; + offsetY = vertexOffset[5]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + offset += stride; + offsetX = vertexOffset[6]; + offsetY = vertexOffset[7]; + worldVertices[offset] = offsetX * a + offsetY * b + x; + worldVertices[offset + 1] = offsetX * c + offsetY * d + y; + } + copy() { + let 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; + } + }; + var RegionAttachment = _RegionAttachment; + 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; - /****************************************************************************** - * 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$a = (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 Texture = /** @class */ (function () { - function Texture(image) { - this._image = image; - } - Texture.prototype.getImage = function () { - return this._image; - }; - return Texture; - }()); - exports.TextureFilter = void 0; - (function (TextureFilter) { - TextureFilter[TextureFilter["Nearest"] = 9728] = "Nearest"; - TextureFilter[TextureFilter["Linear"] = 9729] = "Linear"; - TextureFilter[TextureFilter["MipMap"] = 9987] = "MipMap"; - TextureFilter[TextureFilter["MipMapNearestNearest"] = 9984] = "MipMapNearestNearest"; - TextureFilter[TextureFilter["MipMapLinearNearest"] = 9985] = "MipMapLinearNearest"; - TextureFilter[TextureFilter["MipMapNearestLinear"] = 9986] = "MipMapNearestLinear"; - TextureFilter[TextureFilter["MipMapLinearLinear"] = 9987] = "MipMapLinearLinear"; // WebGLRenderingContext.LINEAR_MIPMAP_LINEAR - })(exports.TextureFilter || (exports.TextureFilter = {})); - exports.TextureWrap = void 0; - (function (TextureWrap) { - TextureWrap[TextureWrap["MirroredRepeat"] = 33648] = "MirroredRepeat"; - TextureWrap[TextureWrap["ClampToEdge"] = 33071] = "ClampToEdge"; - TextureWrap[TextureWrap["Repeat"] = 10497] = "Repeat"; // WebGLRenderingContext.REPEAT - })(exports.TextureWrap || (exports.TextureWrap = {})); - var TextureRegion = /** @class */ (function () { - function TextureRegion() { - this.u = 0; - this.v = 0; - this.u2 = 0; - this.v2 = 0; - this.width = 0; - this.height = 0; - this.degrees = 0; - this.offsetX = 0; - this.offsetY = 0; - this.originalWidth = 0; - this.originalHeight = 0; - } - return TextureRegion; - }()); - var FakeTexture = /** @class */ (function (_super) { - __extends$a(FakeTexture, _super); - function FakeTexture() { - return _super !== null && _super.apply(this, arguments) || this; - } - FakeTexture.prototype.setFilters = function (minFilter, magFilter) { }; - FakeTexture.prototype.setWraps = function (uWrap, vWrap) { }; - FakeTexture.prototype.dispose = function () { }; - return FakeTexture; - }(Texture)); + // spine-core/src/AtlasAttachmentLoader.ts + var AtlasAttachmentLoader = class { + constructor(atlas) { + this.atlas = atlas; + } + newRegionAttachment(skin, name, path) { + let region = this.atlas.findRegion(path); + if (!region) + throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")"); + region.renderObject = region; + let attachment = new RegionAttachment(name); + attachment.setRegion(region); + return attachment; + } + newMeshAttachment(skin, name, path) { + let region = this.atlas.findRegion(path); + if (!region) + throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")"); + region.renderObject = region; + let attachment = new MeshAttachment(name); + attachment.region = region; + return attachment; + } + newBoundingBoxAttachment(skin, name) { + return new BoundingBoxAttachment(name); + } + newPathAttachment(skin, name) { + return new PathAttachment(name); + } + newPointAttachment(skin, name) { + return new PointAttachment(name); + } + newClippingAttachment(skin, name) { + return new ClippingAttachment(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. - *****************************************************************************/ - var __extends$9 = (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 TextureAtlas = /** @class */ (function () { - function TextureAtlas(atlasText) { - this.pages = new Array(); - this.regions = new Array(); - var reader = new TextureAtlasReader(atlasText); - var entry = new Array(4); - var page = null; - var region = null; - var pageFields = {}; - pageFields["size"] = function () { - page.width = parseInt(entry[1]); - page.height = parseInt(entry[2]); - }; - pageFields["format"] = function () { - // page.format = Format[tuple[0]]; we don't need format in WebGL - }; - pageFields["filter"] = function () { - page.minFilter = Utils.enumValue(exports.TextureFilter, entry[1]); - page.magFilter = Utils.enumValue(exports.TextureFilter, entry[2]); - }; - pageFields["repeat"] = function () { - if (entry[1].indexOf('x') != -1) - page.uWrap = exports.TextureWrap.Repeat; - if (entry[1].indexOf('y') != -1) - page.vWrap = exports.TextureWrap.Repeat; - }; - pageFields["pma"] = function () { - page.pma = entry[1] == "true"; - }; - var regionFields = {}; - regionFields["xy"] = function () { - region.x = parseInt(entry[1]); - region.y = parseInt(entry[2]); - }; - regionFields["size"] = function () { - region.width = parseInt(entry[1]); - region.height = parseInt(entry[2]); - }; - regionFields["bounds"] = function () { - region.x = parseInt(entry[1]); - region.y = parseInt(entry[2]); - region.width = parseInt(entry[3]); - region.height = parseInt(entry[4]); - }; - regionFields["offset"] = function () { - region.offsetX = parseInt(entry[1]); - region.offsetY = parseInt(entry[2]); - }; - regionFields["orig"] = function () { - region.originalWidth = parseInt(entry[1]); - region.originalHeight = parseInt(entry[2]); - }; - regionFields["offsets"] = function () { - region.offsetX = parseInt(entry[1]); - region.offsetY = parseInt(entry[2]); - region.originalWidth = parseInt(entry[3]); - region.originalHeight = parseInt(entry[4]); - }; - regionFields["rotate"] = function () { - var value = entry[1]; - if (value == "true") - region.degrees = 90; - else if (value != "false") - region.degrees = parseInt(value); - }; - regionFields["index"] = function () { - region.index = parseInt(entry[1]); - }; - var line = reader.readLine(); - // Ignore empty lines before first entry. - while (line && line.trim().length == 0) - line = reader.readLine(); - // Header entries. - while (true) { - if (!line || line.trim().length == 0) - break; - if (reader.readEntry(entry, line) == 0) - break; // Silently ignore all header fields. - line = reader.readLine(); - } - // Page and region entries. - var names = null; - var values = null; - while (true) { - if (line === null) - break; - if (line.trim().length == 0) { - page = null; - line = reader.readLine(); - } - else if (!page) { - page = new TextureAtlasPage(); - page.name = line.trim(); - while (true) { - if (reader.readEntry(entry, line = reader.readLine()) == 0) - break; - var field = pageFields[entry[0]]; - if (field) - field(); - } - this.pages.push(page); - } - else { - region = new TextureAtlasRegion(); - region.page = page; - region.name = line; - while (true) { - var count = reader.readEntry(entry, line = reader.readLine()); - if (count == 0) - break; - var field = regionFields[entry[0]]; - if (field) - field(); - else { - if (!names) { - names = []; - values = []; - } - names.push(entry[0]); - var entryValues = []; - for (var i = 0; i < count; i++) - entryValues.push(parseInt(entry[i + 1])); - values.push(entryValues); - } - } - if (region.originalWidth == 0 && region.originalHeight == 0) { - region.originalWidth = region.width; - region.originalHeight = region.height; - } - if (names && names.length > 0) { - region.names = names; - region.values = values; - names = null; - values = null; - } - region.u = region.x / page.width; - region.v = region.y / page.height; - if (region.degrees == 90) { - region.u2 = (region.x + region.height) / page.width; - region.v2 = (region.y + region.width) / page.height; - } - else { - region.u2 = (region.x + region.width) / page.width; - region.v2 = (region.y + region.height) / page.height; - } - this.regions.push(region); - } - } - } - TextureAtlas.prototype.findRegion = function (name) { - for (var i = 0; i < this.regions.length; i++) { - if (this.regions[i].name == name) { - return this.regions[i]; - } - } - return null; - }; - TextureAtlas.prototype.setTextures = function (assetManager, pathPrefix) { - if (pathPrefix === void 0) { pathPrefix = ""; } - for (var _i = 0, _a = this.pages; _i < _a.length; _i++) { - var page = _a[_i]; - page.setTexture(assetManager.get(pathPrefix + page.name)); - } - }; - TextureAtlas.prototype.dispose = function () { - for (var i = 0; i < this.pages.length; i++) { - this.pages[i].texture.dispose(); - } - }; - return TextureAtlas; - }()); - var TextureAtlasReader = /** @class */ (function () { - function TextureAtlasReader(text) { - this.index = 0; - this.lines = text.split(/\r\n|\r|\n/); - } - TextureAtlasReader.prototype.readLine = function () { - if (this.index >= this.lines.length) - return null; - return this.lines[this.index++]; - }; - TextureAtlasReader.prototype.readEntry = function (entry, line) { - if (!line) - return 0; - line = line.trim(); - if (line.length == 0) - return 0; - var colon = line.indexOf(':'); - if (colon == -1) - return 0; - entry[0] = line.substr(0, colon).trim(); - for (var i = 1, lastMatch = colon + 1;; i++) { - var comma = line.indexOf(',', lastMatch); - if (comma == -1) { - entry[i] = line.substr(lastMatch).trim(); - return i; - } - entry[i] = line.substr(lastMatch, comma - lastMatch).trim(); - lastMatch = comma + 1; - if (i == 4) - return 4; - } - }; - return TextureAtlasReader; - }()); - var TextureAtlasPage = /** @class */ (function () { - function TextureAtlasPage() { - this.minFilter = exports.TextureFilter.Nearest; - this.magFilter = exports.TextureFilter.Nearest; - this.uWrap = exports.TextureWrap.ClampToEdge; - this.vWrap = exports.TextureWrap.ClampToEdge; - } - TextureAtlasPage.prototype.setTexture = function (texture) { - this.texture = texture; - texture.setFilters(this.minFilter, this.magFilter); - texture.setWraps(this.uWrap, this.vWrap); - }; - return TextureAtlasPage; - }()); - var TextureAtlasRegion = /** @class */ (function (_super) { - __extends$9(TextureAtlasRegion, _super); - function TextureAtlasRegion() { - return _super !== null && _super.apply(this, arguments) || this; - } - return TextureAtlasRegion; - }(TextureRegion)); + // spine-core/src/BoneData.ts + var BoneData = class { + constructor(index, name, parent) { + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 1; + this.scaleY = 1; + this.shearX = 0; + this.shearY = 0; + this.transformMode = TransformMode.Normal; + this.skinRequired = false; + 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; + } + }; + var TransformMode; + (function(TransformMode2) { + TransformMode2[TransformMode2["Normal"] = 0] = "Normal"; + TransformMode2[TransformMode2["OnlyTranslation"] = 1] = "OnlyTranslation"; + TransformMode2[TransformMode2["NoRotationOrReflection"] = 2] = "NoRotationOrReflection"; + TransformMode2[TransformMode2["NoScale"] = 3] = "NoScale"; + TransformMode2[TransformMode2["NoScaleOrReflection"] = 4] = "NoScaleOrReflection"; + })(TransformMode || (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. - *****************************************************************************/ - var __extends$8 = (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 __()); - }; - })(); - /** An attachment that displays a textured mesh. A mesh has hull vertices and internal vertices within the hull. Holes are not - * supported. Each vertex has UVs (texture coordinates) and triangles are used to map an image on to the mesh. - * - * See [Mesh attachments](http://esotericsoftware.com/spine-meshes) in the Spine User Guide. */ - var MeshAttachment = /** @class */ (function (_super) { - __extends$8(MeshAttachment, _super); - function MeshAttachment(name) { - var _this = _super.call(this, name) || this; - /** The color to tint the mesh. */ - _this.color = new Color(1, 1, 1, 1); - _this.tempColor = new Color(0, 0, 0, 0); - return _this; + // spine-core/src/Bone.ts + var Bone = class { + constructor(data, skeleton, parent) { + this.children = new Array(); + this.x = 0; + this.y = 0; + this.rotation = 0; + this.scaleX = 0; + this.scaleY = 0; + this.shearX = 0; + this.shearY = 0; + this.ax = 0; + this.ay = 0; + this.arotation = 0; + this.ascaleX = 0; + this.ascaleY = 0; + this.ashearX = 0; + this.ashearY = 0; + this.a = 0; + this.b = 0; + this.c = 0; + this.d = 0; + this.worldY = 0; + 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(); + } + isActive() { + return this.active; + } + update() { + this.updateWorldTransformWith(this.ax, this.ay, this.arotation, this.ascaleX, this.ascaleY, this.ashearX, this.ashearY); + } + updateWorldTransform() { + this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY); + } + updateWorldTransformWith(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; + let parent = this.parent; + if (!parent) { + let skeleton = this.skeleton; + let rotationY = rotation + 90 + shearY; + let sx = skeleton.scaleX; + let 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; + } + let 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 TransformMode.Normal: { + let rotationY = rotation + 90 + shearY; + let la = MathUtils.cosDeg(rotation + shearX) * scaleX; + let lb = MathUtils.cosDeg(rotationY) * scaleY; + let lc = MathUtils.sinDeg(rotation + shearX) * scaleX; + let 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; } - /** Calculates {@link #uvs} using {@link #regionUVs} and the {@link #region}. Must be called after changing the region UVs or - * region. */ - MeshAttachment.prototype.updateUVs = function () { - var regionUVs = this.regionUVs; - if (!this.uvs || this.uvs.length != regionUVs.length) - this.uvs = Utils.newFloatArray(regionUVs.length); - var uvs = this.uvs; - var n = this.uvs.length; - var u = this.region.u, v = this.region.v, width = 0, height = 0; - if (this.region instanceof TextureAtlasRegion) { - var region = this.region, image = region.page.texture.getImage(); - var textureWidth = image.width, textureHeight = image.height; - switch (region.degrees) { - case 90: - u -= (region.originalHeight - region.offsetY - region.height) / textureWidth; - v -= (region.originalWidth - region.offsetX - region.width) / textureHeight; - width = region.originalHeight / textureWidth; - height = region.originalWidth / textureHeight; - for (var i = 0; i < n; i += 2) { - uvs[i] = u + regionUVs[i + 1] * width; - uvs[i + 1] = v + (1 - regionUVs[i]) * height; - } - return; - case 180: - u -= (region.originalWidth - region.offsetX - region.width) / textureWidth; - v -= region.offsetY / textureHeight; - width = region.originalWidth / textureWidth; - height = region.originalHeight / textureHeight; - for (var i = 0; i < n; i += 2) { - uvs[i] = u + (1 - regionUVs[i]) * width; - uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height; - } - return; - case 270: - u -= region.offsetY / textureWidth; - v -= region.offsetX / textureHeight; - width = region.originalHeight / textureWidth; - height = region.originalWidth / textureHeight; - for (var i = 0; i < n; i += 2) { - uvs[i] = u + (1 - regionUVs[i + 1]) * width; - uvs[i + 1] = v + regionUVs[i] * height; - } - return; - } - u -= region.offsetX / textureWidth; - v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; - width = region.originalWidth / textureWidth; - height = region.originalHeight / textureHeight; - } - else if (!this.region) { - u = v = 0; - width = height = 1; - } - else { - width = this.region.u2 - u; - height = this.region.v2 - v; - } - for (var i = 0; i < n; i += 2) { - uvs[i] = u + regionUVs[i] * width; - uvs[i + 1] = v + regionUVs[i + 1] * height; - } - }; - /** The parent mesh if this is a linked mesh, else null. A linked mesh shares the {@link #bones}, {@link #vertices}, - * {@link #regionUVs}, {@link #triangles}, {@link #hullLength}, {@link #edges}, {@link #width}, and {@link #height} with the - * parent mesh, but may have a different {@link #name} or {@link #path} (and therefore a different texture). */ - MeshAttachment.prototype.getParentMesh = function () { - return this.parentMesh; - }; - /** @param parentMesh May be null. */ - MeshAttachment.prototype.setParentMesh = function (parentMesh) { - this.parentMesh = parentMesh; - if (parentMesh) { - this.bones = parentMesh.bones; - this.vertices = parentMesh.vertices; - this.worldVerticesLength = parentMesh.worldVerticesLength; - this.regionUVs = parentMesh.regionUVs; - this.triangles = parentMesh.triangles; - this.hullLength = parentMesh.hullLength; - this.worldVerticesLength = parentMesh.worldVerticesLength; - } - }; - MeshAttachment.prototype.copy = function () { - if (this.parentMesh) - return this.newLinkedMesh(); - var copy = new MeshAttachment(this.name); - copy.region = this.region; - copy.path = this.path; - copy.color.setFromColor(this.color); - this.copyTo(copy); - copy.regionUVs = new Array(this.regionUVs.length); - Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length); - copy.uvs = new Array(this.uvs.length); - Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length); - copy.triangles = new Array(this.triangles.length); - Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length); - copy.hullLength = this.hullLength; - // Nonessential. - if (this.edges) { - copy.edges = new Array(this.edges.length); - Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); - } - copy.width = this.width; - copy.height = this.height; - return copy; - }; - /** Returns a new mesh with the {@link #parentMesh} set to this mesh's parent mesh, if any, else to this mesh. **/ - MeshAttachment.prototype.newLinkedMesh = function () { - var copy = new MeshAttachment(this.name); - copy.region = this.region; - copy.path = this.path; - copy.color.setFromColor(this.color); - copy.deformAttachment = this.deformAttachment; - copy.setParentMesh(this.parentMesh ? this.parentMesh : this); - copy.updateUVs(); - return copy; - }; - return MeshAttachment; - }(VertexAttachment)); + case TransformMode.OnlyTranslation: { + let 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 TransformMode.NoRotationOrReflection: { + let s = pa * pa + pc * pc; + let prx = 0; + if (s > 1e-4) { + 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; + } + let rx = rotation + shearX - prx; + let ry = rotation + shearY - prx + 90; + let la = MathUtils.cosDeg(rx) * scaleX; + let lb = MathUtils.cosDeg(ry) * scaleY; + let lc = MathUtils.sinDeg(rx) * scaleX; + let 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 TransformMode.NoScale: + case TransformMode.NoScaleOrReflection: { + let cos = MathUtils.cosDeg(rotation); + let sin = MathUtils.sinDeg(rotation); + let za = (pa * cos + pb * sin) / this.skeleton.scaleX; + let zc = (pc * cos + pd * sin) / this.skeleton.scaleY; + let s = Math.sqrt(za * za + zc * zc); + if (s > 1e-5) + s = 1 / s; + za *= s; + zc *= s; + s = Math.sqrt(za * za + zc * zc); + if (this.data.transformMode == TransformMode.NoScale && pa * pd - pb * pc < 0 != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0)) + s = -s; + let r = Math.PI / 2 + Math.atan2(zc, za); + let zb = Math.cos(r) * s; + let zd = Math.sin(r) * s; + let la = MathUtils.cosDeg(shearX) * scaleX; + let lb = MathUtils.cosDeg(90 + shearY) * scaleY; + let lc = MathUtils.sinDeg(shearX) * scaleX; + let 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; + } + setToSetupPose() { + let 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; + } + getWorldRotationX() { + return Math.atan2(this.c, this.a) * MathUtils.radDeg; + } + getWorldRotationY() { + return Math.atan2(this.d, this.b) * MathUtils.radDeg; + } + getWorldScaleX() { + return Math.sqrt(this.a * this.a + this.c * this.c); + } + getWorldScaleY() { + return Math.sqrt(this.b * this.b + this.d * this.d); + } + updateAppliedTransform() { + let 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; + } + let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d; + let pid = 1 / (pa * pd - pb * pc); + let 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; + let ia = pid * pd; + let id = pid * pa; + let ib = pid * pb; + let ic = pid * pc; + let ra = ia * this.a - ib * this.c; + let rb = ia * this.b - ib * this.d; + let rc = id * this.c - ic * this.a; + let rd = id * this.d - ic * this.b; + this.ashearX = 0; + this.ascaleX = Math.sqrt(ra * ra + rc * rc); + if (this.ascaleX > 1e-4) { + let 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; + } + } + worldToLocal(world) { + let invDet = 1 / (this.a * this.d - this.b * this.c); + let 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; + } + localToWorld(local) { + let 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; + } + worldToLocalRotation(worldRotation) { + let 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; + } + localToWorldRotation(localRotation) { + localRotation -= this.rotation - this.shearX; + let 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; + } + rotateWorld(degrees) { + let a = this.a, b = this.b, c = this.c, d = this.d; + let 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; + } + }; - /****************************************************************************** - * 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$7 = (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 __()); - }; - })(); - /** An attachment whose vertices make up a composite Bezier curve. - * - * See {@link PathConstraint} and [Paths](http://esotericsoftware.com/spine-paths) in the Spine User Guide. */ - var PathAttachment = /** @class */ (function (_super) { - __extends$7(PathAttachment, _super); - function PathAttachment(name) { - var _this = _super.call(this, name) || this; - /** If true, the start and end knots are connected. */ - _this.closed = false; - /** If true, additional calculations are performed to make calculating positions along the path more accurate. If false, fewer - * calculations are performed but calculating positions along the path is less accurate. */ - _this.constantSpeed = false; - /** The color of the path as it was in Spine. Available only when nonessential data was exported. Paths are not usually - * rendered at runtime. */ - _this.color = new Color(1, 1, 1, 1); - return _this; - } - PathAttachment.prototype.copy = function () { - var copy = new PathAttachment(this.name); - this.copyTo(copy); - copy.lengths = new Array(this.lengths.length); - Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length); - copy.closed = closed; - copy.constantSpeed = this.constantSpeed; - copy.color.setFromColor(this.color); - return copy; - }; - return PathAttachment; - }(VertexAttachment)); + // spine-core/src/ConstraintData.ts + var ConstraintData = class { + constructor(name, order, skinRequired) { + this.name = name; + this.order = order; + this.skinRequired = skinRequired; + } + }; - /****************************************************************************** - * 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$6 = (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); + // spine-core/src/AssetManagerBase.ts + var AssetManagerBase = class { + constructor(textureLoader, pathPrefix = "", downloader = null) { + this.assets = {}; + this.errors = {}; + this.toLoad = 0; + this.loaded = 0; + this.textureLoader = textureLoader; + this.pathPrefix = pathPrefix; + this.downloader = downloader || new Downloader(); + } + start(path) { + this.toLoad++; + return this.pathPrefix + path; + } + success(callback, path, asset) { + this.toLoad--; + this.loaded++; + this.assets[path] = asset; + if (callback) + callback(path, asset); + } + error(callback, path, message) { + this.toLoad--; + this.loaded++; + this.errors[path] = message; + if (callback) + callback(path, message); + } + setRawDataURI(path, data) { + this.downloader.rawDataUris[this.pathPrefix + path] = data; + } + loadBinary(path, success = null, error = null) { + path = this.start(path); + this.downloader.downloadBinary(path, (data) => { + this.success(success, path, data); + }, (status, responseText) => { + this.error(error, path, `Couldn't load binary ${path}: status ${status}, ${responseText}`); + }); + } + loadText(path, success = null, error = null) { + path = this.start(path); + this.downloader.downloadText(path, (data) => { + this.success(success, path, data); + }, (status, responseText) => { + this.error(error, path, `Couldn't load text ${path}: status ${status}, ${responseText}`); + }); + } + loadJson(path, success = null, error = null) { + path = this.start(path); + this.downloader.downloadJson(path, (data) => { + this.success(success, path, data); + }, (status, responseText) => { + this.error(error, path, `Couldn't load JSON ${path}: status ${status}, ${responseText}`); + }); + } + loadTexture(path, success = null, error = null) { + path = this.start(path); + let isBrowser = !!(typeof window !== "undefined" && typeof navigator !== "undefined" && window.document); + let isWebWorker = !isBrowser; + if (isWebWorker) { + fetch(path, { mode: "cors" }).then((response) => { + if (response.ok) + return response.blob(); + this.error(error, path, `Couldn't load image: ${path}`); + return null; + }).then((blob) => { + return blob ? createImageBitmap(blob, { premultiplyAlpha: "none", colorSpaceConversion: "none" }) : null; + }).then((bitmap) => { + if (bitmap) + this.success(success, path, this.textureLoader(bitmap)); + }); + } else { + let image = new Image(); + image.crossOrigin = "anonymous"; + image.onload = () => { + this.success(success, path, this.textureLoader(image)); }; - 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 __()); + image.onerror = () => { + this.error(error, path, `Couldn't load image: ${path}`); }; - })(); - /** An attachment which is a single point and a rotation. This can be used to spawn projectiles, particles, etc. A bone can be - * used in similar ways, but a PointAttachment is slightly less expensive to compute and can be hidden, shown, and placed in a - * skin. - * - * See [Point Attachments](http://esotericsoftware.com/spine-point-attachments) in the Spine User Guide. */ - var PointAttachment = /** @class */ (function (_super) { - __extends$6(PointAttachment, _super); - function PointAttachment(name) { - var _this = _super.call(this, name) || this; - /** The color of the point attachment as it was in Spine. Available only when nonessential data was exported. Point attachments - * are not usually rendered at runtime. */ - _this.color = new Color(0.38, 0.94, 0, 1); - return _this; - } - PointAttachment.prototype.computeWorldPosition = function (bone, point) { - point.x = this.x * bone.a + this.y * bone.b + bone.worldX; - point.y = this.x * bone.c + this.y * bone.d + bone.worldY; - return point; - }; - PointAttachment.prototype.computeWorldRotation = function (bone) { - var cos = MathUtils.cosDeg(this.rotation), sin = MathUtils.sinDeg(this.rotation); - var x = cos * bone.a + sin * bone.b; - var y = cos * bone.c + sin * bone.d; - return Math.atan2(y, x) * MathUtils.radDeg; - }; - PointAttachment.prototype.copy = function () { - var copy = new PointAttachment(this.name); - copy.x = this.x; - copy.y = this.y; - copy.rotation = this.rotation; - copy.color.setFromColor(this.color); - return copy; - }; - return PointAttachment; - }(VertexAttachment)); - - /****************************************************************************** - * 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$5 = (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 __()); - }; - })(); - /** An attachment that displays a textured quadrilateral. - * - * See [Region attachments](http://esotericsoftware.com/spine-regions) in the Spine User Guide. */ - var RegionAttachment = /** @class */ (function (_super) { - __extends$5(RegionAttachment, _super); - function RegionAttachment(name) { - var _this = _super.call(this, name) || this; - /** The local x translation. */ - _this.x = 0; - /** The local y translation. */ - _this.y = 0; - /** The local scaleX. */ - _this.scaleX = 1; - /** The local scaleY. */ - _this.scaleY = 1; - /** The local rotation. */ - _this.rotation = 0; - /** The width of the region attachment in Spine. */ - _this.width = 0; - /** The height of the region attachment in Spine. */ - _this.height = 0; - /** The color to tint the region attachment. */ - _this.color = new Color(1, 1, 1, 1); - /** For each of the 4 vertices, a pair of 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 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(\"\", [], 0);\n return _emptyAnimation;\n };\n /** Increments each track entry {@link TrackEntry#trackTime()}, setting queued animations as current if needed. */\n AnimationState.prototype.update = function (delta) {\n delta *= this.timeScale;\n var tracks = this.tracks;\n for (var i = 0, n = tracks.length; i < n; i++) {\n var current = tracks[i];\n if (!current)\n continue;\n current.animationLast = current.nextAnimationLast;\n current.trackLast = current.nextTrackLast;\n var currentDelta = delta * current.timeScale;\n if (current.delay > 0) {\n current.delay -= currentDelta;\n if (current.delay > 0)\n continue;\n currentDelta = -current.delay;\n current.delay = 0;\n }\n var next = current.next;\n if (next) {\n // When the next entry's delay is passed, change to the next entry, preserving leftover time.\n var nextTime = current.trackLast - next.delay;\n if (nextTime >= 0) {\n next.delay = 0;\n next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale;\n current.trackTime += currentDelta;\n this.setCurrent(i, next, true);\n while (next.mixingFrom) {\n next.mixTime += delta;\n next = next.mixingFrom;\n }\n continue;\n }\n }\n else if (current.trackLast >= current.trackEnd && !current.mixingFrom) {\n tracks[i] = null;\n this.queue.end(current);\n this.clearNext(current);\n continue;\n }\n if (current.mixingFrom && this.updateMixingFrom(current, delta)) {\n // End mixing from entries once all have completed.\n var from = current.mixingFrom;\n current.mixingFrom = null;\n if (from)\n from.mixingTo = null;\n while (from) {\n this.queue.end(from);\n from = from.mixingFrom;\n }\n }\n current.trackTime += currentDelta;\n }\n this.queue.drain();\n };\n /** Returns true when all mixing from entries are complete. */\n AnimationState.prototype.updateMixingFrom = function (to, delta) {\n var from = to.mixingFrom;\n if (!from)\n return true;\n var finished = this.updateMixingFrom(from, delta);\n from.animationLast = from.nextAnimationLast;\n from.trackLast = from.nextTrackLast;\n // Require mixTime > 0 to ensure the mixing from entry was applied at least once.\n if (to.mixTime > 0 && to.mixTime >= to.mixDuration) {\n // Require totalAlpha == 0 to ensure mixing is complete, unless mixDuration == 0 (the transition is a single frame).\n if (from.totalAlpha == 0 || to.mixDuration == 0) {\n to.mixingFrom = from.mixingFrom;\n if (from.mixingFrom)\n from.mixingFrom.mixingTo = to;\n to.interruptAlpha = from.interruptAlpha;\n this.queue.end(from);\n }\n return finished;\n }\n from.trackTime += delta * from.timeScale;\n to.mixTime += delta;\n return false;\n };\n /** Poses the skeleton using the track entry animations. There are no side effects other than invoking listeners, so the\n * animation state can be applied to multiple skeletons to pose them identically.\n * @returns True if any animations were applied. */\n AnimationState.prototype.apply = function (skeleton) {\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n if (this.animationsChanged)\n this._animationsChanged();\n var events = this.events;\n var tracks = this.tracks;\n var applied = false;\n for (var i_1 = 0, n_1 = tracks.length; i_1 < n_1; i_1++) {\n var current = tracks[i_1];\n if (!current || current.delay > 0)\n continue;\n applied = true;\n var blend = i_1 == 0 ? MixBlend.first : current.mixBlend;\n // Apply mixing from entries first.\n var mix = current.alpha;\n if (current.mixingFrom)\n mix *= this.applyMixingFrom(current, skeleton, blend);\n else if (current.trackTime >= current.trackEnd && !current.next)\n mix = 0;\n // Apply current entry.\n var animationLast = current.animationLast, animationTime = current.getAnimationTime(), applyTime = animationTime;\n var applyEvents = events;\n if (current.reverse) {\n applyTime = current.animation.duration - applyTime;\n applyEvents = null;\n }\n var timelines = current.animation.timelines;\n var timelineCount = timelines.length;\n if ((i_1 == 0 && mix == 1) || blend == MixBlend.add) {\n for (var ii = 0; ii < timelineCount; ii++) {\n // Fixes issue #302 on IOS9 where mix, blend sometimes became undefined and caused assets\n // to sometimes stop rendering when using color correction, as their RGBA values become NaN.\n // (https://github.com/pixijs/pixi-spine/issues/302)\n Utils.webkit602BugfixHelper(mix, blend);\n var timeline = timelines[ii];\n if (timeline instanceof AttachmentTimeline)\n this.applyAttachmentTimeline(timeline, skeleton, applyTime, blend, true);\n else\n timeline.apply(skeleton, animationLast, applyTime, applyEvents, mix, blend, MixDirection.mixIn);\n }\n }\n else {\n var timelineMode = current.timelineMode;\n var firstFrame = current.timelinesRotation.length != timelineCount << 1;\n if (firstFrame)\n current.timelinesRotation.length = timelineCount << 1;\n for (var ii = 0; ii < timelineCount; ii++) {\n var timeline_1 = timelines[ii];\n var timelineBlend = timelineMode[ii] == SUBSEQUENT ? blend : MixBlend.setup;\n if (timeline_1 instanceof RotateTimeline) {\n this.applyRotateTimeline(timeline_1, skeleton, applyTime, mix, timelineBlend, current.timelinesRotation, ii << 1, firstFrame);\n }\n else if (timeline_1 instanceof AttachmentTimeline) {\n this.applyAttachmentTimeline(timeline_1, skeleton, applyTime, blend, true);\n }\n else {\n // This fixes the WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109\n Utils.webkit602BugfixHelper(mix, blend);\n timeline_1.apply(skeleton, animationLast, applyTime, applyEvents, mix, timelineBlend, MixDirection.mixIn);\n }\n }\n }\n this.queueEvents(current, animationTime);\n events.length = 0;\n current.nextAnimationLast = animationTime;\n current.nextTrackLast = current.trackTime;\n }\n // Set slots attachments to the setup pose, if needed. This occurs if an animation that is mixing out sets attachments so\n // subsequent timelines see any deform, but the subsequent timelines don't set an attachment (eg they are also mixing out or\n // the time is before the first key).\n var setupState = this.unkeyedState + SETUP;\n var slots = skeleton.slots;\n for (var i = 0, n = skeleton.slots.length; i < n; i++) {\n var slot = slots[i];\n if (slot.attachmentState == setupState) {\n var attachmentName = slot.data.attachmentName;\n slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName));\n }\n }\n this.unkeyedState += 2; // Increasing after each use avoids the need to reset attachmentState for every slot.\n this.queue.drain();\n return applied;\n };\n AnimationState.prototype.applyMixingFrom = function (to, skeleton, blend) {\n var from = to.mixingFrom;\n if (from.mixingFrom)\n this.applyMixingFrom(from, skeleton, blend);\n var mix = 0;\n if (to.mixDuration == 0) { // Single frame mix to undo mixingFrom changes.\n mix = 1;\n if (blend == MixBlend.first)\n blend = MixBlend.setup;\n }\n else {\n mix = to.mixTime / to.mixDuration;\n if (mix > 1)\n mix = 1;\n if (blend != MixBlend.first)\n blend = from.mixBlend;\n }\n var attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold;\n var timelines = from.animation.timelines;\n var timelineCount = timelines.length;\n var alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix);\n var animationLast = from.animationLast, animationTime = from.getAnimationTime(), applyTime = animationTime;\n var events = null;\n if (from.reverse)\n applyTime = from.animation.duration - applyTime;\n else if (mix < from.eventThreshold)\n events = this.events;\n if (blend == MixBlend.add) {\n for (var i = 0; i < timelineCount; i++)\n timelines[i].apply(skeleton, animationLast, applyTime, events, alphaMix, blend, MixDirection.mixOut);\n }\n else {\n var timelineMode = from.timelineMode;\n var timelineHoldMix = from.timelineHoldMix;\n var firstFrame = from.timelinesRotation.length != timelineCount << 1;\n if (firstFrame)\n from.timelinesRotation.length = timelineCount << 1;\n from.totalAlpha = 0;\n for (var i = 0; i < timelineCount; i++) {\n var timeline = timelines[i];\n var direction = MixDirection.mixOut;\n var timelineBlend = void 0;\n var alpha = 0;\n switch (timelineMode[i]) {\n case SUBSEQUENT:\n if (!drawOrder && timeline instanceof DrawOrderTimeline)\n continue;\n timelineBlend = blend;\n alpha = alphaMix;\n break;\n case FIRST:\n timelineBlend = MixBlend.setup;\n alpha = alphaMix;\n break;\n case HOLD_SUBSEQUENT:\n timelineBlend = blend;\n alpha = alphaHold;\n break;\n case HOLD_FIRST:\n timelineBlend = MixBlend.setup;\n alpha = alphaHold;\n break;\n default:\n timelineBlend = MixBlend.setup;\n var holdMix = timelineHoldMix[i];\n alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration);\n break;\n }\n from.totalAlpha += alpha;\n if (timeline instanceof RotateTimeline)\n this.applyRotateTimeline(timeline, skeleton, applyTime, alpha, timelineBlend, from.timelinesRotation, i << 1, firstFrame);\n else if (timeline instanceof AttachmentTimeline)\n this.applyAttachmentTimeline(timeline, skeleton, applyTime, timelineBlend, attachments);\n else {\n // This fixes the WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109\n Utils.webkit602BugfixHelper(alpha, blend);\n if (drawOrder && timeline instanceof DrawOrderTimeline && timelineBlend == MixBlend.setup)\n direction = MixDirection.mixIn;\n timeline.apply(skeleton, animationLast, applyTime, events, alpha, timelineBlend, direction);\n }\n }\n }\n if (to.mixDuration > 0)\n this.queueEvents(from, animationTime);\n this.events.length = 0;\n from.nextAnimationLast = animationTime;\n from.nextTrackLast = from.trackTime;\n return mix;\n };\n AnimationState.prototype.applyAttachmentTimeline = function (timeline, skeleton, time, blend, attachments) {\n var slot = skeleton.slots[timeline.slotIndex];\n if (!slot.bone.active)\n return;\n if (time < timeline.frames[0]) { // Time is before first frame.\n if (blend == MixBlend.setup || blend == MixBlend.first)\n this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments);\n }\n else\n this.setAttachment(skeleton, slot, timeline.attachmentNames[Timeline.search1(timeline.frames, time)], attachments);\n // If an attachment wasn't set (ie before the first frame or attachments is false), set the setup attachment later.\n if (slot.attachmentState <= this.unkeyedState)\n slot.attachmentState = this.unkeyedState + SETUP;\n };\n AnimationState.prototype.setAttachment = function (skeleton, slot, attachmentName, attachments) {\n slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName));\n if (attachments)\n slot.attachmentState = this.unkeyedState + CURRENT;\n };\n AnimationState.prototype.applyRotateTimeline = function (timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) {\n if (firstFrame)\n timelinesRotation[i] = 0;\n if (alpha == 1) {\n timeline.apply(skeleton, 0, time, null, 1, blend, MixDirection.mixIn);\n return;\n }\n var bone = skeleton.bones[timeline.boneIndex];\n if (!bone.active)\n return;\n var frames = timeline.frames;\n var r1 = 0, r2 = 0;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.rotation = bone.data.rotation;\n default:\n return;\n case MixBlend.first:\n r1 = bone.rotation;\n r2 = bone.data.rotation;\n }\n }\n else {\n r1 = blend == MixBlend.setup ? bone.data.rotation : bone.rotation;\n r2 = bone.data.rotation + timeline.getCurveValue(time);\n }\n // Mix between rotations using the direction of the shortest route on the first frame while detecting crosses.\n var total = 0, diff = r2 - r1;\n diff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360;\n if (diff == 0) {\n total = timelinesRotation[i];\n }\n else {\n var lastTotal = 0, lastDiff = 0;\n if (firstFrame) {\n lastTotal = 0;\n lastDiff = diff;\n }\n else {\n lastTotal = timelinesRotation[i]; // Angle and direction of mix, including loops.\n lastDiff = timelinesRotation[i + 1]; // Difference between bones.\n }\n var current = diff > 0, dir = lastTotal >= 0;\n // Detect cross at 0 (not 180).\n if (MathUtils.signum(lastDiff) != MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) {\n // A cross after a 360 rotation is a loop.\n if (Math.abs(lastTotal) > 180)\n lastTotal += 360 * MathUtils.signum(lastTotal);\n dir = current;\n }\n total = diff + lastTotal - lastTotal % 360; // Store loops as part of lastTotal.\n if (dir != current)\n total += 360 * MathUtils.signum(lastTotal);\n timelinesRotation[i] = total;\n }\n timelinesRotation[i + 1] = diff;\n bone.rotation = r1 + total * alpha;\n };\n AnimationState.prototype.queueEvents = function (entry, animationTime) {\n var animationStart = entry.animationStart, animationEnd = entry.animationEnd;\n var duration = animationEnd - animationStart;\n var trackLastWrapped = entry.trackLast % duration;\n // Queue events before complete.\n var events = this.events;\n var i = 0, n = events.length;\n for (; i < n; i++) {\n var event_1 = events[i];\n if (event_1.time < trackLastWrapped)\n break;\n if (event_1.time > animationEnd)\n continue; // Discard events outside animation start/end.\n this.queue.event(entry, event_1);\n }\n // Queue complete if completed a loop iteration or the animation.\n var complete = false;\n if (entry.loop)\n complete = duration == 0 || trackLastWrapped > entry.trackTime % duration;\n else\n complete = animationTime >= animationEnd && entry.animationLast < animationEnd;\n if (complete)\n this.queue.complete(entry);\n // Queue events after complete.\n for (; i < n; i++) {\n var event_2 = events[i];\n if (event_2.time < animationStart)\n continue; // Discard events outside animation start/end.\n this.queue.event(entry, event_2);\n }\n };\n /** Removes all animations from all tracks, leaving skeletons in their current pose.\n *\n * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose,\n * rather than leaving them in their current pose. */\n AnimationState.prototype.clearTracks = function () {\n var oldDrainDisabled = this.queue.drainDisabled;\n this.queue.drainDisabled = true;\n for (var i = 0, n = this.tracks.length; i < n; i++)\n this.clearTrack(i);\n this.tracks.length = 0;\n this.queue.drainDisabled = oldDrainDisabled;\n this.queue.drain();\n };\n /** Removes all animations from the track, leaving skeletons in their current pose.\n *\n * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose,\n * rather than leaving them in their current pose. */\n AnimationState.prototype.clearTrack = function (trackIndex) {\n if (trackIndex >= this.tracks.length)\n return;\n var current = this.tracks[trackIndex];\n if (!current)\n return;\n this.queue.end(current);\n this.clearNext(current);\n var entry = current;\n while (true) {\n var from = entry.mixingFrom;\n if (!from)\n break;\n this.queue.end(from);\n entry.mixingFrom = null;\n entry.mixingTo = null;\n entry = from;\n }\n this.tracks[current.trackIndex] = null;\n this.queue.drain();\n };\n AnimationState.prototype.setCurrent = function (index, current, interrupt) {\n var from = this.expandToIndex(index);\n this.tracks[index] = current;\n current.previous = null;\n if (from) {\n if (interrupt)\n this.queue.interrupt(from);\n current.mixingFrom = from;\n from.mixingTo = current;\n current.mixTime = 0;\n // Store the interrupted mix percentage.\n if (from.mixingFrom && from.mixDuration > 0)\n current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration);\n from.timelinesRotation.length = 0; // Reset rotation for mixing out, in case entry was mixed in.\n }\n this.queue.start(current);\n };\n /** Sets an animation by name.\n *\n * See {@link #setAnimationWith()}. */\n AnimationState.prototype.setAnimation = function (trackIndex, animationName, loop) {\n if (loop === void 0) { loop = false; }\n var animation = this.data.skeletonData.findAnimation(animationName);\n if (!animation)\n throw new Error(\"Animation not found: \" + animationName);\n return this.setAnimationWith(trackIndex, animation, loop);\n };\n /** Sets the current animation for a track, discarding any queued animations. If the formerly current track entry was never\n * applied to a skeleton, it is replaced (not mixed from).\n * @param loop If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its\n * duration. In either case {@link TrackEntry#trackEnd} determines when the track is cleared.\n * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept\n * after the {@link AnimationStateListener#dispose()} event occurs. */\n AnimationState.prototype.setAnimationWith = function (trackIndex, animation, loop) {\n if (loop === void 0) { loop = false; }\n if (!animation)\n throw new Error(\"animation cannot be null.\");\n var interrupt = true;\n var current = this.expandToIndex(trackIndex);\n if (current) {\n if (current.nextTrackLast == -1) {\n // Don't mix from an entry that was never applied.\n this.tracks[trackIndex] = current.mixingFrom;\n this.queue.interrupt(current);\n this.queue.end(current);\n this.clearNext(current);\n current = current.mixingFrom;\n interrupt = false;\n }\n else\n this.clearNext(current);\n }\n var entry = this.trackEntry(trackIndex, animation, loop, current);\n this.setCurrent(trackIndex, entry, interrupt);\n this.queue.drain();\n return entry;\n };\n /** Queues an animation by name.\n *\n * See {@link #addAnimationWith()}. */\n AnimationState.prototype.addAnimation = function (trackIndex, animationName, loop, delay) {\n if (loop === void 0) { loop = false; }\n if (delay === void 0) { delay = 0; }\n var animation = this.data.skeletonData.findAnimation(animationName);\n if (!animation)\n throw new Error(\"Animation not found: \" + animationName);\n return this.addAnimationWith(trackIndex, animation, loop, delay);\n };\n /** Adds an animation to be played after the current or last queued animation for a track. If the track is empty, it is\n * equivalent to calling {@link #setAnimationWith()}.\n * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry\n * minus any mix duration (from the {@link AnimationStateData}) plus the specified `delay` (ie the mix\n * ends at (`delay` = 0) or before (`delay` < 0) the previous track entry duration). If the\n * previous entry is looping, its next loop completion is used instead of its duration.\n * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept\n * after the {@link AnimationStateListener#dispose()} event occurs. */\n AnimationState.prototype.addAnimationWith = function (trackIndex, animation, loop, delay) {\n if (loop === void 0) { loop = false; }\n if (delay === void 0) { delay = 0; }\n if (!animation)\n throw new Error(\"animation cannot be null.\");\n var last = this.expandToIndex(trackIndex);\n if (last) {\n while (last.next)\n last = last.next;\n }\n var entry = this.trackEntry(trackIndex, animation, loop, last);\n if (!last) {\n this.setCurrent(trackIndex, entry, true);\n this.queue.drain();\n }\n else {\n last.next = entry;\n entry.previous = last;\n if (delay <= 0)\n delay += last.getTrackComplete() - entry.mixDuration;\n }\n entry.delay = delay;\n return entry;\n };\n /** Sets an empty animation for a track, discarding any queued animations, and sets the track entry's\n * {@link TrackEntry#mixduration}. An empty animation has no timelines and serves as a placeholder for mixing in or out.\n *\n * Mixing out is done by setting an empty animation with a mix duration using either {@link #setEmptyAnimation()},\n * {@link #setEmptyAnimations()}, or {@link #addEmptyAnimation()}. Mixing to an empty animation causes\n * the previous animation to be applied less and less over the mix duration. Properties keyed in the previous animation\n * transition to the value from lower tracks or to the setup pose value if no lower tracks key the property. A mix duration of\n * 0 still mixes out over one frame.\n *\n * Mixing in is done by first setting an empty animation, then adding an animation using\n * {@link #addAnimation()} and on the returned track entry, set the\n * {@link TrackEntry#setMixDuration()}. Mixing from an empty animation causes the new animation to be applied more and\n * more over the mix duration. Properties keyed in the new animation transition from the value from lower tracks or from the\n * setup pose value if no lower tracks key the property to the value keyed in the new animation. */\n AnimationState.prototype.setEmptyAnimation = function (trackIndex, mixDuration) {\n if (mixDuration === void 0) { mixDuration = 0; }\n var entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation(), false);\n entry.mixDuration = mixDuration;\n entry.trackEnd = mixDuration;\n return entry;\n };\n /** Adds an empty animation to be played after the current or last queued animation for a track, and sets the track entry's\n * {@link TrackEntry#mixDuration}. If the track is empty, it is equivalent to calling\n * {@link #setEmptyAnimation()}.\n *\n * See {@link #setEmptyAnimation()}.\n * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry\n * minus any mix duration plus the specified `delay` (ie the mix ends at (`delay` = 0) or\n * before (`delay` < 0) the previous track entry duration). If the previous entry is looping, its next\n * loop completion is used instead of its duration.\n * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept\n * after the {@link AnimationStateListener#dispose()} event occurs. */\n AnimationState.prototype.addEmptyAnimation = function (trackIndex, mixDuration, delay) {\n if (mixDuration === void 0) { mixDuration = 0; }\n if (delay === void 0) { delay = 0; }\n var entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation(), false, delay);\n if (delay <= 0)\n entry.delay += entry.mixDuration - mixDuration;\n entry.mixDuration = mixDuration;\n entry.trackEnd = mixDuration;\n return entry;\n };\n /** Sets an empty animation for every track, discarding any queued animations, and mixes to it over the specified mix\n * duration. */\n AnimationState.prototype.setEmptyAnimations = function (mixDuration) {\n if (mixDuration === void 0) { mixDuration = 0; }\n var oldDrainDisabled = this.queue.drainDisabled;\n this.queue.drainDisabled = true;\n for (var i = 0, n = this.tracks.length; i < n; i++) {\n var current = this.tracks[i];\n if (current)\n this.setEmptyAnimation(current.trackIndex, mixDuration);\n }\n this.queue.drainDisabled = oldDrainDisabled;\n this.queue.drain();\n };\n AnimationState.prototype.expandToIndex = function (index) {\n if (index < this.tracks.length)\n return this.tracks[index];\n Utils.ensureArrayCapacity(this.tracks, index + 1, null);\n this.tracks.length = index + 1;\n return null;\n };\n /** @param last May be null. */\n AnimationState.prototype.trackEntry = function (trackIndex, animation, loop, last) {\n var entry = this.trackEntryPool.obtain();\n entry.trackIndex = trackIndex;\n entry.animation = animation;\n entry.loop = loop;\n entry.holdPrevious = false;\n entry.eventThreshold = 0;\n entry.attachmentThreshold = 0;\n entry.drawOrderThreshold = 0;\n entry.animationStart = 0;\n entry.animationEnd = animation.duration;\n entry.animationLast = -1;\n entry.nextAnimationLast = -1;\n entry.delay = 0;\n entry.trackTime = 0;\n entry.trackLast = -1;\n entry.nextTrackLast = -1;\n entry.trackEnd = Number.MAX_VALUE;\n entry.timeScale = 1;\n entry.alpha = 1;\n entry.interruptAlpha = 1;\n entry.mixTime = 0;\n entry.mixDuration = !last ? 0 : this.data.getMix(last.animation, animation);\n entry.mixBlend = MixBlend.replace;\n return entry;\n };\n /** Removes the {@link TrackEntry#getNext() next entry} and all entries after it for the specified entry. */\n AnimationState.prototype.clearNext = function (entry) {\n var next = entry.next;\n while (next) {\n this.queue.dispose(next);\n next = next.next;\n }\n entry.next = null;\n };\n AnimationState.prototype._animationsChanged = function () {\n this.animationsChanged = false;\n this.propertyIDs.clear();\n var tracks = this.tracks;\n for (var i = 0, n = tracks.length; i < n; i++) {\n var entry = tracks[i];\n if (!entry)\n continue;\n while (entry.mixingFrom)\n entry = entry.mixingFrom;\n do {\n if (!entry.mixingTo || entry.mixBlend != MixBlend.add)\n this.computeHold(entry);\n entry = entry.mixingTo;\n } while (entry);\n }\n };\n AnimationState.prototype.computeHold = function (entry) {\n var to = entry.mixingTo;\n var timelines = entry.animation.timelines;\n var timelinesCount = entry.animation.timelines.length;\n var timelineMode = entry.timelineMode;\n timelineMode.length = timelinesCount;\n var timelineHoldMix = entry.timelineHoldMix;\n timelineHoldMix.length = 0;\n var propertyIDs = this.propertyIDs;\n if (to && to.holdPrevious) {\n for (var i = 0; i < timelinesCount; i++)\n timelineMode[i] = propertyIDs.addAll(timelines[i].getPropertyIds()) ? HOLD_FIRST : HOLD_SUBSEQUENT;\n return;\n }\n outer: for (var i = 0; i < timelinesCount; i++) {\n var timeline = timelines[i];\n var ids = timeline.getPropertyIds();\n if (!propertyIDs.addAll(ids))\n timelineMode[i] = SUBSEQUENT;\n else if (!to || timeline instanceof AttachmentTimeline || timeline instanceof DrawOrderTimeline\n || timeline instanceof EventTimeline || !to.animation.hasTimeline(ids)) {\n timelineMode[i] = FIRST;\n }\n else {\n for (var next = to.mixingTo; next; next = next.mixingTo) {\n if (next.animation.hasTimeline(ids))\n continue;\n if (entry.mixDuration > 0) {\n timelineMode[i] = HOLD_MIX;\n timelineHoldMix[i] = next;\n continue outer;\n }\n break;\n }\n timelineMode[i] = HOLD_FIRST;\n }\n }\n };\n /** Returns the track entry for the animation currently playing on the track, or null if no animation is currently playing. */\n AnimationState.prototype.getCurrent = function (trackIndex) {\n if (trackIndex >= this.tracks.length)\n return null;\n return this.tracks[trackIndex];\n };\n /** Adds a listener to receive events for all track entries. */\n AnimationState.prototype.addListener = function (listener) {\n if (!listener)\n throw new Error(\"listener cannot be null.\");\n this.listeners.push(listener);\n };\n /** Removes the listener added with {@link #addListener()}. */\n AnimationState.prototype.removeListener = function (listener) {\n var index = this.listeners.indexOf(listener);\n if (index >= 0)\n this.listeners.splice(index, 1);\n };\n /** Removes all listeners added with {@link #addListener()}. */\n AnimationState.prototype.clearListeners = function () {\n this.listeners.length = 0;\n };\n /** Discards all listener notifications that have not yet been delivered. This can be useful to call from an\n * {@link AnimationStateListener} when it is known that further notifications that may have been already queued for delivery\n * are not wanted because new animations are being set. */\n AnimationState.prototype.clearListenerNotifications = function () {\n this.queue.clear();\n };\n return AnimationState;\n}());\nexport { AnimationState };\n/** Stores settings and other state for the playback of an animation on an {@link AnimationState} track.\n *\n * References to a track entry must not be kept after the {@link AnimationStateListener#dispose()} event occurs. */\nvar TrackEntry = /** @class */ (function () {\n function TrackEntry() {\n /** Controls how properties keyed in the animation are mixed with lower tracks. Defaults to {@link MixBlend#replace}, which\n * replaces the values from the lower tracks with the animation values. {@link MixBlend#add} adds the animation values to\n * the values from the lower tracks.\n *\n * The `mixBlend` can be set for a new track entry only before {@link AnimationState#apply()} is first\n * called. */\n this.mixBlend = MixBlend.replace;\n this.timelineMode = new Array();\n this.timelineHoldMix = new Array();\n this.timelinesRotation = new Array();\n }\n TrackEntry.prototype.reset = function () {\n this.next = null;\n this.previous = null;\n this.mixingFrom = null;\n this.mixingTo = null;\n this.animation = null;\n this.listener = null;\n this.timelineMode.length = 0;\n this.timelineHoldMix.length = 0;\n this.timelinesRotation.length = 0;\n };\n /** Uses {@link #trackTime} to compute the `animationTime`, which is between {@link #animationStart}\n * and {@link #animationEnd}. When the `trackTime` is 0, the `animationTime` is equal to the\n * `animationStart` time. */\n TrackEntry.prototype.getAnimationTime = function () {\n if (this.loop) {\n var duration = this.animationEnd - this.animationStart;\n if (duration == 0)\n return this.animationStart;\n return (this.trackTime % duration) + this.animationStart;\n }\n return Math.min(this.trackTime + this.animationStart, this.animationEnd);\n };\n TrackEntry.prototype.setAnimationLast = function (animationLast) {\n this.animationLast = animationLast;\n this.nextAnimationLast = animationLast;\n };\n /** Returns true if at least one loop has been completed.\n *\n * See {@link AnimationStateListener#complete()}. */\n TrackEntry.prototype.isComplete = function () {\n return this.trackTime >= this.animationEnd - this.animationStart;\n };\n /** Resets the rotation directions for mixing this entry's rotate timelines. This can be useful to avoid bones rotating the\n * long way around when using {@link #alpha} and starting animations on other tracks.\n *\n * Mixing with {@link MixBlend#replace} involves finding a rotation between two others, which has two possible solutions:\n * the short way or the long way around. The two rotations likely change over time, so which direction is the short or long\n * way also changes. If the short way was always chosen, bones would flip to the other side when that direction became the\n * long way. TrackEntry chooses the short way the first time it is applied and remembers that direction. */\n TrackEntry.prototype.resetRotationDirections = function () {\n this.timelinesRotation.length = 0;\n };\n TrackEntry.prototype.getTrackComplete = function () {\n var duration = this.animationEnd - this.animationStart;\n if (duration != 0) {\n if (this.loop)\n return duration * (1 + ((this.trackTime / duration) | 0)); // Completion of next loop.\n if (this.trackTime < duration)\n return duration; // Before duration.\n }\n return this.trackTime; // Next update.\n };\n return TrackEntry;\n}());\nexport { TrackEntry };\nvar EventQueue = /** @class */ (function () {\n function EventQueue(animState) {\n this.objects = [];\n this.drainDisabled = false;\n this.animState = animState;\n }\n EventQueue.prototype.start = function (entry) {\n this.objects.push(EventType.start);\n this.objects.push(entry);\n this.animState.animationsChanged = true;\n };\n EventQueue.prototype.interrupt = function (entry) {\n this.objects.push(EventType.interrupt);\n this.objects.push(entry);\n };\n EventQueue.prototype.end = function (entry) {\n this.objects.push(EventType.end);\n this.objects.push(entry);\n this.animState.animationsChanged = true;\n };\n EventQueue.prototype.dispose = function (entry) {\n this.objects.push(EventType.dispose);\n this.objects.push(entry);\n };\n EventQueue.prototype.complete = function (entry) {\n this.objects.push(EventType.complete);\n this.objects.push(entry);\n };\n EventQueue.prototype.event = function (entry, event) {\n this.objects.push(EventType.event);\n this.objects.push(entry);\n this.objects.push(event);\n };\n EventQueue.prototype.drain = function () {\n if (this.drainDisabled)\n return;\n this.drainDisabled = true;\n var objects = this.objects;\n var listeners = this.animState.listeners;\n for (var i = 0; i < objects.length; i += 2) {\n var type = objects[i];\n var entry = objects[i + 1];\n switch (type) {\n case EventType.start:\n if (entry.listener && entry.listener.start)\n entry.listener.start(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].start)\n listeners[ii].start(entry);\n break;\n case EventType.interrupt:\n if (entry.listener && entry.listener.interrupt)\n entry.listener.interrupt(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].interrupt)\n listeners[ii].interrupt(entry);\n break;\n case EventType.end:\n if (entry.listener && entry.listener.end)\n entry.listener.end(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].end)\n listeners[ii].end(entry);\n // Fall through.\n case EventType.dispose:\n if (entry.listener && entry.listener.dispose)\n entry.listener.dispose(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].dispose)\n listeners[ii].dispose(entry);\n this.animState.trackEntryPool.free(entry);\n break;\n case EventType.complete:\n if (entry.listener && entry.listener.complete)\n entry.listener.complete(entry);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].complete)\n listeners[ii].complete(entry);\n break;\n case EventType.event:\n var event_3 = objects[i++ + 2];\n if (entry.listener && entry.listener.event)\n entry.listener.event(entry, event_3);\n for (var ii = 0; ii < listeners.length; ii++)\n if (listeners[ii].event)\n listeners[ii].event(entry, event_3);\n break;\n }\n }\n this.clear();\n this.drainDisabled = false;\n };\n EventQueue.prototype.clear = function () {\n this.objects.length = 0;\n };\n return EventQueue;\n}());\nexport { EventQueue };\nexport var EventType;\n(function (EventType) {\n EventType[EventType[\"start\"] = 0] = \"start\";\n EventType[EventType[\"interrupt\"] = 1] = \"interrupt\";\n EventType[EventType[\"end\"] = 2] = \"end\";\n EventType[EventType[\"dispose\"] = 3] = \"dispose\";\n EventType[EventType[\"complete\"] = 4] = \"complete\";\n EventType[EventType[\"event\"] = 5] = \"event\";\n})(EventType || (EventType = {}));\nvar AnimationStateAdapter = /** @class */ (function () {\n function AnimationStateAdapter() {\n }\n AnimationStateAdapter.prototype.start = function (entry) {\n };\n AnimationStateAdapter.prototype.interrupt = function (entry) {\n };\n AnimationStateAdapter.prototype.end = function (entry) {\n };\n AnimationStateAdapter.prototype.dispose = function (entry) {\n };\n AnimationStateAdapter.prototype.complete = function (entry) {\n };\n AnimationStateAdapter.prototype.event = function (entry, event) {\n };\n return AnimationStateAdapter;\n}());\nexport { AnimationStateAdapter };\n/** 1. A previously applied timeline has set this property.\n *\n * Result: Mix from the current pose to the timeline pose. */\nexport var SUBSEQUENT = 0;\n/** 1. This is the first timeline to set this property.\n * 2. The next track entry applied after this one does not have a timeline to set this property.\n *\n * Result: Mix from the setup pose to the timeline pose. */\nexport var FIRST = 1;\n/** 1) A previously applied timeline has 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 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 *

\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