{
  "version": 3,
  "sources": ["../../src/index.ts", "../../../spine-core/src/Utils.ts", "../../../spine-core/src/attachments/Attachment.ts", "../../../spine-core/src/attachments/Sequence.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", "../../src/WebGL.ts", "../../src/GLTexture.ts", "../../src/AssetManager.ts", "../../src/Vector3.ts", "../../src/Matrix4.ts", "../../src/Camera.ts", "../../src/Input.ts", "../../src/CameraController.ts", "../../src/Shader.ts", "../../src/Mesh.ts", "../../src/PolygonBatcher.ts", "../../src/ShapeRenderer.ts", "../../src/SkeletonDebugRenderer.ts", "../../src/SkeletonRenderer.ts", "../../src/SceneRenderer.ts", "../../src/LoadingScreen.ts", "../../src/SpineCanvas.ts"],
  "sourcesContent": ["export * from \"./AssetManager\";\nexport * from \"./Camera\";\nexport * from \"./CameraController\";\nexport * from \"./GLTexture\";\nexport * from \"./Input\";\nexport * from \"./LoadingScreen\";\nexport * from \"./Matrix4\";\nexport * from \"./Mesh\";\nexport * from \"./PolygonBatcher\";\nexport * from \"./SceneRenderer\";\nexport * from \"./Shader\";\nexport * from \"./ShapeRenderer\";\nexport * from \"./SkeletonDebugRenderer\";\nexport * from \"./SkeletonRenderer\";\nexport * from \"./SpineCanvas\";\nexport * from \"./Vector3\";\nexport * from \"./WebGL\";\nexport * from \"@esotericsoftware/spine-core\";", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Skeleton } from \"./Skeleton\";\nimport { MixBlend } from \"./Animation\";\n\nexport interface StringMap<T> {\n\t[key: string]: T;\n}\n\nexport class IntSet {\n\tarray = new Array<number | undefined>();\n\n\tadd (value: number): boolean {\n\t\tlet contains = this.contains(value);\n\t\tthis.array[value | 0] = value | 0;\n\t\treturn !contains;\n\t}\n\n\tcontains (value: number) {\n\t\treturn this.array[value | 0] != undefined;\n\t}\n\n\tremove (value: number) {\n\t\tthis.array[value | 0] = undefined;\n\t}\n\n\tclear () {\n\t\tthis.array.length = 0;\n\t}\n}\n\nexport class StringSet {\n\tentries: StringMap<boolean> = {};\n\tsize = 0;\n\n\tadd (value: string): boolean {\n\t\tlet contains = this.entries[value];\n\t\tthis.entries[value] = true;\n\t\tif (!contains) {\n\t\t\tthis.size++;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\taddAll (values: string[]): boolean {\n\t\tlet oldSize = this.size;\n\t\tfor (var i = 0, n = values.length; i < n; i++)\n\t\t\tthis.add(values[i]);\n\t\treturn oldSize != this.size;\n\t}\n\n\tcontains (value: string) {\n\t\treturn this.entries[value];\n\t}\n\n\tclear () {\n\t\tthis.entries = {};\n\t\tthis.size = 0;\n\t}\n}\n\nexport interface NumberArrayLike {\n\treadonly length: number;\n\t[n: number]: number;\n}\n\nexport interface Disposable {\n\tdispose (): void;\n}\n\nexport interface Restorable {\n\trestore (): void;\n}\n\nexport class Color {\n\tpublic static WHITE = new Color(1, 1, 1, 1);\n\tpublic static RED = new Color(1, 0, 0, 1);\n\tpublic static GREEN = new Color(0, 1, 0, 1);\n\tpublic static BLUE = new Color(0, 0, 1, 1);\n\tpublic static MAGENTA = new Color(1, 0, 1, 1);\n\n\tconstructor (public r: number = 0, public g: number = 0, public b: number = 0, public a: number = 0) {\n\t}\n\n\tset (r: number, g: number, b: number, a: number) {\n\t\tthis.r = r;\n\t\tthis.g = g;\n\t\tthis.b = b;\n\t\tthis.a = a;\n\t\treturn this.clamp();\n\t}\n\n\tsetFromColor (c: Color) {\n\t\tthis.r = c.r;\n\t\tthis.g = c.g;\n\t\tthis.b = c.b;\n\t\tthis.a = c.a;\n\t\treturn this;\n\t}\n\n\tsetFromString (hex: string) {\n\t\thex = hex.charAt(0) == '#' ? hex.substr(1) : hex;\n\t\tthis.r = parseInt(hex.substr(0, 2), 16) / 255;\n\t\tthis.g = parseInt(hex.substr(2, 2), 16) / 255;\n\t\tthis.b = parseInt(hex.substr(4, 2), 16) / 255;\n\t\tthis.a = hex.length != 8 ? 1 : parseInt(hex.substr(6, 2), 16) / 255;\n\t\treturn this;\n\t}\n\n\tadd (r: number, g: number, b: number, a: number) {\n\t\tthis.r += r;\n\t\tthis.g += g;\n\t\tthis.b += b;\n\t\tthis.a += a;\n\t\treturn this.clamp();\n\t}\n\n\tclamp () {\n\t\tif (this.r < 0) this.r = 0;\n\t\telse if (this.r > 1) this.r = 1;\n\n\t\tif (this.g < 0) this.g = 0;\n\t\telse if (this.g > 1) this.g = 1;\n\n\t\tif (this.b < 0) this.b = 0;\n\t\telse if (this.b > 1) this.b = 1;\n\n\t\tif (this.a < 0) this.a = 0;\n\t\telse if (this.a > 1) this.a = 1;\n\t\treturn this;\n\t}\n\n\tstatic rgba8888ToColor (color: Color, value: number) {\n\t\tcolor.r = ((value & 0xff000000) >>> 24) / 255;\n\t\tcolor.g = ((value & 0x00ff0000) >>> 16) / 255;\n\t\tcolor.b = ((value & 0x0000ff00) >>> 8) / 255;\n\t\tcolor.a = ((value & 0x000000ff)) / 255;\n\t}\n\n\tstatic rgb888ToColor (color: Color, value: number) {\n\t\tcolor.r = ((value & 0x00ff0000) >>> 16) / 255;\n\t\tcolor.g = ((value & 0x0000ff00) >>> 8) / 255;\n\t\tcolor.b = ((value & 0x000000ff)) / 255;\n\t}\n\n\tstatic fromString (hex: string): Color {\n\t\treturn new Color().setFromString(hex);\n\t}\n}\n\nexport class MathUtils {\n\tstatic PI = 3.1415927;\n\tstatic PI2 = MathUtils.PI * 2;\n\tstatic radiansToDegrees = 180 / MathUtils.PI;\n\tstatic radDeg = MathUtils.radiansToDegrees;\n\tstatic degreesToRadians = MathUtils.PI / 180;\n\tstatic degRad = MathUtils.degreesToRadians;\n\n\tstatic clamp (value: number, min: number, max: number) {\n\t\tif (value < min) return min;\n\t\tif (value > max) return max;\n\t\treturn value;\n\t}\n\n\tstatic cosDeg (degrees: number) {\n\t\treturn Math.cos(degrees * MathUtils.degRad);\n\t}\n\n\tstatic sinDeg (degrees: number) {\n\t\treturn Math.sin(degrees * MathUtils.degRad);\n\t}\n\n\tstatic signum (value: number): number {\n\t\treturn value > 0 ? 1 : value < 0 ? -1 : 0;\n\t}\n\n\tstatic toInt (x: number) {\n\t\treturn x > 0 ? Math.floor(x) : Math.ceil(x);\n\t}\n\n\tstatic cbrt (x: number) {\n\t\tlet y = Math.pow(Math.abs(x), 1 / 3);\n\t\treturn x < 0 ? -y : y;\n\t}\n\n\tstatic randomTriangular (min: number, max: number): number {\n\t\treturn MathUtils.randomTriangularWith(min, max, (min + max) * 0.5);\n\t}\n\n\tstatic randomTriangularWith (min: number, max: number, mode: number): number {\n\t\tlet u = Math.random();\n\t\tlet d = max - min;\n\t\tif (u <= (mode - min) / d) return min + Math.sqrt(u * d * (mode - min));\n\t\treturn max - Math.sqrt((1 - u) * d * (max - mode));\n\t}\n\n\tstatic isPowerOfTwo (value: number) {\n\t\treturn value && (value & (value - 1)) === 0;\n\t}\n}\n\nexport abstract class Interpolation {\n\tprotected abstract applyInternal (a: number): number;\n\tapply (start: number, end: number, a: number): number {\n\t\treturn start + (end - start) * this.applyInternal(a);\n\t}\n}\n\nexport class Pow extends Interpolation {\n\tprotected power = 2;\n\n\tconstructor (power: number) {\n\t\tsuper();\n\t\tthis.power = power;\n\t}\n\n\tapplyInternal (a: number): number {\n\t\tif (a <= 0.5) return Math.pow(a * 2, this.power) / 2;\n\t\treturn Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1;\n\t}\n}\n\nexport class PowOut extends Pow {\n\tconstructor (power: number) {\n\t\tsuper(power);\n\t}\n\n\tapplyInternal (a: number): number {\n\t\treturn Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1;\n\t}\n}\n\nexport class Utils {\n\tstatic SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== \"undefined\";\n\n\tstatic arrayCopy<T> (source: ArrayLike<T>, sourceStart: number, dest: ArrayLike<T>, destStart: number, numElements: number) {\n\t\tfor (let i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) {\n\t\t\tdest[j] = source[i];\n\t\t}\n\t}\n\n\tstatic arrayFill<T> (array: ArrayLike<T>, fromIndex: number, toIndex: number, value: T) {\n\t\tfor (let i = fromIndex; i < toIndex; i++)\n\t\t\tarray[i] = value;\n\t}\n\n\tstatic setArraySize<T> (array: Array<T>, size: number, value: any = 0): Array<T> {\n\t\tlet oldSize = array.length;\n\t\tif (oldSize == size) return array;\n\t\tarray.length = size;\n\t\tif (oldSize < size) {\n\t\t\tfor (let i = oldSize; i < size; i++) array[i] = value;\n\t\t}\n\t\treturn array;\n\t}\n\n\tstatic ensureArrayCapacity<T> (array: Array<T>, size: number, value: any = 0): Array<T> {\n\t\tif (array.length >= size) return array;\n\t\treturn Utils.setArraySize(array, size, value);\n\t}\n\n\tstatic newArray<T> (size: number, defaultValue: T): Array<T> {\n\t\tlet array = new Array<T>(size);\n\t\tfor (let i = 0; i < size; i++) array[i] = defaultValue;\n\t\treturn array;\n\t}\n\n\tstatic newFloatArray (size: number): NumberArrayLike {\n\t\tif (Utils.SUPPORTS_TYPED_ARRAYS)\n\t\t\treturn new Float32Array(size)\n\t\telse {\n\t\t\tlet array = new Array<number>(size);\n\t\t\tfor (let i = 0; i < array.length; i++) array[i] = 0;\n\t\t\treturn array;\n\t\t}\n\t}\n\n\tstatic newShortArray (size: number): NumberArrayLike {\n\t\tif (Utils.SUPPORTS_TYPED_ARRAYS)\n\t\t\treturn new Int16Array(size)\n\t\telse {\n\t\t\tlet array = new Array<number>(size);\n\t\t\tfor (let i = 0; i < array.length; i++) array[i] = 0;\n\t\t\treturn array;\n\t\t}\n\t}\n\n\tstatic toFloatArray (array: Array<number>) {\n\t\treturn Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array;\n\t}\n\n\tstatic toSinglePrecision (value: number) {\n\t\treturn Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value;\n\t}\n\n\t// This function is used to fix WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109\n\tstatic webkit602BugfixHelper (alpha: number, blend: MixBlend) {\n\t}\n\n\tstatic contains<T> (array: Array<T>, element: T, identity = true) {\n\t\tfor (var i = 0; i < array.length; i++)\n\t\t\tif (array[i] == element) return true;\n\t\treturn false;\n\t}\n\n\tstatic enumValue (type: any, name: string) {\n\t\treturn type[name[0].toUpperCase() + name.slice(1)];\n\t}\n}\n\nexport class DebugUtils {\n\tstatic logBones (skeleton: Skeleton) {\n\t\tfor (let i = 0; i < skeleton.bones.length; i++) {\n\t\t\tlet bone = skeleton.bones[i];\n\t\t\tconsole.log(bone.data.name + \", \" + bone.a + \", \" + bone.b + \", \" + bone.c + \", \" + bone.d + \", \" + bone.worldX + \", \" + bone.worldY);\n\t\t}\n\t}\n}\n\nexport class Pool<T> {\n\tprivate items = new Array<T>();\n\tprivate instantiator: () => T;\n\n\tconstructor (instantiator: () => T) {\n\t\tthis.instantiator = instantiator;\n\t}\n\n\tobtain () {\n\t\treturn this.items.length > 0 ? this.items.pop()! : this.instantiator();\n\t}\n\n\tfree (item: T) {\n\t\tif ((item as any).reset) (item as any).reset();\n\t\tthis.items.push(item);\n\t}\n\n\tfreeAll (items: ArrayLike<T>) {\n\t\tfor (let i = 0; i < items.length; i++)\n\t\t\tthis.free(items[i]);\n\t}\n\n\tclear () {\n\t\tthis.items.length = 0;\n\t}\n}\n\nexport class Vector2 {\n\tconstructor (public x = 0, public y = 0) {\n\t}\n\n\tset (x: number, y: number): Vector2 {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\treturn this;\n\t}\n\n\tlength () {\n\t\tlet x = this.x;\n\t\tlet y = this.y;\n\t\treturn Math.sqrt(x * x + y * y);\n\t}\n\n\tnormalize () {\n\t\tlet len = this.length();\n\t\tif (len != 0) {\n\t\t\tthis.x /= len;\n\t\t\tthis.y /= len;\n\t\t}\n\t\treturn this;\n\t}\n}\n\nexport class TimeKeeper {\n\tmaxDelta = 0.064;\n\tframesPerSecond = 0;\n\tdelta = 0;\n\ttotalTime = 0;\n\n\tprivate lastTime = Date.now() / 1000;\n\tprivate frameCount = 0;\n\tprivate frameTime = 0;\n\n\tupdate () {\n\t\tlet now = Date.now() / 1000;\n\t\tthis.delta = now - this.lastTime;\n\t\tthis.frameTime += this.delta;\n\t\tthis.totalTime += this.delta;\n\t\tif (this.delta > this.maxDelta) this.delta = this.maxDelta;\n\t\tthis.lastTime = now;\n\n\t\tthis.frameCount++;\n\t\tif (this.frameTime > 1) {\n\t\t\tthis.framesPerSecond = this.frameCount / this.frameTime;\n\t\t\tthis.frameTime = 0;\n\t\t\tthis.frameCount = 0;\n\t\t}\n\t}\n}\n\nexport interface ArrayLike<T> {\n\tlength: number;\n\t[n: number]: T;\n}\n\nexport class WindowedMean {\n\tvalues: Array<number>;\n\taddedValues = 0;\n\tlastValue = 0;\n\tmean = 0;\n\tdirty = true;\n\n\tconstructor (windowSize: number = 32) {\n\t\tthis.values = new Array<number>(windowSize);\n\t}\n\n\thasEnoughData () {\n\t\treturn this.addedValues >= this.values.length;\n\t}\n\n\taddValue (value: number) {\n\t\tif (this.addedValues < this.values.length) this.addedValues++;\n\t\tthis.values[this.lastValue++] = value;\n\t\tif (this.lastValue > this.values.length - 1) this.lastValue = 0;\n\t\tthis.dirty = true;\n\t}\n\n\tgetMean () {\n\t\tif (this.hasEnoughData()) {\n\t\t\tif (this.dirty) {\n\t\t\t\tlet mean = 0;\n\t\t\t\tfor (let i = 0; i < this.values.length; i++)\n\t\t\t\t\tmean += this.values[i];\n\t\t\t\tthis.mean = mean / this.values.length;\n\t\t\t\tthis.dirty = false;\n\t\t\t}\n\t\t\treturn this.mean;\n\t\t}\n\t\treturn 0;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Slot } from \"../Slot\";\nimport { NumberArrayLike, Utils } from \"../Utils\";\n\n/** The base class for all attachments. */\nexport abstract class Attachment {\n\tname: string;\n\n\tconstructor (name: string) {\n\t\tif (!name) throw new Error(\"name cannot be null.\");\n\t\tthis.name = name;\n\t}\n\n\tabstract copy (): Attachment;\n}\n\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}. */\nexport abstract class VertexAttachment extends Attachment {\n\tprivate static nextID = 0;\n\n\t/** The unique ID for this attachment. */\n\tid = VertexAttachment.nextID++;\n\n\t/** The bones which affect the {@link #getVertices()}. The array entries are, for each vertex, the number of bones affecting\n\t * the vertex followed by that many bone indices, which is the index of the bone in {@link Skeleton#bones}. Will be null\n\t * if this attachment has no weights. */\n\tbones: Array<number> | null = null;\n\n\t/** The vertex positions in the bone's coordinate system. For a non-weighted attachment, the values are `x,y`\n\t * entries for each vertex. For a weighted attachment, the values are `x,y,weight` entries for each bone affecting\n\t * each vertex. */\n\tvertices: NumberArrayLike = [];\n\n\t/** The maximum number of world vertex values that can be output by\n\t * {@link #computeWorldVertices()} using the `count` parameter. */\n\tworldVerticesLength = 0;\n\n\t/** Timelines for the timeline attachment are also applied to this attachment.\n\t * May be null if no attachment-specific timelines should be applied. */\n\ttimelineAttachment: Attachment = this;\n\n\tconstructor (name: string) {\n\t\tsuper(name);\n\t}\n\n\t/** Transforms the attachment's local {@link #vertices} to world coordinates. If the slot's {@link Slot#deform} is\n\t * not empty, it is used to deform the vertices.\n\t *\n\t * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine\n\t * Runtimes Guide.\n\t * @param start The index of the first {@link #vertices} value to transform. Each vertex has 2 values, x and y.\n\t * @param count The number of world vertex values to output. Must be <= {@link #worldVerticesLength} - `start`.\n\t * @param worldVertices The output world vertices. Must have a length >= `offset` + `count` *\n\t *           `stride` / 2.\n\t * @param offset The `worldVertices` index to begin writing values.\n\t * @param stride The number of `worldVertices` entries between the value pairs written. */\n\tcomputeWorldVertices (slot: Slot, start: number, count: number, worldVertices: NumberArrayLike, offset: number, stride: number) {\n\t\tcount = offset + (count >> 1) * stride;\n\t\tlet skeleton = slot.bone.skeleton;\n\t\tlet deformArray = slot.deform;\n\t\tlet vertices = this.vertices;\n\t\tlet bones = this.bones;\n\t\tif (!bones) {\n\t\t\tif (deformArray.length > 0) vertices = deformArray;\n\t\t\tlet bone = slot.bone;\n\t\t\tlet x = bone.worldX;\n\t\t\tlet y = bone.worldY;\n\t\t\tlet a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n\t\t\tfor (let v = start, w = offset; w < count; v += 2, w += stride) {\n\t\t\t\tlet vx = vertices[v], vy = vertices[v + 1];\n\t\t\t\tworldVertices[w] = vx * a + vy * b + x;\n\t\t\t\tworldVertices[w + 1] = vx * c + vy * d + y;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tlet v = 0, skip = 0;\n\t\tfor (let i = 0; i < start; i += 2) {\n\t\t\tlet n = bones[v];\n\t\t\tv += n + 1;\n\t\t\tskip += n;\n\t\t}\n\t\tlet skeletonBones = skeleton.bones;\n\t\tif (deformArray.length == 0) {\n\t\t\tfor (let w = offset, b = skip * 3; w < count; w += stride) {\n\t\t\t\tlet wx = 0, wy = 0;\n\t\t\t\tlet n = bones[v++];\n\t\t\t\tn += v;\n\t\t\t\tfor (; v < n; v++, b += 3) {\n\t\t\t\t\tlet bone = skeletonBones[bones[v]];\n\t\t\t\t\tlet vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2];\n\t\t\t\t\twx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n\t\t\t\t\twy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n\t\t\t\t}\n\t\t\t\tworldVertices[w] = wx;\n\t\t\t\tworldVertices[w + 1] = wy;\n\t\t\t}\n\t\t} else {\n\t\t\tlet deform = deformArray;\n\t\t\tfor (let w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) {\n\t\t\t\tlet wx = 0, wy = 0;\n\t\t\t\tlet n = bones[v++];\n\t\t\t\tn += v;\n\t\t\t\tfor (; v < n; v++, b += 3, f += 2) {\n\t\t\t\t\tlet bone = skeletonBones[bones[v]];\n\t\t\t\t\tlet vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2];\n\t\t\t\t\twx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n\t\t\t\t\twy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n\t\t\t\t}\n\t\t\t\tworldVertices[w] = wx;\n\t\t\t\tworldVertices[w + 1] = wy;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Does not copy id (generated) or name (set on construction). **/\n\tcopyTo (attachment: VertexAttachment) {\n\t\tif (this.bones) {\n\t\t\tattachment.bones = new Array<number>(this.bones.length);\n\t\t\tUtils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length);\n\t\t} else\n\t\t\tattachment.bones = null;\n\n\t\tif (this.vertices) {\n\t\t\tattachment.vertices = Utils.newFloatArray(this.vertices.length);\n\t\t\tUtils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length);\n\t\t}\n\n\t\tattachment.worldVerticesLength = this.worldVerticesLength;\n\t\tattachment.timelineAttachment = this.timelineAttachment;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { TextureRegion } from \"../Texture\";\nimport { Slot } from \"../Slot\";\nimport { HasTextureRegion } from \"./HasTextureRegion\";\nimport { Utils } from \"../Utils\";\n\n\nexport class Sequence {\n\tprivate static _nextID = 0;\n\n\tid = Sequence.nextID();\n\tregions: TextureRegion[];\n\tstart = 0;\n\tdigits = 0;\n\t/** The index of the region to show for the setup pose. */\n\tsetupIndex = 0;\n\n\tconstructor (count: number) {\n\t\tthis.regions = new Array<TextureRegion>(count);\n\t}\n\n\tcopy (): Sequence {\n\t\tlet copy = new Sequence(this.regions.length);\n\t\tUtils.arrayCopy(this.regions, 0, copy.regions, 0, this.regions.length);\n\t\tcopy.start = this.start;\n\t\tcopy.digits = this.digits;\n\t\tcopy.setupIndex = this.setupIndex;\n\t\treturn copy;\n\t}\n\n\tapply (slot: Slot, attachment: HasTextureRegion) {\n\t\tlet index = slot.sequenceIndex;\n\t\tif (index == -1) index = this.setupIndex;\n\t\tif (index >= this.regions.length) index = this.regions.length - 1;\n\t\tlet region = this.regions[index];\n\t\tif (attachment.region != region) {\n\t\t\tattachment.region = region;\n\t\t\tattachment.updateRegion();\n\t\t}\n\t}\n\n\tgetPath (basePath: string, index: number): string {\n\t\tlet result = basePath;\n\t\tlet frame = (this.start + index).toString();\n\t\tfor (let i = this.digits - frame.length; i > 0; i--)\n\t\t\tresult += \"0\";\n\t\tresult += frame;\n\t\treturn result;\n\t}\n\n\tprivate static nextID (): number {\n\t\treturn Sequence._nextID++;\n\t}\n}\n\nexport enum SequenceMode {\n\thold = 0,\n\tonce = 1,\n\tloop = 2,\n\tpingpong = 3,\n\tonceReverse = 4,\n\tloopReverse = 5,\n\tpingpongReverse = 6\n}\n\nexport const SequenceModeValues = [\n\tSequenceMode.hold,\n\tSequenceMode.once,\n\tSequenceMode.loop,\n\tSequenceMode.pingpong,\n\tSequenceMode.onceReverse,\n\tSequenceMode.loopReverse,\n\tSequenceMode.pingpongReverse\n];", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { VertexAttachment, Attachment } from \"./attachments/Attachment\";\nimport { IkConstraint } from \"./IkConstraint\";\nimport { PathConstraint } from \"./PathConstraint\";\nimport { Skeleton } from \"./Skeleton\";\nimport { Slot } from \"./Slot\";\nimport { TransformConstraint } from \"./TransformConstraint\";\nimport { StringSet, Utils, MathUtils, NumberArrayLike } from \"./Utils\";\nimport { Event } from \"./Event\";\nimport { HasTextureRegion } from \"./attachments/HasTextureRegion\";\nimport { SequenceMode, SequenceModeValues } from \"./attachments/Sequence\";\n\n/** A simple container for a list of timelines and a name. */\nexport class Animation {\n\t/** The animation's name, which is unique across all animations in the skeleton. */\n\tname: string;\n\ttimelines: Array<Timeline> = [];\n\ttimelineIds: StringSet = new StringSet();\n\n\t/** The duration of the animation in seconds, which is the highest time of all keys in the timeline. */\n\tduration: number;\n\n\tconstructor (name: string, timelines: Array<Timeline>, duration: number) {\n\t\tif (!name) throw new Error(\"name cannot be null.\");\n\t\tthis.name = name;\n\t\tthis.setTimelines(timelines);\n\t\tthis.duration = duration;\n\t}\n\n\tsetTimelines (timelines: Array<Timeline>) {\n\t\tif (!timelines) throw new Error(\"timelines cannot be null.\");\n\t\tthis.timelines = timelines;\n\t\tthis.timelineIds.clear();\n\t\tfor (var i = 0; i < timelines.length; i++)\n\t\t\tthis.timelineIds.addAll(timelines[i].getPropertyIds());\n\t}\n\n\thasTimeline (ids: string[]): boolean {\n\t\tfor (let i = 0; i < ids.length; i++)\n\t\t\tif (this.timelineIds.contains(ids[i])) return true;\n\t\treturn false;\n\t}\n\n\t/** Applies all the animation's timelines to the specified skeleton.\n\t *\n\t * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}.\n\t * @param loop If true, the animation repeats after {@link #getDuration()}.\n\t * @param events May be null to ignore fired events. */\n\tapply (skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\n\t\tif (loop && this.duration != 0) {\n\t\t\ttime %= this.duration;\n\t\t\tif (lastTime > 0) lastTime %= this.duration;\n\t\t}\n\n\t\tlet timelines = this.timelines;\n\t\tfor (let i = 0, n = timelines.length; i < n; i++)\n\t\t\ttimelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction);\n\t}\n}\n\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 enum MixBlend {\n\t/** Transitions from the setup value to the timeline value (the current value is not used). Before the first key, the setup\n\t * value is set. */\n\tsetup,\n\t/** Transitions from the current value to the timeline value. Before the first key, transitions from the current value to\n\t * the setup value. Timelines which perform instant transitions, such as {@link DrawOrderTimeline} or\n\t * {@link AttachmentTimeline}, use the setup value before the first key.\n\t *\n\t * `first` is intended for the first animations applied, not for animations layered on top of those. */\n\tfirst,\n\t/** Transitions from the current value to the timeline value. No change is made before the first key (the current value is\n\t * kept until the first key).\n\t *\n\t * `replace` is intended for animations layered on top of others, not for the first animations applied. */\n\treplace,\n\t/** Transitions from the current value to the current value plus the timeline value. No change is made before the first key\n\t * (the current value is kept until the first key).\n\t *\n\t * `add` is intended for animations layered on top of others, not for the first animations applied. Properties\n\t * keyed by additive animations must be set manually or by another animation before applying the additive animations, else\n\t * the property values will increase continually. */\n\tadd\n}\n\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 enum MixDirection {\n\tmixIn, mixOut\n}\n\nconst Property = {\n\trotate: 0,\n\tx: 1,\n\ty: 2,\n\tscaleX: 3,\n\tscaleY: 4,\n\tshearX: 5,\n\tshearY: 6,\n\n\trgb: 7,\n\talpha: 8,\n\trgb2: 9,\n\n\tattachment: 10,\n\tdeform: 11,\n\n\tevent: 12,\n\tdrawOrder: 13,\n\n\tikConstraint: 14,\n\ttransformConstraint: 15,\n\n\tpathConstraintPosition: 16,\n\tpathConstraintSpacing: 17,\n\tpathConstraintMix: 18,\n\n\tsequence: 19\n}\n\n/** The interface for all timelines. */\nexport abstract class Timeline {\n\tpropertyIds: string[];\n\tframes: NumberArrayLike;\n\n\tconstructor (frameCount: number, propertyIds: string[]) {\n\t\tthis.propertyIds = propertyIds;\n\t\tthis.frames = Utils.newFloatArray(frameCount * this.getFrameEntries());\n\t}\n\n\tgetPropertyIds () {\n\t\treturn this.propertyIds;\n\t}\n\n\tgetFrameEntries (): number {\n\t\treturn 1;\n\t}\n\n\tgetFrameCount () {\n\t\treturn this.frames.length / this.getFrameEntries();\n\t}\n\n\tgetDuration (): number {\n\t\treturn this.frames[this.frames.length - this.getFrameEntries()];\n\t}\n\n\tabstract apply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event> | null, alpha: number, blend: MixBlend, direction: MixDirection): void;\n\n\tstatic search1 (frames: NumberArrayLike, time: number) {\n\t\tlet n = frames.length;\n\t\tfor (let i = 1; i < n; i++)\n\t\t\tif (frames[i] > time) return i - 1;\n\t\treturn n - 1;\n\t}\n\n\tstatic search (frames: NumberArrayLike, time: number, step: number) {\n\t\tlet n = frames.length;\n\t\tfor (let i = step; i < n; i += step)\n\t\t\tif (frames[i] > time) return i - step;\n\t\treturn n - step;\n\t}\n}\n\nexport interface BoneTimeline {\n\t/** The index of the bone in {@link Skeleton#bones} that will be changed. */\n\tboneIndex: number;\n}\n\nexport interface SlotTimeline {\n\t/** The index of the slot in {@link Skeleton#slots} that will be changed. */\n\tslotIndex: number;\n}\n\n/** The base class for timelines that use interpolation between key frame values. */\nexport abstract class CurveTimeline extends Timeline {\n\tprotected curves: NumberArrayLike; // type, x, y, ...\n\n\tconstructor (frameCount: number, bezierCount: number, propertyIds: string[]) {\n\t\tsuper(frameCount, propertyIds);\n\t\tthis.curves = Utils.newFloatArray(frameCount + bezierCount * 18/*BEZIER_SIZE*/);\n\t\tthis.curves[frameCount - 1] = 1/*STEPPED*/;\n\t}\n\n\t/** Sets the specified key frame to linear interpolation. */\n\tsetLinear (frame: number) {\n\t\tthis.curves[frame] = 0/*LINEAR*/;\n\t}\n\n\t/** Sets the specified key frame to stepped interpolation. */\n\tsetStepped (frame: number) {\n\t\tthis.curves[frame] = 1/*STEPPED*/;\n\t}\n\n\t/** Shrinks the storage for Bezier curves, for use when <code>bezierCount</code> (specified in the constructor) was larger\n\t * than the actual number of Bezier curves. */\n\tshrink (bezierCount: number) {\n\t\tlet size = this.getFrameCount() + bezierCount * 18/*BEZIER_SIZE*/;\n\t\tif (this.curves.length > size) {\n\t\t\tlet newCurves = Utils.newFloatArray(size);\n\t\t\tUtils.arrayCopy(this.curves, 0, newCurves, 0, size);\n\t\t\tthis.curves = newCurves;\n\t\t}\n\t}\n\n\t/** Stores the segments for the specified Bezier curve. For timelines that modify multiple values, there may be more than\n\t * one curve per frame.\n\t * @param bezier The ordinal of this Bezier curve for this timeline, between 0 and <code>bezierCount - 1</code> (specified\n\t *           in the constructor), inclusive.\n\t * @param frame Between 0 and <code>frameCount - 1</code>, inclusive.\n\t * @param value The index of the value for this frame that this curve is used for.\n\t * @param time1 The time for the first key.\n\t * @param value1 The value for the first key.\n\t * @param cx1 The time for the first Bezier handle.\n\t * @param cy1 The value for the first Bezier handle.\n\t * @param cx2 The time of the second Bezier handle.\n\t * @param cy2 The value for the second Bezier handle.\n\t * @param time2 The time for the second key.\n\t * @param value2 The value for the second key. */\n\tsetBezier (bezier: number, frame: number, value: number, time1: number, value1: number, cx1: number, cy1: number, cx2: number,\n\t\tcy2: number, time2: number, value2: number) {\n\t\tlet curves = this.curves;\n\t\tlet i = this.getFrameCount() + bezier * 18/*BEZIER_SIZE*/;\n\t\tif (value == 0) curves[frame] = 2/*BEZIER*/ + i;\n\t\tlet tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = (value1 - cy1 * 2 + cy2) * 0.03;\n\t\tlet dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006, dddy = ((cy1 - cy2) * 3 - value1 + value2) * 0.006;\n\t\tlet ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy;\n\t\tlet dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = (cy1 - value1) * 0.3 + tmpy + dddy * 0.16666667;\n\t\tlet x = time1 + dx, y = value1 + dy;\n\t\tfor (let n = i + 18/*BEZIER_SIZE*/; i < n; i += 2) {\n\t\t\tcurves[i] = x;\n\t\t\tcurves[i + 1] = y;\n\t\t\tdx += ddx;\n\t\t\tdy += ddy;\n\t\t\tddx += dddx;\n\t\t\tddy += dddy;\n\t\t\tx += dx;\n\t\t\ty += dy;\n\t\t}\n\t}\n\n\t/** Returns the Bezier interpolated value for the specified time.\n\t * @param frameIndex The index into {@link #getFrames()} for the values of the frame before <code>time</code>.\n\t * @param valueOffset The offset from <code>frameIndex</code> to the value this curve is used for.\n\t * @param i The index of the Bezier segments. See {@link #getCurveType(int)}. */\n\tgetBezierValue (time: number, frameIndex: number, valueOffset: number, i: number) {\n\t\tlet curves = this.curves;\n\t\tif (curves[i] > time) {\n\t\t\tlet x = this.frames[frameIndex], y = this.frames[frameIndex + valueOffset];\n\t\t\treturn y + (time - x) / (curves[i] - x) * (curves[i + 1] - y);\n\t\t}\n\t\tlet n = i + 18/*BEZIER_SIZE*/;\n\t\tfor (i += 2; i < n; i += 2) {\n\t\t\tif (curves[i] >= time) {\n\t\t\t\tlet x = curves[i - 2], y = curves[i - 1];\n\t\t\t\treturn y + (time - x) / (curves[i] - x) * (curves[i + 1] - y);\n\t\t\t}\n\t\t}\n\t\tframeIndex += this.getFrameEntries();\n\t\tlet x = curves[n - 2], y = curves[n - 1];\n\t\treturn y + (time - x) / (this.frames[frameIndex] - x) * (this.frames[frameIndex + valueOffset] - y);\n\t}\n}\n\nexport abstract class CurveTimeline1 extends CurveTimeline {\n\tconstructor (frameCount: number, bezierCount: number, propertyId: string) {\n\t\tsuper(frameCount, bezierCount, [propertyId]);\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 2/*ENTRIES*/;\n\t}\n\n\t/** Sets the time and value for the specified frame.\n\t * @param frame Between 0 and <code>frameCount</code>, inclusive.\n\t * @param time The frame time in seconds. */\n\tsetFrame (frame: number, time: number, value: number) {\n\t\tframe <<= 1;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*VALUE*/] = value;\n\t}\n\n\t/** Returns the interpolated value for the specified time. */\n\tgetCurveValue (time: number) {\n\t\tlet frames = this.frames;\n\t\tlet i = frames.length - 2;\n\t\tfor (let ii = 2; ii <= i; ii += 2) {\n\t\t\tif (frames[ii] > time) {\n\t\t\t\ti = ii - 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tlet curveType = this.curves[i >> 1];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/:\n\t\t\t\tlet before = frames[i], value = frames[i + 1/*VALUE*/];\n\t\t\t\treturn value + (time - before) / (frames[i + 2/*ENTRIES*/] - before) * (frames[i + 2/*ENTRIES*/ + 1/*VALUE*/] - value);\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\treturn frames[i + 1/*VALUE*/];\n\t\t}\n\t\treturn this.getBezierValue(time, i, 1/*VALUE*/, curveType - 2/*BEZIER*/);\n\t}\n}\n\n/** The base class for a {@link CurveTimeline} which sets two properties. */\nexport abstract class CurveTimeline2 extends CurveTimeline {\n\t/** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(int)}.\n\t * @param propertyIds Unique identifiers for the properties the timeline modifies. */\n\tconstructor (frameCount: number, bezierCount: number, propertyId1: string, propertyId2: string) {\n\t\tsuper(frameCount, bezierCount, [propertyId1, propertyId2]);\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 3/*ENTRIES*/;\n\t}\n\n\t/** Sets the time and values for the specified frame.\n\t * @param frame Between 0 and <code>frameCount</code>, inclusive.\n\t * @param time The frame time in seconds. */\n\tsetFrame (frame: number, time: number, value1: number, value2: number) {\n\t\tframe *= 3/*ENTRIES*/;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*VALUE1*/] = value1;\n\t\tthis.frames[frame + 2/*VALUE2*/] = value2;\n\t}\n}\n\n/** Changes a bone's local {@link Bone#rotation}. */\nexport class RotateTimeline extends CurveTimeline1 implements BoneTimeline {\n\tboneIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, Property.rotate + \"|\" + boneIndex);\n\t\tthis.boneIndex = boneIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event> | null, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet bone = skeleton.bones[this.boneIndex];\n\t\tif (!bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tbone.rotation = bone.data.rotation;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tbone.rotation += (bone.data.rotation - bone.rotation) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet r = this.getCurveValue(time);\n\t\tswitch (blend) {\n\t\t\tcase MixBlend.setup:\n\t\t\t\tbone.rotation = bone.data.rotation + r * alpha;\n\t\t\t\tbreak;\n\t\t\tcase MixBlend.first:\n\t\t\tcase MixBlend.replace:\n\t\t\t\tr += bone.data.rotation - bone.rotation;\n\t\t\tcase MixBlend.add:\n\t\t\t\tbone.rotation += r * alpha;\n\t\t}\n\t}\n}\n\n/** Changes a bone's local {@link Bone#x} and {@link Bone#y}. */\nexport class TranslateTimeline extends CurveTimeline2 implements BoneTimeline {\n\tboneIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount,\n\t\t\tProperty.x + \"|\" + boneIndex,\n\t\t\tProperty.y + \"|\" + boneIndex,\n\t\t);\n\t\tthis.boneIndex = boneIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet bone = skeleton.bones[this.boneIndex];\n\t\tif (!bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tbone.x = bone.data.x;\n\t\t\t\t\tbone.y = bone.data.y;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tbone.x += (bone.data.x - bone.x) * alpha;\n\t\t\t\t\tbone.y += (bone.data.y - bone.y) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet x = 0, y = 0;\n\t\tlet i = Timeline.search(frames, time, 3/*ENTRIES*/);\n\t\tlet curveType = this.curves[i / 3/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/:\n\t\t\t\tlet before = frames[i];\n\t\t\t\tx = frames[i + 1/*VALUE1*/];\n\t\t\t\ty = frames[i + 2/*VALUE2*/];\n\t\t\t\tlet t = (time - before) / (frames[i + 3/*ENTRIES*/] - before);\n\t\t\t\tx += (frames[i + 3/*ENTRIES*/ + 1/*VALUE1*/] - x) * t;\n\t\t\t\ty += (frames[i + 3/*ENTRIES*/ + 2/*VALUE2*/] - y) * t;\n\t\t\t\tbreak;\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tx = frames[i + 1/*VALUE1*/];\n\t\t\t\ty = frames[i + 2/*VALUE2*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tx = this.getBezierValue(time, i, 1/*VALUE1*/, curveType - 2/*BEZIER*/);\n\t\t\t\ty = this.getBezierValue(time, i, 2/*VALUE2*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t}\n\n\t\tswitch (blend) {\n\t\t\tcase MixBlend.setup:\n\t\t\t\tbone.x = bone.data.x + x * alpha;\n\t\t\t\tbone.y = bone.data.y + y * alpha;\n\t\t\t\tbreak;\n\t\t\tcase MixBlend.first:\n\t\t\tcase MixBlend.replace:\n\t\t\t\tbone.x += (bone.data.x + x - bone.x) * alpha;\n\t\t\t\tbone.y += (bone.data.y + y - bone.y) * alpha;\n\t\t\t\tbreak;\n\t\t\tcase MixBlend.add:\n\t\t\t\tbone.x += x * alpha;\n\t\t\t\tbone.y += y * alpha;\n\t\t}\n\t}\n}\n\n/** Changes a bone's local {@link Bone#x}. */\nexport class TranslateXTimeline extends CurveTimeline1 implements BoneTimeline {\n\tboneIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, Property.x + \"|\" + boneIndex);\n\t\tthis.boneIndex = boneIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet bone = skeleton.bones[this.boneIndex];\n\t\tif (!bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tbone.x = bone.data.x;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tbone.x += (bone.data.x - bone.x) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet x = this.getCurveValue(time);\n\t\tswitch (blend) {\n\t\t\tcase MixBlend.setup:\n\t\t\t\tbone.x = bone.data.x + x * alpha;\n\t\t\t\tbreak;\n\t\t\tcase MixBlend.first:\n\t\t\tcase MixBlend.replace:\n\t\t\t\tbone.x += (bone.data.x + x - bone.x) * alpha;\n\t\t\t\tbreak;\n\t\t\tcase MixBlend.add:\n\t\t\t\tbone.x += x * alpha;\n\t\t}\n\t}\n}\n\n/** Changes a bone's local {@link Bone#x}. */\nexport class TranslateYTimeline extends CurveTimeline1 implements BoneTimeline {\n\tboneIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, Property.y + \"|\" + boneIndex);\n\t\tthis.boneIndex = boneIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet bone = skeleton.bones[this.boneIndex];\n\t\tif (!bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tbone.y = bone.data.y;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tbone.y += (bone.data.y - bone.y) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet y = this.getCurveValue(time);\n\t\tswitch (blend) {\n\t\t\tcase MixBlend.setup:\n\t\t\t\tbone.y = bone.data.y + y * alpha;\n\t\t\t\tbreak;\n\t\t\tcase MixBlend.first:\n\t\t\tcase MixBlend.replace:\n\t\t\t\tbone.y += (bone.data.y + y - bone.y) * alpha;\n\t\t\t\tbreak;\n\t\t\tcase MixBlend.add:\n\t\t\t\tbone.y += y * alpha;\n\t\t}\n\t}\n}\n\n/** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}. */\nexport class ScaleTimeline extends CurveTimeline2 implements BoneTimeline {\n\tboneIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount,\n\t\t\tProperty.scaleX + \"|\" + boneIndex,\n\t\t\tProperty.scaleY + \"|\" + boneIndex\n\t\t);\n\t\tthis.boneIndex = boneIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet bone = skeleton.bones[this.boneIndex];\n\t\tif (!bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tbone.scaleX = bone.data.scaleX;\n\t\t\t\t\tbone.scaleY = bone.data.scaleY;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tbone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;\n\t\t\t\t\tbone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet x, y;\n\t\tlet i = Timeline.search(frames, time, 3/*ENTRIES*/);\n\t\tlet curveType = this.curves[i / 3/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/:\n\t\t\t\tlet before = frames[i];\n\t\t\t\tx = frames[i + 1/*VALUE1*/];\n\t\t\t\ty = frames[i + 2/*VALUE2*/];\n\t\t\t\tlet t = (time - before) / (frames[i + 3/*ENTRIES*/] - before);\n\t\t\t\tx += (frames[i + 3/*ENTRIES*/ + 1/*VALUE1*/] - x) * t;\n\t\t\t\ty += (frames[i + 3/*ENTRIES*/ + 2/*VALUE2*/] - y) * t;\n\t\t\t\tbreak;\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tx = frames[i + 1/*VALUE1*/];\n\t\t\t\ty = frames[i + 2/*VALUE2*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tx = this.getBezierValue(time, i, 1/*VALUE1*/, curveType - 2/*BEZIER*/);\n\t\t\t\ty = this.getBezierValue(time, i, 2/*VALUE2*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t}\n\t\tx *= bone.data.scaleX;\n\t\ty *= bone.data.scaleY;\n\n\t\tif (alpha == 1) {\n\t\t\tif (blend == MixBlend.add) {\n\t\t\t\tbone.scaleX += x - bone.data.scaleX;\n\t\t\t\tbone.scaleY += y - bone.data.scaleY;\n\t\t\t} else {\n\t\t\t\tbone.scaleX = x;\n\t\t\t\tbone.scaleY = y;\n\t\t\t}\n\t\t} else {\n\t\t\tlet bx = 0, by = 0;\n\t\t\tif (direction == MixDirection.mixOut) {\n\t\t\t\tswitch (blend) {\n\t\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\t\tbx = bone.data.scaleX;\n\t\t\t\t\t\tby = bone.data.scaleY;\n\t\t\t\t\t\tbone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n\t\t\t\t\t\tbone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tcase MixBlend.replace:\n\t\t\t\t\t\tbx = bone.scaleX;\n\t\t\t\t\t\tby = bone.scaleY;\n\t\t\t\t\t\tbone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n\t\t\t\t\t\tbone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MixBlend.add:\n\t\t\t\t\t\tbone.scaleX += (x - bone.data.scaleX) * alpha;\n\t\t\t\t\t\tbone.scaleY += (y - bone.data.scaleY) * alpha;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch (blend) {\n\t\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\t\tbx = Math.abs(bone.data.scaleX) * MathUtils.signum(x);\n\t\t\t\t\t\tby = Math.abs(bone.data.scaleY) * MathUtils.signum(y);\n\t\t\t\t\t\tbone.scaleX = bx + (x - bx) * alpha;\n\t\t\t\t\t\tbone.scaleY = by + (y - by) * alpha;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tcase MixBlend.replace:\n\t\t\t\t\t\tbx = Math.abs(bone.scaleX) * MathUtils.signum(x);\n\t\t\t\t\t\tby = Math.abs(bone.scaleY) * MathUtils.signum(y);\n\t\t\t\t\t\tbone.scaleX = bx + (x - bx) * alpha;\n\t\t\t\t\t\tbone.scaleY = by + (y - by) * alpha;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MixBlend.add:\n\t\t\t\t\t\tbone.scaleX += (x - bone.data.scaleX) * alpha;\n\t\t\t\t\t\tbone.scaleY += (y - bone.data.scaleY) * alpha;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}. */\nexport class ScaleXTimeline extends CurveTimeline1 implements BoneTimeline {\n\tboneIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, Property.scaleX + \"|\" + boneIndex);\n\t\tthis.boneIndex = boneIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet bone = skeleton.bones[this.boneIndex];\n\t\tif (!bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tbone.scaleX = bone.data.scaleX;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tbone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet x = this.getCurveValue(time) * bone.data.scaleX;\n\t\tif (alpha == 1) {\n\t\t\tif (blend == MixBlend.add)\n\t\t\t\tbone.scaleX += x - bone.data.scaleX;\n\t\t\telse\n\t\t\t\tbone.scaleX = x;\n\t\t} else {\n\t\t\t// Mixing out uses sign of setup or current pose, else use sign of key.\n\t\t\tlet bx = 0;\n\t\t\tif (direction == MixDirection.mixOut) {\n\t\t\t\tswitch (blend) {\n\t\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\t\tbx = bone.data.scaleX;\n\t\t\t\t\t\tbone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tcase MixBlend.replace:\n\t\t\t\t\t\tbx = bone.scaleX;\n\t\t\t\t\t\tbone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MixBlend.add:\n\t\t\t\t\t\tbone.scaleX += (x - bone.data.scaleX) * alpha;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch (blend) {\n\t\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\t\tbx = Math.abs(bone.data.scaleX) * MathUtils.signum(x);\n\t\t\t\t\t\tbone.scaleX = bx + (x - bx) * alpha;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tcase MixBlend.replace:\n\t\t\t\t\t\tbx = Math.abs(bone.scaleX) * MathUtils.signum(x);\n\t\t\t\t\t\tbone.scaleX = bx + (x - bx) * alpha;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MixBlend.add:\n\t\t\t\t\t\tbone.scaleX += (x - bone.data.scaleX) * alpha;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}. */\nexport class ScaleYTimeline extends CurveTimeline1 implements BoneTimeline {\n\tboneIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, Property.scaleY + \"|\" + boneIndex);\n\t\tthis.boneIndex = boneIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet bone = skeleton.bones[this.boneIndex];\n\t\tif (!bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tbone.scaleY = bone.data.scaleY;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tbone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet y = this.getCurveValue(time) * bone.data.scaleY;\n\t\tif (alpha == 1) {\n\t\t\tif (blend == MixBlend.add)\n\t\t\t\tbone.scaleY += y - bone.data.scaleY;\n\t\t\telse\n\t\t\t\tbone.scaleY = y;\n\t\t} else {\n\t\t\t// Mixing out uses sign of setup or current pose, else use sign of key.\n\t\t\tlet by = 0;\n\t\t\tif (direction == MixDirection.mixOut) {\n\t\t\t\tswitch (blend) {\n\t\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\t\tby = bone.data.scaleY;\n\t\t\t\t\t\tbone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tcase MixBlend.replace:\n\t\t\t\t\t\tby = bone.scaleY;\n\t\t\t\t\t\tbone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MixBlend.add:\n\t\t\t\t\t\tbone.scaleY += (y - bone.data.scaleY) * alpha;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch (blend) {\n\t\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\t\tby = Math.abs(bone.data.scaleY) * MathUtils.signum(y);\n\t\t\t\t\t\tbone.scaleY = by + (y - by) * alpha;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tcase MixBlend.replace:\n\t\t\t\t\t\tby = Math.abs(bone.scaleY) * MathUtils.signum(y);\n\t\t\t\t\t\tbone.scaleY = by + (y - by) * alpha;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MixBlend.add:\n\t\t\t\t\t\tbone.scaleY += (y - bone.data.scaleY) * alpha;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */\nexport class ShearTimeline extends CurveTimeline2 implements BoneTimeline {\n\tboneIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount,\n\t\t\tProperty.shearX + \"|\" + boneIndex,\n\t\t\tProperty.shearY + \"|\" + boneIndex\n\t\t);\n\t\tthis.boneIndex = boneIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet bone = skeleton.bones[this.boneIndex];\n\t\tif (!bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tbone.shearX = bone.data.shearX;\n\t\t\t\t\tbone.shearY = bone.data.shearY;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tbone.shearX += (bone.data.shearX - bone.shearX) * alpha;\n\t\t\t\t\tbone.shearY += (bone.data.shearY - bone.shearY) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet x = 0, y = 0;\n\t\tlet i = Timeline.search(frames, time, 3/*ENTRIES*/);\n\t\tlet curveType = this.curves[i / 3/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/:\n\t\t\t\tlet before = frames[i];\n\t\t\t\tx = frames[i + 1/*VALUE1*/];\n\t\t\t\ty = frames[i + 2/*VALUE2*/];\n\t\t\t\tlet t = (time - before) / (frames[i + 3/*ENTRIES*/] - before);\n\t\t\t\tx += (frames[i + 3/*ENTRIES*/ + 1/*VALUE1*/] - x) * t;\n\t\t\t\ty += (frames[i + 3/*ENTRIES*/ + 2/*VALUE2*/] - y) * t;\n\t\t\t\tbreak;\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tx = frames[i + 1/*VALUE1*/];\n\t\t\t\ty = frames[i + 2/*VALUE2*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tx = this.getBezierValue(time, i, 1/*VALUE1*/, curveType - 2/*BEZIER*/);\n\t\t\t\ty = this.getBezierValue(time, i, 2/*VALUE2*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t}\n\n\t\tswitch (blend) {\n\t\t\tcase MixBlend.setup:\n\t\t\t\tbone.shearX = bone.data.shearX + x * alpha;\n\t\t\t\tbone.shearY = bone.data.shearY + y * alpha;\n\t\t\t\tbreak;\n\t\t\tcase MixBlend.first:\n\t\t\tcase MixBlend.replace:\n\t\t\t\tbone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;\n\t\t\t\tbone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;\n\t\t\t\tbreak;\n\t\t\tcase MixBlend.add:\n\t\t\t\tbone.shearX += x * alpha;\n\t\t\t\tbone.shearY += y * alpha;\n\t\t}\n\t}\n}\n\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */\nexport class ShearXTimeline extends CurveTimeline1 implements BoneTimeline {\n\tboneIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, Property.shearX + \"|\" + boneIndex);\n\t\tthis.boneIndex = boneIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet bone = skeleton.bones[this.boneIndex];\n\t\tif (!bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tbone.shearX = bone.data.shearX;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tbone.shearX += (bone.data.shearX - bone.shearX) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet x = this.getCurveValue(time);\n\t\tswitch (blend) {\n\t\t\tcase MixBlend.setup:\n\t\t\t\tbone.shearX = bone.data.shearX + x * alpha;\n\t\t\t\tbreak;\n\t\t\tcase MixBlend.first:\n\t\t\tcase MixBlend.replace:\n\t\t\t\tbone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;\n\t\t\t\tbreak;\n\t\t\tcase MixBlend.add:\n\t\t\t\tbone.shearX += x * alpha;\n\t\t}\n\t}\n}\n\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */\nexport class ShearYTimeline extends CurveTimeline1 implements BoneTimeline {\n\tboneIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, Property.shearY + \"|\" + boneIndex);\n\t\tthis.boneIndex = boneIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet bone = skeleton.bones[this.boneIndex];\n\t\tif (!bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tbone.shearY = bone.data.shearY;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tbone.shearY += (bone.data.shearY - bone.shearY) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet y = this.getCurveValue(time);\n\t\tswitch (blend) {\n\t\t\tcase MixBlend.setup:\n\t\t\t\tbone.shearY = bone.data.shearY + y * alpha;\n\t\t\t\tbreak;\n\t\t\tcase MixBlend.first:\n\t\t\tcase MixBlend.replace:\n\t\t\t\tbone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;\n\t\t\t\tbreak;\n\t\t\tcase MixBlend.add:\n\t\t\t\tbone.shearY += y * alpha;\n\t\t}\n\t}\n}\n\n/** Changes a slot's {@link Slot#color}. */\nexport class RGBATimeline extends CurveTimeline implements SlotTimeline {\n\tslotIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, [\n\t\t\tProperty.rgb + \"|\" + slotIndex,\n\t\t\tProperty.alpha + \"|\" + slotIndex\n\t\t]);\n\t\tthis.slotIndex = slotIndex;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 5/*ENTRIES*/;\n\t}\n\n\t/** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */\n\tsetFrame (frame: number, time: number, r: number, g: number, b: number, a: number) {\n\t\tframe *= 5/*ENTRIES*/;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*R*/] = r;\n\t\tthis.frames[frame + 2/*G*/] = g;\n\t\tthis.frames[frame + 3/*B*/] = b;\n\t\tthis.frames[frame + 4/*A*/] = a;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet slot = skeleton.slots[this.slotIndex];\n\t\tif (!slot.bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tlet color = slot.color;\n\t\tif (time < frames[0]) {\n\t\t\tlet setup = slot.data.color;\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tcolor.setFromColor(setup);\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tcolor.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha,\n\t\t\t\t\t\t(setup.a - color.a) * alpha);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet r = 0, g = 0, b = 0, a = 0;\n\t\tlet i = Timeline.search(frames, time, 5/*ENTRIES*/);\n\t\tlet curveType = this.curves[i / 5/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/:\n\t\t\t\tlet before = frames[i];\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\ta = frames[i + 4/*A*/];\n\t\t\t\tlet t = (time - before) / (frames[i + 5/*ENTRIES*/] - before);\n\t\t\t\tr += (frames[i + 5/*ENTRIES*/ + 1/*R*/] - r) * t;\n\t\t\t\tg += (frames[i + 5/*ENTRIES*/ + 2/*G*/] - g) * t;\n\t\t\t\tb += (frames[i + 5/*ENTRIES*/ + 3/*B*/] - b) * t;\n\t\t\t\ta += (frames[i + 5/*ENTRIES*/ + 4/*A*/] - a) * t;\n\t\t\t\tbreak;\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\ta = frames[i + 4/*A*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tr = this.getBezierValue(time, i, 1/*R*/, curveType - 2/*BEZIER*/);\n\t\t\t\tg = this.getBezierValue(time, i, 2/*G*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t\t\tb = this.getBezierValue(time, i, 3/*B*/, curveType + 18/*BEZIER_SIZE*/ * 2 - 2/*BEZIER*/);\n\t\t\t\ta = this.getBezierValue(time, i, 4/*A*/, curveType + 18/*BEZIER_SIZE*/ * 3 - 2/*BEZIER*/);\n\t\t}\n\t\tif (alpha == 1)\n\t\t\tcolor.set(r, g, b, a);\n\t\telse {\n\t\t\tif (blend == MixBlend.setup) color.setFromColor(slot.data.color);\n\t\t\tcolor.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha);\n\t\t}\n\t}\n}\n\n/** Changes a slot's {@link Slot#color}. */\nexport class RGBTimeline extends CurveTimeline implements SlotTimeline {\n\tslotIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, [\n\t\t\tProperty.rgb + \"|\" + slotIndex\n\t\t]);\n\t\tthis.slotIndex = slotIndex;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 4/*ENTRIES*/;\n\t}\n\n\t/** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */\n\tsetFrame (frame: number, time: number, r: number, g: number, b: number) {\n\t\tframe <<= 2;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*R*/] = r;\n\t\tthis.frames[frame + 2/*G*/] = g;\n\t\tthis.frames[frame + 3/*B*/] = b;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet slot = skeleton.slots[this.slotIndex];\n\t\tif (!slot.bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tlet color = slot.color;\n\t\tif (time < frames[0]) {\n\t\t\tlet setup = slot.data.color;\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tcolor.r = setup.r;\n\t\t\t\t\tcolor.g = setup.g;\n\t\t\t\t\tcolor.b = setup.b;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tcolor.r += (setup.r - color.r) * alpha;\n\t\t\t\t\tcolor.g += (setup.g - color.g) * alpha;\n\t\t\t\t\tcolor.b += (setup.b - color.b) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet r = 0, g = 0, b = 0;\n\t\tlet i = Timeline.search(frames, time, 4/*ENTRIES*/);\n\t\tlet curveType = this.curves[i >> 2];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/:\n\t\t\t\tlet before = frames[i];\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\tlet t = (time - before) / (frames[i + 4/*ENTRIES*/] - before);\n\t\t\t\tr += (frames[i + 4/*ENTRIES*/ + 1/*R*/] - r) * t;\n\t\t\t\tg += (frames[i + 4/*ENTRIES*/ + 2/*G*/] - g) * t;\n\t\t\t\tb += (frames[i + 4/*ENTRIES*/ + 3/*B*/] - b) * t;\n\t\t\t\tbreak;\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tr = this.getBezierValue(time, i, 1/*R*/, curveType - 2/*BEZIER*/);\n\t\t\t\tg = this.getBezierValue(time, i, 2/*G*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t\t\tb = this.getBezierValue(time, i, 3/*B*/, curveType + 18/*BEZIER_SIZE*/ * 2 - 2/*BEZIER*/);\n\t\t}\n\t\tif (alpha == 1) {\n\t\t\tcolor.r = r;\n\t\t\tcolor.g = g;\n\t\t\tcolor.b = b;\n\t\t} else {\n\t\t\tif (blend == MixBlend.setup) {\n\t\t\t\tlet setup = slot.data.color;\n\t\t\t\tcolor.r = setup.r;\n\t\t\t\tcolor.g = setup.g;\n\t\t\t\tcolor.b = setup.b;\n\t\t\t}\n\t\t\tcolor.r += (r - color.r) * alpha;\n\t\t\tcolor.g += (g - color.g) * alpha;\n\t\t\tcolor.b += (b - color.b) * alpha;\n\t\t}\n\t}\n}\n\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */\nexport class AlphaTimeline extends CurveTimeline1 implements SlotTimeline {\n\tslotIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, Property.alpha + \"|\" + slotIndex);\n\t\tthis.slotIndex = slotIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet slot = skeleton.slots[this.slotIndex];\n\t\tif (!slot.bone.active) return;\n\n\t\tlet color = slot.color;\n\t\tif (time < this.frames[0]) { // Time is before first frame.\n\t\t\tlet setup = slot.data.color;\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tcolor.a = setup.a;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tcolor.a += (setup.a - color.a) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet a = this.getCurveValue(time);\n\t\tif (alpha == 1)\n\t\t\tcolor.a = a;\n\t\telse {\n\t\t\tif (blend == MixBlend.setup) color.a = slot.data.color.a;\n\t\t\tcolor.a += (a - color.a) * alpha;\n\t\t}\n\t}\n}\n\n/** Changes a slot's {@link Slot#color} and {@link Slot#darkColor} for two color tinting. */\nexport class RGBA2Timeline extends CurveTimeline implements SlotTimeline {\n\tslotIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, [\n\t\t\tProperty.rgb + \"|\" + slotIndex,\n\t\t\tProperty.alpha + \"|\" + slotIndex,\n\t\t\tProperty.rgb2 + \"|\" + slotIndex\n\t\t]);\n\t\tthis.slotIndex = slotIndex;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 8/*ENTRIES*/;\n\t}\n\n\t/** Sets the time in seconds, light, and dark colors for the specified key frame. */\n\tsetFrame (frame: number, time: number, r: number, g: number, b: number, a: number, r2: number, g2: number, b2: number) {\n\t\tframe <<= 3;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*R*/] = r;\n\t\tthis.frames[frame + 2/*G*/] = g;\n\t\tthis.frames[frame + 3/*B*/] = b;\n\t\tthis.frames[frame + 4/*A*/] = a;\n\t\tthis.frames[frame + 5/*R2*/] = r2;\n\t\tthis.frames[frame + 6/*G2*/] = g2;\n\t\tthis.frames[frame + 7/*B2*/] = b2;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet slot = skeleton.slots[this.slotIndex];\n\t\tif (!slot.bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tlet light = slot.color, dark = slot.darkColor!;\n\t\tif (time < frames[0]) {\n\t\t\tlet setupLight = slot.data.color, setupDark = slot.data.darkColor!;\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tlight.setFromColor(setupLight);\n\t\t\t\t\tdark.r = setupDark.r;\n\t\t\t\t\tdark.g = setupDark.g;\n\t\t\t\t\tdark.b = setupDark.b;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tlight.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha,\n\t\t\t\t\t\t(setupLight.a - light.a) * alpha);\n\t\t\t\t\tdark.r += (setupDark.r - dark.r) * alpha;\n\t\t\t\t\tdark.g += (setupDark.g - dark.g) * alpha;\n\t\t\t\t\tdark.b += (setupDark.b - dark.b) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0;\n\t\tlet i = Timeline.search(frames, time, 8/*ENTRIES*/);\n\t\tlet curveType = this.curves[i >> 3];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/:\n\t\t\t\tlet before = frames[i];\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\ta = frames[i + 4/*A*/];\n\t\t\t\tr2 = frames[i + 5/*R2*/];\n\t\t\t\tg2 = frames[i + 6/*G2*/];\n\t\t\t\tb2 = frames[i + 7/*B2*/];\n\t\t\t\tlet t = (time - before) / (frames[i + 8/*ENTRIES*/] - before);\n\t\t\t\tr += (frames[i + 8/*ENTRIES*/ + 1/*R*/] - r) * t;\n\t\t\t\tg += (frames[i + 8/*ENTRIES*/ + 2/*G*/] - g) * t;\n\t\t\t\tb += (frames[i + 8/*ENTRIES*/ + 3/*B*/] - b) * t;\n\t\t\t\ta += (frames[i + 8/*ENTRIES*/ + 4/*A*/] - a) * t;\n\t\t\t\tr2 += (frames[i + 8/*ENTRIES*/ + 5/*R2*/] - r2) * t;\n\t\t\t\tg2 += (frames[i + 8/*ENTRIES*/ + 6/*G2*/] - g2) * t;\n\t\t\t\tb2 += (frames[i + 8/*ENTRIES*/ + 7/*B2*/] - b2) * t;\n\t\t\t\tbreak;\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\ta = frames[i + 4/*A*/];\n\t\t\t\tr2 = frames[i + 5/*R2*/];\n\t\t\t\tg2 = frames[i + 6/*G2*/];\n\t\t\t\tb2 = frames[i + 7/*B2*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tr = this.getBezierValue(time, i, 1/*R*/, curveType - 2/*BEZIER*/);\n\t\t\t\tg = this.getBezierValue(time, i, 2/*G*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t\t\tb = this.getBezierValue(time, i, 3/*B*/, curveType + 18/*BEZIER_SIZE*/ * 2 - 2/*BEZIER*/);\n\t\t\t\ta = this.getBezierValue(time, i, 4/*A*/, curveType + 18/*BEZIER_SIZE*/ * 3 - 2/*BEZIER*/);\n\t\t\t\tr2 = this.getBezierValue(time, i, 5/*R2*/, curveType + 18/*BEZIER_SIZE*/ * 4 - 2/*BEZIER*/);\n\t\t\t\tg2 = this.getBezierValue(time, i, 6/*G2*/, curveType + 18/*BEZIER_SIZE*/ * 5 - 2/*BEZIER*/);\n\t\t\t\tb2 = this.getBezierValue(time, i, 7/*B2*/, curveType + 18/*BEZIER_SIZE*/ * 6 - 2/*BEZIER*/);\n\t\t}\n\n\t\tif (alpha == 1) {\n\t\t\tlight.set(r, g, b, a);\n\t\t\tdark.r = r2;\n\t\t\tdark.g = g2;\n\t\t\tdark.b = b2;\n\t\t} else {\n\t\t\tif (blend == MixBlend.setup) {\n\t\t\t\tlight.setFromColor(slot.data.color);\n\t\t\t\tlet setupDark = slot.data.darkColor!;\n\t\t\t\tdark.r = setupDark.r;\n\t\t\t\tdark.g = setupDark.g;\n\t\t\t\tdark.b = setupDark.b;\n\t\t\t}\n\t\t\tlight.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);\n\t\t\tdark.r += (r2 - dark.r) * alpha;\n\t\t\tdark.g += (g2 - dark.g) * alpha;\n\t\t\tdark.b += (b2 - dark.b) * alpha;\n\t\t}\n\t}\n}\n\n/** Changes a slot's {@link Slot#color} and {@link Slot#darkColor} for two color tinting. */\nexport class RGB2Timeline extends CurveTimeline implements SlotTimeline {\n\tslotIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, [\n\t\t\tProperty.rgb + \"|\" + slotIndex,\n\t\t\tProperty.rgb2 + \"|\" + slotIndex\n\t\t]);\n\t\tthis.slotIndex = slotIndex;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 7/*ENTRIES*/;\n\t}\n\n\t/** Sets the time in seconds, light, and dark colors for the specified key frame. */\n\tsetFrame (frame: number, time: number, r: number, g: number, b: number, r2: number, g2: number, b2: number) {\n\t\tframe *= 7/*ENTRIES*/;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*R*/] = r;\n\t\tthis.frames[frame + 2/*G*/] = g;\n\t\tthis.frames[frame + 3/*B*/] = b;\n\t\tthis.frames[frame + 4/*R2*/] = r2;\n\t\tthis.frames[frame + 5/*G2*/] = g2;\n\t\tthis.frames[frame + 6/*B2*/] = b2;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet slot = skeleton.slots[this.slotIndex];\n\t\tif (!slot.bone.active) return;\n\n\t\tlet frames = this.frames;\n\t\tlet light = slot.color, dark = slot.darkColor!;\n\t\tif (time < frames[0]) {\n\t\t\tlet setupLight = slot.data.color, setupDark = slot.data.darkColor!;\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tlight.r = setupLight.r;\n\t\t\t\t\tlight.g = setupLight.g;\n\t\t\t\t\tlight.b = setupLight.b;\n\t\t\t\t\tdark.r = setupDark.r;\n\t\t\t\t\tdark.g = setupDark.g;\n\t\t\t\t\tdark.b = setupDark.b;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tlight.r += (setupLight.r - light.r) * alpha;\n\t\t\t\t\tlight.g += (setupLight.g - light.g) * alpha;\n\t\t\t\t\tlight.b += (setupLight.b - light.b) * alpha;\n\t\t\t\t\tdark.r += (setupDark.r - dark.r) * alpha;\n\t\t\t\t\tdark.g += (setupDark.g - dark.g) * alpha;\n\t\t\t\t\tdark.b += (setupDark.b - dark.b) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0;\n\t\tlet i = Timeline.search(frames, time, 7/*ENTRIES*/);\n\t\tlet curveType = this.curves[i / 7/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/:\n\t\t\t\tlet before = frames[i];\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\tr2 = frames[i + 4/*R2*/];\n\t\t\t\tg2 = frames[i + 5/*G2*/];\n\t\t\t\tb2 = frames[i + 6/*B2*/];\n\t\t\t\tlet t = (time - before) / (frames[i + 7/*ENTRIES*/] - before);\n\t\t\t\tr += (frames[i + 7/*ENTRIES*/ + 1/*R*/] - r) * t;\n\t\t\t\tg += (frames[i + 7/*ENTRIES*/ + 2/*G*/] - g) * t;\n\t\t\t\tb += (frames[i + 7/*ENTRIES*/ + 3/*B*/] - b) * t;\n\t\t\t\tr2 += (frames[i + 7/*ENTRIES*/ + 4/*R2*/] - r2) * t;\n\t\t\t\tg2 += (frames[i + 7/*ENTRIES*/ + 5/*G2*/] - g2) * t;\n\t\t\t\tb2 += (frames[i + 7/*ENTRIES*/ + 6/*B2*/] - b2) * t;\n\t\t\t\tbreak;\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tr = frames[i + 1/*R*/];\n\t\t\t\tg = frames[i + 2/*G*/];\n\t\t\t\tb = frames[i + 3/*B*/];\n\t\t\t\tr2 = frames[i + 4/*R2*/];\n\t\t\t\tg2 = frames[i + 5/*G2*/];\n\t\t\t\tb2 = frames[i + 6/*B2*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tr = this.getBezierValue(time, i, 1/*R*/, curveType - 2/*BEZIER*/);\n\t\t\t\tg = this.getBezierValue(time, i, 2/*G*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t\t\tb = this.getBezierValue(time, i, 3/*B*/, curveType + 18/*BEZIER_SIZE*/ * 2 - 2/*BEZIER*/);\n\t\t\t\tr2 = this.getBezierValue(time, i, 4/*R2*/, curveType + 18/*BEZIER_SIZE*/ * 3 - 2/*BEZIER*/);\n\t\t\t\tg2 = this.getBezierValue(time, i, 5/*G2*/, curveType + 18/*BEZIER_SIZE*/ * 4 - 2/*BEZIER*/);\n\t\t\t\tb2 = this.getBezierValue(time, i, 6/*B2*/, curveType + 18/*BEZIER_SIZE*/ * 5 - 2/*BEZIER*/);\n\t\t}\n\n\t\tif (alpha == 1) {\n\t\t\tlight.r = r;\n\t\t\tlight.g = g;\n\t\t\tlight.b = b;\n\t\t\tdark.r = r2;\n\t\t\tdark.g = g2;\n\t\t\tdark.b = b2;\n\t\t} else {\n\t\t\tif (blend == MixBlend.setup) {\n\t\t\t\tlet setupLight = slot.data.color, setupDark = slot.data.darkColor!;\n\t\t\t\tlight.r = setupLight.r;\n\t\t\t\tlight.g = setupLight.g;\n\t\t\t\tlight.b = setupLight.b;\n\t\t\t\tdark.r = setupDark.r;\n\t\t\t\tdark.g = setupDark.g;\n\t\t\t\tdark.b = setupDark.b;\n\t\t\t}\n\t\t\tlight.r += (r - light.r) * alpha;\n\t\t\tlight.g += (g - light.g) * alpha;\n\t\t\tlight.b += (b - light.b) * alpha;\n\t\t\tdark.r += (r2 - dark.r) * alpha;\n\t\t\tdark.g += (g2 - dark.g) * alpha;\n\t\t\tdark.b += (b2 - dark.b) * alpha;\n\t\t}\n\t}\n}\n\n/** Changes a slot's {@link Slot#attachment}. */\nexport class AttachmentTimeline extends Timeline implements SlotTimeline {\n\tslotIndex = 0;\n\n\t/** The attachment name for each key frame. May contain null values to clear the attachment. */\n\tattachmentNames: Array<string | null>;\n\n\tconstructor (frameCount: number, slotIndex: number) {\n\t\tsuper(frameCount, [\n\t\t\tProperty.attachment + \"|\" + slotIndex\n\t\t]);\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.attachmentNames = new Array<string>(frameCount);\n\t}\n\n\tgetFrameCount () {\n\t\treturn this.frames.length;\n\t}\n\n\t/** Sets the time in seconds and the attachment name for the specified key frame. */\n\tsetFrame (frame: number, time: number, attachmentName: string | null) {\n\t\tthis.frames[frame] = time;\n\t\tthis.attachmentNames[frame] = attachmentName;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet slot = skeleton.slots[this.slotIndex];\n\t\tif (!slot.bone.active) return;\n\n\t\tif (direction == MixDirection.mixOut) {\n\t\t\tif (blend == MixBlend.setup) this.setAttachment(skeleton, slot, slot.data.attachmentName);\n\t\t\treturn;\n\t\t}\n\n\t\tif (time < this.frames[0]) {\n\t\t\tif (blend == MixBlend.setup || blend == MixBlend.first) this.setAttachment(skeleton, slot, slot.data.attachmentName);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.setAttachment(skeleton, slot, this.attachmentNames[Timeline.search1(this.frames, time)]);\n\t}\n\n\tsetAttachment (skeleton: Skeleton, slot: Slot, attachmentName: string | null) {\n\t\tslot.setAttachment(!attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName));\n\t}\n}\n\n/** Changes a slot's {@link Slot#deform} to deform a {@link VertexAttachment}. */\nexport class DeformTimeline extends CurveTimeline implements SlotTimeline {\n\tslotIndex = 0;\n\n\t/** The attachment that will be deformed. */\n\tattachment: VertexAttachment;\n\n\t/** The vertices for each key frame. */\n\tvertices: Array<NumberArrayLike>;\n\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number, attachment: VertexAttachment) {\n\t\tsuper(frameCount, bezierCount, [\n\t\t\tProperty.deform + \"|\" + slotIndex + \"|\" + attachment.id\n\t\t]);\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.attachment = attachment;\n\t\tthis.vertices = new Array<NumberArrayLike>(frameCount);\n\t}\n\n\tgetFrameCount () {\n\t\treturn this.frames.length;\n\t}\n\n\t/** Sets the time in seconds and the vertices for the specified key frame.\n\t * @param vertices Vertex positions for an unweighted VertexAttachment, or deform offsets if it has weights. */\n\tsetFrame (frame: number, time: number, vertices: NumberArrayLike) {\n\t\tthis.frames[frame] = time;\n\t\tthis.vertices[frame] = vertices;\n\t}\n\n\t/** @param value1 Ignored (0 is used for a deform timeline).\n\t * @param value2 Ignored (1 is used for a deform timeline). */\n\tsetBezier (bezier: number, frame: number, value: number, time1: number, value1: number, cx1: number, cy1: number, cx2: number,\n\t\tcy2: number, time2: number, value2: number) {\n\t\tlet curves = this.curves;\n\t\tlet i = this.getFrameCount() + bezier * 18/*BEZIER_SIZE*/;\n\t\tif (value == 0) curves[frame] = 2/*BEZIER*/ + i;\n\t\tlet tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = cy2 * 0.03 - cy1 * 0.06;\n\t\tlet dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006, dddy = (cy1 - cy2 + 0.33333333) * 0.018;\n\t\tlet ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy;\n\t\tlet dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = cy1 * 0.3 + tmpy + dddy * 0.16666667;\n\t\tlet x = time1 + dx, y = dy;\n\t\tfor (let n = i + 18/*BEZIER_SIZE*/; i < n; i += 2) {\n\t\t\tcurves[i] = x;\n\t\t\tcurves[i + 1] = y;\n\t\t\tdx += ddx;\n\t\t\tdy += ddy;\n\t\t\tddx += dddx;\n\t\t\tddy += dddy;\n\t\t\tx += dx;\n\t\t\ty += dy;\n\t\t}\n\t}\n\n\tgetCurvePercent (time: number, frame: number) {\n\t\tlet curves = this.curves;\n\t\tlet i = curves[frame];\n\t\tswitch (i) {\n\t\t\tcase 0/*LINEAR*/:\n\t\t\t\tlet x = this.frames[frame];\n\t\t\t\treturn (time - x) / (this.frames[frame + this.getFrameEntries()] - x);\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\treturn 0;\n\t\t}\n\t\ti -= 2/*BEZIER*/;\n\t\tif (curves[i] > time) {\n\t\t\tlet x = this.frames[frame];\n\t\t\treturn curves[i + 1] * (time - x) / (curves[i] - x);\n\t\t}\n\t\tlet n = i + 18/*BEZIER_SIZE*/;\n\t\tfor (i += 2; i < n; i += 2) {\n\t\t\tif (curves[i] >= time) {\n\t\t\t\tlet x = curves[i - 2], y = curves[i - 1];\n\t\t\t\treturn y + (time - x) / (curves[i] - x) * (curves[i + 1] - y);\n\t\t\t}\n\t\t}\n\t\tlet x = curves[n - 2], y = curves[n - 1];\n\t\treturn y + (1 - y) * (time - x) / (this.frames[frame + this.getFrameEntries()] - x);\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet slot: Slot = skeleton.slots[this.slotIndex];\n\t\tif (!slot.bone.active) return;\n\t\tlet slotAttachment: Attachment | null = slot.getAttachment();\n\t\tif (!slotAttachment) return;\n\t\tif (!(slotAttachment instanceof VertexAttachment) || (<VertexAttachment>slotAttachment).timelineAttachment != this.attachment) return;\n\n\t\tlet deform: Array<number> = slot.deform;\n\t\tif (deform.length == 0) blend = MixBlend.setup;\n\n\t\tlet vertices = this.vertices;\n\t\tlet vertexCount = vertices[0].length;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tdeform.length = 0;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tif (alpha == 1) {\n\t\t\t\t\t\tdeform.length = 0;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tdeform.length = vertexCount;\n\t\t\t\t\tlet vertexAttachment = <VertexAttachment>slotAttachment;\n\t\t\t\t\tif (!vertexAttachment.bones) {\n\t\t\t\t\t\t// Unweighted vertex positions.\n\t\t\t\t\t\tlet setupVertices = vertexAttachment.vertices;\n\t\t\t\t\t\tfor (var i = 0; i < vertexCount; i++)\n\t\t\t\t\t\t\tdeform[i] += (setupVertices[i] - deform[i]) * alpha;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Weighted deform offsets.\n\t\t\t\t\t\talpha = 1 - alpha;\n\t\t\t\t\t\tfor (var i = 0; i < vertexCount; i++)\n\t\t\t\t\t\t\tdeform[i] *= alpha;\n\t\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tdeform.length = vertexCount;\n\t\tif (time >= frames[frames.length - 1]) { // Time is after last frame.\n\t\t\tlet lastVertices = vertices[frames.length - 1];\n\t\t\tif (alpha == 1) {\n\t\t\t\tif (blend == MixBlend.add) {\n\t\t\t\t\tlet vertexAttachment = slotAttachment as VertexAttachment;\n\t\t\t\t\tif (!vertexAttachment.bones) {\n\t\t\t\t\t\t// Unweighted vertex positions, with alpha.\n\t\t\t\t\t\tlet setupVertices = vertexAttachment.vertices;\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\t\tdeform[i] += lastVertices[i] - setupVertices[i];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Weighted deform offsets, with alpha.\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\t\tdeform[i] += lastVertices[i];\n\t\t\t\t\t}\n\t\t\t\t} else\n\t\t\t\t\tUtils.arrayCopy(lastVertices, 0, deform, 0, vertexCount);\n\t\t\t} else {\n\t\t\t\tswitch (blend) {\n\t\t\t\t\tcase MixBlend.setup: {\n\t\t\t\t\t\tlet vertexAttachment = slotAttachment as VertexAttachment;\n\t\t\t\t\t\tif (!vertexAttachment.bones) {\n\t\t\t\t\t\t\t// Unweighted vertex positions, with alpha.\n\t\t\t\t\t\t\tlet setupVertices = vertexAttachment.vertices;\n\t\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\t\t\tlet setup = setupVertices[i];\n\t\t\t\t\t\t\t\tdeform[i] = setup + (lastVertices[i] - setup) * alpha;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Weighted deform offsets, with alpha.\n\t\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\t\t\tdeform[i] = lastVertices[i] * alpha;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tcase MixBlend.replace:\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\t\tdeform[i] += (lastVertices[i] - deform[i]) * alpha;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase MixBlend.add:\n\t\t\t\t\t\tlet vertexAttachment = slotAttachment as VertexAttachment;\n\t\t\t\t\t\tif (!vertexAttachment.bones) {\n\t\t\t\t\t\t\t// Unweighted vertex positions, with alpha.\n\t\t\t\t\t\t\tlet setupVertices = vertexAttachment.vertices;\n\t\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\t\t\tdeform[i] += (lastVertices[i] - setupVertices[i]) * alpha;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Weighted deform offsets, with alpha.\n\t\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\t\t\tdeform[i] += lastVertices[i] * alpha;\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// Interpolate between the previous frame and the current frame.\n\t\tlet frame = Timeline.search1(frames, time);\n\t\tlet percent = this.getCurvePercent(time, frame);\n\t\tlet prevVertices = vertices[frame];\n\t\tlet nextVertices = vertices[frame + 1];\n\n\t\tif (alpha == 1) {\n\t\t\tif (blend == MixBlend.add) {\n\t\t\t\tlet vertexAttachment = slotAttachment as VertexAttachment;\n\t\t\t\tif (!vertexAttachment.bones) {\n\t\t\t\t\t// Unweighted vertex positions, with alpha.\n\t\t\t\t\tlet setupVertices = vertexAttachment.vertices;\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tlet prev = prevVertices[i];\n\t\t\t\t\t\tdeform[i] += prev + (nextVertices[i] - prev) * percent - setupVertices[i];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Weighted deform offsets, with alpha.\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tlet prev = prevVertices[i];\n\t\t\t\t\t\tdeform[i] += prev + (nextVertices[i] - prev) * percent;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\tlet prev = prevVertices[i];\n\t\t\t\t\tdeform[i] = prev + (nextVertices[i] - prev) * percent;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup: {\n\t\t\t\t\tlet vertexAttachment = slotAttachment as VertexAttachment;\n\t\t\t\t\tif (!vertexAttachment.bones) {\n\t\t\t\t\t\t// Unweighted vertex positions, with alpha.\n\t\t\t\t\t\tlet setupVertices = vertexAttachment.vertices;\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\t\tlet prev = prevVertices[i], setup = setupVertices[i];\n\t\t\t\t\t\t\tdeform[i] = setup + (prev + (nextVertices[i] - prev) * percent - setup) * alpha;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Weighted deform offsets, with alpha.\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\t\tlet prev = prevVertices[i];\n\t\t\t\t\t\t\tdeform[i] = (prev + (nextVertices[i] - prev) * percent) * alpha;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase MixBlend.first:\n\t\t\t\tcase MixBlend.replace:\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tlet prev = prevVertices[i];\n\t\t\t\t\t\tdeform[i] += (prev + (nextVertices[i] - prev) * percent - deform[i]) * alpha;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase MixBlend.add:\n\t\t\t\t\tlet vertexAttachment = slotAttachment as VertexAttachment;\n\t\t\t\t\tif (!vertexAttachment.bones) {\n\t\t\t\t\t\t// Unweighted vertex positions, with alpha.\n\t\t\t\t\t\tlet setupVertices = vertexAttachment.vertices;\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\t\tlet prev = prevVertices[i];\n\t\t\t\t\t\t\tdeform[i] += (prev + (nextVertices[i] - prev) * percent - setupVertices[i]) * alpha;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Weighted deform offsets, with alpha.\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\t\tlet prev = prevVertices[i];\n\t\t\t\t\t\t\tdeform[i] += (prev + (nextVertices[i] - prev) * percent) * alpha;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Fires an {@link Event} when specific animation times are reached. */\nexport class EventTimeline extends Timeline {\n\tstatic propertyIds = [\"\" + Property.event];\n\n\t/** The event for each key frame. */\n\tevents: Array<Event>;\n\n\tconstructor (frameCount: number) {\n\t\tsuper(frameCount, EventTimeline.propertyIds);\n\n\t\tthis.events = new Array<Event>(frameCount);\n\t}\n\n\tgetFrameCount () {\n\t\treturn this.frames.length;\n\t}\n\n\t/** Sets the time in seconds and the event for the specified key frame. */\n\tsetFrame (frame: number, event: Event) {\n\t\tthis.frames[frame] = event.time;\n\t\tthis.events[frame] = event;\n\t}\n\n\t/** Fires events for frames > `lastTime` and <= `time`. */\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tif (!firedEvents) return;\n\n\t\tlet frames = this.frames;\n\t\tlet frameCount = this.frames.length;\n\n\t\tif (lastTime > time) { // Fire events after last time for looped animations.\n\t\t\tthis.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction);\n\t\t\tlastTime = -1;\n\t\t} else if (lastTime >= frames[frameCount - 1]) // Last time is after last frame.\n\t\t\treturn;\n\t\tif (time < frames[0]) return; // Time is before first frame.\n\n\t\tlet i = 0;\n\t\tif (lastTime < frames[0])\n\t\t\ti = 0;\n\t\telse {\n\t\t\ti = Timeline.search1(frames, lastTime) + 1;\n\t\t\tlet frameTime = frames[i];\n\t\t\twhile (i > 0) { // Fire multiple events with the same frame.\n\t\t\t\tif (frames[i - 1] != frameTime) break;\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\t\tfor (; i < frameCount && time >= frames[i]; i++)\n\t\t\tfiredEvents.push(this.events[i]);\n\t}\n}\n\n/** Changes a skeleton's {@link Skeleton#drawOrder}. */\nexport class DrawOrderTimeline extends Timeline {\n\tstatic propertyIds = [\"\" + Property.drawOrder];\n\n\t/** The draw order for each key frame. See {@link #setFrame(int, float, int[])}. */\n\tdrawOrders: Array<Array<number> | null>;\n\n\tconstructor (frameCount: number) {\n\t\tsuper(frameCount, DrawOrderTimeline.propertyIds);\n\t\tthis.drawOrders = new Array<Array<number> | null>(frameCount);\n\t}\n\n\tgetFrameCount () {\n\t\treturn this.frames.length;\n\t}\n\n\t/** Sets the time in seconds and the draw order for the specified key frame.\n\t * @param drawOrder For each slot in {@link Skeleton#slots}, the index of the new draw order. May be null to use setup pose\n\t *           draw order. */\n\tsetFrame (frame: number, time: number, drawOrder: Array<number> | null) {\n\t\tthis.frames[frame] = time;\n\t\tthis.drawOrders[frame] = drawOrder;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tif (direction == MixDirection.mixOut) {\n\t\t\tif (blend == MixBlend.setup) Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n\t\t\treturn;\n\t\t}\n\n\t\tif (time < this.frames[0]) {\n\t\t\tif (blend == MixBlend.setup || blend == MixBlend.first) Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n\t\t\treturn;\n\t\t}\n\n\t\tlet idx = Timeline.search1(this.frames, time);\n\t\tlet drawOrderToSetupIndex = this.drawOrders[idx];\n\t\tif (!drawOrderToSetupIndex)\n\t\t\tUtils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n\t\telse {\n\t\t\tlet drawOrder: Array<Slot> = skeleton.drawOrder;\n\t\t\tlet slots: Array<Slot> = skeleton.slots;\n\t\t\tfor (let i = 0, n = drawOrderToSetupIndex.length; i < n; i++)\n\t\t\t\tdrawOrder[i] = slots[drawOrderToSetupIndex[i]];\n\t\t}\n\t}\n}\n\n/** Changes an IK constraint's {@link IkConstraint#mix}, {@link IkConstraint#softness},\n * {@link IkConstraint#bendDirection}, {@link IkConstraint#stretch}, and {@link IkConstraint#compress}. */\nexport class IkConstraintTimeline extends CurveTimeline {\n\t/** The index of the IK constraint slot in {@link Skeleton#ikConstraints} that will be changed. */\n\tikConstraintIndex: number = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, ikConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, [\n\t\t\tProperty.ikConstraint + \"|\" + ikConstraintIndex\n\t\t]);\n\t\tthis.ikConstraintIndex = ikConstraintIndex;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 6/*ENTRIES*/;\n\t}\n\n\t/** Sets the time in seconds, mix, softness, bend direction, compress, and stretch for the specified key frame. */\n\tsetFrame (frame: number, time: number, mix: number, softness: number, bendDirection: number, compress: boolean, stretch: boolean) {\n\t\tframe *= 6/*ENTRIES*/;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*MIX*/] = mix;\n\t\tthis.frames[frame + 2/*SOFTNESS*/] = softness;\n\t\tthis.frames[frame + 3/*BEND_DIRECTION*/] = bendDirection;\n\t\tthis.frames[frame + 4/*COMPRESS*/] = compress ? 1 : 0;\n\t\tthis.frames[frame + 5/*STRETCH*/] = stretch ? 1 : 0;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet constraint: IkConstraint = skeleton.ikConstraints[this.ikConstraintIndex];\n\t\tif (!constraint.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tconstraint.mix = constraint.data.mix;\n\t\t\t\t\tconstraint.softness = constraint.data.softness;\n\t\t\t\t\tconstraint.bendDirection = constraint.data.bendDirection;\n\t\t\t\t\tconstraint.compress = constraint.data.compress;\n\t\t\t\t\tconstraint.stretch = constraint.data.stretch;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tconstraint.mix += (constraint.data.mix - constraint.mix) * alpha;\n\t\t\t\t\tconstraint.softness += (constraint.data.softness - constraint.softness) * alpha;\n\t\t\t\t\tconstraint.bendDirection = constraint.data.bendDirection;\n\t\t\t\t\tconstraint.compress = constraint.data.compress;\n\t\t\t\t\tconstraint.stretch = constraint.data.stretch;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet mix = 0, softness = 0;\n\t\tlet i = Timeline.search(frames, time, 6/*ENTRIES*/)\n\t\tlet curveType = this.curves[i / 6/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/:\n\t\t\t\tlet before = frames[i];\n\t\t\t\tmix = frames[i + 1/*MIX*/];\n\t\t\t\tsoftness = frames[i + 2/*SOFTNESS*/];\n\t\t\t\tlet t = (time - before) / (frames[i + 6/*ENTRIES*/] - before);\n\t\t\t\tmix += (frames[i + 6/*ENTRIES*/ + 1/*MIX*/] - mix) * t;\n\t\t\t\tsoftness += (frames[i + 6/*ENTRIES*/ + 2/*SOFTNESS*/] - softness) * t;\n\t\t\t\tbreak;\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\tmix = frames[i + 1/*MIX*/];\n\t\t\t\tsoftness = frames[i + 2/*SOFTNESS*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmix = this.getBezierValue(time, i, 1/*MIX*/, curveType - 2/*BEZIER*/);\n\t\t\t\tsoftness = this.getBezierValue(time, i, 2/*SOFTNESS*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t}\n\n\t\tif (blend == MixBlend.setup) {\n\t\t\tconstraint.mix = constraint.data.mix + (mix - constraint.data.mix) * alpha;\n\t\t\tconstraint.softness = constraint.data.softness + (softness - constraint.data.softness) * alpha;\n\n\t\t\tif (direction == MixDirection.mixOut) {\n\t\t\t\tconstraint.bendDirection = constraint.data.bendDirection;\n\t\t\t\tconstraint.compress = constraint.data.compress;\n\t\t\t\tconstraint.stretch = constraint.data.stretch;\n\t\t\t} else {\n\t\t\t\tconstraint.bendDirection = frames[i + 3/*BEND_DIRECTION*/];\n\t\t\t\tconstraint.compress = frames[i + 4/*COMPRESS*/] != 0;\n\t\t\t\tconstraint.stretch = frames[i + 5/*STRETCH*/] != 0;\n\t\t\t}\n\t\t} else {\n\t\t\tconstraint.mix += (mix - constraint.mix) * alpha;\n\t\t\tconstraint.softness += (softness - constraint.softness) * alpha;\n\t\t\tif (direction == MixDirection.mixIn) {\n\t\t\t\tconstraint.bendDirection = frames[i + 3/*BEND_DIRECTION*/];\n\t\t\t\tconstraint.compress = frames[i + 4/*COMPRESS*/] != 0;\n\t\t\t\tconstraint.stretch = frames[i + 5/*STRETCH*/] != 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Changes a transform constraint's {@link TransformConstraint#rotateMix}, {@link TransformConstraint#translateMix},\n * {@link TransformConstraint#scaleMix}, and {@link TransformConstraint#shearMix}. */\nexport class TransformConstraintTimeline extends CurveTimeline {\n\t/** The index of the transform constraint slot in {@link Skeleton#transformConstraints} that will be changed. */\n\ttransformConstraintIndex: number = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, transformConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, [\n\t\t\tProperty.transformConstraint + \"|\" + transformConstraintIndex\n\t\t]);\n\t\tthis.transformConstraintIndex = transformConstraintIndex;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 7/*ENTRIES*/;\n\t}\n\n\t/** The time in seconds, rotate mix, translate mix, scale mix, and shear mix for the specified key frame. */\n\tsetFrame (frame: number, time: number, mixRotate: number, mixX: number, mixY: number, mixScaleX: number, mixScaleY: number,\n\t\tmixShearY: number) {\n\t\tlet frames = this.frames;\n\t\tframe *= 7/*ENTRIES*/;\n\t\tframes[frame] = time;\n\t\tframes[frame + 1/*ROTATE*/] = mixRotate;\n\t\tframes[frame + 2/*X*/] = mixX;\n\t\tframes[frame + 3/*Y*/] = mixY;\n\t\tframes[frame + 4/*SCALEX*/] = mixScaleX;\n\t\tframes[frame + 5/*SCALEY*/] = mixScaleY;\n\t\tframes[frame + 6/*SHEARY*/] = mixShearY;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet constraint: TransformConstraint = skeleton.transformConstraints[this.transformConstraintIndex];\n\t\tif (!constraint.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tlet data = constraint.data;\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tconstraint.mixRotate = data.mixRotate;\n\t\t\t\t\tconstraint.mixX = data.mixX;\n\t\t\t\t\tconstraint.mixY = data.mixY;\n\t\t\t\t\tconstraint.mixScaleX = data.mixScaleX;\n\t\t\t\t\tconstraint.mixScaleY = data.mixScaleY;\n\t\t\t\t\tconstraint.mixShearY = data.mixShearY;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tconstraint.mixRotate += (data.mixRotate - constraint.mixRotate) * alpha;\n\t\t\t\t\tconstraint.mixX += (data.mixX - constraint.mixX) * alpha;\n\t\t\t\t\tconstraint.mixY += (data.mixY - constraint.mixY) * alpha;\n\t\t\t\t\tconstraint.mixScaleX += (data.mixScaleX - constraint.mixScaleX) * alpha;\n\t\t\t\t\tconstraint.mixScaleY += (data.mixScaleY - constraint.mixScaleY) * alpha;\n\t\t\t\t\tconstraint.mixShearY += (data.mixShearY - constraint.mixShearY) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet rotate, x, y, scaleX, scaleY, shearY;\n\t\tlet i = Timeline.search(frames, time, 7/*ENTRIES*/);\n\t\tlet curveType = this.curves[i / 7/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/:\n\t\t\t\tlet before = frames[i];\n\t\t\t\trotate = frames[i + 1/*ROTATE*/];\n\t\t\t\tx = frames[i + 2/*X*/];\n\t\t\t\ty = frames[i + 3/*Y*/];\n\t\t\t\tscaleX = frames[i + 4/*SCALEX*/];\n\t\t\t\tscaleY = frames[i + 5/*SCALEY*/];\n\t\t\t\tshearY = frames[i + 6/*SHEARY*/];\n\t\t\t\tlet t = (time - before) / (frames[i + 7/*ENTRIES*/] - before);\n\t\t\t\trotate += (frames[i + 7/*ENTRIES*/ + 1/*ROTATE*/] - rotate) * t;\n\t\t\t\tx += (frames[i + 7/*ENTRIES*/ + 2/*X*/] - x) * t;\n\t\t\t\ty += (frames[i + 7/*ENTRIES*/ + 3/*Y*/] - y) * t;\n\t\t\t\tscaleX += (frames[i + 7/*ENTRIES*/ + 4/*SCALEX*/] - scaleX) * t;\n\t\t\t\tscaleY += (frames[i + 7/*ENTRIES*/ + 5/*SCALEY*/] - scaleY) * t;\n\t\t\t\tshearY += (frames[i + 7/*ENTRIES*/ + 6/*SHEARY*/] - shearY) * t;\n\t\t\t\tbreak;\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\trotate = frames[i + 1/*ROTATE*/];\n\t\t\t\tx = frames[i + 2/*X*/];\n\t\t\t\ty = frames[i + 3/*Y*/];\n\t\t\t\tscaleX = frames[i + 4/*SCALEX*/];\n\t\t\t\tscaleY = frames[i + 5/*SCALEY*/];\n\t\t\t\tshearY = frames[i + 6/*SHEARY*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\trotate = this.getBezierValue(time, i, 1/*ROTATE*/, curveType - 2/*BEZIER*/);\n\t\t\t\tx = this.getBezierValue(time, i, 2/*X*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t\t\ty = this.getBezierValue(time, i, 3/*Y*/, curveType + 18/*BEZIER_SIZE*/ * 2 - 2/*BEZIER*/);\n\t\t\t\tscaleX = this.getBezierValue(time, i, 4/*SCALEX*/, curveType + 18/*BEZIER_SIZE*/ * 3 - 2/*BEZIER*/);\n\t\t\t\tscaleY = this.getBezierValue(time, i, 5/*SCALEY*/, curveType + 18/*BEZIER_SIZE*/ * 4 - 2/*BEZIER*/);\n\t\t\t\tshearY = this.getBezierValue(time, i, 6/*SHEARY*/, curveType + 18/*BEZIER_SIZE*/ * 5 - 2/*BEZIER*/);\n\t\t}\n\n\t\tif (blend == MixBlend.setup) {\n\t\t\tlet data = constraint.data;\n\t\t\tconstraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha;\n\t\t\tconstraint.mixX = data.mixX + (x - data.mixX) * alpha;\n\t\t\tconstraint.mixY = data.mixY + (y - data.mixY) * alpha;\n\t\t\tconstraint.mixScaleX = data.mixScaleX + (scaleX - data.mixScaleX) * alpha;\n\t\t\tconstraint.mixScaleY = data.mixScaleY + (scaleY - data.mixScaleY) * alpha;\n\t\t\tconstraint.mixShearY = data.mixShearY + (shearY - data.mixShearY) * alpha;\n\t\t} else {\n\t\t\tconstraint.mixRotate += (rotate - constraint.mixRotate) * alpha;\n\t\t\tconstraint.mixX += (x - constraint.mixX) * alpha;\n\t\t\tconstraint.mixY += (y - constraint.mixY) * alpha;\n\t\t\tconstraint.mixScaleX += (scaleX - constraint.mixScaleX) * alpha;\n\t\t\tconstraint.mixScaleY += (scaleY - constraint.mixScaleY) * alpha;\n\t\t\tconstraint.mixShearY += (shearY - constraint.mixShearY) * alpha;\n\t\t}\n\t}\n}\n\n/** Changes a path constraint's {@link PathConstraint#position}. */\nexport class PathConstraintPositionTimeline extends CurveTimeline1 {\n\t/** The index of the path constraint slot in {@link Skeleton#pathConstraints} that will be changed. */\n\tpathConstraintIndex: number = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, pathConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, Property.pathConstraintPosition + \"|\" + pathConstraintIndex);\n\t\tthis.pathConstraintIndex = pathConstraintIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet constraint: PathConstraint = skeleton.pathConstraints[this.pathConstraintIndex];\n\t\tif (!constraint.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tconstraint.position = constraint.data.position;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tconstraint.position += (constraint.data.position - constraint.position) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet position = this.getCurveValue(time);\n\n\t\tif (blend == MixBlend.setup)\n\t\t\tconstraint.position = constraint.data.position + (position - constraint.data.position) * alpha;\n\t\telse\n\t\t\tconstraint.position += (position - constraint.position) * alpha;\n\t}\n}\n\n/** Changes a path constraint's {@link PathConstraint#spacing}. */\nexport class PathConstraintSpacingTimeline extends CurveTimeline1 {\n\t/** The index of the path constraint slot in {@link Skeleton#getPathConstraints()} that will be changed. */\n\tpathConstraintIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, pathConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, Property.pathConstraintSpacing + \"|\" + pathConstraintIndex);\n\t\tthis.pathConstraintIndex = pathConstraintIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet constraint: PathConstraint = skeleton.pathConstraints[this.pathConstraintIndex];\n\t\tif (!constraint.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tconstraint.spacing = constraint.data.spacing;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tconstraint.spacing += (constraint.data.spacing - constraint.spacing) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet spacing = this.getCurveValue(time);\n\n\t\tif (blend == MixBlend.setup)\n\t\t\tconstraint.spacing = constraint.data.spacing + (spacing - constraint.data.spacing) * alpha;\n\t\telse\n\t\t\tconstraint.spacing += (spacing - constraint.spacing) * alpha;\n\t}\n}\n\n/** Changes a transform constraint's {@link PathConstraint#getMixRotate()}, {@link PathConstraint#getMixX()}, and\n * {@link PathConstraint#getMixY()}. */\nexport class PathConstraintMixTimeline extends CurveTimeline {\n\t/** The index of the path constraint slot in {@link Skeleton#getPathConstraints()} that will be changed. */\n\tpathConstraintIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, pathConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, [\n\t\t\tProperty.pathConstraintMix + \"|\" + pathConstraintIndex\n\t\t]);\n\t\tthis.pathConstraintIndex = pathConstraintIndex;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 4/*ENTRIES*/;\n\t}\n\n\tsetFrame (frame: number, time: number, mixRotate: number, mixX: number, mixY: number) {\n\t\tlet frames = this.frames;\n\t\tframe <<= 2;\n\t\tframes[frame] = time;\n\t\tframes[frame + 1/*ROTATE*/] = mixRotate;\n\t\tframes[frame + 2/*X*/] = mixX;\n\t\tframes[frame + 3/*Y*/] = mixY;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet constraint: PathConstraint = skeleton.pathConstraints[this.pathConstraintIndex];\n\t\tif (!constraint.active) return;\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tconstraint.mixRotate = constraint.data.mixRotate;\n\t\t\t\t\tconstraint.mixX = constraint.data.mixX;\n\t\t\t\t\tconstraint.mixY = constraint.data.mixY;\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tconstraint.mixRotate += (constraint.data.mixRotate - constraint.mixRotate) * alpha;\n\t\t\t\t\tconstraint.mixX += (constraint.data.mixX - constraint.mixX) * alpha;\n\t\t\t\t\tconstraint.mixY += (constraint.data.mixY - constraint.mixY) * alpha;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet rotate, x, y;\n\t\tlet i = Timeline.search(frames, time, 4/*ENTRIES*/);\n\t\tlet curveType = this.curves[i >> 2];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/:\n\t\t\t\tlet before = frames[i];\n\t\t\t\trotate = frames[i + 1/*ROTATE*/];\n\t\t\t\tx = frames[i + 2/*X*/];\n\t\t\t\ty = frames[i + 3/*Y*/];\n\t\t\t\tlet t = (time - before) / (frames[i + 4/*ENTRIES*/] - before);\n\t\t\t\trotate += (frames[i + 4/*ENTRIES*/ + 1/*ROTATE*/] - rotate) * t;\n\t\t\t\tx += (frames[i + 4/*ENTRIES*/ + 2/*X*/] - x) * t;\n\t\t\t\ty += (frames[i + 4/*ENTRIES*/ + 3/*Y*/] - y) * t;\n\t\t\t\tbreak;\n\t\t\tcase 1/*STEPPED*/:\n\t\t\t\trotate = frames[i + 1/*ROTATE*/];\n\t\t\t\tx = frames[i + 2/*X*/];\n\t\t\t\ty = frames[i + 3/*Y*/];\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\trotate = this.getBezierValue(time, i, 1/*ROTATE*/, curveType - 2/*BEZIER*/);\n\t\t\t\tx = this.getBezierValue(time, i, 2/*X*/, curveType + 18/*BEZIER_SIZE*/ - 2/*BEZIER*/);\n\t\t\t\ty = this.getBezierValue(time, i, 3/*Y*/, curveType + 18/*BEZIER_SIZE*/ * 2 - 2/*BEZIER*/);\n\t\t}\n\n\t\tif (blend == MixBlend.setup) {\n\t\t\tlet data = constraint.data;\n\t\t\tconstraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha;\n\t\t\tconstraint.mixX = data.mixX + (x - data.mixX) * alpha;\n\t\t\tconstraint.mixY = data.mixY + (y - data.mixY) * alpha;\n\t\t} else {\n\t\t\tconstraint.mixRotate += (rotate - constraint.mixRotate) * alpha;\n\t\t\tconstraint.mixX += (x - constraint.mixX) * alpha;\n\t\t\tconstraint.mixY += (y - constraint.mixY) * alpha;\n\t\t}\n\t}\n}\n\n/** Changes a slot's {@link Slot#getSequenceIndex()} for an attachment's {@link Sequence}. */\nexport class SequenceTimeline extends Timeline implements SlotTimeline {\n\tstatic ENTRIES = 3;\n\tstatic MODE = 1;\n\tstatic DELAY = 2;\n\n\tslotIndex: number;\n\tattachment: HasTextureRegion;\n\n\tconstructor (frameCount: number, slotIndex: number, attachment: HasTextureRegion) {\n\t\tsuper(frameCount, [\n\t\t\tProperty.sequence + \"|\" + slotIndex + \"|\" + attachment.sequence!.id\n\t\t]);\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.attachment = attachment;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn SequenceTimeline.ENTRIES;\n\t}\n\n\tgetSlotIndex () {\n\t\treturn this.slotIndex;\n\t}\n\n\tgetAttachment () {\n\t\treturn this.attachment as unknown as Attachment;\n\t}\n\n\t/** Sets the time, mode, index, and frame time for the specified frame.\n\t * @param frame Between 0 and <code>frameCount</code>, inclusive.\n\t * @param time Seconds between frames. */\n\tsetFrame (frame: number, time: number, mode: SequenceMode, index: number, delay: number) {\n\t\tlet frames = this.frames;\n\t\tframe *= SequenceTimeline.ENTRIES;\n\t\tframes[frame] = time;\n\t\tframes[frame + SequenceTimeline.MODE] = mode | (index << 4);\n\t\tframes[frame + SequenceTimeline.DELAY] = delay;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet slot = skeleton.slots[this.slotIndex];\n\t\tif (!slot.bone.active) return;\n\t\tlet slotAttachment = slot.attachment;\n\t\tlet attachment = this.attachment as unknown as Attachment;\n\t\tif (slotAttachment != attachment) {\n\t\t\tif (!(slotAttachment instanceof VertexAttachment)\n\t\t\t\t|| (slotAttachment as VertexAttachment).timelineAttachment != attachment) return;\n\t\t}\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) { // Time is before first frame.\n\t\t\tif (blend == MixBlend.setup || blend == MixBlend.first) slot.sequenceIndex = -1;\n\t\t\treturn;\n\t\t}\n\n\t\tlet i = Timeline.search(frames, time, SequenceTimeline.ENTRIES);\n\t\tlet before = frames[i];\n\t\tlet modeAndIndex = frames[i + SequenceTimeline.MODE];\n\t\tlet delay = frames[i + SequenceTimeline.DELAY];\n\n\t\tif (!this.attachment.sequence) return;\n\t\tlet index = modeAndIndex >> 4, count = this.attachment.sequence!.regions.length;\n\t\tlet mode = SequenceModeValues[modeAndIndex & 0xf];\n\t\tif (mode != SequenceMode.hold) {\n\t\t\tindex += (((time - before) / delay + 0.00001) | 0);\n\t\t\tswitch (mode) {\n\t\t\t\tcase SequenceMode.once:\n\t\t\t\t\tindex = Math.min(count - 1, index);\n\t\t\t\t\tbreak;\n\t\t\t\tcase SequenceMode.loop:\n\t\t\t\t\tindex %= count;\n\t\t\t\t\tbreak;\n\t\t\t\tcase SequenceMode.pingpong: {\n\t\t\t\t\tlet n = (count << 1) - 2;\n\t\t\t\t\tindex = n == 0 ? 0 : index % n;\n\t\t\t\t\tif (index >= count) index = n - index;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase SequenceMode.onceReverse:\n\t\t\t\t\tindex = Math.max(count - 1 - index, 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase SequenceMode.loopReverse:\n\t\t\t\t\tindex = count - 1 - (index % count);\n\t\t\t\t\tbreak;\n\t\t\t\tcase SequenceMode.pingpongReverse: {\n\t\t\t\t\tlet n = (count << 1) - 2;\n\t\t\t\t\tindex = n == 0 ? 0 : (index + count - 1) % n;\n\t\t\t\t\tif (index >= count) index = n - index;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tslot.sequenceIndex = index;\n\t}\n}", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Animation, MixBlend, AttachmentTimeline, MixDirection, RotateTimeline, DrawOrderTimeline, Timeline, EventTimeline } from \"./Animation\";\nimport { AnimationStateData } from \"./AnimationStateData\";\nimport { Skeleton } from \"./Skeleton\";\nimport { Slot } from \"./Slot\";\nimport { StringSet, Pool, Utils, MathUtils } from \"./Utils\";\nimport { Event } from \"./Event\";\n\n\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. */\nexport class AnimationState {\n\tstatic _emptyAnimation = new Animation(\"<empty>\", [], 0);\n\tprivate static emptyAnimation (): Animation {\n\t\treturn AnimationState._emptyAnimation;\n\t}\n\n\t/** The AnimationStateData to look up mix durations. */\n\tdata: AnimationStateData;\n\n\t/** The list of tracks that currently have animations, which may contain null entries. */\n\ttracks = new Array<TrackEntry | null>();\n\n\t/** Multiplier for the delta time when the animation state is updated, causing time for all animations and mixes to play slower\n\t * or faster. Defaults to 1.\n\t *\n\t * See TrackEntry {@link TrackEntry#timeScale} for affecting a single animation. */\n\ttimeScale = 1;\n\tunkeyedState = 0;\n\n\tevents = new Array<Event>();\n\tlisteners = new Array<AnimationStateListener>();\n\tqueue = new EventQueue(this);\n\tpropertyIDs = new StringSet();\n\tanimationsChanged = false;\n\n\ttrackEntryPool = new Pool<TrackEntry>(() => new TrackEntry());\n\n\tconstructor (data: AnimationStateData) {\n\t\tthis.data = data;\n\t}\n\n\t/** Increments each track entry {@link TrackEntry#trackTime()}, setting queued animations as current if needed. */\n\tupdate (delta: number) {\n\t\tdelta *= this.timeScale;\n\t\tlet tracks = this.tracks;\n\t\tfor (let i = 0, n = tracks.length; i < n; i++) {\n\t\t\tlet current = tracks[i];\n\t\t\tif (!current) continue;\n\n\t\t\tcurrent.animationLast = current.nextAnimationLast;\n\t\t\tcurrent.trackLast = current.nextTrackLast;\n\n\t\t\tlet currentDelta = delta * current.timeScale;\n\n\t\t\tif (current.delay > 0) {\n\t\t\t\tcurrent.delay -= currentDelta;\n\t\t\t\tif (current.delay > 0) continue;\n\t\t\t\tcurrentDelta = -current.delay;\n\t\t\t\tcurrent.delay = 0;\n\t\t\t}\n\n\t\t\tlet next = current.next;\n\t\t\tif (next) {\n\t\t\t\t// When the next entry's delay is passed, change to the next entry, preserving leftover time.\n\t\t\t\tlet nextTime = current.trackLast - next.delay;\n\t\t\t\tif (nextTime >= 0) {\n\t\t\t\t\tnext.delay = 0;\n\t\t\t\t\tnext.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale;\n\t\t\t\t\tcurrent.trackTime += currentDelta;\n\t\t\t\t\tthis.setCurrent(i, next, true);\n\t\t\t\t\twhile (next.mixingFrom) {\n\t\t\t\t\t\tnext.mixTime += delta;\n\t\t\t\t\t\tnext = next.mixingFrom;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t} else if (current.trackLast >= current.trackEnd && !current.mixingFrom) {\n\t\t\t\ttracks[i] = null;\n\t\t\t\tthis.queue.end(current);\n\t\t\t\tthis.clearNext(current);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (current.mixingFrom && this.updateMixingFrom(current, delta)) {\n\t\t\t\t// End mixing from entries once all have completed.\n\t\t\t\tlet from: TrackEntry | null = current.mixingFrom;\n\t\t\t\tcurrent.mixingFrom = null;\n\t\t\t\tif (from) from.mixingTo = null;\n\t\t\t\twhile (from) {\n\t\t\t\t\tthis.queue.end(from);\n\t\t\t\t\tfrom = from.mixingFrom;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcurrent.trackTime += currentDelta;\n\t\t}\n\n\t\tthis.queue.drain();\n\t}\n\n\t/** Returns true when all mixing from entries are complete. */\n\tupdateMixingFrom (to: TrackEntry, delta: number): boolean {\n\t\tlet from = to.mixingFrom;\n\t\tif (!from) return true;\n\n\t\tlet finished = this.updateMixingFrom(from, delta);\n\n\t\tfrom.animationLast = from.nextAnimationLast;\n\t\tfrom.trackLast = from.nextTrackLast;\n\n\t\t// Require mixTime > 0 to ensure the mixing from entry was applied at least once.\n\t\tif (to.mixTime > 0 && to.mixTime >= to.mixDuration) {\n\t\t\t// Require totalAlpha == 0 to ensure mixing is complete, unless mixDuration == 0 (the transition is a single frame).\n\t\t\tif (from.totalAlpha == 0 || to.mixDuration == 0) {\n\t\t\t\tto.mixingFrom = from.mixingFrom;\n\t\t\t\tif (from.mixingFrom) from.mixingFrom.mixingTo = to;\n\t\t\t\tto.interruptAlpha = from.interruptAlpha;\n\t\t\t\tthis.queue.end(from);\n\t\t\t}\n\t\t\treturn finished;\n\t\t}\n\n\t\tfrom.trackTime += delta * from.timeScale;\n\t\tto.mixTime += delta;\n\t\treturn false;\n\t}\n\n\t/** Poses the skeleton using the track entry animations. There are no side effects other than invoking listeners, so the\n\t * animation state can be applied to multiple skeletons to pose them identically.\n\t * @returns True if any animations were applied. */\n\tapply (skeleton: Skeleton): boolean {\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\t\tif (this.animationsChanged) this._animationsChanged();\n\n\t\tlet events = this.events;\n\t\tlet tracks = this.tracks;\n\t\tlet applied = false;\n\n\t\tfor (let i = 0, n = tracks.length; i < n; i++) {\n\t\t\tlet current = tracks[i];\n\t\t\tif (!current || current.delay > 0) continue;\n\t\t\tapplied = true;\n\t\t\tlet blend: MixBlend = i == 0 ? MixBlend.first : current.mixBlend;\n\n\t\t\t// Apply mixing from entries first.\n\t\t\tlet mix = current.alpha;\n\t\t\tif (current.mixingFrom)\n\t\t\t\tmix *= this.applyMixingFrom(current, skeleton, blend);\n\t\t\telse if (current.trackTime >= current.trackEnd && !current.next)\n\t\t\t\tmix = 0;\n\n\t\t\t// Apply current entry.\n\t\t\tlet animationLast = current.animationLast, animationTime = current.getAnimationTime(), applyTime = animationTime;\n\t\t\tlet applyEvents: Event[] | null = events;\n\t\t\tif (current.reverse) {\n\t\t\t\tapplyTime = current.animation!.duration - applyTime;\n\t\t\t\tapplyEvents = null;\n\t\t\t}\n\t\t\tlet timelines = current.animation!.timelines;\n\t\t\tlet timelineCount = timelines.length;\n\t\t\tif ((i == 0 && mix == 1) || blend == MixBlend.add) {\n\t\t\t\tfor (let ii = 0; ii < timelineCount; ii++) {\n\t\t\t\t\t// Fixes issue #302 on IOS9 where mix, blend sometimes became undefined and caused assets\n\t\t\t\t\t// to sometimes stop rendering when using color correction, as their RGBA values become NaN.\n\t\t\t\t\t// (https://github.com/pixijs/pixi-spine/issues/302)\n\t\t\t\t\tUtils.webkit602BugfixHelper(mix, blend);\n\t\t\t\t\tvar timeline = timelines[ii];\n\t\t\t\t\tif (timeline instanceof AttachmentTimeline)\n\t\t\t\t\t\tthis.applyAttachmentTimeline(timeline, skeleton, applyTime, blend, true);\n\t\t\t\t\telse\n\t\t\t\t\t\ttimeline.apply(skeleton, animationLast, applyTime, applyEvents, mix, blend, MixDirection.mixIn);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlet timelineMode = current.timelineMode;\n\n\t\t\t\tlet shortestRotation = current.shortestRotation;\n\t\t\t\tlet firstFrame = !shortestRotation && current.timelinesRotation.length != timelineCount << 1;\n\t\t\t\tif (firstFrame) current.timelinesRotation.length = timelineCount << 1;\n\n\t\t\t\tfor (let ii = 0; ii < timelineCount; ii++) {\n\t\t\t\t\tlet timeline = timelines[ii];\n\t\t\t\t\tlet timelineBlend = timelineMode[ii] == SUBSEQUENT ? blend : MixBlend.setup;\n\t\t\t\t\tif (!shortestRotation && timeline instanceof RotateTimeline) {\n\t\t\t\t\t\tthis.applyRotateTimeline(timeline, skeleton, applyTime, mix, timelineBlend, current.timelinesRotation, ii << 1, firstFrame);\n\t\t\t\t\t} else if (timeline instanceof AttachmentTimeline) {\n\t\t\t\t\t\tthis.applyAttachmentTimeline(timeline, skeleton, applyTime, blend, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This fixes the WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109\n\t\t\t\t\t\tUtils.webkit602BugfixHelper(mix, blend);\n\t\t\t\t\t\ttimeline.apply(skeleton, animationLast, applyTime, applyEvents, mix, timelineBlend, MixDirection.mixIn);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.queueEvents(current, animationTime);\n\t\t\tevents.length = 0;\n\t\t\tcurrent.nextAnimationLast = animationTime;\n\t\t\tcurrent.nextTrackLast = current.trackTime;\n\t\t}\n\n\t\t// Set slots attachments to the setup pose, if needed. This occurs if an animation that is mixing out sets attachments so\n\t\t// subsequent timelines see any deform, but the subsequent timelines don't set an attachment (eg they are also mixing out or\n\t\t// the time is before the first key).\n\t\tvar setupState = this.unkeyedState + SETUP;\n\t\tvar slots = skeleton.slots;\n\t\tfor (var i = 0, n = skeleton.slots.length; i < n; i++) {\n\t\t\tvar slot = slots[i];\n\t\t\tif (slot.attachmentState == setupState) {\n\t\t\t\tvar attachmentName = slot.data.attachmentName;\n\t\t\t\tslot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName));\n\t\t\t}\n\t\t}\n\t\tthis.unkeyedState += 2; // Increasing after each use avoids the need to reset attachmentState for every slot.\n\n\t\tthis.queue.drain();\n\t\treturn applied;\n\t}\n\n\tapplyMixingFrom (to: TrackEntry, skeleton: Skeleton, blend: MixBlend) {\n\t\tlet from = to.mixingFrom!;\n\t\tif (from.mixingFrom) this.applyMixingFrom(from, skeleton, blend);\n\n\t\tlet mix = 0;\n\t\tif (to.mixDuration == 0) { // Single frame mix to undo mixingFrom changes.\n\t\t\tmix = 1;\n\t\t\tif (blend == MixBlend.first) blend = MixBlend.setup;\n\t\t} else {\n\t\t\tmix = to.mixTime / to.mixDuration;\n\t\t\tif (mix > 1) mix = 1;\n\t\t\tif (blend != MixBlend.first) blend = from.mixBlend;\n\t\t}\n\n\t\tlet attachments = mix < from.attachmentThreshold, drawOrder = mix < from.drawOrderThreshold;\n\t\tlet timelines = from.animation!.timelines;\n\t\tlet timelineCount = timelines.length;\n\t\tlet alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix);\n\t\tlet animationLast = from.animationLast, animationTime = from.getAnimationTime(), applyTime = animationTime;\n\t\tlet events = null;\n\t\tif (from.reverse)\n\t\t\tapplyTime = from.animation!.duration - applyTime;\n\t\telse if (mix < from.eventThreshold)\n\t\t\tevents = this.events;\n\n\t\tif (blend == MixBlend.add) {\n\t\t\tfor (let i = 0; i < timelineCount; i++)\n\t\t\t\ttimelines[i].apply(skeleton, animationLast, applyTime, events, alphaMix, blend, MixDirection.mixOut);\n\t\t} else {\n\t\t\tlet timelineMode = from.timelineMode;\n\t\t\tlet timelineHoldMix = from.timelineHoldMix;\n\n\t\t\tlet shortestRotation = from.shortestRotation;\n\t\t\tlet firstFrame = !shortestRotation && from.timelinesRotation.length != timelineCount << 1;\n\t\t\tif (firstFrame) from.timelinesRotation.length = timelineCount << 1;\n\n\t\t\tfrom.totalAlpha = 0;\n\t\t\tfor (let i = 0; i < timelineCount; i++) {\n\t\t\t\tlet timeline = timelines[i];\n\t\t\t\tlet direction = MixDirection.mixOut;\n\t\t\t\tlet timelineBlend: MixBlend;\n\t\t\t\tlet alpha = 0;\n\t\t\t\tswitch (timelineMode[i]) {\n\t\t\t\t\tcase SUBSEQUENT:\n\t\t\t\t\t\tif (!drawOrder && timeline instanceof DrawOrderTimeline) continue;\n\t\t\t\t\t\ttimelineBlend = blend;\n\t\t\t\t\t\talpha = alphaMix;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase FIRST:\n\t\t\t\t\t\ttimelineBlend = MixBlend.setup;\n\t\t\t\t\t\talpha = alphaMix;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HOLD_SUBSEQUENT:\n\t\t\t\t\t\ttimelineBlend = blend;\n\t\t\t\t\t\talpha = alphaHold;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase HOLD_FIRST:\n\t\t\t\t\t\ttimelineBlend = MixBlend.setup;\n\t\t\t\t\t\talpha = alphaHold;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\ttimelineBlend = MixBlend.setup;\n\t\t\t\t\t\tlet holdMix = timelineHoldMix[i];\n\t\t\t\t\t\talpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tfrom.totalAlpha += alpha;\n\n\t\t\t\tif (!shortestRotation && timeline instanceof RotateTimeline)\n\t\t\t\t\tthis.applyRotateTimeline(timeline, skeleton, applyTime, alpha, timelineBlend, from.timelinesRotation, i << 1, firstFrame);\n\t\t\t\telse if (timeline instanceof AttachmentTimeline)\n\t\t\t\t\tthis.applyAttachmentTimeline(timeline, skeleton, applyTime, timelineBlend, attachments);\n\t\t\t\telse {\n\t\t\t\t\t// This fixes the WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109\n\t\t\t\t\tUtils.webkit602BugfixHelper(alpha, blend);\n\t\t\t\t\tif (drawOrder && timeline instanceof DrawOrderTimeline && timelineBlend == MixBlend.setup)\n\t\t\t\t\t\tdirection = MixDirection.mixIn;\n\t\t\t\t\ttimeline.apply(skeleton, animationLast, applyTime, events, alpha, timelineBlend, direction);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (to.mixDuration > 0) this.queueEvents(from, animationTime);\n\t\tthis.events.length = 0;\n\t\tfrom.nextAnimationLast = animationTime;\n\t\tfrom.nextTrackLast = from.trackTime;\n\n\t\treturn mix;\n\t}\n\n\tapplyAttachmentTimeline (timeline: AttachmentTimeline, skeleton: Skeleton, time: number, blend: MixBlend, attachments: boolean) {\n\t\tvar slot = skeleton.slots[timeline.slotIndex];\n\t\tif (!slot.bone.active) return;\n\n\t\tif (time < timeline.frames[0]) { // Time is before first frame.\n\t\t\tif (blend == MixBlend.setup || blend == MixBlend.first)\n\t\t\t\tthis.setAttachment(skeleton, slot, slot.data.attachmentName, attachments);\n\t\t} else\n\t\t\tthis.setAttachment(skeleton, slot, timeline.attachmentNames[Timeline.search1(timeline.frames, time)], attachments);\n\n\t\t// If an attachment wasn't set (ie before the first frame or attachments is false), set the setup attachment later.\n\t\tif (slot.attachmentState <= this.unkeyedState) slot.attachmentState = this.unkeyedState + SETUP;\n\t}\n\n\tsetAttachment (skeleton: Skeleton, slot: Slot, attachmentName: string | null, attachments: boolean) {\n\t\tslot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName));\n\t\tif (attachments) slot.attachmentState = this.unkeyedState + CURRENT;\n\t}\n\n\tapplyRotateTimeline (timeline: RotateTimeline, skeleton: Skeleton, time: number, alpha: number, blend: MixBlend,\n\t\ttimelinesRotation: Array<number>, i: number, firstFrame: boolean) {\n\n\t\tif (firstFrame) timelinesRotation[i] = 0;\n\n\t\tif (alpha == 1) {\n\t\t\ttimeline.apply(skeleton, 0, time, null, 1, blend, MixDirection.mixIn);\n\t\t\treturn;\n\t\t}\n\n\t\tlet bone = skeleton.bones[timeline.boneIndex];\n\t\tif (!bone.active) return;\n\t\tlet frames = timeline.frames;\n\t\tlet r1 = 0, r2 = 0;\n\t\tif (time < frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\tbone.rotation = bone.data.rotation;\n\t\t\t\tdefault:\n\t\t\t\t\treturn;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\tr1 = bone.rotation;\n\t\t\t\t\tr2 = bone.data.rotation;\n\t\t\t}\n\t\t} else {\n\t\t\tr1 = blend == MixBlend.setup ? bone.data.rotation : bone.rotation;\n\t\t\tr2 = bone.data.rotation + timeline.getCurveValue(time);\n\t\t}\n\n\t\t// Mix between rotations using the direction of the shortest route on the first frame while detecting crosses.\n\t\tlet total = 0, diff = r2 - r1;\n\t\tdiff -= (16384 - ((16384.499999999996 - diff / 360) | 0)) * 360;\n\t\tif (diff == 0) {\n\t\t\ttotal = timelinesRotation[i];\n\t\t} else {\n\t\t\tlet lastTotal = 0, lastDiff = 0;\n\t\t\tif (firstFrame) {\n\t\t\t\tlastTotal = 0;\n\t\t\t\tlastDiff = diff;\n\t\t\t} else {\n\t\t\t\tlastTotal = timelinesRotation[i]; // Angle and direction of mix, including loops.\n\t\t\t\tlastDiff = timelinesRotation[i + 1]; // Difference between bones.\n\t\t\t}\n\t\t\tlet current = diff > 0, dir = lastTotal >= 0;\n\t\t\t// Detect cross at 0 (not 180).\n\t\t\tif (MathUtils.signum(lastDiff) != MathUtils.signum(diff) && Math.abs(lastDiff) <= 90) {\n\t\t\t\t// A cross after a 360 rotation is a loop.\n\t\t\t\tif (Math.abs(lastTotal) > 180) lastTotal += 360 * MathUtils.signum(lastTotal);\n\t\t\t\tdir = current;\n\t\t\t}\n\t\t\ttotal = diff + lastTotal - lastTotal % 360; // Store loops as part of lastTotal.\n\t\t\tif (dir != current) total += 360 * MathUtils.signum(lastTotal);\n\t\t\ttimelinesRotation[i] = total;\n\t\t}\n\t\ttimelinesRotation[i + 1] = diff;\n\t\tbone.rotation = r1 + total * alpha;\n\t}\n\n\tqueueEvents (entry: TrackEntry, animationTime: number) {\n\t\tlet animationStart = entry.animationStart, animationEnd = entry.animationEnd;\n\t\tlet duration = animationEnd - animationStart;\n\t\tlet trackLastWrapped = entry.trackLast % duration;\n\n\t\t// Queue events before complete.\n\t\tlet events = this.events;\n\t\tlet i = 0, n = events.length;\n\t\tfor (; i < n; i++) {\n\t\t\tlet event = events[i];\n\t\t\tif (event.time < trackLastWrapped) break;\n\t\t\tif (event.time > animationEnd) continue; // Discard events outside animation start/end.\n\t\t\tthis.queue.event(entry, event);\n\t\t}\n\n\t\t// Queue complete if completed a loop iteration or the animation.\n\t\tlet complete = false;\n\t\tif (entry.loop)\n\t\t\tcomplete = duration == 0 || trackLastWrapped > entry.trackTime % duration;\n\t\telse\n\t\t\tcomplete = animationTime >= animationEnd && entry.animationLast < animationEnd;\n\t\tif (complete) this.queue.complete(entry);\n\n\t\t// Queue events after complete.\n\t\tfor (; i < n; i++) {\n\t\t\tlet event = events[i];\n\t\t\tif (event.time < animationStart) continue; // Discard events outside animation start/end.\n\t\t\tthis.queue.event(entry, event);\n\t\t}\n\t}\n\n\t/** Removes all animations from all tracks, leaving skeletons in their current pose.\n\t *\n\t * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose,\n\t * rather than leaving them in their current pose. */\n\tclearTracks () {\n\t\tlet oldDrainDisabled = this.queue.drainDisabled;\n\t\tthis.queue.drainDisabled = true;\n\t\tfor (let i = 0, n = this.tracks.length; i < n; i++)\n\t\t\tthis.clearTrack(i);\n\t\tthis.tracks.length = 0;\n\t\tthis.queue.drainDisabled = oldDrainDisabled;\n\t\tthis.queue.drain();\n\t}\n\n\t/** Removes all animations from the track, leaving skeletons in their current pose.\n\t *\n\t * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose,\n\t * rather than leaving them in their current pose. */\n\tclearTrack (trackIndex: number) {\n\t\tif (trackIndex >= this.tracks.length) return;\n\t\tlet current = this.tracks[trackIndex];\n\t\tif (!current) return;\n\n\t\tthis.queue.end(current);\n\n\t\tthis.clearNext(current);\n\n\t\tlet entry = current;\n\t\twhile (true) {\n\t\t\tlet from = entry.mixingFrom;\n\t\t\tif (!from) break;\n\t\t\tthis.queue.end(from);\n\t\t\tentry.mixingFrom = null;\n\t\t\tentry.mixingTo = null;\n\t\t\tentry = from;\n\t\t}\n\n\t\tthis.tracks[current.trackIndex] = null;\n\n\t\tthis.queue.drain();\n\t}\n\n\tsetCurrent (index: number, current: TrackEntry, interrupt: boolean) {\n\t\tlet from = this.expandToIndex(index);\n\t\tthis.tracks[index] = current;\n\t\tcurrent.previous = null;\n\n\t\tif (from) {\n\t\t\tif (interrupt) this.queue.interrupt(from);\n\t\t\tcurrent.mixingFrom = from;\n\t\t\tfrom.mixingTo = current;\n\t\t\tcurrent.mixTime = 0;\n\n\t\t\t// Store the interrupted mix percentage.\n\t\t\tif (from.mixingFrom && from.mixDuration > 0)\n\t\t\t\tcurrent.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration);\n\n\t\t\tfrom.timelinesRotation.length = 0; // Reset rotation for mixing out, in case entry was mixed in.\n\t\t}\n\n\t\tthis.queue.start(current);\n\t}\n\n\t/** Sets an animation by name.\n\t  *\n\t  * See {@link #setAnimationWith()}. */\n\tsetAnimation (trackIndex: number, animationName: string, loop: boolean = false) {\n\t\tlet animation = this.data.skeletonData.findAnimation(animationName);\n\t\tif (!animation) throw new Error(\"Animation not found: \" + animationName);\n\t\treturn this.setAnimationWith(trackIndex, animation, loop);\n\t}\n\n\t/** Sets the current animation for a track, discarding any queued animations. If the formerly current track entry was never\n\t * applied to a skeleton, it is replaced (not mixed from).\n\t * @param loop If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its\n\t *           duration. In either case {@link TrackEntry#trackEnd} determines when the track is cleared.\n\t * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept\n\t *         after the {@link AnimationStateListener#dispose()} event occurs. */\n\tsetAnimationWith (trackIndex: number, animation: Animation, loop: boolean = false) {\n\t\tif (!animation) throw new Error(\"animation cannot be null.\");\n\t\tlet interrupt = true;\n\t\tlet current = this.expandToIndex(trackIndex);\n\t\tif (current) {\n\t\t\tif (current.nextTrackLast == -1) {\n\t\t\t\t// Don't mix from an entry that was never applied.\n\t\t\t\tthis.tracks[trackIndex] = current.mixingFrom;\n\t\t\t\tthis.queue.interrupt(current);\n\t\t\t\tthis.queue.end(current);\n\t\t\t\tthis.clearNext(current);\n\t\t\t\tcurrent = current.mixingFrom;\n\t\t\t\tinterrupt = false;\n\t\t\t} else\n\t\t\t\tthis.clearNext(current);\n\t\t}\n\t\tlet entry = this.trackEntry(trackIndex, animation, loop, current);\n\t\tthis.setCurrent(trackIndex, entry, interrupt);\n\t\tthis.queue.drain();\n\t\treturn entry;\n\t}\n\n\t/** Queues an animation by name.\n\t *\n\t * See {@link #addAnimationWith()}. */\n\taddAnimation (trackIndex: number, animationName: string, loop: boolean = false, delay: number = 0) {\n\t\tlet animation = this.data.skeletonData.findAnimation(animationName);\n\t\tif (!animation) throw new Error(\"Animation not found: \" + animationName);\n\t\treturn this.addAnimationWith(trackIndex, animation, loop, delay);\n\t}\n\n\t/** Adds an animation to be played after the current or last queued animation for a track. If the track is empty, it is\n\t * equivalent to calling {@link #setAnimationWith()}.\n\t * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry\n\t *           minus any mix duration (from the {@link AnimationStateData}) plus the specified `delay` (ie the mix\n\t *           ends at (`delay` = 0) or before (`delay` < 0) the previous track entry duration). If the\n\t *           previous entry is looping, its next loop completion is used instead of its duration.\n\t * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept\n\t *         after the {@link AnimationStateListener#dispose()} event occurs. */\n\taddAnimationWith (trackIndex: number, animation: Animation, loop: boolean = false, delay: number = 0) {\n\t\tif (!animation) throw new Error(\"animation cannot be null.\");\n\n\t\tlet last = this.expandToIndex(trackIndex);\n\t\tif (last) {\n\t\t\twhile (last.next)\n\t\t\t\tlast = last.next;\n\t\t}\n\n\t\tlet entry = this.trackEntry(trackIndex, animation, loop, last);\n\n\t\tif (!last) {\n\t\t\tthis.setCurrent(trackIndex, entry, true);\n\t\t\tthis.queue.drain();\n\t\t} else {\n\t\t\tlast.next = entry;\n\t\t\tentry.previous = last;\n\t\t\tif (delay <= 0) delay += last.getTrackComplete() - entry.mixDuration;\n\t\t}\n\n\t\tentry.delay = delay;\n\t\treturn entry;\n\t}\n\n\t/** Sets an empty animation for a track, discarding any queued animations, and sets the track entry's\n\t * {@link TrackEntry#mixduration}. An empty animation has no timelines and serves as a placeholder for mixing in or out.\n\t *\n\t * Mixing out is done by setting an empty animation with a mix duration using either {@link #setEmptyAnimation()},\n\t * {@link #setEmptyAnimations()}, or {@link #addEmptyAnimation()}. Mixing to an empty animation causes\n\t * the previous animation to be applied less and less over the mix duration. Properties keyed in the previous animation\n\t * 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\t * 0 still mixes out over one frame.\n\t *\n\t * Mixing in is done by first setting an empty animation, then adding an animation using\n\t * {@link #addAnimation()} and on the returned track entry, set the\n\t * {@link TrackEntry#setMixDuration()}. Mixing from an empty animation causes the new animation to be applied more and\n\t * more over the mix duration. Properties keyed in the new animation transition from the value from lower tracks or from the\n\t * setup pose value if no lower tracks key the property to the value keyed in the new animation. */\n\tsetEmptyAnimation (trackIndex: number, mixDuration: number = 0) {\n\t\tlet entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation(), false);\n\t\tentry.mixDuration = mixDuration;\n\t\tentry.trackEnd = mixDuration;\n\t\treturn entry;\n\t}\n\n\t/** Adds an empty animation to be played after the current or last queued animation for a track, and sets the track entry's\n\t * {@link TrackEntry#mixDuration}. If the track is empty, it is equivalent to calling\n\t * {@link #setEmptyAnimation()}.\n\t *\n\t * See {@link #setEmptyAnimation()}.\n\t * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry\n\t *           minus any mix duration plus the specified `delay` (ie the mix ends at (`delay` = 0) or\n\t *           before (`delay` < 0) the previous track entry duration). If the previous entry is looping, its next\n\t *           loop completion is used instead of its duration.\n\t * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept\n\t *         after the {@link AnimationStateListener#dispose()} event occurs. */\n\taddEmptyAnimation (trackIndex: number, mixDuration: number = 0, delay: number = 0) {\n\t\tlet entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation(), false, delay);\n\t\tif (delay <= 0) entry.delay += entry.mixDuration - mixDuration;\n\t\tentry.mixDuration = mixDuration;\n\t\tentry.trackEnd = mixDuration;\n\t\treturn entry;\n\t}\n\n\t/** Sets an empty animation for every track, discarding any queued animations, and mixes to it over the specified mix\n\t  * duration. */\n\tsetEmptyAnimations (mixDuration: number = 0) {\n\t\tlet oldDrainDisabled = this.queue.drainDisabled;\n\t\tthis.queue.drainDisabled = true;\n\t\tfor (let i = 0, n = this.tracks.length; i < n; i++) {\n\t\t\tlet current = this.tracks[i];\n\t\t\tif (current) this.setEmptyAnimation(current.trackIndex, mixDuration);\n\t\t}\n\t\tthis.queue.drainDisabled = oldDrainDisabled;\n\t\tthis.queue.drain();\n\t}\n\n\texpandToIndex (index: number) {\n\t\tif (index < this.tracks.length) return this.tracks[index];\n\t\tUtils.ensureArrayCapacity(this.tracks, index + 1, null);\n\t\tthis.tracks.length = index + 1;\n\t\treturn null;\n\t}\n\n\t/** @param last May be null. */\n\ttrackEntry (trackIndex: number, animation: Animation, loop: boolean, last: TrackEntry | null) {\n\t\tlet entry = this.trackEntryPool.obtain();\n\t\tentry.reset();\n\t\tentry.trackIndex = trackIndex;\n\t\tentry.animation = animation;\n\t\tentry.loop = loop;\n\t\tentry.holdPrevious = false;\n\n\t\tentry.reverse = false;\n\t\tentry.shortestRotation = false;\n\n\t\tentry.eventThreshold = 0;\n\t\tentry.attachmentThreshold = 0;\n\t\tentry.drawOrderThreshold = 0;\n\n\t\tentry.animationStart = 0;\n\t\tentry.animationEnd = animation.duration;\n\t\tentry.animationLast = -1;\n\t\tentry.nextAnimationLast = -1;\n\n\t\tentry.delay = 0;\n\t\tentry.trackTime = 0;\n\t\tentry.trackLast = -1;\n\t\tentry.nextTrackLast = -1;\n\t\tentry.trackEnd = Number.MAX_VALUE;\n\t\tentry.timeScale = 1;\n\n\t\tentry.alpha = 1;\n\t\tentry.mixTime = 0;\n\t\tentry.mixDuration = !last ? 0 : this.data.getMix(last.animation!, animation);\n\t\tentry.interruptAlpha = 1;\n\t\tentry.totalAlpha = 0;\n\t\tentry.mixBlend = MixBlend.replace;\n\t\treturn entry;\n\t}\n\n\t/** Removes the {@link TrackEntry#getNext() next entry} and all entries after it for the specified entry. */\n\tclearNext (entry: TrackEntry) {\n\t\tlet next = entry.next;\n\t\twhile (next) {\n\t\t\tthis.queue.dispose(next);\n\t\t\tnext = next.next;\n\t\t}\n\t\tentry.next = null;\n\t}\n\n\t_animationsChanged () {\n\t\tthis.animationsChanged = false;\n\n\t\tthis.propertyIDs.clear();\n\t\tlet tracks = this.tracks;\n\t\tfor (let i = 0, n = tracks.length; i < n; i++) {\n\t\t\tlet entry = tracks[i];\n\t\t\tif (!entry) continue;\n\t\t\twhile (entry.mixingFrom)\n\t\t\t\tentry = entry.mixingFrom;\n\t\t\tdo {\n\t\t\t\tif (!entry.mixingTo || entry.mixBlend != MixBlend.add) this.computeHold(entry);\n\t\t\t\tentry = entry.mixingTo;\n\t\t\t} while (entry);\n\t\t}\n\t}\n\n\tcomputeHold (entry: TrackEntry) {\n\t\tlet to = entry.mixingTo;\n\t\tlet timelines = entry.animation!.timelines;\n\t\tlet timelinesCount = entry.animation!.timelines.length;\n\t\tlet timelineMode = entry.timelineMode;\n\t\ttimelineMode.length = timelinesCount;\n\t\tlet timelineHoldMix = entry.timelineHoldMix;\n\t\ttimelineHoldMix.length = 0;\n\t\tlet propertyIDs = this.propertyIDs;\n\n\t\tif (to && to.holdPrevious) {\n\t\t\tfor (let i = 0; i < timelinesCount; i++)\n\t\t\t\ttimelineMode[i] = propertyIDs.addAll(timelines[i].getPropertyIds()) ? HOLD_FIRST : HOLD_SUBSEQUENT;\n\t\t\treturn;\n\t\t}\n\n\t\touter:\n\t\tfor (let i = 0; i < timelinesCount; i++) {\n\t\t\tlet timeline = timelines[i];\n\t\t\tlet ids = timeline.getPropertyIds();\n\t\t\tif (!propertyIDs.addAll(ids))\n\t\t\t\ttimelineMode[i] = SUBSEQUENT;\n\t\t\telse if (!to || timeline instanceof AttachmentTimeline || timeline instanceof DrawOrderTimeline\n\t\t\t\t|| timeline instanceof EventTimeline || !to.animation!.hasTimeline(ids)) {\n\t\t\t\ttimelineMode[i] = FIRST;\n\t\t\t} else {\n\t\t\t\tfor (let next = to.mixingTo; next; next = next!.mixingTo) {\n\t\t\t\t\tif (next.animation!.hasTimeline(ids)) continue;\n\t\t\t\t\tif (entry.mixDuration > 0) {\n\t\t\t\t\t\ttimelineMode[i] = HOLD_MIX;\n\t\t\t\t\t\ttimelineHoldMix[i] = next;\n\t\t\t\t\t\tcontinue outer;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\ttimelineMode[i] = HOLD_FIRST;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Returns the track entry for the animation currently playing on the track, or null if no animation is currently playing. */\n\tgetCurrent (trackIndex: number) {\n\t\tif (trackIndex >= this.tracks.length) return null;\n\t\treturn this.tracks[trackIndex];\n\t}\n\n\t/** Adds a listener to receive events for all track entries. */\n\taddListener (listener: AnimationStateListener) {\n\t\tif (!listener) throw new Error(\"listener cannot be null.\");\n\t\tthis.listeners.push(listener);\n\t}\n\n\t/** Removes the listener added with {@link #addListener()}. */\n\tremoveListener (listener: AnimationStateListener) {\n\t\tlet index = this.listeners.indexOf(listener);\n\t\tif (index >= 0) this.listeners.splice(index, 1);\n\t}\n\n\t/** Removes all listeners added with {@link #addListener()}. */\n\tclearListeners () {\n\t\tthis.listeners.length = 0;\n\t}\n\n\t/** Discards all listener notifications that have not yet been delivered. This can be useful to call from an\n\t * {@link AnimationStateListener} when it is known that further notifications that may have been already queued for delivery\n\t * are not wanted because new animations are being set. */\n\tclearListenerNotifications () {\n\t\tthis.queue.clear();\n\t}\n}\n\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. */\nexport class TrackEntry {\n\t/** The animation to apply for this track entry. */\n\tanimation: Animation | null = null;\n\n\tprevious: TrackEntry | null = null;\n\n\t/** The animation queued to start after this animation, or null. `next` makes up a linked list. */\n\tnext: TrackEntry | null = null;\n\n\t/** The track entry for the previous animation when mixing from the previous animation to this animation, or null if no\n\t * mixing is currently occuring. When mixing from multiple animations, `mixingFrom` makes up a linked list. */\n\tmixingFrom: TrackEntry | null = null;\n\n\t/** The track entry for the next animation when mixing from this animation to the next animation, or null if no mixing is\n\t * currently occuring. When mixing to multiple animations, `mixingTo` makes up a linked list. */\n\tmixingTo: TrackEntry | null = null;\n\n\t/** The listener for events generated by this track entry, or null.\n\t *\n\t * A track entry returned from {@link AnimationState#setAnimation()} is already the current animation\n\t * for the track, so the track entry listener {@link AnimationStateListener#start()} will not be called. */\n\tlistener: AnimationStateListener | null = null;\n\n\t/** The index of the track where this track entry is either current or queued.\n\t *\n\t * See {@link AnimationState#getCurrent()}. */\n\ttrackIndex: number = 0;\n\n\t/** If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its\n\t * duration. */\n\tloop: boolean = false;\n\n\t/** If true, when mixing from the previous animation to this animation, the previous animation is applied as normal instead\n\t * of being mixed out.\n\t *\n\t * When mixing between animations that key the same property, if a lower track also keys that property then the value will\n\t * briefly dip toward the lower track value during the mix. This happens because the first animation mixes from 100% to 0%\n\t * while the second animation mixes from 0% to 100%. Setting `holdPrevious` to true applies the first animation\n\t * at 100% during the mix so the lower track value is overwritten. Such dipping does not occur on the lowest track which\n\t * keys the property, only when a higher track also keys the property.\n\t *\n\t * Snapping will occur if `holdPrevious` is true and this animation does not key all the same properties as the\n\t * previous animation. */\n\tholdPrevious: boolean = false;\n\n\treverse: boolean = false;\n\n\tshortestRotation: boolean = false;\n\n\t/** When the mix percentage ({@link #mixTime} / {@link #mixDuration}) is less than the\n\t * `eventThreshold`, event timelines are applied while this animation is being mixed out. Defaults to 0, so event\n\t * timelines are not applied while this animation is being mixed out. */\n\teventThreshold: number = 0;\n\n\t/** When the mix percentage ({@link #mixtime} / {@link #mixDuration}) is less than the\n\t * `attachmentThreshold`, attachment timelines are applied while this animation is being mixed out. Defaults to\n\t * 0, so attachment timelines are not applied while this animation is being mixed out. */\n\tattachmentThreshold: number = 0;\n\n\t/** When the mix percentage ({@link #mixTime} / {@link #mixDuration}) is less than the\n\t * `drawOrderThreshold`, draw order timelines are applied while this animation is being mixed out. Defaults to 0,\n\t * so draw order timelines are not applied while this animation is being mixed out. */\n\tdrawOrderThreshold: number = 0;\n\n\t/** Seconds when this animation starts, both initially and after looping. Defaults to 0.\n\t *\n\t * When changing the `animationStart` time, it often makes sense to set {@link #animationLast} to the same\n\t * value to prevent timeline keys before the start time from triggering. */\n\tanimationStart: number = 0;\n\n\t/** Seconds for the last frame of this animation. Non-looping animations won't play past this time. Looping animations will\n\t * loop back to {@link #animationStart} at this time. Defaults to the animation {@link Animation#duration}. */\n\tanimationEnd: number = 0;\n\n\n\t/** The time in seconds this animation was last applied. Some timelines use this for one-time triggers. Eg, when this\n\t * animation is applied, event timelines will fire all events between the `animationLast` time (exclusive) and\n\t * `animationTime` (inclusive). Defaults to -1 to ensure triggers on frame 0 happen the first time this animation\n\t * is applied. */\n\tanimationLast: number = 0;\n\n\tnextAnimationLast: number = 0;\n\n\t/** Seconds to postpone playing the animation. When this track entry is the current track entry, `delay`\n\t * postpones incrementing the {@link #trackTime}. When this track entry is queued, `delay` is the time from\n\t * the start of the previous animation to when this track entry will become the current track entry (ie when the previous\n\t * track entry {@link TrackEntry#trackTime} >= this track entry's `delay`).\n\t *\n\t * {@link #timeScale} affects the delay. */\n\tdelay: number = 0;\n\n\t/** Current time in seconds this track entry has been the current track entry. The track time determines\n\t * {@link #animationTime}. The track time can be set to start the animation at a time other than 0, without affecting\n\t * looping. */\n\ttrackTime: number = 0;\n\n\ttrackLast: number = 0; nextTrackLast: number = 0;\n\n\t/** The track time in seconds when this animation will be removed from the track. Defaults to the highest possible float\n\t * value, meaning the animation will be applied until a new animation is set or the track is cleared. If the track end time\n\t * is reached, no other animations are queued for playback, and mixing from any previous animations is complete, then the\n\t * properties keyed by the animation are set to the setup pose and the track is cleared.\n\t *\n\t * It may be desired to use {@link AnimationState#addEmptyAnimation()} rather than have the animation\n\t * abruptly cease being applied. */\n\ttrackEnd: number = 0;\n\n\t/** Multiplier for the delta time when this track entry is updated, causing time for this animation to pass slower or\n\t * faster. Defaults to 1.\n\t *\n\t * {@link #mixTime} is not affected by track entry time scale, so {@link #mixDuration} may need to be adjusted to\n\t * match the animation speed.\n\t *\n\t * When using {@link AnimationState#addAnimation()} with a `delay` <= 0, note the\n\t * {@link #delay} is set using the mix duration from the {@link AnimationStateData}, assuming time scale to be 1. If\n\t * the time scale is not 1, the delay may need to be adjusted.\n\t *\n\t * See AnimationState {@link AnimationState#timeScale} for affecting all animations. */\n\ttimeScale: number = 0;\n\n\t/** Values < 1 mix this animation with the skeleton's current pose (usually the pose resulting from lower tracks). Defaults\n\t * to 1, which overwrites the skeleton's current pose with this animation.\n\t *\n\t * Typically track 0 is used to completely pose the skeleton, then alpha is used on higher tracks. It doesn't make sense to\n\t * use alpha on track 0 if the skeleton pose is from the last frame render. */\n\talpha: number = 0;\n\n\t/** Seconds from 0 to the {@link #getMixDuration()} when mixing from the previous animation to this animation. May be\n\t * slightly more than `mixDuration` when the mix is complete. */\n\tmixTime: number = 0;\n\n\t/** Seconds for mixing from the previous animation to this animation. Defaults to the value provided by AnimationStateData\n\t * {@link AnimationStateData#getMix()} based on the animation before this animation (if any).\n\t *\n\t * A mix duration of 0 still mixes out over one frame to provide the track entry being mixed out a chance to revert the\n\t * properties it was animating.\n\t *\n\t * The `mixDuration` can be set manually rather than use the value from\n\t * {@link AnimationStateData#getMix()}. In that case, the `mixDuration` can be set for a new\n\t * track entry only before {@link AnimationState#update(float)} is first called.\n\t *\n\t * When using {@link AnimationState#addAnimation()} with a `delay` <= 0, note the\n\t * {@link #delay} is set using the mix duration from the {@link AnimationStateData}, not a mix duration set\n\t * afterward. */\n\tmixDuration: number = 0; interruptAlpha: number = 0; totalAlpha: number = 0;\n\n\t/** Controls how properties keyed in the animation are mixed with lower tracks. Defaults to {@link MixBlend#replace}, which\n\t * replaces the values from the lower tracks with the animation values. {@link MixBlend#add} adds the animation values to\n\t * the values from the lower tracks.\n\t *\n\t * The `mixBlend` can be set for a new track entry only before {@link AnimationState#apply()} is first\n\t * called. */\n\tmixBlend = MixBlend.replace;\n\ttimelineMode = new Array<number>();\n\ttimelineHoldMix = new Array<TrackEntry>();\n\ttimelinesRotation = new Array<number>();\n\n\treset () {\n\t\tthis.next = null;\n\t\tthis.previous = null;\n\t\tthis.mixingFrom = null;\n\t\tthis.mixingTo = null;\n\t\tthis.animation = null;\n\t\tthis.listener = null;\n\t\tthis.timelineMode.length = 0;\n\t\tthis.timelineHoldMix.length = 0;\n\t\tthis.timelinesRotation.length = 0;\n\t}\n\n\t/** Uses {@link #trackTime} to compute the `animationTime`, which is between {@link #animationStart}\n\t * and {@link #animationEnd}. When the `trackTime` is 0, the `animationTime` is equal to the\n\t * `animationStart` time. */\n\tgetAnimationTime () {\n\t\tif (this.loop) {\n\t\t\tlet duration = this.animationEnd - this.animationStart;\n\t\t\tif (duration == 0) return this.animationStart;\n\t\t\treturn (this.trackTime % duration) + this.animationStart;\n\t\t}\n\t\treturn Math.min(this.trackTime + this.animationStart, this.animationEnd);\n\t}\n\n\tsetAnimationLast (animationLast: number) {\n\t\tthis.animationLast = animationLast;\n\t\tthis.nextAnimationLast = animationLast;\n\t}\n\n\t/** Returns true if at least one loop has been completed.\n\t *\n\t * See {@link AnimationStateListener#complete()}. */\n\tisComplete () {\n\t\treturn this.trackTime >= this.animationEnd - this.animationStart;\n\t}\n\n\t/** Resets the rotation directions for mixing this entry's rotate timelines. This can be useful to avoid bones rotating the\n\t * long way around when using {@link #alpha} and starting animations on other tracks.\n\t *\n\t * Mixing with {@link MixBlend#replace} involves finding a rotation between two others, which has two possible solutions:\n\t * the short way or the long way around. The two rotations likely change over time, so which direction is the short or long\n\t * way also changes. If the short way was always chosen, bones would flip to the other side when that direction became the\n\t * long way. TrackEntry chooses the short way the first time it is applied and remembers that direction. */\n\tresetRotationDirections () {\n\t\tthis.timelinesRotation.length = 0;\n\t}\n\n\tgetTrackComplete () {\n\t\tlet duration = this.animationEnd - this.animationStart;\n\t\tif (duration != 0) {\n\t\t\tif (this.loop) return duration * (1 + ((this.trackTime / duration) | 0)); // Completion of next loop.\n\t\t\tif (this.trackTime < duration) return duration; // Before duration.\n\t\t}\n\t\treturn this.trackTime; // Next update.\n\t}\n}\n\nexport class EventQueue {\n\tobjects: Array<any> = [];\n\tdrainDisabled = false;\n\tanimState: AnimationState;\n\n\tconstructor (animState: AnimationState) {\n\t\tthis.animState = animState;\n\t}\n\n\tstart (entry: TrackEntry) {\n\t\tthis.objects.push(EventType.start);\n\t\tthis.objects.push(entry);\n\t\tthis.animState.animationsChanged = true;\n\t}\n\n\tinterrupt (entry: TrackEntry) {\n\t\tthis.objects.push(EventType.interrupt);\n\t\tthis.objects.push(entry);\n\t}\n\n\tend (entry: TrackEntry) {\n\t\tthis.objects.push(EventType.end);\n\t\tthis.objects.push(entry);\n\t\tthis.animState.animationsChanged = true;\n\t}\n\n\tdispose (entry: TrackEntry) {\n\t\tthis.objects.push(EventType.dispose);\n\t\tthis.objects.push(entry);\n\t}\n\n\tcomplete (entry: TrackEntry) {\n\t\tthis.objects.push(EventType.complete);\n\t\tthis.objects.push(entry);\n\t}\n\n\tevent (entry: TrackEntry, event: Event) {\n\t\tthis.objects.push(EventType.event);\n\t\tthis.objects.push(entry);\n\t\tthis.objects.push(event);\n\t}\n\n\tdrain () {\n\t\tif (this.drainDisabled) return;\n\t\tthis.drainDisabled = true;\n\n\t\tlet objects = this.objects;\n\t\tlet listeners = this.animState.listeners;\n\n\t\tfor (let i = 0; i < objects.length; i += 2) {\n\t\t\tlet type = objects[i] as EventType;\n\t\t\tlet entry = objects[i + 1] as TrackEntry;\n\t\t\tswitch (type) {\n\t\t\t\tcase EventType.start:\n\t\t\t\t\tif (entry.listener && entry.listener.start) entry.listener.start(entry);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tlet listener = listeners[ii];\n\t\t\t\t\t\tif (listener.start) listener.start(entry);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase EventType.interrupt:\n\t\t\t\t\tif (entry.listener && entry.listener.interrupt) entry.listener.interrupt(entry);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tlet listener = listeners[ii];\n\t\t\t\t\t\tif (listener.interrupt) listener.interrupt(entry);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase EventType.end:\n\t\t\t\t\tif (entry.listener && entry.listener.end) entry.listener.end(entry);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tlet listener = listeners[ii];\n\t\t\t\t\t\tif (listener.end) listener.end(entry);\n\t\t\t\t\t}\n\t\t\t\t// Fall through.\n\t\t\t\tcase EventType.dispose:\n\t\t\t\t\tif (entry.listener && entry.listener.dispose) entry.listener.dispose(entry);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tlet listener = listeners[ii];\n\t\t\t\t\t\tif (listener.dispose) listener.dispose(entry);\n\t\t\t\t\t}\n\t\t\t\t\tthis.animState.trackEntryPool.free(entry);\n\t\t\t\t\tbreak;\n\t\t\t\tcase EventType.complete:\n\t\t\t\t\tif (entry.listener && entry.listener.complete) entry.listener.complete(entry);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tlet listener = listeners[ii];\n\t\t\t\t\t\tif (listener.complete) listener.complete(entry);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase EventType.event:\n\t\t\t\t\tlet event = objects[i++ + 2] as Event;\n\t\t\t\t\tif (entry.listener && entry.listener.event) entry.listener.event(entry, event);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tlet listener = listeners[ii];\n\t\t\t\t\t\tif (listener.event) listener.event(entry, event);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.clear();\n\n\t\tthis.drainDisabled = false;\n\t}\n\n\tclear () {\n\t\tthis.objects.length = 0;\n\t}\n}\n\nexport enum EventType {\n\tstart, interrupt, end, dispose, complete, event\n}\n\n/** The interface to implement for receiving TrackEntry events. It is always safe to call AnimationState methods when receiving\n * events.\n *\n * See TrackEntry {@link TrackEntry#listener} and AnimationState\n * {@link AnimationState#addListener()}. */\nexport interface AnimationStateListener {\n\t/** Invoked when this entry has been set as the current entry. */\n\tstart?: (entry: TrackEntry) => void;\n\n\t/** Invoked when another entry has replaced this entry as the current entry. This entry may continue being applied for\n\t * mixing. */\n\tinterrupt?: (entry: TrackEntry) => void;\n\n\t/** Invoked when this entry is no longer the current entry and will never be applied again. */\n\tend?: (entry: TrackEntry) => void;\n\n\t/** Invoked when this entry will be disposed. This may occur without the entry ever being set as the current entry.\n\t * References to the entry should not be kept after dispose is called, as it may be destroyed or reused. */\n\tdispose?: (entry: TrackEntry) => void;\n\n\t/** Invoked every time this entry's animation completes a loop. */\n\tcomplete?: (entry: TrackEntry) => void;\n\n\t/** Invoked when this entry's animation triggers an event. */\n\tevent?: (entry: TrackEntry, event: Event) => void;\n}\n\nexport abstract class AnimationStateAdapter implements AnimationStateListener {\n\tstart (entry: TrackEntry) {\n\t}\n\n\tinterrupt (entry: TrackEntry) {\n\t}\n\n\tend (entry: TrackEntry) {\n\t}\n\n\tdispose (entry: TrackEntry) {\n\t}\n\n\tcomplete (entry: TrackEntry) {\n\t}\n\n\tevent (entry: TrackEntry, event: Event) {\n\t}\n}\n\n/** 1. A previously applied timeline has set this property.\n *\n * Result: Mix from the current pose to the timeline pose. */\nexport const 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 const FIRST = 1;\n/** 1) A previously applied timeline has set this property.<br>\n * 2) The next track entry to be applied does have a timeline to set this property.<br>\n * 3) The next track entry after that one does not have a timeline to set this property.<br>\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 const HOLD_SUBSEQUENT = 2;\n/** 1) This is the first timeline to set this property.<br>\n * 2) The next track entry to be applied does have a timeline to set this property.<br>\n * 3) The next track entry after that one does not have a timeline to set this property.<br>\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 const 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 const HOLD_MIX = 4;\n\nexport const SETUP = 1;\nexport const CURRENT = 2;", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Animation } from \"./Animation\";\nimport { SkeletonData } from \"./SkeletonData\";\nimport { StringMap } from \"./Utils\";\n\n\n/** Stores mix (crossfade) durations to be applied when {@link AnimationState} animations are changed. */\nexport class AnimationStateData {\n\t/** The SkeletonData to look up animations when they are specified by name. */\n\tskeletonData: SkeletonData;\n\n\tanimationToMixTime: StringMap<number> = {};\n\n\t/** The mix duration to use when no mix duration has been defined between two animations. */\n\tdefaultMix = 0;\n\n\tconstructor (skeletonData: SkeletonData) {\n\t\tif (!skeletonData) throw new Error(\"skeletonData cannot be null.\");\n\t\tthis.skeletonData = skeletonData;\n\t}\n\n\t/** Sets a mix duration by animation name.\n\t *\n\t * See {@link #setMixWith()}. */\n\tsetMix (fromName: string, toName: string, duration: number) {\n\t\tlet from = this.skeletonData.findAnimation(fromName);\n\t\tif (!from) throw new Error(\"Animation not found: \" + fromName);\n\t\tlet to = this.skeletonData.findAnimation(toName);\n\t\tif (!to) throw new Error(\"Animation not found: \" + toName);\n\t\tthis.setMixWith(from, to, duration);\n\t}\n\n\t/** Sets the mix duration when changing from the specified animation to the other.\n\t *\n\t * See {@link TrackEntry#mixDuration}. */\n\tsetMixWith (from: Animation, to: Animation, duration: number) {\n\t\tif (!from) throw new Error(\"from cannot be null.\");\n\t\tif (!to) throw new Error(\"to cannot be null.\");\n\t\tlet key = from.name + \".\" + to.name;\n\t\tthis.animationToMixTime[key] = duration;\n\t}\n\n\t/** Returns the mix duration to use when changing from the specified animation to the other, or the {@link #defaultMix} if\n\t  * no mix duration has been set. */\n\tgetMix (from: Animation, to: Animation) {\n\t\tlet key = from.name + \".\" + to.name;\n\t\tlet value = this.animationToMixTime[key];\n\t\treturn value === undefined ? this.defaultMix : value;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Color } from \"../Utils\";\nimport { VertexAttachment, Attachment } from \"./Attachment\";\n\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. */\nexport class BoundingBoxAttachment extends VertexAttachment {\n\tcolor = new Color(1, 1, 1, 1);\n\n\tconstructor (name: string) {\n\t\tsuper(name);\n\t}\n\n\tcopy (): Attachment {\n\t\tlet copy = new BoundingBoxAttachment(this.name);\n\t\tthis.copyTo(copy);\n\t\tcopy.color.setFromColor(this.color);\n\t\treturn copy;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { SlotData } from \"../SlotData\";\nimport { Color } from \"../Utils\";\nimport { VertexAttachment, Attachment } from \"./Attachment\";\n\n/** An attachment with vertices that make up a polygon used for clipping the rendering of other attachments. */\nexport class ClippingAttachment extends VertexAttachment {\n\t/** Clipping is performed between the clipping polygon's slot and the end slot. Returns null if clipping is done until the end of\n\t * the skeleton's rendering. */\n\tendSlot: SlotData | null = null;\n\n\t// Nonessential.\n\t/** The color of the clipping polygon as it was in Spine. Available only when nonessential data was exported. Clipping polygons\n\t * are not usually rendered at runtime. */\n\tcolor = new Color(0.2275, 0.2275, 0.8078, 1); // ce3a3aff\n\n\tconstructor (name: string) {\n\t\tsuper(name);\n\t}\n\n\tcopy (): Attachment {\n\t\tlet copy = new ClippingAttachment(this.name);\n\t\tthis.copyTo(copy);\n\t\tcopy.endSlot = this.endSlot;\n\t\tcopy.color.setFromColor(this.color);\n\t\treturn copy;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nexport abstract class Texture {\n\tprotected _image: HTMLImageElement | ImageBitmap;\n\n\tconstructor (image: HTMLImageElement | ImageBitmap) {\n\t\tthis._image = image;\n\t}\n\n\tgetImage (): HTMLImageElement | ImageBitmap {\n\t\treturn this._image;\n\t}\n\n\tabstract setFilters (minFilter: TextureFilter, magFilter: TextureFilter): void;\n\tabstract setWraps (uWrap: TextureWrap, vWrap: TextureWrap): void;\n\tabstract dispose (): void;\n}\n\nexport enum TextureFilter {\n\tNearest = 9728, // WebGLRenderingContext.NEAREST\n\tLinear = 9729, // WebGLRenderingContext.LINEAR\n\tMipMap = 9987, // WebGLRenderingContext.LINEAR_MIPMAP_LINEAR\n\tMipMapNearestNearest = 9984, // WebGLRenderingContext.NEAREST_MIPMAP_NEAREST\n\tMipMapLinearNearest = 9985, // WebGLRenderingContext.LINEAR_MIPMAP_NEAREST\n\tMipMapNearestLinear = 9986, // WebGLRenderingContext.NEAREST_MIPMAP_LINEAR\n\tMipMapLinearLinear = 9987 // WebGLRenderingContext.LINEAR_MIPMAP_LINEAR\n}\n\nexport enum TextureWrap {\n\tMirroredRepeat = 33648, // WebGLRenderingContext.MIRRORED_REPEAT\n\tClampToEdge = 33071, // WebGLRenderingContext.CLAMP_TO_EDGE\n\tRepeat = 10497 // WebGLRenderingContext.REPEAT\n}\n\nexport class TextureRegion {\n\trenderObject: any;\n\tu = 0; v = 0;\n\tu2 = 0; v2 = 0;\n\twidth = 0; height = 0;\n\tdegrees = 0;\n\toffsetX = 0; offsetY = 0;\n\toriginalWidth = 0; originalHeight = 0;\n}\n\nexport class FakeTexture extends Texture {\n\tsetFilters (minFilter: TextureFilter, magFilter: TextureFilter) { }\n\tsetWraps (uWrap: TextureWrap, vWrap: TextureWrap) { }\n\tdispose () { }\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { AssetManagerBase } from \"./AssetManagerBase\";\nimport { TextureFilter, TextureWrap, Texture, TextureRegion } from \"./Texture\";\nimport { Disposable, Utils, StringMap } from \"./Utils\";\n\nexport class TextureAtlas implements Disposable {\n\tpages = new Array<TextureAtlasPage>();\n\tregions = new Array<TextureAtlasRegion>();\n\n\tconstructor (atlasText: string) {\n\t\tlet reader = new TextureAtlasReader(atlasText);\n\t\tlet entry = new Array<string>(4);\n\n\t\tlet pageFields: StringMap<(page: TextureAtlasPage) => void> = {};\n\t\tpageFields[\"size\"] = (page: TextureAtlasPage) => {\n\t\t\tpage!.width = parseInt(entry[1]);\n\t\t\tpage!.height = parseInt(entry[2]);\n\t\t};\n\t\tpageFields[\"format\"] = () => {\n\t\t\t// page.format = Format[tuple[0]]; we don't need format in WebGL\n\t\t};\n\t\tpageFields[\"filter\"] = (page: TextureAtlasPage) => {\n\t\t\tpage!.minFilter = Utils.enumValue(TextureFilter, entry[1]);\n\t\t\tpage!.magFilter = Utils.enumValue(TextureFilter, entry[2]);\n\t\t};\n\t\tpageFields[\"repeat\"] = (page: TextureAtlasPage) => {\n\t\t\tif (entry[1].indexOf('x') != -1) page!.uWrap = TextureWrap.Repeat;\n\t\t\tif (entry[1].indexOf('y') != -1) page!.vWrap = TextureWrap.Repeat;\n\t\t};\n\t\tpageFields[\"pma\"] = (page: TextureAtlasPage) => {\n\t\t\tpage!.pma = entry[1] == \"true\";\n\t\t};\n\n\t\tvar regionFields: StringMap<(region: TextureAtlasRegion) => void> = {};\n\t\tregionFields[\"xy\"] = (region: TextureAtlasRegion) => { // Deprecated, use bounds.\n\t\t\tregion.x = parseInt(entry[1]);\n\t\t\tregion.y = parseInt(entry[2]);\n\t\t};\n\t\tregionFields[\"size\"] = (region: TextureAtlasRegion) => { // Deprecated, use bounds.\n\t\t\tregion.width = parseInt(entry[1]);\n\t\t\tregion.height = parseInt(entry[2]);\n\t\t};\n\t\tregionFields[\"bounds\"] = (region: TextureAtlasRegion) => {\n\t\t\tregion.x = parseInt(entry[1]);\n\t\t\tregion.y = parseInt(entry[2]);\n\t\t\tregion.width = parseInt(entry[3]);\n\t\t\tregion.height = parseInt(entry[4]);\n\t\t};\n\t\tregionFields[\"offset\"] = (region: TextureAtlasRegion) => { // Deprecated, use offsets.\n\t\t\tregion.offsetX = parseInt(entry[1]);\n\t\t\tregion.offsetY = parseInt(entry[2]);\n\t\t};\n\t\tregionFields[\"orig\"] = (region: TextureAtlasRegion) => { // Deprecated, use offsets.\n\t\t\tregion.originalWidth = parseInt(entry[1]);\n\t\t\tregion.originalHeight = parseInt(entry[2]);\n\t\t};\n\t\tregionFields[\"offsets\"] = (region: TextureAtlasRegion) => {\n\t\t\tregion.offsetX = parseInt(entry[1]);\n\t\t\tregion.offsetY = parseInt(entry[2]);\n\t\t\tregion.originalWidth = parseInt(entry[3]);\n\t\t\tregion.originalHeight = parseInt(entry[4]);\n\t\t};\n\t\tregionFields[\"rotate\"] = (region: TextureAtlasRegion) => {\n\t\t\tlet value = entry[1];\n\t\t\tif (value == \"true\")\n\t\t\t\tregion.degrees = 90;\n\t\t\telse if (value != \"false\")\n\t\t\t\tregion.degrees = parseInt(value);\n\t\t};\n\t\tregionFields[\"index\"] = (region: TextureAtlasRegion) => {\n\t\t\tregion.index = parseInt(entry[1]);\n\t\t};\n\n\t\tlet line = reader.readLine();\n\t\t// Ignore empty lines before first entry.\n\t\twhile (line && line.trim().length == 0)\n\t\t\tline = reader.readLine();\n\t\t// Header entries.\n\t\twhile (true) {\n\t\t\tif (!line || line.trim().length == 0) break;\n\t\t\tif (reader.readEntry(entry, line) == 0) break; // Silently ignore all header fields.\n\t\t\tline = reader.readLine();\n\t\t}\n\n\t\t// Page and region entries.\n\t\tlet page: TextureAtlasPage | null = null;\n\t\tlet names: string[] | null = null;\n\t\tlet values: number[][] | null = null;\n\t\twhile (true) {\n\t\t\tif (line === null) break;\n\t\t\tif (line.trim().length == 0) {\n\t\t\t\tpage = null;\n\t\t\t\tline = reader.readLine();\n\t\t\t} else if (!page) {\n\t\t\t\tpage = new TextureAtlasPage(line.trim());\n\t\t\t\twhile (true) {\n\t\t\t\t\tif (reader.readEntry(entry, line = reader.readLine()) == 0) break;\n\t\t\t\t\tlet field = pageFields[entry[0]];\n\t\t\t\t\tif (field) field(page);\n\t\t\t\t}\n\t\t\t\tthis.pages.push(page);\n\t\t\t} else {\n\t\t\t\tlet region = new TextureAtlasRegion(page, line);\n\n\t\t\t\twhile (true) {\n\t\t\t\t\tlet count = reader.readEntry(entry, line = reader.readLine());\n\t\t\t\t\tif (count == 0) break;\n\t\t\t\t\tlet field = regionFields[entry[0]];\n\t\t\t\t\tif (field)\n\t\t\t\t\t\tfield(region);\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (!names) names = [];\n\t\t\t\t\t\tif (!values) values = [];\n\t\t\t\t\t\tnames.push(entry[0]);\n\t\t\t\t\t\tlet entryValues: number[] = [];\n\t\t\t\t\t\tfor (let i = 0; i < count; i++)\n\t\t\t\t\t\t\tentryValues.push(parseInt(entry[i + 1]));\n\t\t\t\t\t\tvalues.push(entryValues);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (region.originalWidth == 0 && region.originalHeight == 0) {\n\t\t\t\t\tregion.originalWidth = region.width;\n\t\t\t\t\tregion.originalHeight = region.height;\n\t\t\t\t}\n\t\t\t\tif (names && names.length > 0 && values && values.length > 0) {\n\t\t\t\t\tregion.names = names;\n\t\t\t\t\tregion.values = values;\n\t\t\t\t\tnames = null;\n\t\t\t\t\tvalues = null;\n\t\t\t\t}\n\t\t\t\tregion.u = region.x / page.width;\n\t\t\t\tregion.v = region.y / page.height;\n\t\t\t\tif (region.degrees == 90) {\n\t\t\t\t\tregion.u2 = (region.x + region.height) / page.width;\n\t\t\t\t\tregion.v2 = (region.y + region.width) / page.height;\n\t\t\t\t} else {\n\t\t\t\t\tregion.u2 = (region.x + region.width) / page.width;\n\t\t\t\t\tregion.v2 = (region.y + region.height) / page.height;\n\t\t\t\t}\n\t\t\t\tthis.regions.push(region);\n\t\t\t}\n\t\t}\n\t}\n\n\tfindRegion (name: string): TextureAtlasRegion | null {\n\t\tfor (let i = 0; i < this.regions.length; i++) {\n\t\t\tif (this.regions[i].name == name) {\n\t\t\t\treturn this.regions[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tsetTextures (assetManager: AssetManagerBase, pathPrefix: string = \"\") {\n\t\tfor (let page of this.pages)\n\t\t\tpage.setTexture(assetManager.get(pathPrefix + page.name));\n\t}\n\n\tdispose () {\n\t\tfor (let i = 0; i < this.pages.length; i++) {\n\t\t\tthis.pages[i].texture?.dispose();\n\t\t}\n\t}\n}\n\nclass TextureAtlasReader {\n\tlines: Array<string>;\n\tindex: number = 0;\n\n\tconstructor (text: string) {\n\t\tthis.lines = text.split(/\\r\\n|\\r|\\n/);\n\t}\n\n\treadLine (): string | null {\n\t\tif (this.index >= this.lines.length)\n\t\t\treturn null;\n\t\treturn this.lines[this.index++];\n\t}\n\n\treadEntry (entry: string[], line: string | null): number {\n\t\tif (!line) return 0;\n\t\tline = line.trim();\n\t\tif (line.length == 0) return 0;\n\n\t\tlet colon = line.indexOf(':');\n\t\tif (colon == -1) return 0;\n\t\tentry[0] = line.substr(0, colon).trim();\n\t\tfor (let i = 1, lastMatch = colon + 1; ; i++) {\n\t\t\tlet comma = line.indexOf(',', lastMatch);\n\t\t\tif (comma == -1) {\n\t\t\t\tentry[i] = line.substr(lastMatch).trim();\n\t\t\t\treturn i;\n\t\t\t}\n\t\t\tentry[i] = line.substr(lastMatch, comma - lastMatch).trim();\n\t\t\tlastMatch = comma + 1;\n\t\t\tif (i == 4) return 4;\n\t\t}\n\t}\n}\n\nexport class TextureAtlasPage {\n\tname: string;\n\tminFilter: TextureFilter = TextureFilter.Nearest;\n\tmagFilter: TextureFilter = TextureFilter.Nearest;\n\tuWrap: TextureWrap = TextureWrap.ClampToEdge;\n\tvWrap: TextureWrap = TextureWrap.ClampToEdge;\n\ttexture: Texture | null = null;\n\twidth: number = 0;\n\theight: number = 0;\n\tpma: boolean = false;\n\n\tconstructor (name: string) {\n\t\tthis.name = name;\n\t}\n\n\tsetTexture (texture: Texture) {\n\t\tthis.texture = texture;\n\t\ttexture.setFilters(this.minFilter, this.magFilter);\n\t\ttexture.setWraps(this.uWrap, this.vWrap);\n\t}\n}\n\nexport class TextureAtlasRegion extends TextureRegion {\n\tpage: TextureAtlasPage;\n\tname: string;\n\tx: number = 0;\n\ty: number = 0;\n\toffsetX: number = 0;\n\toffsetY: number = 0;\n\toriginalWidth: number = 0;\n\toriginalHeight: number = 0;\n\tindex: number = 0;\n\tdegrees: number = 0;\n\tnames: string[] | null = null;\n\tvalues: number[][] | null = null;\n\n\tconstructor (page: TextureAtlasPage, name: string) {\n\t\tsuper();\n\t\tthis.page = page;\n\t\tthis.name = name;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { TextureRegion } from \"../Texture\";\nimport { TextureAtlasRegion } from \"../TextureAtlas\";\nimport { Color, NumberArrayLike, Utils } from \"../Utils\";\nimport { VertexAttachment, Attachment } from \"./Attachment\";\nimport { HasTextureRegion } from \"./HasTextureRegion\";\nimport { Sequence } from \"./Sequence\";\nimport { Slot } from \"../Slot\";\n\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. */\nexport class MeshAttachment extends VertexAttachment implements HasTextureRegion {\n\tregion: TextureRegion | null = null;\n\n\t/** The name of the texture region for this attachment. */\n\tpath: string;\n\n\t/** The UV pair for each vertex, normalized within the texture region. */\n\tregionUVs: NumberArrayLike = [];\n\n\t/** The UV pair for each vertex, normalized within the entire texture.\n\t *\n\t * See {@link #updateUVs}. */\n\tuvs: NumberArrayLike = [];\n\n\t/** Triplets of vertex indices which describe the mesh's triangulation. */\n\ttriangles: Array<number> = [];\n\n\t/** The color to tint the mesh. */\n\tcolor = new Color(1, 1, 1, 1);\n\n\t/** The width of the mesh's image. Available only when nonessential data was exported. */\n\twidth: number = 0;\n\n\t/** The height of the mesh's image. Available only when nonessential data was exported. */\n\theight: number = 0;\n\n\t/** The number of entries at the beginning of {@link #vertices} that make up the mesh hull. */\n\thullLength: number = 0;\n\n\t/** Vertex index pairs describing edges for controling triangulation. Mesh triangles will never cross edges. Only available if\n\t * nonessential data was exported. Triangulation is not performed at runtime. */\n\tedges: Array<number> = [];\n\n\tprivate parentMesh: MeshAttachment | null = null;\n\n\tsequence: Sequence | null = null;\n\n\ttempColor = new Color(0, 0, 0, 0);\n\n\tconstructor (name: string, path: string) {\n\t\tsuper(name);\n\t\tthis.path = path;\n\t}\n\n\t/** Calculates {@link #uvs} using the {@link #regionUVs} and region. Must be called if the region, the region's properties, or\n\t * the {@link #regionUVs} are changed. */\n\tupdateRegion () {\n\t\tif (!this.region) throw new Error(\"Region not set.\");\n\t\tlet regionUVs = this.regionUVs;\n\t\tif (!this.uvs || this.uvs.length != regionUVs.length) this.uvs = Utils.newFloatArray(regionUVs.length);\n\t\tlet uvs = this.uvs;\n\t\tlet n = this.uvs.length;\n\t\tlet u = this.region.u, v = this.region.v, width = 0, height = 0;\n\t\tif (this.region instanceof TextureAtlasRegion) {\n\t\t\tlet region = this.region, image = region.page!.texture!.getImage();\n\t\t\tlet textureWidth = image.width, textureHeight = image.height;\n\t\t\tswitch (region.degrees) {\n\t\t\t\tcase 90:\n\t\t\t\t\tu -= (region.originalHeight - region.offsetY - region.height) / textureWidth;\n\t\t\t\t\tv -= (region.originalWidth - region.offsetX - region.width) / textureHeight;\n\t\t\t\t\twidth = region.originalHeight / textureWidth;\n\t\t\t\t\theight = region.originalWidth / textureHeight;\n\t\t\t\t\tfor (let i = 0; i < n; i += 2) {\n\t\t\t\t\t\tuvs[i] = u + regionUVs[i + 1] * width;\n\t\t\t\t\t\tuvs[i + 1] = v + (1 - regionUVs[i]) * height;\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\tcase 180:\n\t\t\t\t\tu -= (region.originalWidth - region.offsetX - region.width) / textureWidth;\n\t\t\t\t\tv -= region.offsetY / textureHeight;\n\t\t\t\t\twidth = region.originalWidth / textureWidth;\n\t\t\t\t\theight = region.originalHeight / textureHeight;\n\t\t\t\t\tfor (let i = 0; i < n; i += 2) {\n\t\t\t\t\t\tuvs[i] = u + (1 - regionUVs[i]) * width;\n\t\t\t\t\t\tuvs[i + 1] = v + (1 - regionUVs[i + 1]) * height;\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\tcase 270:\n\t\t\t\t\tu -= region.offsetY / textureWidth;\n\t\t\t\t\tv -= region.offsetX / textureHeight;\n\t\t\t\t\twidth = region.originalHeight / textureWidth;\n\t\t\t\t\theight = region.originalWidth / textureHeight;\n\t\t\t\t\tfor (let i = 0; i < n; i += 2) {\n\t\t\t\t\t\tuvs[i] = u + (1 - regionUVs[i + 1]) * width;\n\t\t\t\t\t\tuvs[i + 1] = v + regionUVs[i] * height;\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t\tu -= region.offsetX / textureWidth;\n\t\t\tv -= (region.originalHeight - region.offsetY - region.height) / textureHeight;\n\t\t\twidth = region.originalWidth / textureWidth;\n\t\t\theight = region.originalHeight / textureHeight;\n\t\t} else if (!this.region) {\n\t\t\tu = v = 0;\n\t\t\twidth = height = 1;\n\t\t} else {\n\t\t\twidth = this.region.u2 - u;\n\t\t\theight = this.region.v2 - v;\n\t\t}\n\n\t\tfor (let i = 0; i < n; i += 2) {\n\t\t\tuvs[i] = u + regionUVs[i] * width;\n\t\t\tuvs[i + 1] = v + regionUVs[i + 1] * height;\n\t\t}\n\t}\n\n\t/** The parent mesh if this is a linked mesh, else null. A linked mesh shares the {@link #bones}, {@link #vertices},\n\t * {@link #regionUVs}, {@link #triangles}, {@link #hullLength}, {@link #edges}, {@link #width}, and {@link #height} with the\n\t * parent mesh, but may have a different {@link #name} or {@link #path} (and therefore a different texture). */\n\tgetParentMesh () {\n\t\treturn this.parentMesh;\n\t}\n\n\t/** @param parentMesh May be null. */\n\tsetParentMesh (parentMesh: MeshAttachment) {\n\t\tthis.parentMesh = parentMesh;\n\t\tif (parentMesh) {\n\t\t\tthis.bones = parentMesh.bones;\n\t\t\tthis.vertices = parentMesh.vertices;\n\t\t\tthis.worldVerticesLength = parentMesh.worldVerticesLength;\n\t\t\tthis.regionUVs = parentMesh.regionUVs;\n\t\t\tthis.triangles = parentMesh.triangles;\n\t\t\tthis.hullLength = parentMesh.hullLength;\n\t\t\tthis.worldVerticesLength = parentMesh.worldVerticesLength\n\t\t}\n\t}\n\n\tcopy (): Attachment {\n\t\tif (this.parentMesh) return this.newLinkedMesh();\n\n\t\tlet copy = new MeshAttachment(this.name, this.path);\n\t\tcopy.region = this.region;\n\t\tcopy.color.setFromColor(this.color);\n\n\t\tthis.copyTo(copy);\n\t\tcopy.regionUVs = new Array<number>(this.regionUVs.length);\n\t\tUtils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length);\n\t\tcopy.uvs = new Array<number>(this.uvs.length);\n\t\tUtils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length);\n\t\tcopy.triangles = new Array<number>(this.triangles.length);\n\t\tUtils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length);\n\t\tcopy.hullLength = this.hullLength;\n\n\t\tcopy.sequence = this.sequence != null ? this.sequence.copy() : null;\n\n\t\t// Nonessential.\n\t\tif (this.edges) {\n\t\t\tcopy.edges = new Array<number>(this.edges.length);\n\t\t\tUtils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length);\n\t\t}\n\t\tcopy.width = this.width;\n\t\tcopy.height = this.height;\n\n\t\treturn copy;\n\t}\n\n\tcomputeWorldVertices (slot: Slot, start: number, count: number, worldVertices: NumberArrayLike, offset: number, stride: number) {\n\t\tif (this.sequence != null) this.sequence.apply(slot, this);\n\t\tsuper.computeWorldVertices(slot, start, count, worldVertices, offset, stride);\n\t}\n\n\t/** Returns a new mesh with the {@link #parentMesh} set to this mesh's parent mesh, if any, else to this mesh. **/\n\tnewLinkedMesh (): MeshAttachment {\n\t\tlet copy = new MeshAttachment(this.name, this.path);\n\t\tcopy.region = this.region;\n\t\tcopy.color.setFromColor(this.color);\n\t\tcopy.timelineAttachment = this.timelineAttachment;\n\t\tcopy.setParentMesh(this.parentMesh ? this.parentMesh : this);\n\t\tif (copy.region != null) copy.updateRegion();\n\t\treturn copy;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Color, Utils } from \"../Utils\";\nimport { VertexAttachment, Attachment } from \"./Attachment\";\n\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. */\nexport class PathAttachment extends VertexAttachment {\n\n\t/** The lengths along the path in the setup pose from the start of the path to the end of each Bezier curve. */\n\tlengths: Array<number> = [];\n\n\t/** If true, the start and end knots are connected. */\n\tclosed = false;\n\n\t/** If true, additional calculations are performed to make calculating positions along the path more accurate. If false, fewer\n\t * calculations are performed but calculating positions along the path is less accurate. */\n\tconstantSpeed = false;\n\n\t/** The color of the path as it was in Spine. Available only when nonessential data was exported. Paths are not usually\n\t * rendered at runtime. */\n\tcolor = new Color(1, 1, 1, 1);\n\n\tconstructor (name: string) {\n\t\tsuper(name);\n\t}\n\n\tcopy (): Attachment {\n\t\tlet copy = new PathAttachment(this.name);\n\t\tthis.copyTo(copy);\n\t\tcopy.lengths = new Array<number>(this.lengths.length);\n\t\tUtils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length);\n\t\tcopy.closed = closed;\n\t\tcopy.constantSpeed = this.constantSpeed;\n\t\tcopy.color.setFromColor(this.color);\n\t\treturn copy;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Bone } from \"../Bone\";\nimport { Color, Vector2, MathUtils } from \"../Utils\";\nimport { VertexAttachment, Attachment } from \"./Attachment\";\n\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. */\nexport class PointAttachment extends VertexAttachment {\n\tx: number = 0;\n\ty: number = 0;\n\trotation: number = 0;\n\n\t/** The color of the point attachment as it was in Spine. Available only when nonessential data was exported. Point attachments\n\t * are not usually rendered at runtime. */\n\tcolor = new Color(0.38, 0.94, 0, 1);\n\n\tconstructor (name: string) {\n\t\tsuper(name);\n\t}\n\n\tcomputeWorldPosition (bone: Bone, point: Vector2) {\n\t\tpoint.x = this.x * bone.a + this.y * bone.b + bone.worldX;\n\t\tpoint.y = this.x * bone.c + this.y * bone.d + bone.worldY;\n\t\treturn point;\n\t}\n\n\tcomputeWorldRotation (bone: Bone) {\n\t\tlet cos = MathUtils.cosDeg(this.rotation), sin = MathUtils.sinDeg(this.rotation);\n\t\tlet x = cos * bone.a + sin * bone.b;\n\t\tlet y = cos * bone.c + sin * bone.d;\n\t\treturn Math.atan2(y, x) * MathUtils.radDeg;\n\t}\n\n\tcopy (): Attachment {\n\t\tlet copy = new PointAttachment(this.name);\n\t\tcopy.x = this.x;\n\t\tcopy.y = this.y;\n\t\tcopy.rotation = this.rotation;\n\t\tcopy.color.setFromColor(this.color);\n\t\treturn copy;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Bone } from \"../Bone\";\nimport { TextureRegion } from \"../Texture\";\nimport { Color, NumberArrayLike, Utils } from \"../Utils\";\nimport { Attachment } from \"./Attachment\";\nimport { HasTextureRegion } from \"./HasTextureRegion\";\nimport { Sequence } from \"./Sequence\";\nimport { Slot } from \"../Slot\";\n\n/** An attachment that displays a textured quadrilateral.\n *\n * See [Region attachments](http://esotericsoftware.com/spine-regions) in the Spine User Guide. */\nexport class RegionAttachment extends Attachment implements HasTextureRegion {\n\t/** The local x translation. */\n\tx = 0;\n\n\t/** The local y translation. */\n\ty = 0;\n\n\t/** The local scaleX. */\n\tscaleX = 1;\n\n\t/** The local scaleY. */\n\tscaleY = 1;\n\n\t/** The local rotation. */\n\trotation = 0;\n\n\t/** The width of the region attachment in Spine. */\n\twidth = 0;\n\n\t/** The height of the region attachment in Spine. */\n\theight = 0;\n\n\t/** The color to tint the region attachment. */\n\tcolor = new Color(1, 1, 1, 1);\n\n\t/** The name of the texture region for this attachment. */\n\tpath: string;\n\n\tprivate rendererObject: any = null;\n\tregion: TextureRegion | null = null;\n\tsequence: Sequence | null = null;\n\n\t/** For each of the 4 vertices, a pair of <code>x,y</code> values that is the local position of the vertex.\n\t *\n\t * See {@link #updateOffset()}. */\n\toffset = Utils.newFloatArray(8);\n\n\tuvs = Utils.newFloatArray(8);\n\n\ttempColor = new Color(1, 1, 1, 1);\n\n\tconstructor (name: string, path: string) {\n\t\tsuper(name);\n\t\tthis.path = path;\n\t}\n\n\t/** Calculates the {@link #offset} using the region settings. Must be called after changing region settings. */\n\tupdateRegion (): void {\n\t\tif (!this.region) throw new Error(\"Region not set.\");\n\t\tlet region = this.region;\n\t\tlet uvs = this.uvs;\n\n\t\tif (region == null) {\n\t\t\tuvs[0] = 0;\n\t\t\tuvs[1] = 0;\n\t\t\tuvs[2] = 0;\n\t\t\tuvs[3] = 1;\n\t\t\tuvs[4] = 1;\n\t\t\tuvs[5] = 1;\n\t\t\tuvs[6] = 1;\n\t\t\tuvs[7] = 0;\n\t\t\treturn;\n\t\t}\n\n\t\tlet regionScaleX = this.width / this.region.originalWidth * this.scaleX;\n\t\tlet regionScaleY = this.height / this.region.originalHeight * this.scaleY;\n\t\tlet localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX;\n\t\tlet localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY;\n\t\tlet localX2 = localX + this.region.width * regionScaleX;\n\t\tlet localY2 = localY + this.region.height * regionScaleY;\n\t\tlet radians = this.rotation * Math.PI / 180;\n\t\tlet cos = Math.cos(radians);\n\t\tlet sin = Math.sin(radians);\n\t\tlet x = this.x, y = this.y;\n\t\tlet localXCos = localX * cos + x;\n\t\tlet localXSin = localX * sin;\n\t\tlet localYCos = localY * cos + y;\n\t\tlet localYSin = localY * sin;\n\t\tlet localX2Cos = localX2 * cos + x;\n\t\tlet localX2Sin = localX2 * sin;\n\t\tlet localY2Cos = localY2 * cos + y;\n\t\tlet localY2Sin = localY2 * sin;\n\t\tlet offset = this.offset;\n\t\toffset[0] = localXCos - localYSin;\n\t\toffset[1] = localYCos + localXSin;\n\t\toffset[2] = localXCos - localY2Sin;\n\t\toffset[3] = localY2Cos + localXSin;\n\t\toffset[4] = localX2Cos - localY2Sin;\n\t\toffset[5] = localY2Cos + localX2Sin;\n\t\toffset[6] = localX2Cos - localYSin;\n\t\toffset[7] = localYCos + localX2Sin;\n\n\t\tif (region.degrees == 90) {\n\t\t\tuvs[0] = region.u2;\n\t\t\tuvs[1] = region.v2;\n\t\t\tuvs[2] = region.u;\n\t\t\tuvs[3] = region.v2;\n\t\t\tuvs[4] = region.u;\n\t\t\tuvs[5] = region.v;\n\t\t\tuvs[6] = region.u2;\n\t\t\tuvs[7] = region.v;\n\t\t} else {\n\t\t\tuvs[0] = region.u;\n\t\t\tuvs[1] = region.v2;\n\t\t\tuvs[2] = region.u;\n\t\t\tuvs[3] = region.v;\n\t\t\tuvs[4] = region.u2;\n\t\t\tuvs[5] = region.v;\n\t\t\tuvs[6] = region.u2;\n\t\t\tuvs[7] = region.v2;\n\t\t}\n\t}\n\n\t/** Transforms the attachment's four vertices to world coordinates. If the attachment has a {@link #sequence}, the region may\n\t * be changed.\n\t * <p>\n\t * See <a href=\"http://esotericsoftware.com/spine-runtime-skeletons#World-transforms\">World transforms</a> in the Spine\n\t * Runtimes Guide.\n\t * @param worldVertices The output world vertices. Must have a length >= <code>offset</code> + 8.\n\t * @param offset The <code>worldVertices</code> index to begin writing values.\n\t * @param stride The number of <code>worldVertices</code> entries between the value pairs written. */\n\tcomputeWorldVertices (slot: Slot, worldVertices: NumberArrayLike, offset: number, stride: number) {\n\t\tif (this.sequence != null)\n\t\t\tthis.sequence.apply(slot, this);\n\n\t\tlet bone = slot.bone;\n\t\tlet vertexOffset = this.offset;\n\t\tlet x = bone.worldX, y = bone.worldY;\n\t\tlet a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n\t\tlet offsetX = 0, offsetY = 0;\n\n\t\toffsetX = vertexOffset[0];\n\t\toffsetY = vertexOffset[1];\n\t\tworldVertices[offset] = offsetX * a + offsetY * b + x; // br\n\t\tworldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n\t\toffset += stride;\n\n\t\toffsetX = vertexOffset[2];\n\t\toffsetY = vertexOffset[3];\n\t\tworldVertices[offset] = offsetX * a + offsetY * b + x; // bl\n\t\tworldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n\t\toffset += stride;\n\n\t\toffsetX = vertexOffset[4];\n\t\toffsetY = vertexOffset[5];\n\t\tworldVertices[offset] = offsetX * a + offsetY * b + x; // ul\n\t\tworldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n\t\toffset += stride;\n\n\t\toffsetX = vertexOffset[6];\n\t\toffsetY = vertexOffset[7];\n\t\tworldVertices[offset] = offsetX * a + offsetY * b + x; // ur\n\t\tworldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n\t}\n\n\tcopy (): Attachment {\n\t\tlet copy = new RegionAttachment(this.name, this.path);\n\t\tcopy.region = this.region;\n\t\tcopy.rendererObject = this.rendererObject;\n\t\tcopy.x = this.x;\n\t\tcopy.y = this.y;\n\t\tcopy.scaleX = this.scaleX;\n\t\tcopy.scaleY = this.scaleY;\n\t\tcopy.rotation = this.rotation;\n\t\tcopy.width = this.width;\n\t\tcopy.height = this.height;\n\t\tUtils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8);\n\t\tUtils.arrayCopy(this.offset, 0, copy.offset, 0, 8);\n\t\tcopy.color.setFromColor(this.color);\n\t\tcopy.sequence = this.sequence != null ? this.sequence.copy() : null;\n\t\treturn copy;\n\t}\n\n\tstatic X1 = 0;\n\tstatic Y1 = 1;\n\tstatic C1R = 2;\n\tstatic C1G = 3;\n\tstatic C1B = 4;\n\tstatic C1A = 5;\n\tstatic U1 = 6;\n\tstatic V1 = 7;\n\n\tstatic X2 = 8;\n\tstatic Y2 = 9;\n\tstatic C2R = 10;\n\tstatic C2G = 11;\n\tstatic C2B = 12;\n\tstatic C2A = 13;\n\tstatic U2 = 14;\n\tstatic V2 = 15;\n\n\tstatic X3 = 16;\n\tstatic Y3 = 17;\n\tstatic C3R = 18;\n\tstatic C3G = 19;\n\tstatic C3B = 20;\n\tstatic C3A = 21;\n\tstatic U3 = 22;\n\tstatic V3 = 23;\n\n\tstatic X4 = 24;\n\tstatic Y4 = 25;\n\tstatic C4R = 26;\n\tstatic C4G = 27;\n\tstatic C4B = 28;\n\tstatic C4A = 29;\n\tstatic U4 = 30;\n\tstatic V4 = 31;\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { AttachmentLoader } from \"./attachments/AttachmentLoader\";\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\";\nimport { Skin } from \"./Skin\";\nimport { TextureAtlas } from \"./TextureAtlas\";\nimport { Sequence } from \"./attachments/Sequence\"\n\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. */\nexport class AtlasAttachmentLoader implements AttachmentLoader {\n\tatlas: TextureAtlas;\n\n\tconstructor (atlas: TextureAtlas) {\n\t\tthis.atlas = atlas;\n\t}\n\n\tloadSequence (name: string, basePath: string, sequence: Sequence) {\n\t\tlet regions = sequence.regions;\n\t\tfor (let i = 0, n = regions.length; i < n; i++) {\n\t\t\tlet path = sequence.getPath(basePath, i);\n\t\t\tlet region = this.atlas.findRegion(path);\n\t\t\tif (region == null) throw new Error(\"Region not found in atlas: \" + path + \" (sequence: \" + name + \")\");\n\t\t\tregions[i] = region;\n\t\t\tregions[i].renderObject = regions[i];\n\t\t}\n\t}\n\n\tnewRegionAttachment (skin: Skin, name: string, path: string, sequence: Sequence): RegionAttachment {\n\t\tlet attachment = new RegionAttachment(name, path);\n\t\tif (sequence != null) {\n\t\t\tthis.loadSequence(name, path, sequence);\n\t\t} else {\n\t\t\tlet region = this.atlas.findRegion(path);\n\t\t\tif (!region) throw new Error(\"Region not found in atlas: \" + path + \" (region attachment: \" + name + \")\");\n\t\t\tregion.renderObject = region;\n\t\t\tattachment.region = region;\n\t\t}\n\t\treturn attachment;\n\t}\n\n\tnewMeshAttachment (skin: Skin, name: string, path: string, sequence: Sequence): MeshAttachment {\n\t\tlet attachment = new MeshAttachment(name, path);\n\t\tif (sequence != null) {\n\t\t\tthis.loadSequence(name, path, sequence);\n\t\t} else {\n\t\t\tlet region = this.atlas.findRegion(path);\n\t\t\tif (!region) throw new Error(\"Region not found in atlas: \" + path + \" (mesh attachment: \" + name + \")\");\n\t\t\tregion.renderObject = region;\n\t\t\tattachment.region = region;\n\t\t}\n\t\treturn attachment;\n\t}\n\n\tnewBoundingBoxAttachment (skin: Skin, name: string): BoundingBoxAttachment {\n\t\treturn new BoundingBoxAttachment(name);\n\t}\n\n\tnewPathAttachment (skin: Skin, name: string): PathAttachment {\n\t\treturn new PathAttachment(name);\n\t}\n\n\tnewPointAttachment (skin: Skin, name: string): PointAttachment {\n\t\treturn new PointAttachment(name);\n\t}\n\n\tnewClippingAttachment (skin: Skin, name: string): ClippingAttachment {\n\t\treturn new ClippingAttachment(name);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Color } from \"./Utils\";\n\n/** Stores the setup pose for a {@link Bone}. */\nexport class BoneData {\n\t/** The index of the bone in {@link Skeleton#getBones()}. */\n\tindex: number = 0;\n\n\t/** The name of the bone, which is unique across all bones in the skeleton. */\n\tname: string;\n\n\t/** @returns May be null. */\n\tparent: BoneData | null = null;\n\n\t/** The bone's length. */\n\tlength: number = 0;\n\n\t/** The local x translation. */\n\tx = 0;\n\n\t/** The local y translation. */\n\ty = 0;\n\n\t/** The local rotation. */\n\trotation = 0;\n\n\t/** The local scaleX. */\n\tscaleX = 1;\n\n\t/** The local scaleY. */\n\tscaleY = 1;\n\n\t/** The local shearX. */\n\tshearX = 0;\n\n\t/** The local shearX. */\n\tshearY = 0;\n\n\t/** The transform mode for how parent world transforms affect this bone. */\n\ttransformMode = TransformMode.Normal;\n\n\t/** When true, {@link Skeleton#updateWorldTransform()} only updates this bone if the {@link Skeleton#skin} contains this\n\t  * bone.\n\t  * @see Skin#bones */\n\tskinRequired = false;\n\n\t/** The color of the bone as it was in Spine. Available only when nonessential data was exported. Bones are not usually\n\t * rendered at runtime. */\n\tcolor = new Color();\n\n\tconstructor (index: number, name: string, parent: BoneData | null) {\n\t\tif (index < 0) throw new Error(\"index must be >= 0.\");\n\t\tif (!name) throw new Error(\"name cannot be null.\");\n\t\tthis.index = index;\n\t\tthis.name = name;\n\t\tthis.parent = parent;\n\t}\n}\n\n/** Determines how a bone inherits world transforms from parent bones. */\nexport enum TransformMode { Normal, OnlyTranslation, NoRotationOrReflection, NoScale, NoScaleOrReflection }\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { BoneData, TransformMode } from \"./BoneData\";\nimport { Skeleton } from \"./Skeleton\";\nimport { Updatable } from \"./Updatable\";\nimport { MathUtils, Vector2 } from \"./Utils\";\n\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. */\nexport class Bone implements Updatable {\n\t/** The bone's setup pose data. */\n\tdata: BoneData;\n\n\t/** The skeleton this bone belongs to. */\n\tskeleton: Skeleton;\n\n\t/** The parent bone, or null if this is the root bone. */\n\tparent: Bone | null = null;\n\n\t/** The immediate children of this bone. */\n\tchildren = new Array<Bone>();\n\n\t/** The local x translation. */\n\tx = 0;\n\n\t/** The local y translation. */\n\ty = 0;\n\n\t/** The local rotation in degrees, counter clockwise. */\n\trotation = 0;\n\n\t/** The local scaleX. */\n\tscaleX = 0;\n\n\t/** The local scaleY. */\n\tscaleY = 0;\n\n\t/** The local shearX. */\n\tshearX = 0;\n\n\t/** The local shearY. */\n\tshearY = 0;\n\n\t/** The applied local x translation. */\n\tax = 0;\n\n\t/** The applied local y translation. */\n\tay = 0;\n\n\t/** The applied local rotation in degrees, counter clockwise. */\n\tarotation = 0;\n\n\t/** The applied local scaleX. */\n\tascaleX = 0;\n\n\t/** The applied local scaleY. */\n\tascaleY = 0;\n\n\t/** The applied local shearX. */\n\tashearX = 0;\n\n\t/** The applied local shearY. */\n\tashearY = 0;\n\n\t/** Part of the world transform matrix for the X axis. If changed, {@link #updateAppliedTransform()} should be called. */\n\ta = 0;\n\n\t/** Part of the world transform matrix for the Y axis. If changed, {@link #updateAppliedTransform()} should be called. */\n\tb = 0;\n\n\t/** Part of the world transform matrix for the X axis. If changed, {@link #updateAppliedTransform()} should be called. */\n\tc = 0;\n\n\t/** Part of the world transform matrix for the Y axis. If changed, {@link #updateAppliedTransform()} should be called. */\n\td = 0;\n\n\t/** The world X position. If changed, {@link #updateAppliedTransform()} should be called. */\n\tworldY = 0;\n\n\t/** The world Y position. If changed, {@link #updateAppliedTransform()} should be called. */\n\tworldX = 0;\n\n\tsorted = false;\n\tactive = false;\n\n\t/** @param parent May be null. */\n\tconstructor (data: BoneData, skeleton: Skeleton, parent: Bone | null) {\n\t\tif (!data) throw new Error(\"data cannot be null.\");\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\t\tthis.data = data;\n\t\tthis.skeleton = skeleton;\n\t\tthis.parent = parent;\n\t\tthis.setToSetupPose();\n\t}\n\n\t/** Returns false when the bone has not been computed because {@link BoneData#skinRequired} is true and the\n\t  * {@link Skeleton#skin active skin} does not {@link Skin#bones contain} this bone. */\n\tisActive () {\n\t\treturn this.active;\n\t}\n\n\t/** Computes the world transform using the parent bone and this bone's local applied transform. */\n\tupdate () {\n\t\tthis.updateWorldTransformWith(this.ax, this.ay, this.arotation, this.ascaleX, this.ascaleY, this.ashearX, this.ashearY);\n\t}\n\n\t/** Computes the world transform using the parent bone and this bone's local transform.\n\t *\n\t * See {@link #updateWorldTransformWith()}. */\n\tupdateWorldTransform () {\n\t\tthis.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);\n\t}\n\n\t/** Computes the world transform using the parent bone and the specified local transform. The applied transform is set to the\n\t * specified local transform. Child bones are not updated.\n\t *\n\t * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine\n\t * Runtimes Guide. */\n\tupdateWorldTransformWith (x: number, y: number, rotation: number, scaleX: number, scaleY: number, shearX: number, shearY: number) {\n\t\tthis.ax = x;\n\t\tthis.ay = y;\n\t\tthis.arotation = rotation;\n\t\tthis.ascaleX = scaleX;\n\t\tthis.ascaleY = scaleY;\n\t\tthis.ashearX = shearX;\n\t\tthis.ashearY = shearY;\n\n\t\tlet parent = this.parent;\n\t\tif (!parent) { // Root bone.\n\t\t\tlet skeleton = this.skeleton;\n\t\t\tlet rotationY = rotation + 90 + shearY;\n\t\t\tlet sx = skeleton.scaleX;\n\t\t\tlet sy = skeleton.scaleY;\n\t\t\tthis.a = MathUtils.cosDeg(rotation + shearX) * scaleX * sx;\n\t\t\tthis.b = MathUtils.cosDeg(rotationY) * scaleY * sx;\n\t\t\tthis.c = MathUtils.sinDeg(rotation + shearX) * scaleX * sy;\n\t\t\tthis.d = MathUtils.sinDeg(rotationY) * scaleY * sy;\n\t\t\tthis.worldX = x * sx + skeleton.x;\n\t\t\tthis.worldY = y * sy + skeleton.y;\n\t\t\treturn;\n\t\t}\n\n\t\tlet pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n\t\tthis.worldX = pa * x + pb * y + parent.worldX;\n\t\tthis.worldY = pc * x + pd * y + parent.worldY;\n\n\t\tswitch (this.data.transformMode) {\n\t\t\tcase TransformMode.Normal: {\n\t\t\t\tlet rotationY = rotation + 90 + shearY;\n\t\t\t\tlet la = MathUtils.cosDeg(rotation + shearX) * scaleX;\n\t\t\t\tlet lb = MathUtils.cosDeg(rotationY) * scaleY;\n\t\t\t\tlet lc = MathUtils.sinDeg(rotation + shearX) * scaleX;\n\t\t\t\tlet ld = MathUtils.sinDeg(rotationY) * scaleY;\n\t\t\t\tthis.a = pa * la + pb * lc;\n\t\t\t\tthis.b = pa * lb + pb * ld;\n\t\t\t\tthis.c = pc * la + pd * lc;\n\t\t\t\tthis.d = pc * lb + pd * ld;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase TransformMode.OnlyTranslation: {\n\t\t\t\tlet rotationY = rotation + 90 + shearY;\n\t\t\t\tthis.a = MathUtils.cosDeg(rotation + shearX) * scaleX;\n\t\t\t\tthis.b = MathUtils.cosDeg(rotationY) * scaleY;\n\t\t\t\tthis.c = MathUtils.sinDeg(rotation + shearX) * scaleX;\n\t\t\t\tthis.d = MathUtils.sinDeg(rotationY) * scaleY;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TransformMode.NoRotationOrReflection: {\n\t\t\t\tlet s = pa * pa + pc * pc;\n\t\t\t\tlet prx = 0;\n\t\t\t\tif (s > 0.0001) {\n\t\t\t\t\ts = Math.abs(pa * pd - pb * pc) / s;\n\t\t\t\t\tpa /= this.skeleton.scaleX;\n\t\t\t\t\tpc /= this.skeleton.scaleY;\n\t\t\t\t\tpb = pc * s;\n\t\t\t\t\tpd = pa * s;\n\t\t\t\t\tprx = Math.atan2(pc, pa) * MathUtils.radDeg;\n\t\t\t\t} else {\n\t\t\t\t\tpa = 0;\n\t\t\t\t\tpc = 0;\n\t\t\t\t\tprx = 90 - Math.atan2(pd, pb) * MathUtils.radDeg;\n\t\t\t\t}\n\t\t\t\tlet rx = rotation + shearX - prx;\n\t\t\t\tlet ry = rotation + shearY - prx + 90;\n\t\t\t\tlet la = MathUtils.cosDeg(rx) * scaleX;\n\t\t\t\tlet lb = MathUtils.cosDeg(ry) * scaleY;\n\t\t\t\tlet lc = MathUtils.sinDeg(rx) * scaleX;\n\t\t\t\tlet ld = MathUtils.sinDeg(ry) * scaleY;\n\t\t\t\tthis.a = pa * la - pb * lc;\n\t\t\t\tthis.b = pa * lb - pb * ld;\n\t\t\t\tthis.c = pc * la + pd * lc;\n\t\t\t\tthis.d = pc * lb + pd * ld;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase TransformMode.NoScale:\n\t\t\tcase TransformMode.NoScaleOrReflection: {\n\t\t\t\tlet cos = MathUtils.cosDeg(rotation);\n\t\t\t\tlet sin = MathUtils.sinDeg(rotation);\n\t\t\t\tlet za = (pa * cos + pb * sin) / this.skeleton.scaleX;\n\t\t\t\tlet zc = (pc * cos + pd * sin) / this.skeleton.scaleY;\n\t\t\t\tlet s = Math.sqrt(za * za + zc * zc);\n\t\t\t\tif (s > 0.00001) s = 1 / s;\n\t\t\t\tza *= s;\n\t\t\t\tzc *= s;\n\t\t\t\ts = Math.sqrt(za * za + zc * zc);\n\t\t\t\tif (this.data.transformMode == TransformMode.NoScale\n\t\t\t\t\t&& (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0)) s = -s;\n\t\t\t\tlet r = Math.PI / 2 + Math.atan2(zc, za);\n\t\t\t\tlet zb = Math.cos(r) * s;\n\t\t\t\tlet zd = Math.sin(r) * s;\n\t\t\t\tlet la = MathUtils.cosDeg(shearX) * scaleX;\n\t\t\t\tlet lb = MathUtils.cosDeg(90 + shearY) * scaleY;\n\t\t\t\tlet lc = MathUtils.sinDeg(shearX) * scaleX;\n\t\t\t\tlet ld = MathUtils.sinDeg(90 + shearY) * scaleY;\n\t\t\t\tthis.a = za * la + zb * lc;\n\t\t\t\tthis.b = za * lb + zb * ld;\n\t\t\t\tthis.c = zc * la + zd * lc;\n\t\t\t\tthis.d = zc * lb + zd * ld;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.a *= this.skeleton.scaleX;\n\t\tthis.b *= this.skeleton.scaleX;\n\t\tthis.c *= this.skeleton.scaleY;\n\t\tthis.d *= this.skeleton.scaleY;\n\t}\n\n\t/** Sets this bone's local transform to the setup pose. */\n\tsetToSetupPose () {\n\t\tlet data = this.data;\n\t\tthis.x = data.x;\n\t\tthis.y = data.y;\n\t\tthis.rotation = data.rotation;\n\t\tthis.scaleX = data.scaleX;\n\t\tthis.scaleY = data.scaleY;\n\t\tthis.shearX = data.shearX;\n\t\tthis.shearY = data.shearY;\n\t}\n\n\t/** The world rotation for the X axis, calculated using {@link #a} and {@link #c}. */\n\tgetWorldRotationX () {\n\t\treturn Math.atan2(this.c, this.a) * MathUtils.radDeg;\n\t}\n\n\t/** The world rotation for the Y axis, calculated using {@link #b} and {@link #d}. */\n\tgetWorldRotationY () {\n\t\treturn Math.atan2(this.d, this.b) * MathUtils.radDeg;\n\t}\n\n\t/** The magnitude (always positive) of the world scale X, calculated using {@link #a} and {@link #c}. */\n\tgetWorldScaleX () {\n\t\treturn Math.sqrt(this.a * this.a + this.c * this.c);\n\t}\n\n\t/** The magnitude (always positive) of the world scale Y, calculated using {@link #b} and {@link #d}. */\n\tgetWorldScaleY () {\n\t\treturn Math.sqrt(this.b * this.b + this.d * this.d);\n\t}\n\n\t/** Computes the applied transform values from the world transform.\n\t *\n\t * If the world transform is modified (by a constraint, {@link #rotateWorld(float)}, etc) then this method should be called so\n\t * the applied transform matches the world transform. The applied transform may be needed by other code (eg to apply other\n\t * constraints).\n\t *\n\t * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The applied transform after\n\t * calling this method is equivalent to the local transform used to compute the world transform, but may not be identical. */\n\tupdateAppliedTransform () {\n\t\tlet parent = this.parent;\n\t\tif (!parent) {\n\t\t\tthis.ax = this.worldX - this.skeleton.x;\n\t\t\tthis.ay = this.worldY - this.skeleton.y;\n\t\t\tthis.arotation = Math.atan2(this.c, this.a) * MathUtils.radDeg;\n\t\t\tthis.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c);\n\t\t\tthis.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d);\n\t\t\tthis.ashearX = 0;\n\t\t\tthis.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * MathUtils.radDeg;\n\t\t\treturn;\n\t\t}\n\t\tlet pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n\t\tlet pid = 1 / (pa * pd - pb * pc);\n\t\tlet dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;\n\t\tthis.ax = (dx * pd * pid - dy * pb * pid);\n\t\tthis.ay = (dy * pa * pid - dx * pc * pid);\n\t\tlet ia = pid * pd;\n\t\tlet id = pid * pa;\n\t\tlet ib = pid * pb;\n\t\tlet ic = pid * pc;\n\t\tlet ra = ia * this.a - ib * this.c;\n\t\tlet rb = ia * this.b - ib * this.d;\n\t\tlet rc = id * this.c - ic * this.a;\n\t\tlet rd = id * this.d - ic * this.b;\n\t\tthis.ashearX = 0;\n\t\tthis.ascaleX = Math.sqrt(ra * ra + rc * rc);\n\t\tif (this.ascaleX > 0.0001) {\n\t\t\tlet det = ra * rd - rb * rc;\n\t\t\tthis.ascaleY = det / this.ascaleX;\n\t\t\tthis.ashearY = Math.atan2(ra * rb + rc * rd, det) * MathUtils.radDeg;\n\t\t\tthis.arotation = Math.atan2(rc, ra) * MathUtils.radDeg;\n\t\t} else {\n\t\t\tthis.ascaleX = 0;\n\t\t\tthis.ascaleY = Math.sqrt(rb * rb + rd * rd);\n\t\t\tthis.ashearY = 0;\n\t\t\tthis.arotation = 90 - Math.atan2(rd, rb) * MathUtils.radDeg;\n\t\t}\n\t}\n\n\t/** Transforms a point from world coordinates to the bone's local coordinates. */\n\tworldToLocal (world: Vector2) {\n\t\tlet invDet = 1 / (this.a * this.d - this.b * this.c);\n\t\tlet x = world.x - this.worldX, y = world.y - this.worldY;\n\t\tworld.x = x * this.d * invDet - y * this.b * invDet;\n\t\tworld.y = y * this.a * invDet - x * this.c * invDet;\n\t\treturn world;\n\t}\n\n\t/** Transforms a point from the bone's local coordinates to world coordinates. */\n\tlocalToWorld (local: Vector2) {\n\t\tlet x = local.x, y = local.y;\n\t\tlocal.x = x * this.a + y * this.b + this.worldX;\n\t\tlocal.y = x * this.c + y * this.d + this.worldY;\n\t\treturn local;\n\t}\n\n\t/** Transforms a world rotation to a local rotation. */\n\tworldToLocalRotation (worldRotation: number) {\n\t\tlet sin = MathUtils.sinDeg(worldRotation), cos = MathUtils.cosDeg(worldRotation);\n\t\treturn Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * MathUtils.radDeg + this.rotation - this.shearX;\n\t}\n\n\t/** Transforms a local rotation to a world rotation. */\n\tlocalToWorldRotation (localRotation: number) {\n\t\tlocalRotation -= this.rotation - this.shearX;\n\t\tlet sin = MathUtils.sinDeg(localRotation), cos = MathUtils.cosDeg(localRotation);\n\t\treturn Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * MathUtils.radDeg;\n\t}\n\n\t/** Rotates the world transform the specified amount.\n\t * <p>\n\t * After changes are made to the world transform, {@link #updateAppliedTransform()} should be called and {@link #update()} will\n\t * need to be called on any child bones, recursively. */\n\trotateWorld (degrees: number) {\n\t\tlet a = this.a, b = this.b, c = this.c, d = this.d;\n\t\tlet cos = MathUtils.cosDeg(degrees), sin = MathUtils.sinDeg(degrees);\n\t\tthis.a = cos * a - sin * c;\n\t\tthis.b = cos * b - sin * d;\n\t\tthis.c = sin * a + cos * c;\n\t\tthis.d = sin * b + cos * d;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\n/** The base class for all constraint datas. */\nexport abstract class ConstraintData {\n\tconstructor (public name: string, public order: number, public skinRequired: boolean) { }\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Texture } from \"./Texture\";\nimport { TextureAtlas } from \"./TextureAtlas\";\nimport { Disposable, StringMap } from \"./Utils\";\n\nexport class AssetManagerBase implements Disposable {\n\tprivate pathPrefix: string = \"\";\n\tprivate textureLoader: (image: HTMLImageElement | ImageBitmap) => Texture;\n\tprivate downloader: Downloader;\n\tprivate assets: StringMap<any> = {};\n\tprivate errors: StringMap<string> = {};\n\tprivate toLoad = 0;\n\tprivate loaded = 0;\n\n\tconstructor (textureLoader: (image: HTMLImageElement | ImageBitmap) => Texture, pathPrefix: string = \"\", downloader: Downloader = new Downloader()) {\n\t\tthis.textureLoader = textureLoader;\n\t\tthis.pathPrefix = pathPrefix;\n\t\tthis.downloader = downloader;\n\t}\n\n\tprivate start (path: string): string {\n\t\tthis.toLoad++;\n\t\treturn this.pathPrefix + path;\n\t}\n\n\tprivate success (callback: (path: string, data: any) => void, path: string, asset: any) {\n\t\tthis.toLoad--;\n\t\tthis.loaded++;\n\t\tthis.assets[path] = asset;\n\t\tif (callback) callback(path, asset);\n\t}\n\n\tprivate error (callback: (path: string, message: string) => void, path: string, message: string) {\n\t\tthis.toLoad--;\n\t\tthis.loaded++;\n\t\tthis.errors[path] = message;\n\t\tif (callback) callback(path, message);\n\t}\n\n\tloadAll () {\n\t\tlet promise = new Promise((resolve: (assetManager: AssetManagerBase) => void, reject: (errors: StringMap<string>) => void) => {\n\t\t\tlet check = () => {\n\t\t\t\tif (this.isLoadingComplete()) {\n\t\t\t\t\tif (this.hasErrors()) reject(this.errors);\n\t\t\t\t\telse resolve(this);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\trequestAnimationFrame(check);\n\t\t\t}\n\t\t\trequestAnimationFrame(check);\n\t\t});\n\t\treturn promise;\n\t}\n\n\tsetRawDataURI (path: string, data: string) {\n\t\tthis.downloader.rawDataUris[this.pathPrefix + path] = data;\n\t}\n\n\tloadBinary (path: string,\n\t\tsuccess: (path: string, binary: Uint8Array) => void = () => { },\n\t\terror: (path: string, message: string) => void = () => { }) {\n\t\tpath = this.start(path);\n\n\t\tthis.downloader.downloadBinary(path, (data: Uint8Array): void => {\n\t\t\tthis.success(success, path, data);\n\t\t}, (status: number, responseText: string): void => {\n\t\t\tthis.error(error, path, `Couldn't load binary ${path}: status ${status}, ${responseText}`);\n\t\t});\n\t}\n\n\tloadText (path: string,\n\t\tsuccess: (path: string, text: string) => void = () => { },\n\t\terror: (path: string, message: string) => void = () => { }) {\n\t\tpath = this.start(path);\n\n\t\tthis.downloader.downloadText(path, (data: string): void => {\n\t\t\tthis.success(success, path, data);\n\t\t}, (status: number, responseText: string): void => {\n\t\t\tthis.error(error, path, `Couldn't load text ${path}: status ${status}, ${responseText}`);\n\t\t});\n\t}\n\n\tloadJson (path: string,\n\t\tsuccess: (path: string, object: object) => void = () => { },\n\t\terror: (path: string, message: string) => void = () => { }) {\n\t\tpath = this.start(path);\n\n\t\tthis.downloader.downloadJson(path, (data: object): void => {\n\t\t\tthis.success(success, path, data);\n\t\t}, (status: number, responseText: string): void => {\n\t\t\tthis.error(error, path, `Couldn't load JSON ${path}: status ${status}, ${responseText}`);\n\t\t});\n\t}\n\n\tloadTexture (path: string,\n\t\tsuccess: (path: string, texture: Texture) => void = () => { },\n\t\terror: (path: string, message: string) => void = () => { }) {\n\t\tpath = this.start(path);\n\n\t\tlet isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document);\n\t\tlet isWebWorker = !isBrowser; // && typeof importScripts !== 'undefined';\n\t\tif (isWebWorker) {\n\t\t\tfetch(path, { mode: <RequestMode>\"cors\" }).then((response) => {\n\t\t\t\tif (response.ok) return response.blob();\n\t\t\t\tthis.error(error, path, `Couldn't load image: ${path}`);\n\t\t\t\treturn null;\n\t\t\t}).then((blob) => {\n\t\t\t\treturn blob ? createImageBitmap(blob, { premultiplyAlpha: \"none\", colorSpaceConversion: \"none\" }) : null;\n\t\t\t}).then((bitmap) => {\n\t\t\t\tif (bitmap) this.success(success, path, this.textureLoader(bitmap));\n\t\t\t});\n\t\t} else {\n\t\t\tlet image = new Image();\n\t\t\timage.crossOrigin = \"anonymous\";\n\t\t\timage.onload = () => {\n\t\t\t\tthis.success(success, path, this.textureLoader(image));\n\t\t\t};\n\t\t\timage.onerror = () => {\n\t\t\t\tthis.error(error, path, `Couldn't load image: ${path}`);\n\t\t\t};\n\t\t\tif (this.downloader.rawDataUris[path]) path = this.downloader.rawDataUris[path];\n\t\t\timage.src = path;\n\t\t}\n\t}\n\n\tloadTextureAtlas (path: string,\n\t\tsuccess: (path: string, atlas: TextureAtlas) => void = () => { },\n\t\terror: (path: string, message: string) => void = () => { },\n\t\tfileAlias?: { [keyword: string]: string }\n\t) {\n\t\tlet index = path.lastIndexOf(\"/\");\n\t\tlet parent = index >= 0 ? path.substring(0, index + 1) : \"\";\n\t\tpath = this.start(path);\n\n\t\tthis.downloader.downloadText(path, (atlasText: string): void => {\n\t\t\ttry {\n\t\t\t\tlet atlas = new TextureAtlas(atlasText);\n\t\t\t\tlet toLoad = atlas.pages.length, abort = false;\n\t\t\t\tfor (let page of atlas.pages) {\n\t\t\t\t\tthis.loadTexture(!fileAlias ? parent + page.name : fileAlias[page.name!],\n\t\t\t\t\t\t(imagePath: string, texture: Texture) => {\n\t\t\t\t\t\t\tif (!abort) {\n\t\t\t\t\t\t\t\tpage.setTexture(texture);\n\t\t\t\t\t\t\t\tif (--toLoad == 0) this.success(success, path, atlas);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t(imagePath: string, message: string) => {\n\t\t\t\t\t\t\tif (!abort) this.error(error, path, `Couldn't load texture atlas ${path} page image: ${imagePath}`);\n\t\t\t\t\t\t\tabort = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tthis.error(error, path, `Couldn't parse texture atlas ${path}: ${(e as any).message}`);\n\t\t\t}\n\t\t}, (status: number, responseText: string): void => {\n\t\t\tthis.error(error, path, `Couldn't load texture atlas ${path}: status ${status}, ${responseText}`);\n\t\t});\n\t}\n\n\tget (path: string) {\n\t\treturn this.assets[this.pathPrefix + path];\n\t}\n\n\trequire (path: string) {\n\t\tpath = this.pathPrefix + path;\n\t\tlet asset = this.assets[path];\n\t\tif (asset) return asset;\n\t\tlet error = this.errors[path];\n\t\tthrow Error(\"Asset not found: \" + path + (error ? \"\\n\" + error : \"\"));\n\t}\n\n\tremove (path: string) {\n\t\tpath = this.pathPrefix + path;\n\t\tlet asset = this.assets[path];\n\t\tif ((<any>asset).dispose) (<any>asset).dispose();\n\t\tdelete this.assets[path];\n\t\treturn asset;\n\t}\n\n\tremoveAll () {\n\t\tfor (let key in this.assets) {\n\t\t\tlet asset = this.assets[key];\n\t\t\tif ((<any>asset).dispose) (<any>asset).dispose();\n\t\t}\n\t\tthis.assets = {};\n\t}\n\n\tisLoadingComplete (): boolean {\n\t\treturn this.toLoad == 0;\n\t}\n\n\tgetToLoad (): number {\n\t\treturn this.toLoad;\n\t}\n\n\tgetLoaded (): number {\n\t\treturn this.loaded;\n\t}\n\n\tdispose () {\n\t\tthis.removeAll();\n\t}\n\n\thasErrors () {\n\t\treturn Object.keys(this.errors).length > 0;\n\t}\n\n\tgetErrors () {\n\t\treturn this.errors;\n\t}\n}\n\nexport class Downloader {\n\tprivate callbacks: StringMap<Array<Function>> = {};\n\trawDataUris: StringMap<string> = {};\n\n\tdataUriToString (dataUri: string) {\n\t\tif (!dataUri.startsWith(\"data:\")) {\n\t\t\tthrow new Error(\"Not a data URI.\");\n\t\t}\n\n\t\tlet base64Idx = dataUri.indexOf(\"base64,\");\n\t\tif (base64Idx != -1) {\n\t\t\tbase64Idx += \"base64,\".length;\n\t\t\treturn atob(dataUri.substr(base64Idx));\n\t\t} else {\n\t\t\treturn dataUri.substr(dataUri.indexOf(\",\") + 1);\n\t\t}\n\t}\n\n\tbase64ToUint8Array (base64: string) {\n\t\tvar binary_string = window.atob(base64);\n\t\tvar len = binary_string.length;\n\t\tvar bytes = new Uint8Array(len);\n\t\tfor (var i = 0; i < len; i++) {\n\t\t\tbytes[i] = binary_string.charCodeAt(i);\n\t\t}\n\t\treturn bytes;\n\t}\n\n\tdataUriToUint8Array (dataUri: string) {\n\t\tif (!dataUri.startsWith(\"data:\")) {\n\t\t\tthrow new Error(\"Not a data URI.\");\n\t\t}\n\n\t\tlet base64Idx = dataUri.indexOf(\"base64,\");\n\t\tif (base64Idx == -1) throw new Error(\"Not a binary data URI.\");\n\t\tbase64Idx += \"base64,\".length;\n\t\treturn this.base64ToUint8Array(dataUri.substr(base64Idx));\n\t}\n\n\tdownloadText (url: string, success: (data: string) => void, error: (status: number, responseText: string) => void) {\n\t\tif (this.start(url, success, error)) return;\n\t\tif (this.rawDataUris[url]) {\n\t\t\ttry {\n\t\t\t\tlet dataUri = this.rawDataUris[url];\n\t\t\t\tthis.finish(url, 200, this.dataUriToString(dataUri));\n\t\t\t} catch (e) {\n\t\t\t\tthis.finish(url, 400, JSON.stringify(e));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tlet request = new XMLHttpRequest();\n\t\trequest.overrideMimeType(\"text/html\");\n\t\trequest.open(\"GET\", url, true);\n\t\tlet done = () => {\n\t\t\tthis.finish(url, request.status, request.responseText);\n\t\t};\n\t\trequest.onload = done;\n\t\trequest.onerror = done;\n\t\trequest.send();\n\t}\n\n\tdownloadJson (url: string, success: (data: object) => void, error: (status: number, responseText: string) => void) {\n\t\tthis.downloadText(url, (data: string): void => {\n\t\t\tsuccess(JSON.parse(data));\n\t\t}, error);\n\t}\n\n\tdownloadBinary (url: string, success: (data: Uint8Array) => void, error: (status: number, responseText: string) => void) {\n\t\tif (this.start(url, success, error)) return;\n\t\tif (this.rawDataUris[url]) {\n\t\t\ttry {\n\t\t\t\tlet dataUri = this.rawDataUris[url];\n\t\t\t\tthis.finish(url, 200, this.dataUriToUint8Array(dataUri));\n\t\t\t} catch (e) {\n\t\t\t\tthis.finish(url, 400, JSON.stringify(e));\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tlet request = new XMLHttpRequest();\n\t\trequest.open(\"GET\", url, true);\n\t\trequest.responseType = \"arraybuffer\";\n\t\tlet onerror = () => {\n\t\t\tthis.finish(url, request.status, request.response);\n\t\t};\n\t\trequest.onload = () => {\n\t\t\tif (request.status == 200 || request.status == 0)\n\t\t\t\tthis.finish(url, 200, new Uint8Array(request.response as ArrayBuffer));\n\t\t\telse\n\t\t\t\tonerror();\n\t\t};\n\t\trequest.onerror = onerror;\n\t\trequest.send();\n\t}\n\n\tprivate start (url: string, success: any, error: any) {\n\t\tlet callbacks = this.callbacks[url];\n\t\ttry {\n\t\t\tif (callbacks) return true;\n\t\t\tthis.callbacks[url] = callbacks = [];\n\t\t} finally {\n\t\t\tcallbacks.push(success, error);\n\t\t}\n\t}\n\n\tprivate finish (url: string, status: number, data: any) {\n\t\tlet callbacks = this.callbacks[url];\n\t\tdelete this.callbacks[url];\n\t\tlet args = status == 200 || status == 0 ? [data] : [status, data];\n\t\tfor (let i = args.length - 1, n = callbacks.length; i < n; i += 2)\n\t\t\tcallbacks[i].apply(null, args);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { EventData } from \"./EventData\";\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. */\nexport class Event {\n\tdata: EventData;\n\tintValue: number = 0;\n\tfloatValue: number = 0;\n\tstringValue: string | null = null;\n\ttime: number = 0;\n\tvolume: number = 0;\n\tbalance: number = 0;\n\n\tconstructor (time: number, data: EventData) {\n\t\tif (!data) throw new Error(\"data cannot be null.\");\n\t\tthis.time = time;\n\t\tthis.data = data;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\n/** Stores the setup pose values for an {@link Event}.\n *\n * See [Events](http://esotericsoftware.com/spine-events) in the Spine User Guide. */\nexport class EventData {\n\tname: string;\n\tintValue: number = 0;\n\tfloatValue: number = 0;\n\tstringValue: string | null = null;\n\taudioPath: string | null = null;\n\tvolume: number = 0;\n\tbalance: number = 0;\n\n\tconstructor (name: string) {\n\t\tthis.name = name;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Bone } from \"./Bone\";\nimport { TransformMode } from \"./BoneData\";\nimport { IkConstraintData } from \"./IkConstraintData\";\nimport { Skeleton } from \"./Skeleton\";\nimport { Updatable } from \"./Updatable\";\nimport { MathUtils } from \"./Utils\";\n\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. */\nexport class IkConstraint implements Updatable {\n\t/** The IK constraint's setup pose data. */\n\tdata: IkConstraintData;\n\n\t/** The bones that will be modified by this IK constraint. */\n\tbones: Array<Bone>;\n\n\t/** The bone that is the IK target. */\n\ttarget: Bone;\n\n\t/** Controls the bend direction of the IK bones, either 1 or -1. */\n\tbendDirection = 0;\n\n\t/** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */\n\tcompress = false;\n\n\t/** 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\t * and the parent bone has local nonuniform scale, stretch is not applied. */\n\tstretch = false;\n\n\t/** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */\n\tmix = 1;\n\n\t/** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */\n\tsoftness = 0;\n\tactive = false;\n\n\tconstructor (data: IkConstraintData, skeleton: Skeleton) {\n\t\tif (!data) throw new Error(\"data cannot be null.\");\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\t\tthis.data = data;\n\t\tthis.mix = data.mix;\n\t\tthis.softness = data.softness;\n\t\tthis.bendDirection = data.bendDirection;\n\t\tthis.compress = data.compress;\n\t\tthis.stretch = data.stretch;\n\n\t\tthis.bones = new Array<Bone>();\n\t\tfor (let i = 0; i < data.bones.length; i++) {\n\t\t\tlet bone = skeleton.findBone(data.bones[i].name);\n\t\t\tif (!bone) throw new Error(`Couldn't find bone ${data.bones[i].name}`);\n\t\t\tthis.bones.push(bone);\n\t\t}\n\t\tlet target = skeleton.findBone(data.target.name);\n\t\tif (!target) throw new Error(`Couldn't find bone ${data.target.name}`);\n\t\tthis.target = target;\n\t}\n\n\tisActive () {\n\t\treturn this.active;\n\t}\n\n\tupdate () {\n\t\tif (this.mix == 0) return;\n\t\tlet target = this.target;\n\t\tlet bones = this.bones;\n\t\tswitch (bones.length) {\n\t\t\tcase 1:\n\t\t\t\tthis.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix);\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tthis.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.data.uniform, this.softness, this.mix);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/** Applies 1 bone IK. The target is specified in the world coordinate system. */\n\tapply1 (bone: Bone, targetX: number, targetY: number, compress: boolean, stretch: boolean, uniform: boolean, alpha: number) {\n\t\tlet p = bone.parent;\n\t\tif (!p) throw new Error(\"IK bone must have parent.\");\n\t\tlet pa = p.a, pb = p.b, pc = p.c, pd = p.d;\n\t\tlet rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0;\n\n\t\tswitch (bone.data.transformMode) {\n\t\t\tcase TransformMode.OnlyTranslation:\n\t\t\t\ttx = targetX - bone.worldX;\n\t\t\t\tty = targetY - bone.worldY;\n\t\t\t\tbreak;\n\t\t\tcase TransformMode.NoRotationOrReflection:\n\t\t\t\tlet s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);\n\t\t\t\tlet sa = pa / bone.skeleton.scaleX;\n\t\t\t\tlet sc = pc / bone.skeleton.scaleY;\n\t\t\t\tpb = -sc * s * bone.skeleton.scaleX;\n\t\t\t\tpd = sa * s * bone.skeleton.scaleY;\n\t\t\t\trotationIK += Math.atan2(sc, sa) * MathUtils.radDeg;\n\t\t\t// Fall through\n\t\t\tdefault:\n\t\t\t\tlet x = targetX - p.worldX, y = targetY - p.worldY;\n\t\t\t\tlet d = pa * pd - pb * pc;\n\t\t\t\ttx = (x * pd - y * pb) / d - bone.ax;\n\t\t\t\tty = (y * pa - x * pc) / d - bone.ay;\n\t\t}\n\t\trotationIK += Math.atan2(ty, tx) * MathUtils.radDeg;\n\t\tif (bone.ascaleX < 0) rotationIK += 180;\n\t\tif (rotationIK > 180)\n\t\t\trotationIK -= 360;\n\t\telse if (rotationIK < -180)\n\t\t\trotationIK += 360;\n\t\tlet sx = bone.ascaleX, sy = bone.ascaleY;\n\t\tif (compress || stretch) {\n\t\t\tswitch (bone.data.transformMode) {\n\t\t\t\tcase TransformMode.NoScale:\n\t\t\t\tcase TransformMode.NoScaleOrReflection:\n\t\t\t\t\ttx = targetX - bone.worldX;\n\t\t\t\t\tty = targetY - bone.worldY;\n\t\t\t}\n\t\t\tlet b = bone.data.length * sx, dd = Math.sqrt(tx * tx + ty * ty);\n\t\t\tif ((compress && dd < b) || (stretch && dd > b) && b > 0.0001) {\n\t\t\t\tlet s = (dd / b - 1) * alpha + 1;\n\t\t\t\tsx *= s;\n\t\t\t\tif (uniform) sy *= s;\n\t\t\t}\n\t\t}\n\t\tbone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX,\n\t\t\tbone.ashearY);\n\t}\n\n\t/** Applies 2 bone IK. The target is specified in the world coordinate system.\n\t * @param child A direct descendant of the parent bone. */\n\tapply2 (parent: Bone, child: Bone, targetX: number, targetY: number, bendDir: number, stretch: boolean, uniform: boolean, softness: number, alpha: number) {\n\t\tlet px = parent.ax, py = parent.ay, psx = parent.ascaleX, psy = parent.ascaleY, sx = psx, sy = psy, csx = child.ascaleX;\n\t\tlet os1 = 0, os2 = 0, s2 = 0;\n\t\tif (psx < 0) {\n\t\t\tpsx = -psx;\n\t\t\tos1 = 180;\n\t\t\ts2 = -1;\n\t\t} else {\n\t\t\tos1 = 0;\n\t\t\ts2 = 1;\n\t\t}\n\t\tif (psy < 0) {\n\t\t\tpsy = -psy;\n\t\t\ts2 = -s2;\n\t\t}\n\t\tif (csx < 0) {\n\t\t\tcsx = -csx;\n\t\t\tos2 = 180;\n\t\t} else\n\t\t\tos2 = 0;\n\t\tlet cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d;\n\t\tlet u = Math.abs(psx - psy) <= 0.0001;\n\t\tif (!u || stretch) {\n\t\t\tcy = 0;\n\t\t\tcwx = a * cx + parent.worldX;\n\t\t\tcwy = c * cx + parent.worldY;\n\t\t} else {\n\t\t\tcy = child.ay;\n\t\t\tcwx = a * cx + b * cy + parent.worldX;\n\t\t\tcwy = c * cx + d * cy + parent.worldY;\n\t\t}\n\t\tlet pp = parent.parent;\n\t\tif (!pp) throw new Error(\"IK parent must itself have a parent.\");\n\t\ta = pp.a;\n\t\tb = pp.b;\n\t\tc = pp.c;\n\t\td = pp.d;\n\t\tlet id = 1 / (a * d - b * c), x = cwx - pp.worldX, y = cwy - pp.worldY;\n\t\tlet dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py;\n\t\tlet l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2;\n\t\tif (l1 < 0.0001) {\n\t\t\tthis.apply1(parent, targetX, targetY, false, stretch, false, alpha);\n\t\t\tchild.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);\n\t\t\treturn;\n\t\t}\n\t\tx = targetX - pp.worldX;\n\t\ty = targetY - pp.worldY;\n\t\tlet tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py;\n\t\tlet dd = tx * tx + ty * ty;\n\t\tif (softness != 0) {\n\t\t\tsoftness *= psx * (csx + 1) * 0.5;\n\t\t\tlet td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness;\n\t\t\tif (sd > 0) {\n\t\t\t\tlet p = Math.min(1, sd / (softness * 2)) - 1;\n\t\t\t\tp = (sd - softness * (1 - p * p)) / td;\n\t\t\t\ttx -= p * tx;\n\t\t\t\tty -= p * ty;\n\t\t\t\tdd = tx * tx + ty * ty;\n\t\t\t}\n\t\t}\n\t\touter:\n\t\tif (u) {\n\t\t\tl2 *= psx;\n\t\t\tlet cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2);\n\t\t\tif (cos < -1) {\n\t\t\t\tcos = -1;\n\t\t\t\ta2 = Math.PI * bendDir;\n\t\t\t} else if (cos > 1) {\n\t\t\t\tcos = 1;\n\t\t\t\ta2 = 0;\n\t\t\t\tif (stretch) {\n\t\t\t\t\ta = (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1;\n\t\t\t\t\tsx *= a;\n\t\t\t\t\tif (uniform) sy *= a;\n\t\t\t\t}\n\t\t\t} else\n\t\t\t\ta2 = Math.acos(cos) * bendDir;\n\t\t\ta = l1 + l2 * cos;\n\t\t\tb = l2 * Math.sin(a2);\n\t\t\ta1 = Math.atan2(ty * a - tx * b, tx * a + ty * b);\n\t\t} else {\n\t\t\ta = psx * l2;\n\t\t\tb = psy * l2;\n\t\t\tlet aa = a * a, bb = b * b, ta = Math.atan2(ty, tx);\n\t\t\tc = bb * l1 * l1 + aa * dd - aa * bb;\n\t\t\tlet c1 = -2 * bb * l1, c2 = bb - aa;\n\t\t\td = c1 * c1 - 4 * c2 * c;\n\t\t\tif (d >= 0) {\n\t\t\t\tlet q = Math.sqrt(d);\n\t\t\t\tif (c1 < 0) q = -q;\n\t\t\t\tq = -(c1 + q) * 0.5;\n\t\t\t\tlet r0 = q / c2, r1 = c / q;\n\t\t\t\tlet r = Math.abs(r0) < Math.abs(r1) ? r0 : r1;\n\t\t\t\tif (r * r <= dd) {\n\t\t\t\t\ty = Math.sqrt(dd - r * r) * bendDir;\n\t\t\t\t\ta1 = ta - Math.atan2(y, r);\n\t\t\t\t\ta2 = Math.atan2(y / psy, (r - l1) / psx);\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlet minAngle = MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0;\n\t\t\tlet maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0;\n\t\t\tc = -a * l1 / (aa - bb);\n\t\t\tif (c >= -1 && c <= 1) {\n\t\t\t\tc = Math.acos(c);\n\t\t\t\tx = a * Math.cos(c) + l1;\n\t\t\t\ty = b * Math.sin(c);\n\t\t\t\td = x * x + y * y;\n\t\t\t\tif (d < minDist) {\n\t\t\t\t\tminAngle = c;\n\t\t\t\t\tminDist = d;\n\t\t\t\t\tminX = x;\n\t\t\t\t\tminY = y;\n\t\t\t\t}\n\t\t\t\tif (d > maxDist) {\n\t\t\t\t\tmaxAngle = c;\n\t\t\t\t\tmaxDist = d;\n\t\t\t\t\tmaxX = x;\n\t\t\t\t\tmaxY = y;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (dd <= (minDist + maxDist) * 0.5) {\n\t\t\t\ta1 = ta - Math.atan2(minY * bendDir, minX);\n\t\t\t\ta2 = minAngle * bendDir;\n\t\t\t} else {\n\t\t\t\ta1 = ta - Math.atan2(maxY * bendDir, maxX);\n\t\t\t\ta2 = maxAngle * bendDir;\n\t\t\t}\n\t\t}\n\t\tlet os = Math.atan2(cy, cx) * s2;\n\t\tlet rotation = parent.arotation;\n\t\ta1 = (a1 - os) * MathUtils.radDeg + os1 - rotation;\n\t\tif (a1 > 180)\n\t\t\ta1 -= 360;\n\t\telse if (a1 < -180) //\n\t\t\ta1 += 360;\n\t\tparent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, sy, 0, 0);\n\t\trotation = child.arotation;\n\t\ta2 = ((a2 + os) * MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation;\n\t\tif (a2 > 180)\n\t\t\ta2 -= 360;\n\t\telse if (a2 < -180) //\n\t\t\ta2 += 360;\n\t\tchild.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { BoneData } from \"./BoneData\";\nimport { ConstraintData } from \"./ConstraintData\";\n\n\n/** Stores the setup pose for an {@link IkConstraint}.\n * <p>\n * See [IK constraints](http://esotericsoftware.com/spine-ik-constraints) in the Spine User Guide. */\nexport class IkConstraintData extends ConstraintData {\n\t/** The bones that are constrained by this IK constraint. */\n\tbones = new Array<BoneData>();\n\n\t/** The bone that is the IK target. */\n\tprivate _target: BoneData | null = null;\n\tpublic set target (boneData: BoneData) { this._target = boneData; }\n\tpublic get target () {\n\t\tif (!this._target) throw new Error(\"BoneData not set.\")\n\t\telse return this._target;\n\t}\n\n\t/** Controls the bend direction of the IK bones, either 1 or -1. */\n\tbendDirection = 1;\n\n\t/** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */\n\tcompress = false;\n\n\t/** 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\t * and the parent bone has local nonuniform scale, stretch is not applied. */\n\tstretch = false;\n\n\t/** When true, only a single bone is being constrained, and {@link #getCompress()} or {@link #getStretch()} is used, the bone\n\t * is scaled on both the X and Y axes. */\n\tuniform = false;\n\n\t/** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */\n\tmix = 1;\n\n\t/** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */\n\tsoftness = 0;\n\n\tconstructor (name: string) {\n\t\tsuper(name, 0, false);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { BoneData } from \"./BoneData\";\nimport { ConstraintData } from \"./ConstraintData\";\nimport { SlotData } from \"./SlotData\";\n\n\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. */\nexport class PathConstraintData extends ConstraintData {\n\n\t/** The bones that will be modified by this path constraint. */\n\tbones = new Array<BoneData>();\n\n\t/** The slot whose path attachment will be used to constrained the bones. */\n\tprivate _target: SlotData | null = null;\n\tpublic set target (slotData: SlotData) { this._target = slotData; }\n\tpublic get target () {\n\t\tif (!this._target) throw new Error(\"SlotData not set.\")\n\t\telse return this._target;\n\t}\n\n\t/** The mode for positioning the first bone on the path. */\n\tpositionMode: PositionMode = PositionMode.Fixed;\n\n\t/** The mode for positioning the bones after the first bone on the path. */\n\tspacingMode: SpacingMode = SpacingMode.Fixed;\n\n\t/** The mode for adjusting the rotation of the bones. */\n\trotateMode: RotateMode = RotateMode.Chain;\n\n\t/** An offset added to the constrained bone rotation. */\n\toffsetRotation: number = 0;\n\n\t/** The position along the path. */\n\tposition: number = 0;\n\n\t/** The spacing between bones. */\n\tspacing: number = 0;\n\n\tmixRotate = 0;\n\tmixX = 0;\n\tmixY = 0;\n\n\tconstructor (name: string) {\n\t\tsuper(name, 0, false);\n\t}\n}\n\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 enum PositionMode { Fixed, Percent }\n\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 enum SpacingMode { Length, Fixed, Percent, Proportional }\n\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 enum RotateMode { Tangent, Chain, ChainScale }\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { PathAttachment } from \"./attachments/PathAttachment\";\nimport { Bone } from \"./Bone\";\nimport { PathConstraintData, RotateMode, SpacingMode, PositionMode } from \"./PathConstraintData\";\nimport { Skeleton } from \"./Skeleton\";\nimport { Slot } from \"./Slot\";\nimport { Updatable } from \"./Updatable\";\nimport { Utils, MathUtils } from \"./Utils\";\n\n\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. */\nexport class PathConstraint implements Updatable {\n\tstatic NONE = -1; static BEFORE = -2; static AFTER = -3;\n\tstatic epsilon = 0.00001;\n\n\t/** The path constraint's setup pose data. */\n\tdata: PathConstraintData;\n\n\t/** The bones that will be modified by this path constraint. */\n\tbones: Array<Bone>;\n\n\t/** The slot whose path attachment will be used to constrained the bones. */\n\ttarget: Slot;\n\n\t/** The position along the path. */\n\tposition = 0;\n\n\t/** The spacing between bones. */\n\tspacing = 0;\n\n\tmixRotate = 0;\n\n\tmixX = 0;\n\n\tmixY = 0;\n\n\tspaces = new Array<number>(); positions = new Array<number>();\n\tworld = new Array<number>(); curves = new Array<number>(); lengths = new Array<number>();\n\tsegments = new Array<number>();\n\n\tactive = false;\n\n\tconstructor (data: PathConstraintData, skeleton: Skeleton) {\n\t\tif (!data) throw new Error(\"data cannot be null.\");\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\t\tthis.data = data;\n\t\tthis.bones = new Array<Bone>();\n\t\tfor (let i = 0, n = data.bones.length; i < n; i++) {\n\t\t\tlet bone = skeleton.findBone(data.bones[i].name);\n\t\t\tif (!bone) throw new Error(`Couldn't find bone ${data.bones[i].name}.`);\n\t\t\tthis.bones.push(bone);\n\t\t}\n\t\tlet target = skeleton.findSlot(data.target.name);\n\t\tif (!target) throw new Error(`Couldn't find target bone ${data.target.name}`);\n\t\tthis.target = target;\n\t\tthis.position = data.position;\n\t\tthis.spacing = data.spacing;\n\t\tthis.mixRotate = data.mixRotate;\n\t\tthis.mixX = data.mixX;\n\t\tthis.mixY = data.mixY;\n\t}\n\n\tisActive () {\n\t\treturn this.active;\n\t}\n\n\tupdate () {\n\t\tlet attachment = this.target.getAttachment();\n\t\tif (!(attachment instanceof PathAttachment)) return;\n\n\t\tlet mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY;\n\t\tif (mixRotate == 0 && mixX == 0 && mixY == 0) return;\n\n\t\tlet data = this.data;\n\t\tlet tangents = data.rotateMode == RotateMode.Tangent, scale = data.rotateMode == RotateMode.ChainScale;\n\n\t\tlet bones = this.bones;\n\t\tlet boneCount = bones.length, spacesCount = tangents ? boneCount : boneCount + 1;\n\t\tlet spaces = Utils.setArraySize(this.spaces, spacesCount), lengths: Array<number> = scale ? this.lengths = Utils.setArraySize(this.lengths, boneCount) : [];\n\t\tlet spacing = this.spacing;\n\n\t\tswitch (data.spacingMode) {\n\t\t\tcase SpacingMode.Percent:\n\t\t\t\tif (scale) {\n\t\t\t\t\tfor (let i = 0, n = spacesCount - 1; i < n; i++) {\n\t\t\t\t\t\tlet bone = bones[i];\n\t\t\t\t\t\tlet setupLength = bone.data.length;\n\t\t\t\t\t\tif (setupLength < PathConstraint.epsilon)\n\t\t\t\t\t\t\tlengths[i] = 0;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet x = setupLength * bone.a, y = setupLength * bone.c;\n\t\t\t\t\t\t\tlengths[i] = Math.sqrt(x * x + y * y);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tUtils.arrayFill(spaces, 1, spacesCount, spacing);\n\t\t\t\tbreak;\n\t\t\tcase SpacingMode.Proportional:\n\t\t\t\tlet sum = 0;\n\t\t\t\tfor (let i = 0, n = spacesCount - 1; i < n;) {\n\t\t\t\t\tlet bone = bones[i];\n\t\t\t\t\tlet setupLength = bone.data.length;\n\t\t\t\t\tif (setupLength < PathConstraint.epsilon) {\n\t\t\t\t\t\tif (scale) lengths[i] = 0;\n\t\t\t\t\t\tspaces[++i] = spacing;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet x = setupLength * bone.a, y = setupLength * bone.c;\n\t\t\t\t\t\tlet length = Math.sqrt(x * x + y * y);\n\t\t\t\t\t\tif (scale) lengths[i] = length;\n\t\t\t\t\t\tspaces[++i] = length;\n\t\t\t\t\t\tsum += length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (sum > 0) {\n\t\t\t\t\tsum = spacesCount / sum * spacing;\n\t\t\t\t\tfor (let i = 1; i < spacesCount; i++)\n\t\t\t\t\t\tspaces[i] *= sum;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tlet lengthSpacing = data.spacingMode == SpacingMode.Length;\n\t\t\t\tfor (let i = 0, n = spacesCount - 1; i < n;) {\n\t\t\t\t\tlet bone = bones[i];\n\t\t\t\t\tlet setupLength = bone.data.length;\n\t\t\t\t\tif (setupLength < PathConstraint.epsilon) {\n\t\t\t\t\t\tif (scale) lengths[i] = 0;\n\t\t\t\t\t\tspaces[++i] = spacing;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet x = setupLength * bone.a, y = setupLength * bone.c;\n\t\t\t\t\t\tlet length = Math.sqrt(x * x + y * y);\n\t\t\t\t\t\tif (scale) lengths[i] = length;\n\t\t\t\t\t\tspaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t}\n\n\t\tlet positions = this.computeWorldPositions(<PathAttachment>attachment, spacesCount, tangents);\n\t\tlet boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;\n\t\tlet tip = false;\n\t\tif (offsetRotation == 0)\n\t\t\ttip = data.rotateMode == RotateMode.Chain;\n\t\telse {\n\t\t\ttip = false;\n\t\t\tlet p = this.target.bone;\n\t\t\toffsetRotation *= p.a * p.d - p.b * p.c > 0 ? MathUtils.degRad : -MathUtils.degRad;\n\t\t}\n\t\tfor (let i = 0, p = 3; i < boneCount; i++, p += 3) {\n\t\t\tlet bone = bones[i];\n\t\t\tbone.worldX += (boneX - bone.worldX) * mixX;\n\t\t\tbone.worldY += (boneY - bone.worldY) * mixY;\n\t\t\tlet x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY;\n\t\t\tif (scale) {\n\t\t\t\tlet length = lengths[i];\n\t\t\t\tif (length != 0) {\n\t\t\t\t\tlet s = (Math.sqrt(dx * dx + dy * dy) / length - 1) * mixRotate + 1;\n\t\t\t\t\tbone.a *= s;\n\t\t\t\t\tbone.c *= s;\n\t\t\t\t}\n\t\t\t}\n\t\t\tboneX = x;\n\t\t\tboneY = y;\n\t\t\tif (mixRotate > 0) {\n\t\t\t\tlet a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;\n\t\t\t\tif (tangents)\n\t\t\t\t\tr = positions[p - 1];\n\t\t\t\telse if (spaces[i + 1] == 0)\n\t\t\t\t\tr = positions[p + 2];\n\t\t\t\telse\n\t\t\t\t\tr = Math.atan2(dy, dx);\n\t\t\t\tr -= Math.atan2(c, a);\n\t\t\t\tif (tip) {\n\t\t\t\t\tcos = Math.cos(r);\n\t\t\t\t\tsin = Math.sin(r);\n\t\t\t\t\tlet length = bone.data.length;\n\t\t\t\t\tboneX += (length * (cos * a - sin * c) - dx) * mixRotate;\n\t\t\t\t\tboneY += (length * (sin * a + cos * c) - dy) * mixRotate;\n\t\t\t\t} else {\n\t\t\t\t\tr += offsetRotation;\n\t\t\t\t}\n\t\t\t\tif (r > MathUtils.PI)\n\t\t\t\t\tr -= MathUtils.PI2;\n\t\t\t\telse if (r < -MathUtils.PI) //\n\t\t\t\t\tr += MathUtils.PI2;\n\t\t\t\tr *= mixRotate;\n\t\t\t\tcos = Math.cos(r);\n\t\t\t\tsin = Math.sin(r);\n\t\t\t\tbone.a = cos * a - sin * c;\n\t\t\t\tbone.b = cos * b - sin * d;\n\t\t\t\tbone.c = sin * a + cos * c;\n\t\t\t\tbone.d = sin * b + cos * d;\n\t\t\t}\n\t\t\tbone.updateAppliedTransform();\n\t\t}\n\t}\n\n\tcomputeWorldPositions (path: PathAttachment, spacesCount: number, tangents: boolean) {\n\t\tlet target = this.target;\n\t\tlet position = this.position;\n\t\tlet spaces = this.spaces, out = Utils.setArraySize(this.positions, spacesCount * 3 + 2), world: Array<number> = this.world;\n\t\tlet closed = path.closed;\n\t\tlet verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE;\n\n\t\tif (!path.constantSpeed) {\n\t\t\tlet lengths = path.lengths;\n\t\t\tcurveCount -= closed ? 1 : 2;\n\t\t\tlet pathLength = lengths[curveCount];\n\t\t\tif (this.data.positionMode == PositionMode.Percent) position *= pathLength;\n\n\t\t\tlet multiplier;\n\t\t\tswitch (this.data.spacingMode) {\n\t\t\t\tcase SpacingMode.Percent:\n\t\t\t\t\tmultiplier = pathLength;\n\t\t\t\t\tbreak;\n\t\t\t\tcase SpacingMode.Proportional:\n\t\t\t\t\tmultiplier = pathLength / spacesCount;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tmultiplier = 1;\n\t\t\t}\n\t\t\tworld = Utils.setArraySize(this.world, 8);\n\t\t\tfor (let i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) {\n\t\t\t\tlet space = spaces[i] * multiplier;\n\t\t\t\tposition += space;\n\t\t\t\tlet p = position;\n\n\t\t\t\tif (closed) {\n\t\t\t\t\tp %= pathLength;\n\t\t\t\t\tif (p < 0) p += pathLength;\n\t\t\t\t\tcurve = 0;\n\t\t\t\t} else if (p < 0) {\n\t\t\t\t\tif (prevCurve != PathConstraint.BEFORE) {\n\t\t\t\t\t\tprevCurve = PathConstraint.BEFORE;\n\t\t\t\t\t\tpath.computeWorldVertices(target, 2, 4, world, 0, 2);\n\t\t\t\t\t}\n\t\t\t\t\tthis.addBeforePosition(p, world, 0, out, o);\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (p > pathLength) {\n\t\t\t\t\tif (prevCurve != PathConstraint.AFTER) {\n\t\t\t\t\t\tprevCurve = PathConstraint.AFTER;\n\t\t\t\t\t\tpath.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2);\n\t\t\t\t\t}\n\t\t\t\t\tthis.addAfterPosition(p - pathLength, world, 0, out, o);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Determine curve containing position.\n\t\t\t\tfor (; ; curve++) {\n\t\t\t\t\tlet length = lengths[curve];\n\t\t\t\t\tif (p > length) continue;\n\t\t\t\t\tif (curve == 0)\n\t\t\t\t\t\tp /= length;\n\t\t\t\t\telse {\n\t\t\t\t\t\tlet prev = lengths[curve - 1];\n\t\t\t\t\t\tp = (p - prev) / (length - prev);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (curve != prevCurve) {\n\t\t\t\t\tprevCurve = curve;\n\t\t\t\t\tif (closed && curve == curveCount) {\n\t\t\t\t\t\tpath.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2);\n\t\t\t\t\t\tpath.computeWorldVertices(target, 0, 4, world, 4, 2);\n\t\t\t\t\t} else\n\t\t\t\t\t\tpath.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2);\n\t\t\t\t}\n\t\t\t\tthis.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o,\n\t\t\t\t\ttangents || (i > 0 && space == 0));\n\t\t\t}\n\t\t\treturn out;\n\t\t}\n\n\t\t// World vertices.\n\t\tif (closed) {\n\t\t\tverticesLength += 2;\n\t\t\tworld = Utils.setArraySize(this.world, verticesLength);\n\t\t\tpath.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2);\n\t\t\tpath.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2);\n\t\t\tworld[verticesLength - 2] = world[0];\n\t\t\tworld[verticesLength - 1] = world[1];\n\t\t} else {\n\t\t\tcurveCount--;\n\t\t\tverticesLength -= 4;\n\t\t\tworld = Utils.setArraySize(this.world, verticesLength);\n\t\t\tpath.computeWorldVertices(target, 2, verticesLength, world, 0, 2);\n\t\t}\n\n\t\t// Curve lengths.\n\t\tlet curves = Utils.setArraySize(this.curves, curveCount);\n\t\tlet pathLength = 0;\n\t\tlet x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0;\n\t\tlet tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0;\n\t\tfor (let i = 0, w = 2; i < curveCount; i++, w += 6) {\n\t\t\tcx1 = world[w];\n\t\t\tcy1 = world[w + 1];\n\t\t\tcx2 = world[w + 2];\n\t\t\tcy2 = world[w + 3];\n\t\t\tx2 = world[w + 4];\n\t\t\ty2 = world[w + 5];\n\t\t\ttmpx = (x1 - cx1 * 2 + cx2) * 0.1875;\n\t\t\ttmpy = (y1 - cy1 * 2 + cy2) * 0.1875;\n\t\t\tdddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375;\n\t\t\tdddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375;\n\t\t\tddfx = tmpx * 2 + dddfx;\n\t\t\tddfy = tmpy * 2 + dddfy;\n\t\t\tdfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667;\n\t\t\tdfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667;\n\t\t\tpathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\tdfx += ddfx;\n\t\t\tdfy += ddfy;\n\t\t\tddfx += dddfx;\n\t\t\tddfy += dddfy;\n\t\t\tpathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\tdfx += ddfx;\n\t\t\tdfy += ddfy;\n\t\t\tpathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\tdfx += ddfx + dddfx;\n\t\t\tdfy += ddfy + dddfy;\n\t\t\tpathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\tcurves[i] = pathLength;\n\t\t\tx1 = x2;\n\t\t\ty1 = y2;\n\t\t}\n\n\t\tif (this.data.positionMode == PositionMode.Percent) position *= pathLength;\n\n\t\tlet multiplier;\n\t\tswitch (this.data.spacingMode) {\n\t\t\tcase SpacingMode.Percent:\n\t\t\t\tmultiplier = pathLength;\n\t\t\t\tbreak;\n\t\t\tcase SpacingMode.Proportional:\n\t\t\t\tmultiplier = pathLength / spacesCount;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tmultiplier = 1;\n\t\t}\n\n\t\tlet segments = this.segments;\n\t\tlet curveLength = 0;\n\t\tfor (let i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) {\n\t\t\tlet space = spaces[i] * multiplier;\n\t\t\tposition += space;\n\t\t\tlet p = position;\n\n\t\t\tif (closed) {\n\t\t\t\tp %= pathLength;\n\t\t\t\tif (p < 0) p += pathLength;\n\t\t\t\tcurve = 0;\n\t\t\t} else if (p < 0) {\n\t\t\t\tthis.addBeforePosition(p, world, 0, out, o);\n\t\t\t\tcontinue;\n\t\t\t} else if (p > pathLength) {\n\t\t\t\tthis.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Determine curve containing position.\n\t\t\tfor (; ; curve++) {\n\t\t\t\tlet length = curves[curve];\n\t\t\t\tif (p > length) continue;\n\t\t\t\tif (curve == 0)\n\t\t\t\t\tp /= length;\n\t\t\t\telse {\n\t\t\t\t\tlet prev = curves[curve - 1];\n\t\t\t\t\tp = (p - prev) / (length - prev);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Curve segment lengths.\n\t\t\tif (curve != prevCurve) {\n\t\t\t\tprevCurve = curve;\n\t\t\t\tlet ii = curve * 6;\n\t\t\t\tx1 = world[ii];\n\t\t\t\ty1 = world[ii + 1];\n\t\t\t\tcx1 = world[ii + 2];\n\t\t\t\tcy1 = world[ii + 3];\n\t\t\t\tcx2 = world[ii + 4];\n\t\t\t\tcy2 = world[ii + 5];\n\t\t\t\tx2 = world[ii + 6];\n\t\t\t\ty2 = world[ii + 7];\n\t\t\t\ttmpx = (x1 - cx1 * 2 + cx2) * 0.03;\n\t\t\t\ttmpy = (y1 - cy1 * 2 + cy2) * 0.03;\n\t\t\t\tdddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006;\n\t\t\t\tdddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006;\n\t\t\t\tddfx = tmpx * 2 + dddfx;\n\t\t\t\tddfy = tmpy * 2 + dddfy;\n\t\t\t\tdfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667;\n\t\t\t\tdfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667;\n\t\t\t\tcurveLength = Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\tsegments[0] = curveLength;\n\t\t\t\tfor (ii = 1; ii < 8; ii++) {\n\t\t\t\t\tdfx += ddfx;\n\t\t\t\t\tdfy += ddfy;\n\t\t\t\t\tddfx += dddfx;\n\t\t\t\t\tddfy += dddfy;\n\t\t\t\t\tcurveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\t\tsegments[ii] = curveLength;\n\t\t\t\t}\n\t\t\t\tdfx += ddfx;\n\t\t\t\tdfy += ddfy;\n\t\t\t\tcurveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\tsegments[8] = curveLength;\n\t\t\t\tdfx += ddfx + dddfx;\n\t\t\t\tdfy += ddfy + dddfy;\n\t\t\t\tcurveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n\t\t\t\tsegments[9] = curveLength;\n\t\t\t\tsegment = 0;\n\t\t\t}\n\n\t\t\t// Weight by segment length.\n\t\t\tp *= curveLength;\n\t\t\tfor (; ; segment++) {\n\t\t\t\tlet length = segments[segment];\n\t\t\t\tif (p > length) continue;\n\t\t\t\tif (segment == 0)\n\t\t\t\t\tp /= length;\n\t\t\t\telse {\n\t\t\t\t\tlet prev = segments[segment - 1];\n\t\t\t\t\tp = segment + (p - prev) / (length - prev);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0));\n\t\t}\n\t\treturn out;\n\t}\n\n\taddBeforePosition (p: number, temp: Array<number>, i: number, out: Array<number>, o: number) {\n\t\tlet x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx);\n\t\tout[o] = x1 + p * Math.cos(r);\n\t\tout[o + 1] = y1 + p * Math.sin(r);\n\t\tout[o + 2] = r;\n\t}\n\n\taddAfterPosition (p: number, temp: Array<number>, i: number, out: Array<number>, o: number) {\n\t\tlet x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx);\n\t\tout[o] = x1 + p * Math.cos(r);\n\t\tout[o + 1] = y1 + p * Math.sin(r);\n\t\tout[o + 2] = r;\n\t}\n\n\taddCurvePosition (p: number, x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number,\n\t\tout: Array<number>, o: number, tangents: boolean) {\n\t\tif (p == 0 || isNaN(p)) {\n\t\t\tout[o] = x1;\n\t\t\tout[o + 1] = y1;\n\t\t\tout[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n\t\t\treturn;\n\t\t}\n\t\tlet tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u;\n\t\tlet ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p;\n\t\tlet x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt;\n\t\tout[o] = x;\n\t\tout[o + 1] = y;\n\t\tif (tangents) {\n\t\t\tif (p < 0.001)\n\t\t\t\tout[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n\t\t\telse\n\t\t\t\tout[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt));\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Attachment, VertexAttachment } from \"./attachments/Attachment\";\nimport { Bone } from \"./Bone\";\nimport { Skeleton } from \"./Skeleton\";\nimport { SlotData } from \"./SlotData\";\nimport { Color } from \"./Utils\";\n\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. */\nexport class Slot {\n\t/** The slot's setup pose data. */\n\tdata: SlotData;\n\n\t/** The bone this slot belongs to. */\n\tbone: Bone;\n\n\t/** The color used to tint the slot's attachment. If {@link #getDarkColor()} is set, this is used as the light color for two\n\t * color tinting. */\n\tcolor: Color;\n\n\t/** The dark color used to tint the slot's attachment for two color tinting, or null if two color tinting is not used. The dark\n\t * color's alpha is not used. */\n\tdarkColor: Color | null = null;\n\n\tattachment: Attachment | null = null;\n\n\tattachmentState: number = 0;\n\n\t/** The index of the texture region to display when the slot's attachment has a {@link Sequence}. -1 represents the\n\t * {@link Sequence#getSetupIndex()}. */\n\tsequenceIndex: number = -1;\n\n\t/** Values to deform the slot's attachment. For an unweighted mesh, the entries are local positions for each vertex. For a\n\t * weighted mesh, the entries are an offset for each vertex which will be added to the mesh's local vertex positions.\n\t *\n\t * See {@link VertexAttachment#computeWorldVertices()} and {@link DeformTimeline}. */\n\tdeform = new Array<number>();\n\n\tconstructor (data: SlotData, bone: Bone) {\n\t\tif (!data) throw new Error(\"data cannot be null.\");\n\t\tif (!bone) throw new Error(\"bone cannot be null.\");\n\t\tthis.data = data;\n\t\tthis.bone = bone;\n\t\tthis.color = new Color();\n\t\tthis.darkColor = !data.darkColor ? null : new Color();\n\t\tthis.setToSetupPose();\n\t}\n\n\t/** The skeleton this slot belongs to. */\n\tgetSkeleton (): Skeleton {\n\t\treturn this.bone.skeleton;\n\t}\n\n\t/** The current attachment for the slot, or null if the slot has no attachment. */\n\tgetAttachment (): Attachment | null {\n\t\treturn this.attachment;\n\t}\n\n\t/** Sets the slot's attachment and, if the attachment changed, resets {@link #sequenceIndex} and clears the {@link #deform}.\n\t * The deform is not cleared if the old attachment has the same {@link VertexAttachment#getTimelineAttachment()} as the\n\t * specified attachment. */\n\tsetAttachment (attachment: Attachment | null) {\n\t\tif (this.attachment == attachment) return;\n\t\tif (!(attachment instanceof VertexAttachment) || !(this.attachment instanceof VertexAttachment)\n\t\t\t|| (<VertexAttachment>attachment).timelineAttachment != (<VertexAttachment>this.attachment).timelineAttachment) {\n\t\t\tthis.deform.length = 0;\n\t\t}\n\t\tthis.attachment = attachment;\n\t\tthis.sequenceIndex = -1;\n\t}\n\n\t/** Sets this slot to the setup pose. */\n\tsetToSetupPose () {\n\t\tthis.color.setFromColor(this.data.color);\n\t\tif (this.darkColor) this.darkColor.setFromColor(this.data.darkColor!);\n\t\tif (!this.data.attachmentName)\n\t\t\tthis.attachment = null;\n\t\telse {\n\t\t\tthis.attachment = null;\n\t\t\tthis.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName));\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Bone } from \"./Bone\";\nimport { Skeleton } from \"./Skeleton\";\nimport { TransformConstraintData } from \"./TransformConstraintData\";\nimport { Updatable } from \"./Updatable\";\nimport { Vector2, MathUtils } from \"./Utils\";\n\n\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. */\nexport class TransformConstraint implements Updatable {\n\n\t/** The transform constraint's setup pose data. */\n\tdata: TransformConstraintData;\n\n\t/** The bones that will be modified by this transform constraint. */\n\tbones: Array<Bone>;\n\n\t/** The target bone whose world transform will be copied to the constrained bones. */\n\ttarget: Bone;\n\n\tmixRotate = 0; mixX = 0; mixY = 0; mixScaleX = 0; mixScaleY = 0; mixShearY = 0;\n\n\ttemp = new Vector2();\n\tactive = false;\n\n\tconstructor (data: TransformConstraintData, skeleton: Skeleton) {\n\t\tif (!data) throw new Error(\"data cannot be null.\");\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\t\tthis.data = data;\n\t\tthis.mixRotate = data.mixRotate;\n\t\tthis.mixX = data.mixX;\n\t\tthis.mixY = data.mixY;\n\t\tthis.mixScaleX = data.mixScaleX;\n\t\tthis.mixScaleY = data.mixScaleY;\n\t\tthis.mixShearY = data.mixShearY;\n\t\tthis.bones = new Array<Bone>();\n\t\tfor (let i = 0; i < data.bones.length; i++) {\n\t\t\tlet bone = skeleton.findBone(data.bones[i].name);\n\t\t\tif (!bone) throw new Error(`Couldn't find bone ${data.bones[i].name}.`);\n\t\t\tthis.bones.push(bone);\n\t\t}\n\t\tlet target = skeleton.findBone(data.target.name);\n\t\tif (!target) throw new Error(`Couldn't find target bone ${data.target.name}.`);\n\t\tthis.target = target;\n\t}\n\n\tisActive () {\n\t\treturn this.active;\n\t}\n\n\tupdate () {\n\t\tif (this.mixRotate == 0 && this.mixX == 0 && this.mixY == 0 && this.mixScaleX == 0 && this.mixScaleY == 0 && this.mixShearY == 0) return;\n\n\t\tif (this.data.local) {\n\t\t\tif (this.data.relative)\n\t\t\t\tthis.applyRelativeLocal();\n\t\t\telse\n\t\t\t\tthis.applyAbsoluteLocal();\n\t\t} else {\n\t\t\tif (this.data.relative)\n\t\t\t\tthis.applyRelativeWorld();\n\t\t\telse\n\t\t\t\tthis.applyAbsoluteWorld();\n\t\t}\n\t}\n\n\tapplyAbsoluteWorld () {\n\t\tlet mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX,\n\t\t\tmixScaleY = this.mixScaleY, mixShearY = this.mixShearY;\n\t\tlet translate = mixX != 0 || mixY != 0;\n\n\t\tlet target = this.target;\n\t\tlet ta = target.a, tb = target.b, tc = target.c, td = target.d;\n\t\tlet degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad;\n\t\tlet offsetRotation = this.data.offsetRotation * degRadReflect;\n\t\tlet offsetShearY = this.data.offsetShearY * degRadReflect;\n\n\t\tlet bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++) {\n\t\t\tlet bone = bones[i];\n\n\t\t\tif (mixRotate != 0) {\n\t\t\t\tlet a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n\t\t\t\tlet r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation;\n\t\t\t\tif (r > MathUtils.PI)\n\t\t\t\t\tr -= MathUtils.PI2;\n\t\t\t\telse if (r < -MathUtils.PI) //\n\t\t\t\t\tr += MathUtils.PI2;\n\t\t\t\tr *= mixRotate;\n\t\t\t\tlet cos = Math.cos(r), sin = Math.sin(r);\n\t\t\t\tbone.a = cos * a - sin * c;\n\t\t\t\tbone.b = cos * b - sin * d;\n\t\t\t\tbone.c = sin * a + cos * c;\n\t\t\t\tbone.d = sin * b + cos * d;\n\t\t\t}\n\n\t\t\tif (translate) {\n\t\t\t\tlet temp = this.temp;\n\t\t\t\ttarget.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n\t\t\t\tbone.worldX += (temp.x - bone.worldX) * mixX;\n\t\t\t\tbone.worldY += (temp.y - bone.worldY) * mixY;\n\t\t\t}\n\n\t\t\tif (mixScaleX != 0) {\n\t\t\t\tlet s = Math.sqrt(bone.a * bone.a + bone.c * bone.c);\n\t\t\t\tif (s != 0) s = (s + (Math.sqrt(ta * ta + tc * tc) - s + this.data.offsetScaleX) * mixScaleX) / s;\n\t\t\t\tbone.a *= s;\n\t\t\t\tbone.c *= s;\n\t\t\t}\n\t\t\tif (mixScaleY != 0) {\n\t\t\t\tlet s = Math.sqrt(bone.b * bone.b + bone.d * bone.d);\n\t\t\t\tif (s != 0) s = (s + (Math.sqrt(tb * tb + td * td) - s + this.data.offsetScaleY) * mixScaleY) / s;\n\t\t\t\tbone.b *= s;\n\t\t\t\tbone.d *= s;\n\t\t\t}\n\n\t\t\tif (mixShearY > 0) {\n\t\t\t\tlet b = bone.b, d = bone.d;\n\t\t\t\tlet by = Math.atan2(d, b);\n\t\t\t\tlet r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a));\n\t\t\t\tif (r > MathUtils.PI)\n\t\t\t\t\tr -= MathUtils.PI2;\n\t\t\t\telse if (r < -MathUtils.PI) //\n\t\t\t\t\tr += MathUtils.PI2;\n\t\t\t\tr = by + (r + offsetShearY) * mixShearY;\n\t\t\t\tlet s = Math.sqrt(b * b + d * d);\n\t\t\t\tbone.b = Math.cos(r) * s;\n\t\t\t\tbone.d = Math.sin(r) * s;\n\t\t\t}\n\n\t\t\tbone.updateAppliedTransform();\n\t\t}\n\t}\n\n\tapplyRelativeWorld () {\n\t\tlet mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX,\n\t\t\tmixScaleY = this.mixScaleY, mixShearY = this.mixShearY;\n\t\tlet translate = mixX != 0 || mixY != 0;\n\n\t\tlet target = this.target;\n\t\tlet ta = target.a, tb = target.b, tc = target.c, td = target.d;\n\t\tlet degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad;\n\t\tlet offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect;\n\n\t\tlet bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++) {\n\t\t\tlet bone = bones[i];\n\n\t\t\tif (mixRotate != 0) {\n\t\t\t\tlet a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n\t\t\t\tlet r = Math.atan2(tc, ta) + offsetRotation;\n\t\t\t\tif (r > MathUtils.PI)\n\t\t\t\t\tr -= MathUtils.PI2;\n\t\t\t\telse if (r < -MathUtils.PI) //\n\t\t\t\t\tr += MathUtils.PI2;\n\t\t\t\tr *= mixRotate;\n\t\t\t\tlet cos = Math.cos(r), sin = Math.sin(r);\n\t\t\t\tbone.a = cos * a - sin * c;\n\t\t\t\tbone.b = cos * b - sin * d;\n\t\t\t\tbone.c = sin * a + cos * c;\n\t\t\t\tbone.d = sin * b + cos * d;\n\t\t\t}\n\n\t\t\tif (translate) {\n\t\t\t\tlet temp = this.temp;\n\t\t\t\ttarget.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n\t\t\t\tbone.worldX += temp.x * mixX;\n\t\t\t\tbone.worldY += temp.y * mixY;\n\t\t\t}\n\n\t\t\tif (mixScaleX != 0) {\n\t\t\t\tlet s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * mixScaleX + 1;\n\t\t\t\tbone.a *= s;\n\t\t\t\tbone.c *= s;\n\t\t\t}\n\t\t\tif (mixScaleY != 0) {\n\t\t\t\tlet s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * mixScaleY + 1;\n\t\t\t\tbone.b *= s;\n\t\t\t\tbone.d *= s;\n\t\t\t}\n\n\t\t\tif (mixShearY > 0) {\n\t\t\t\tlet r = Math.atan2(td, tb) - Math.atan2(tc, ta);\n\t\t\t\tif (r > MathUtils.PI)\n\t\t\t\t\tr -= MathUtils.PI2;\n\t\t\t\telse if (r < -MathUtils.PI) //\n\t\t\t\t\tr += MathUtils.PI2;\n\t\t\t\tlet b = bone.b, d = bone.d;\n\t\t\t\tr = Math.atan2(d, b) + (r - MathUtils.PI / 2 + offsetShearY) * mixShearY;\n\t\t\t\tlet s = Math.sqrt(b * b + d * d);\n\t\t\t\tbone.b = Math.cos(r) * s;\n\t\t\t\tbone.d = Math.sin(r) * s;\n\t\t\t}\n\n\t\t\tbone.updateAppliedTransform();\n\t\t}\n\t}\n\n\tapplyAbsoluteLocal () {\n\t\tlet mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX,\n\t\t\tmixScaleY = this.mixScaleY, mixShearY = this.mixShearY;\n\n\t\tlet target = this.target;\n\n\t\tlet bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++) {\n\t\t\tlet bone = bones[i];\n\n\t\t\tlet rotation = bone.arotation;\n\t\t\tif (mixRotate != 0) {\n\t\t\t\tlet r = target.arotation - rotation + this.data.offsetRotation;\n\t\t\t\tr -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n\t\t\t\trotation += r * mixRotate;\n\t\t\t}\n\n\t\t\tlet x = bone.ax, y = bone.ay;\n\t\t\tx += (target.ax - x + this.data.offsetX) * mixX;\n\t\t\ty += (target.ay - y + this.data.offsetY) * mixY;\n\n\t\t\tlet scaleX = bone.ascaleX, scaleY = bone.ascaleY;\n\t\t\tif (mixScaleX != 0 && scaleX != 0)\n\t\t\t\tscaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * mixScaleX) / scaleX;\n\t\t\tif (mixScaleY != 0 && scaleY != 0)\n\t\t\t\tscaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * mixScaleY) / scaleY;\n\n\t\t\tlet shearY = bone.ashearY;\n\t\t\tif (mixShearY != 0) {\n\t\t\t\tlet r = target.ashearY - shearY + this.data.offsetShearY;\n\t\t\t\tr -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n\t\t\t\tshearY += r * mixShearY;\n\t\t\t}\n\n\t\t\tbone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n\t\t}\n\t}\n\n\tapplyRelativeLocal () {\n\t\tlet mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX,\n\t\t\tmixScaleY = this.mixScaleY, mixShearY = this.mixShearY;\n\n\t\tlet target = this.target;\n\n\t\tlet bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++) {\n\t\t\tlet bone = bones[i];\n\n\t\t\tlet rotation = bone.arotation + (target.arotation + this.data.offsetRotation) * mixRotate;\n\t\t\tlet x = bone.ax + (target.ax + this.data.offsetX) * mixX;\n\t\t\tlet y = bone.ay + (target.ay + this.data.offsetY) * mixY;\n\t\t\tlet scaleX = bone.ascaleX * (((target.ascaleX - 1 + this.data.offsetScaleX) * mixScaleX) + 1);\n\t\t\tlet scaleY = bone.ascaleY * (((target.ascaleY - 1 + this.data.offsetScaleY) * mixScaleY) + 1);\n\t\t\tlet shearY = bone.ashearY + (target.ashearY + this.data.offsetShearY) * mixShearY;\n\n\t\t\tbone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Attachment } from \"./attachments/Attachment\";\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 { SkeletonData } from \"./SkeletonData\";\nimport { Skin } from \"./Skin\";\nimport { Slot } from \"./Slot\";\nimport { TransformConstraint } from \"./TransformConstraint\";\nimport { Updatable } from \"./Updatable\";\nimport { Color, Utils, MathUtils, Vector2, NumberArrayLike } from \"./Utils\";\n\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. */\nexport class Skeleton {\n\tstatic yDown = false;;\n\n\t/** The skeleton's setup pose data. */\n\tdata: SkeletonData;\n\n\t/** The skeleton's bones, sorted parent first. The root bone is always the first bone. */\n\tbones: Array<Bone>;\n\n\t/** The skeleton's slots. */\n\tslots: Array<Slot>;\n\n\t/** The skeleton's slots in the order they should be drawn. The returned array may be modified to change the draw order. */\n\tdrawOrder: Array<Slot>;\n\n\t/** The skeleton's IK constraints. */\n\tikConstraints: Array<IkConstraint>;\n\n\t/** The skeleton's transform constraints. */\n\ttransformConstraints: Array<TransformConstraint>;\n\n\t/** The skeleton's path constraints. */\n\tpathConstraints: Array<PathConstraint>;\n\n\t/** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link #updateCache()}. */\n\t_updateCache = new Array<Updatable>();\n\n\t/** The skeleton's current skin. May be null. */\n\tskin: Skin | null = null;\n\n\t/** The color to tint all the skeleton's attachments. */\n\tcolor: Color;\n\n\t/** Scales the entire skeleton on the X axis. This affects all bones, even if the bone's transform mode disallows scale\n\t  * inheritance. */\n\tscaleX = 1;\n\n\t/** Scales the entire skeleton on the Y axis. This affects all bones, even if the bone's transform mode disallows scale\n\t  * inheritance. */\n\tprivate _scaleY\t= 1;\n\n\tpublic get scaleY() {\n\t\treturn Skeleton.yDown ? -this._scaleY : this._scaleY;\n\t}\n\n\tpublic set scaleY(scaleY: number) {\n\t\tthis._scaleY = scaleY;\n\t}\n\n\t/** Sets the skeleton X position, which is added to the root bone worldX position. */\n\tx = 0;\n\n\t/** Sets the skeleton Y position, which is added to the root bone worldY position. */\n\ty = 0;\n\n\tconstructor (data: SkeletonData) {\n\t\tif (!data) throw new Error(\"data cannot be null.\");\n\t\tthis.data = data;\n\n\t\tthis.bones = new Array<Bone>();\n\t\tfor (let i = 0; i < data.bones.length; i++) {\n\t\t\tlet boneData = data.bones[i];\n\t\t\tlet bone: Bone;\n\t\t\tif (!boneData.parent)\n\t\t\t\tbone = new Bone(boneData, this, null);\n\t\t\telse {\n\t\t\t\tlet parent = this.bones[boneData.parent.index];\n\t\t\t\tbone = new Bone(boneData, this, parent);\n\t\t\t\tparent.children.push(bone);\n\t\t\t}\n\t\t\tthis.bones.push(bone);\n\t\t}\n\n\t\tthis.slots = new Array<Slot>();\n\t\tthis.drawOrder = new Array<Slot>();\n\t\tfor (let i = 0; i < data.slots.length; i++) {\n\t\t\tlet slotData = data.slots[i];\n\t\t\tlet bone = this.bones[slotData.boneData.index];\n\t\t\tlet slot = new Slot(slotData, bone);\n\t\t\tthis.slots.push(slot);\n\t\t\tthis.drawOrder.push(slot);\n\t\t}\n\n\t\tthis.ikConstraints = new Array<IkConstraint>();\n\t\tfor (let i = 0; i < data.ikConstraints.length; i++) {\n\t\t\tlet ikConstraintData = data.ikConstraints[i];\n\t\t\tthis.ikConstraints.push(new IkConstraint(ikConstraintData, this));\n\t\t}\n\n\t\tthis.transformConstraints = new Array<TransformConstraint>();\n\t\tfor (let i = 0; i < data.transformConstraints.length; i++) {\n\t\t\tlet transformConstraintData = data.transformConstraints[i];\n\t\t\tthis.transformConstraints.push(new TransformConstraint(transformConstraintData, this));\n\t\t}\n\n\t\tthis.pathConstraints = new Array<PathConstraint>();\n\t\tfor (let i = 0; i < data.pathConstraints.length; i++) {\n\t\t\tlet pathConstraintData = data.pathConstraints[i];\n\t\t\tthis.pathConstraints.push(new PathConstraint(pathConstraintData, this));\n\t\t}\n\n\t\tthis.color = new Color(1, 1, 1, 1);\n\t\tthis.updateCache();\n\t}\n\n\t/** Caches information about bones and constraints. Must be called if the {@link #getSkin()} is modified or if bones,\n\t * constraints, or weighted path attachments are added or removed. */\n\tupdateCache () {\n\t\tlet updateCache = this._updateCache;\n\t\tupdateCache.length = 0;\n\n\t\tlet bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++) {\n\t\t\tlet bone = bones[i];\n\t\t\tbone.sorted = bone.data.skinRequired;\n\t\t\tbone.active = !bone.sorted;\n\t\t}\n\n\t\tif (this.skin) {\n\t\t\tlet skinBones = this.skin.bones;\n\t\t\tfor (let i = 0, n = this.skin.bones.length; i < n; i++) {\n\t\t\t\tlet bone: Bone | null = this.bones[skinBones[i].index];\n\t\t\t\tdo {\n\t\t\t\t\tbone.sorted = false;\n\t\t\t\t\tbone.active = true;\n\t\t\t\t\tbone = bone.parent;\n\t\t\t\t} while (bone);\n\t\t\t}\n\t\t}\n\n\t\t// IK first, lowest hierarchy depth first.\n\t\tlet ikConstraints = this.ikConstraints;\n\t\tlet transformConstraints = this.transformConstraints;\n\t\tlet pathConstraints = this.pathConstraints;\n\t\tlet ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length;\n\t\tlet constraintCount = ikCount + transformCount + pathCount;\n\n\t\touter:\n\t\tfor (let i = 0; i < constraintCount; i++) {\n\t\t\tfor (let ii = 0; ii < ikCount; ii++) {\n\t\t\t\tlet constraint = ikConstraints[ii];\n\t\t\t\tif (constraint.data.order == i) {\n\t\t\t\t\tthis.sortIkConstraint(constraint);\n\t\t\t\t\tcontinue outer;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let ii = 0; ii < transformCount; ii++) {\n\t\t\t\tlet constraint = transformConstraints[ii];\n\t\t\t\tif (constraint.data.order == i) {\n\t\t\t\t\tthis.sortTransformConstraint(constraint);\n\t\t\t\t\tcontinue outer;\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let ii = 0; ii < pathCount; ii++) {\n\t\t\t\tlet constraint = pathConstraints[ii];\n\t\t\t\tif (constraint.data.order == i) {\n\t\t\t\t\tthis.sortPathConstraint(constraint);\n\t\t\t\t\tcontinue outer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (let i = 0, n = bones.length; i < n; i++)\n\t\t\tthis.sortBone(bones[i]);\n\t}\n\n\tsortIkConstraint (constraint: IkConstraint) {\n\t\tconstraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)))!;\n\t\tif (!constraint.active) return;\n\n\t\tlet target = constraint.target;\n\t\tthis.sortBone(target);\n\n\t\tlet constrained = constraint.bones;\n\t\tlet parent = constrained[0];\n\t\tthis.sortBone(parent);\n\n\t\tif (constrained.length == 1) {\n\t\t\tthis._updateCache.push(constraint);\n\t\t\tthis.sortReset(parent.children);\n\t\t} else {\n\t\t\tlet child = constrained[constrained.length - 1];\n\t\t\tthis.sortBone(child);\n\n\t\t\tthis._updateCache.push(constraint);\n\n\t\t\tthis.sortReset(parent.children);\n\t\t\tchild.sorted = true;\n\t\t}\n\t}\n\n\tsortPathConstraint (constraint: PathConstraint) {\n\t\tconstraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)))!;\n\t\tif (!constraint.active) return;\n\n\t\tlet slot = constraint.target;\n\t\tlet slotIndex = slot.data.index;\n\t\tlet slotBone = slot.bone;\n\t\tif (this.skin) this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);\n\t\tif (this.data.defaultSkin && this.data.defaultSkin != this.skin)\n\t\t\tthis.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);\n\t\tfor (let i = 0, n = this.data.skins.length; i < n; i++)\n\t\t\tthis.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);\n\n\t\tlet attachment = slot.getAttachment();\n\t\tif (attachment instanceof PathAttachment) this.sortPathConstraintAttachmentWith(attachment, slotBone);\n\n\t\tlet constrained = constraint.bones;\n\t\tlet boneCount = constrained.length;\n\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\tthis.sortBone(constrained[i]);\n\n\t\tthis._updateCache.push(constraint);\n\n\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\tthis.sortReset(constrained[i].children);\n\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\tconstrained[i].sorted = true;\n\t}\n\n\tsortTransformConstraint (constraint: TransformConstraint) {\n\t\tconstraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)))!;\n\t\tif (!constraint.active) return;\n\n\t\tthis.sortBone(constraint.target);\n\n\t\tlet constrained = constraint.bones;\n\t\tlet boneCount = constrained.length;\n\t\tif (constraint.data.local) {\n\t\t\tfor (let i = 0; i < boneCount; i++) {\n\t\t\t\tlet child = constrained[i];\n\t\t\t\tthis.sortBone(child.parent!);\n\t\t\t\tthis.sortBone(child);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (let i = 0; i < boneCount; i++) {\n\t\t\t\tthis.sortBone(constrained[i]);\n\t\t\t}\n\t\t}\n\n\t\tthis._updateCache.push(constraint);\n\n\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\tthis.sortReset(constrained[i].children);\n\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\tconstrained[i].sorted = true;\n\t}\n\n\tsortPathConstraintAttachment (skin: Skin, slotIndex: number, slotBone: Bone) {\n\t\tlet attachments = skin.attachments[slotIndex];\n\t\tif (!attachments) return;\n\t\tfor (let key in attachments) {\n\t\t\tthis.sortPathConstraintAttachmentWith(attachments[key], slotBone);\n\t\t}\n\t}\n\n\tsortPathConstraintAttachmentWith (attachment: Attachment, slotBone: Bone) {\n\t\tif (!(attachment instanceof PathAttachment)) return;\n\t\tlet pathBones = (<PathAttachment>attachment).bones;\n\t\tif (!pathBones)\n\t\t\tthis.sortBone(slotBone);\n\t\telse {\n\t\t\tlet bones = this.bones;\n\t\t\tfor (let i = 0, n = pathBones.length; i < n;) {\n\t\t\t\tlet nn = pathBones[i++];\n\t\t\t\tnn += i;\n\t\t\t\twhile (i < nn)\n\t\t\t\t\tthis.sortBone(bones[pathBones[i++]]);\n\t\t\t}\n\t\t}\n\t}\n\n\tsortBone (bone: Bone) {\n\t\tif (!bone) return;\n\t\tif (bone.sorted) return;\n\t\tlet parent = bone.parent;\n\t\tif (parent) this.sortBone(parent);\n\t\tbone.sorted = true;\n\t\tthis._updateCache.push(bone);\n\t}\n\n\tsortReset (bones: Array<Bone>) {\n\t\tfor (let i = 0, n = bones.length; i < n; i++) {\n\t\t\tlet bone = bones[i];\n\t\t\tif (!bone.active) continue;\n\t\t\tif (bone.sorted) this.sortReset(bone.children);\n\t\t\tbone.sorted = false;\n\t\t}\n\t}\n\n\t/** Updates the world transform for each bone and applies all constraints.\n\t *\n\t * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine\n\t * Runtimes Guide. */\n\tupdateWorldTransform () {\n\t\tlet bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++) {\n\t\t\tlet bone = bones[i];\n\t\t\tbone.ax = bone.x;\n\t\t\tbone.ay = bone.y;\n\t\t\tbone.arotation = bone.rotation;\n\t\t\tbone.ascaleX = bone.scaleX;\n\t\t\tbone.ascaleY = bone.scaleY;\n\t\t\tbone.ashearX = bone.shearX;\n\t\t\tbone.ashearY = bone.shearY;\n\t\t}\n\n\t\tlet updateCache = this._updateCache;\n\t\tfor (let i = 0, n = updateCache.length; i < n; i++)\n\t\t\tupdateCache[i].update();\n\t}\n\n\tupdateWorldTransformWith (parent: Bone) {\n\t\t// Apply the parent bone transform to the root bone. The root bone always inherits scale, rotation and reflection.\n\t\tlet rootBone = this.getRootBone();\n\t\tif (!rootBone) throw new Error(\"Root bone must not be null.\");\n\t\tlet pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n\t\trootBone.worldX = pa * this.x + pb * this.y + parent.worldX;\n\t\trootBone.worldY = pc * this.x + pd * this.y + parent.worldY;\n\n\t\tlet rotationY = rootBone.rotation + 90 + rootBone.shearY;\n\t\tlet la = MathUtils.cosDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;\n\t\tlet lb = MathUtils.cosDeg(rotationY) * rootBone.scaleY;\n\t\tlet lc = MathUtils.sinDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;\n\t\tlet ld = MathUtils.sinDeg(rotationY) * rootBone.scaleY;\n\t\trootBone.a = (pa * la + pb * lc) * this.scaleX;\n\t\trootBone.b = (pa * lb + pb * ld) * this.scaleX;\n\t\trootBone.c = (pc * la + pd * lc) * this.scaleY;\n\t\trootBone.d = (pc * lb + pd * ld) * this.scaleY;\n\n\t\t// Update everything except root bone.\n\t\tlet updateCache = this._updateCache;\n\t\tfor (let i = 0, n = updateCache.length; i < n; i++) {\n\t\t\tlet updatable = updateCache[i];\n\t\t\tif (updatable != rootBone) updatable.update();\n\t\t}\n\t}\n\n\t/** Sets the bones, constraints, and slots to their setup pose values. */\n\tsetToSetupPose () {\n\t\tthis.setBonesToSetupPose();\n\t\tthis.setSlotsToSetupPose();\n\t}\n\n\t/** Sets the bones and constraints to their setup pose values. */\n\tsetBonesToSetupPose () {\n\t\tlet bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++)\n\t\t\tbones[i].setToSetupPose();\n\n\t\tlet ikConstraints = this.ikConstraints;\n\t\tfor (let i = 0, n = ikConstraints.length; i < n; i++) {\n\t\t\tlet constraint = ikConstraints[i];\n\t\t\tconstraint.mix = constraint.data.mix;\n\t\t\tconstraint.softness = constraint.data.softness;\n\t\t\tconstraint.bendDirection = constraint.data.bendDirection;\n\t\t\tconstraint.compress = constraint.data.compress;\n\t\t\tconstraint.stretch = constraint.data.stretch;\n\t\t}\n\n\t\tlet transformConstraints = this.transformConstraints;\n\t\tfor (let i = 0, n = transformConstraints.length; i < n; i++) {\n\t\t\tlet constraint = transformConstraints[i];\n\t\t\tlet data = constraint.data;\n\t\t\tconstraint.mixRotate = data.mixRotate;\n\t\t\tconstraint.mixX = data.mixX;\n\t\t\tconstraint.mixY = data.mixY;\n\t\t\tconstraint.mixScaleX = data.mixScaleX;\n\t\t\tconstraint.mixScaleY = data.mixScaleY;\n\t\t\tconstraint.mixShearY = data.mixShearY;\n\t\t}\n\n\t\tlet pathConstraints = this.pathConstraints;\n\t\tfor (let i = 0, n = pathConstraints.length; i < n; i++) {\n\t\t\tlet constraint = pathConstraints[i];\n\t\t\tlet data = constraint.data;\n\t\t\tconstraint.position = data.position;\n\t\t\tconstraint.spacing = data.spacing;\n\t\t\tconstraint.mixRotate = data.mixRotate;\n\t\t\tconstraint.mixX = data.mixX;\n\t\t\tconstraint.mixY = data.mixY;\n\t\t}\n\t}\n\n\t/** Sets the slots and draw order to their setup pose values. */\n\tsetSlotsToSetupPose () {\n\t\tlet slots = this.slots;\n\t\tUtils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);\n\t\tfor (let i = 0, n = slots.length; i < n; i++)\n\t\t\tslots[i].setToSetupPose();\n\t}\n\n\t/** @returns May return null. */\n\tgetRootBone () {\n\t\tif (this.bones.length == 0) return null;\n\t\treturn this.bones[0];\n\t}\n\n\t/** @returns May be null. */\n\tfindBone (boneName: string) {\n\t\tif (!boneName) throw new Error(\"boneName cannot be null.\");\n\t\tlet bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++) {\n\t\t\tlet bone = bones[i];\n\t\t\tif (bone.data.name == boneName) return bone;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** 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\t * repeatedly.\n\t * @returns May be null. */\n\tfindSlot (slotName: string) {\n\t\tif (!slotName) throw new Error(\"slotName cannot be null.\");\n\t\tlet slots = this.slots;\n\t\tfor (let i = 0, n = slots.length; i < n; i++) {\n\t\t\tlet slot = slots[i];\n\t\t\tif (slot.data.name == slotName) return slot;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Sets a skin by name.\n\t *\n\t * See {@link #setSkin()}. */\n\tsetSkinByName (skinName: string) {\n\t\tlet skin = this.data.findSkin(skinName);\n\t\tif (!skin) throw new Error(\"Skin not found: \" + skinName);\n\t\tthis.setSkin(skin);\n\t}\n\n\t/** Sets the skin used to look up attachments before looking in the {@link SkeletonData#defaultSkin default skin}. If the\n\t * skin is changed, {@link #updateCache()} is called.\n\t *\n\t * Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no\n\t * old skin, each slot's setup mode attachment is attached from the new skin.\n\t *\n\t * After changing the skin, the visible attachments can be reset to those attached in the setup pose by calling\n\t * {@link #setSlotsToSetupPose()}. Also, often {@link AnimationState#apply()} is called before the next time the\n\t * skeleton is rendered to allow any attachment keys in the current animation(s) to hide or show attachments from the new skin.\n\t * @param newSkin May be null. */\n\tsetSkin (newSkin: Skin) {\n\t\tif (newSkin == this.skin) return;\n\t\tif (newSkin) {\n\t\t\tif (this.skin)\n\t\t\t\tnewSkin.attachAll(this, this.skin);\n\t\t\telse {\n\t\t\t\tlet slots = this.slots;\n\t\t\t\tfor (let i = 0, n = slots.length; i < n; i++) {\n\t\t\t\t\tlet slot = slots[i];\n\t\t\t\t\tlet name = slot.data.attachmentName;\n\t\t\t\t\tif (name) {\n\t\t\t\t\t\tlet attachment = newSkin.getAttachment(i, name);\n\t\t\t\t\t\tif (attachment) slot.setAttachment(attachment);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.skin = newSkin;\n\t\tthis.updateCache();\n\t}\n\n\n\t/** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot name and attachment\n\t * name.\n\t *\n\t * See {@link #getAttachment()}.\n\t * @returns May be null. */\n\tgetAttachmentByName (slotName: string, attachmentName: string): Attachment | null {\n\t\tlet slot = this.data.findSlot(slotName);\n\t\tif (!slot) throw new Error(`Can't find slot with name ${slotName}`);\n\t\treturn this.getAttachment(slot.index, attachmentName);\n\t}\n\n\t/** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot index and\n\t * attachment name. First the skin is checked and if the attachment was not found, the default skin is checked.\n\t *\n\t * See [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide.\n\t * @returns May be null. */\n\tgetAttachment (slotIndex: number, attachmentName: string): Attachment | null {\n\t\tif (!attachmentName) throw new Error(\"attachmentName cannot be null.\");\n\t\tif (this.skin) {\n\t\t\tlet attachment = this.skin.getAttachment(slotIndex, attachmentName);\n\t\t\tif (attachment) return attachment;\n\t\t}\n\t\tif (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);\n\t\treturn null;\n\t}\n\n\t/** A convenience method to set an attachment by finding the slot with {@link #findSlot()}, finding the attachment with\n\t * {@link #getAttachment()}, then setting the slot's {@link Slot#attachment}.\n\t * @param attachmentName May be null to clear the slot's attachment. */\n\tsetAttachment (slotName: string, attachmentName: string) {\n\t\tif (!slotName) throw new Error(\"slotName cannot be null.\");\n\t\tlet slots = this.slots;\n\t\tfor (let i = 0, n = slots.length; i < n; i++) {\n\t\t\tlet slot = slots[i];\n\t\t\tif (slot.data.name == slotName) {\n\t\t\t\tlet attachment: Attachment | null = null;\n\t\t\t\tif (attachmentName) {\n\t\t\t\t\tattachment = this.getAttachment(i, attachmentName);\n\t\t\t\t\tif (!attachment) throw new Error(\"Attachment not found: \" + attachmentName + \", for slot: \" + slotName);\n\t\t\t\t}\n\t\t\t\tslot.setAttachment(attachment);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tthrow new Error(\"Slot not found: \" + slotName);\n\t}\n\n\n\t/** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method\n\t * than to call it repeatedly.\n\t * @return May be null. */\n\tfindIkConstraint (constraintName: string) {\n\t\tif (!constraintName) throw new Error(\"constraintName cannot be null.\");\n\t\tlet ikConstraints = this.ikConstraints;\n\t\tfor (let i = 0, n = ikConstraints.length; i < n; i++) {\n\t\t\tlet ikConstraint = ikConstraints[i];\n\t\t\tif (ikConstraint.data.name == constraintName) return ikConstraint;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of\n\t * this method than to call it repeatedly.\n\t * @return May be null. */\n\tfindTransformConstraint (constraintName: string) {\n\t\tif (!constraintName) throw new Error(\"constraintName cannot be null.\");\n\t\tlet transformConstraints = this.transformConstraints;\n\t\tfor (let i = 0, n = transformConstraints.length; i < n; i++) {\n\t\t\tlet constraint = transformConstraints[i];\n\t\t\tif (constraint.data.name == constraintName) return constraint;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method\n\t * than to call it repeatedly.\n\t * @return May be null. */\n\tfindPathConstraint (constraintName: string) {\n\t\tif (!constraintName) throw new Error(\"constraintName cannot be null.\");\n\t\tlet pathConstraints = this.pathConstraints;\n\t\tfor (let i = 0, n = pathConstraints.length; i < n; i++) {\n\t\t\tlet constraint = pathConstraints[i];\n\t\t\tif (constraint.data.name == constraintName) return constraint;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose as `{ x: number, y: number, width: number, height: number }`.\n\t * Note that this method will create temporary objects which can add to garbage collection pressure. Use `getBounds()` if garbage collection is a concern. */\n\tgetBoundsRect () {\n\t\tlet offset = new Vector2();\n\t\tlet size = new Vector2();\n\t\tthis.getBounds(offset, size);\n\t\treturn { x: offset.x, y: offset.y, width: size.x, height: size.y };\n\t}\n\n\t/** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose.\n\t * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB.\n\t * @param size An output value, the width and height of the AABB.\n\t * @param temp Working memory to temporarily store attachments' computed world vertices. */\n\tgetBounds (offset: Vector2, size: Vector2, temp: Array<number> = new Array<number>(2)) {\n\t\tif (!offset) throw new Error(\"offset cannot be null.\");\n\t\tif (!size) throw new Error(\"size cannot be null.\");\n\t\tlet drawOrder = this.drawOrder;\n\t\tlet minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n\t\tfor (let i = 0, n = drawOrder.length; i < n; i++) {\n\t\t\tlet slot = drawOrder[i];\n\t\t\tif (!slot.bone.active) continue;\n\t\t\tlet verticesLength = 0;\n\t\t\tlet vertices: NumberArrayLike | null = null;\n\t\t\tlet attachment = slot.getAttachment();\n\t\t\tif (attachment instanceof RegionAttachment) {\n\t\t\t\tverticesLength = 8;\n\t\t\t\tvertices = Utils.setArraySize(temp, verticesLength, 0);\n\t\t\t\t(<RegionAttachment>attachment).computeWorldVertices(slot, vertices, 0, 2);\n\t\t\t} else if (attachment instanceof MeshAttachment) {\n\t\t\t\tlet mesh = (<MeshAttachment>attachment);\n\t\t\t\tverticesLength = mesh.worldVerticesLength;\n\t\t\t\tvertices = Utils.setArraySize(temp, verticesLength, 0);\n\t\t\t\tmesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);\n\t\t\t}\n\t\t\tif (vertices) {\n\t\t\t\tfor (let ii = 0, nn = vertices.length; ii < nn; ii += 2) {\n\t\t\t\t\tlet x = vertices[ii], y = vertices[ii + 1];\n\t\t\t\t\tminX = Math.min(minX, x);\n\t\t\t\t\tminY = Math.min(minY, y);\n\t\t\t\t\tmaxX = Math.max(maxX, x);\n\t\t\t\t\tmaxY = Math.max(maxY, y);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\toffset.set(minX, minY);\n\t\tsize.set(maxX - minX, maxY - minY);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Animation } from \"./Animation\"\nimport { BoneData } from \"./BoneData\";\nimport { EventData } from \"./EventData\";\nimport { IkConstraintData } from \"./IkConstraintData\";\nimport { PathConstraintData } from \"./PathConstraintData\";\nimport { Skin } from \"./Skin\";\nimport { SlotData } from \"./SlotData\";\nimport { TransformConstraintData } from \"./TransformConstraintData\";\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. */\nexport class SkeletonData {\n\n\t/** The skeleton's name, which by default is the name of the skeleton data file, if possible. May be null. */\n\tname: string | null = null;\n\n\t/** The skeleton's bones, sorted parent first. The root bone is always the first bone. */\n\tbones = new Array<BoneData>(); // Ordered parents first.\n\n\t/** The skeleton's slots. */\n\tslots = new Array<SlotData>(); // Setup pose draw order.\n\tskins = new Array<Skin>();\n\n\t/** The skeleton's default skin. By default this skin contains all attachments that were not in a skin in Spine.\n\t *\n\t * See {@link Skeleton#getAttachmentByName()}.\n\t * May be null. */\n\tdefaultSkin: Skin | null = null;\n\n\t/** The skeleton's events. */\n\tevents = new Array<EventData>();\n\n\t/** The skeleton's animations. */\n\tanimations = new Array<Animation>();\n\n\t/** The skeleton's IK constraints. */\n\tikConstraints = new Array<IkConstraintData>();\n\n\t/** The skeleton's transform constraints. */\n\ttransformConstraints = new Array<TransformConstraintData>();\n\n\t/** The skeleton's path constraints. */\n\tpathConstraints = new Array<PathConstraintData>();\n\n\t/** The X coordinate of the skeleton's axis aligned bounding box in the setup pose. */\n\tx: number = 0;\n\n\t/** The Y coordinate of the skeleton's axis aligned bounding box in the setup pose. */\n\ty: number = 0;\n\n\t/** The width of the skeleton's axis aligned bounding box in the setup pose. */\n\twidth: number = 0;\n\n\t/** The height of the skeleton's axis aligned bounding box in the setup pose. */\n\theight: number = 0;\n\n\t/** The Spine version used to export the skeleton data, or null. */\n\tversion: string | null = null;\n\n\t/** The skeleton data hash. This value will change if any of the skeleton data has changed. May be null. */\n\thash: string | null = null;\n\n\t// Nonessential\n\t/** The dopesheet FPS in Spine. Available only when nonessential data was exported. */\n\tfps = 0;\n\n\t/** The path to the images directory as defined in Spine. Available only when nonessential data was exported. May be null. */\n\timagesPath: string | null = null;\n\n\t/** The path to the audio directory as defined in Spine. Available only when nonessential data was exported. May be null. */\n\taudioPath: string | null = null;\n\n\t/** 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\t * multiple times.\n\t * @returns May be null. */\n\tfindBone (boneName: string) {\n\t\tif (!boneName) throw new Error(\"boneName cannot be null.\");\n\t\tlet bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++) {\n\t\t\tlet bone = bones[i];\n\t\t\tif (bone.name == boneName) return bone;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** 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\t * multiple times.\n\t * @returns May be null. */\n\tfindSlot (slotName: string) {\n\t\tif (!slotName) throw new Error(\"slotName cannot be null.\");\n\t\tlet slots = this.slots;\n\t\tfor (let i = 0, n = slots.length; i < n; i++) {\n\t\t\tlet slot = slots[i];\n\t\t\tif (slot.name == slotName) return slot;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** 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\t * multiple times.\n\t * @returns May be null. */\n\tfindSkin (skinName: string) {\n\t\tif (!skinName) throw new Error(\"skinName cannot be null.\");\n\t\tlet skins = this.skins;\n\t\tfor (let i = 0, n = skins.length; i < n; i++) {\n\t\t\tlet skin = skins[i];\n\t\t\tif (skin.name == skinName) return skin;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** 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\t * multiple times.\n\t * @returns May be null. */\n\tfindEvent (eventDataName: string) {\n\t\tif (!eventDataName) throw new Error(\"eventDataName cannot be null.\");\n\t\tlet events = this.events;\n\t\tfor (let i = 0, n = events.length; i < n; i++) {\n\t\t\tlet event = events[i];\n\t\t\tif (event.name == eventDataName) return event;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to\n\t * call it multiple times.\n\t * @returns May be null. */\n\tfindAnimation (animationName: string) {\n\t\tif (!animationName) throw new Error(\"animationName cannot be null.\");\n\t\tlet animations = this.animations;\n\t\tfor (let i = 0, n = animations.length; i < n; i++) {\n\t\t\tlet animation = animations[i];\n\t\t\tif (animation.name == animationName) return animation;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method\n\t * than to call it multiple times.\n\t * @return May be null. */\n\tfindIkConstraint (constraintName: string) {\n\t\tif (!constraintName) throw new Error(\"constraintName cannot be null.\");\n\t\tlet ikConstraints = this.ikConstraints;\n\t\tfor (let i = 0, n = ikConstraints.length; i < n; i++) {\n\t\t\tlet constraint = ikConstraints[i];\n\t\t\tif (constraint.name == constraintName) return constraint;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of\n\t * this method than to call it multiple times.\n\t * @return May be null. */\n\tfindTransformConstraint (constraintName: string) {\n\t\tif (!constraintName) throw new Error(\"constraintName cannot be null.\");\n\t\tlet transformConstraints = this.transformConstraints;\n\t\tfor (let i = 0, n = transformConstraints.length; i < n; i++) {\n\t\t\tlet constraint = transformConstraints[i];\n\t\t\tif (constraint.name == constraintName) return constraint;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method\n\t * than to call it multiple times.\n\t * @return May be null. */\n\tfindPathConstraint (constraintName: string) {\n\t\tif (!constraintName) throw new Error(\"constraintName cannot be null.\");\n\t\tlet pathConstraints = this.pathConstraints;\n\t\tfor (let i = 0, n = pathConstraints.length; i < n; i++) {\n\t\t\tlet constraint = pathConstraints[i];\n\t\t\tif (constraint.name == constraintName) return constraint;\n\t\t}\n\t\treturn null;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Attachment } from \"./attachments/Attachment\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment\";\nimport { BoneData } from \"./BoneData\";\nimport { ConstraintData } from \"./ConstraintData\";\nimport { Skeleton } from \"./Skeleton\";\nimport { StringMap } from \"./Utils\";\n\n/** Stores an entry in the skin consisting of the slot index, name, and attachment **/\nexport class SkinEntry {\n\tconstructor (public slotIndex: number = 0, public name: string, public attachment: Attachment) { }\n}\n\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. */\nexport class Skin {\n\t/** The skin's name, which is unique across all skins in the skeleton. */\n\tname: string;\n\n\tattachments = new Array<StringMap<Attachment>>();\n\tbones = Array<BoneData>();\n\tconstraints = new Array<ConstraintData>();\n\n\tconstructor (name: string) {\n\t\tif (!name) throw new Error(\"name cannot be null.\");\n\t\tthis.name = name;\n\t}\n\n\t/** Adds an attachment to the skin for the specified slot index and name. */\n\tsetAttachment (slotIndex: number, name: string, attachment: Attachment) {\n\t\tif (!attachment) throw new Error(\"attachment cannot be null.\");\n\t\tlet attachments = this.attachments;\n\t\tif (slotIndex >= attachments.length) attachments.length = slotIndex + 1;\n\t\tif (!attachments[slotIndex]) attachments[slotIndex] = {};\n\t\tattachments[slotIndex][name] = attachment;\n\t}\n\n\t/** Adds all attachments, bones, and constraints from the specified skin to this skin. */\n\taddSkin (skin: Skin) {\n\t\tfor (let i = 0; i < skin.bones.length; i++) {\n\t\t\tlet bone = skin.bones[i];\n\t\t\tlet contained = false;\n\t\t\tfor (let ii = 0; ii < this.bones.length; ii++) {\n\t\t\t\tif (this.bones[ii] == bone) {\n\t\t\t\t\tcontained = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!contained) this.bones.push(bone);\n\t\t}\n\n\t\tfor (let i = 0; i < skin.constraints.length; i++) {\n\t\t\tlet constraint = skin.constraints[i];\n\t\t\tlet contained = false;\n\t\t\tfor (let ii = 0; ii < this.constraints.length; ii++) {\n\t\t\t\tif (this.constraints[ii] == constraint) {\n\t\t\t\t\tcontained = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!contained) this.constraints.push(constraint);\n\t\t}\n\n\t\tlet attachments = skin.getAttachments();\n\t\tfor (let i = 0; i < attachments.length; i++) {\n\t\t\tvar attachment = attachments[i];\n\t\t\tthis.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n\t\t}\n\t}\n\n\t/** Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not\n\t * copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals. */\n\tcopySkin (skin: Skin) {\n\t\tfor (let i = 0; i < skin.bones.length; i++) {\n\t\t\tlet bone = skin.bones[i];\n\t\t\tlet contained = false;\n\t\t\tfor (let ii = 0; ii < this.bones.length; ii++) {\n\t\t\t\tif (this.bones[ii] == bone) {\n\t\t\t\t\tcontained = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!contained) this.bones.push(bone);\n\t\t}\n\n\t\tfor (let i = 0; i < skin.constraints.length; i++) {\n\t\t\tlet constraint = skin.constraints[i];\n\t\t\tlet contained = false;\n\t\t\tfor (let ii = 0; ii < this.constraints.length; ii++) {\n\t\t\t\tif (this.constraints[ii] == constraint) {\n\t\t\t\t\tcontained = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!contained) this.constraints.push(constraint);\n\t\t}\n\n\t\tlet attachments = skin.getAttachments();\n\t\tfor (let i = 0; i < attachments.length; i++) {\n\t\t\tvar attachment = attachments[i];\n\t\t\tif (!attachment.attachment) continue;\n\t\t\tif (attachment.attachment instanceof MeshAttachment) {\n\t\t\t\tattachment.attachment = attachment.attachment.newLinkedMesh();\n\t\t\t\tthis.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n\t\t\t} else {\n\t\t\t\tattachment.attachment = attachment.attachment.copy();\n\t\t\t\tthis.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Returns the attachment for the specified slot index and name, or null. */\n\tgetAttachment (slotIndex: number, name: string): Attachment | null {\n\t\tlet dictionary = this.attachments[slotIndex];\n\t\treturn dictionary ? dictionary[name] : null;\n\t}\n\n\t/** Removes the attachment in the skin for the specified slot index and name, if any. */\n\tremoveAttachment (slotIndex: number, name: string) {\n\t\tlet dictionary = this.attachments[slotIndex];\n\t\tif (dictionary) delete dictionary[name];\n\t}\n\n\t/** Returns all attachments in this skin. */\n\tgetAttachments (): Array<SkinEntry> {\n\t\tlet entries = new Array<SkinEntry>();\n\t\tfor (var i = 0; i < this.attachments.length; i++) {\n\t\t\tlet slotAttachments = this.attachments[i];\n\t\t\tif (slotAttachments) {\n\t\t\t\tfor (let name in slotAttachments) {\n\t\t\t\t\tlet attachment = slotAttachments[name];\n\t\t\t\t\tif (attachment) entries.push(new SkinEntry(i, name, attachment));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn entries;\n\t}\n\n\t/** Returns all attachments in this skin for the specified slot index. */\n\tgetAttachmentsForSlot (slotIndex: number, attachments: Array<SkinEntry>) {\n\t\tlet slotAttachments = this.attachments[slotIndex];\n\t\tif (slotAttachments) {\n\t\t\tfor (let name in slotAttachments) {\n\t\t\t\tlet attachment = slotAttachments[name];\n\t\t\t\tif (attachment) attachments.push(new SkinEntry(slotIndex, name, attachment));\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Clears all attachments, bones, and constraints. */\n\tclear () {\n\t\tthis.attachments.length = 0;\n\t\tthis.bones.length = 0;\n\t\tthis.constraints.length = 0;\n\t}\n\n\t/** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */\n\tattachAll (skeleton: Skeleton, oldSkin: Skin) {\n\t\tlet slotIndex = 0;\n\t\tfor (let i = 0; i < skeleton.slots.length; i++) {\n\t\t\tlet slot = skeleton.slots[i];\n\t\t\tlet slotAttachment = slot.getAttachment();\n\t\t\tif (slotAttachment && slotIndex < oldSkin.attachments.length) {\n\t\t\t\tlet dictionary = oldSkin.attachments[slotIndex];\n\t\t\t\tfor (let key in dictionary) {\n\t\t\t\t\tlet skinAttachment: Attachment = dictionary[key];\n\t\t\t\t\tif (slotAttachment == skinAttachment) {\n\t\t\t\t\t\tlet attachment = this.getAttachment(slotIndex, key);\n\t\t\t\t\t\tif (attachment) slot.setAttachment(attachment);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tslotIndex++;\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { BoneData } from \"./BoneData\";\nimport { Color } from \"./Utils\";\n\n/** Stores the setup pose for a {@link Slot}. */\nexport class SlotData {\n\t/** The index of the slot in {@link Skeleton#getSlots()}. */\n\tindex: number = 0;\n\n\t/** The name of the slot, which is unique across all slots in the skeleton. */\n\tname: string;\n\n\t/** The bone this slot belongs to. */\n\tboneData: BoneData;\n\n\t/** The color used to tint the slot's attachment. If {@link #getDarkColor()} is set, this is used as the light color for two\n\t * color tinting. */\n\tcolor = new Color(1, 1, 1, 1);\n\n\t/** The dark color used to tint the slot's attachment for two color tinting, or null if two color tinting is not used. The dark\n\t * color's alpha is not used. */\n\tdarkColor: Color | null = null;\n\n\t/** The name of the attachment that is visible for this slot in the setup pose, or null if no attachment is visible. */\n\tattachmentName: string | null = null;\n\n\t/** The blend mode for drawing the slot's attachment. */\n\tblendMode: BlendMode = BlendMode.Normal;\n\n\tconstructor (index: number, name: string, boneData: BoneData) {\n\t\tif (index < 0) throw new Error(\"index must be >= 0.\");\n\t\tif (!name) throw new Error(\"name cannot be null.\");\n\t\tif (!boneData) throw new Error(\"boneData cannot be null.\");\n\t\tthis.index = index;\n\t\tthis.name = name;\n\t\tthis.boneData = boneData;\n\t}\n}\n\n/** Determines how images are blended with existing pixels when drawn. */\nexport enum BlendMode { Normal, Additive, Multiply, Screen }\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { ConstraintData } from \"./ConstraintData\";\nimport { BoneData } from \"./BoneData\";\n\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. */\nexport class TransformConstraintData extends ConstraintData {\n\n\t/** The bones that will be modified by this transform constraint. */\n\tbones = new Array<BoneData>();\n\n\t/** The target bone whose world transform will be copied to the constrained bones. */\n\tprivate _target: BoneData | null = null;\n\tpublic set target (boneData: BoneData) { this._target = boneData; }\n\tpublic get target () {\n\t\tif (!this._target) throw new Error(\"BoneData not set.\")\n\t\telse return this._target;\n\t}\n\n\tmixRotate = 0;\n\tmixX = 0;\n\tmixY = 0;\n\tmixScaleX = 0;\n\tmixScaleY = 0;\n\tmixShearY = 0;\n\n\t/** An offset added to the constrained bone rotation. */\n\toffsetRotation = 0;\n\n\t/** An offset added to the constrained bone X translation. */\n\toffsetX = 0;\n\n\t/** An offset added to the constrained bone Y translation. */\n\toffsetY = 0;\n\n\t/** An offset added to the constrained bone scaleX. */\n\toffsetScaleX = 0;\n\n\t/** An offset added to the constrained bone scaleY. */\n\toffsetScaleY = 0;\n\n\t/** An offset added to the constrained bone shearY. */\n\toffsetShearY = 0;\n\n\trelative = false;\n\tlocal = false;\n\n\tconstructor (name: string) {\n\t\tsuper(name, 0, false);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Animation, Timeline, AttachmentTimeline, RGBATimeline, RGBTimeline, RGBA2Timeline, RGB2Timeline, AlphaTimeline, RotateTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PathConstraintMixTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline, CurveTimeline1, CurveTimeline2, CurveTimeline, SequenceTimeline } from \"./Animation\";\nimport { VertexAttachment, Attachment } from \"./attachments/Attachment\";\nimport { AttachmentLoader } from \"./attachments/AttachmentLoader\";\nimport { HasTextureRegion } from \"./attachments/HasTextureRegion\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment\";\nimport { Sequence, SequenceModeValues } from \"./attachments/Sequence\";\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\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. */\nexport class SkeletonBinary {\n\t/** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at\n\t * runtime than were used in Spine.\n\t *\n\t * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */\n\tscale = 1;\n\n\tattachmentLoader: AttachmentLoader;\n\tprivate linkedMeshes = new Array<LinkedMesh>();\n\n\tconstructor (attachmentLoader: AttachmentLoader) {\n\t\tthis.attachmentLoader = attachmentLoader;\n\t}\n\n\treadSkeletonData (binary: Uint8Array): SkeletonData {\n\t\tlet scale = this.scale;\n\n\t\tlet skeletonData = new SkeletonData();\n\t\tskeletonData.name = \"\"; // BOZO\n\n\t\tlet input = new BinaryInput(binary);\n\n\t\tlet lowHash = input.readInt32();\n\t\tlet highHash = input.readInt32();\n\t\tskeletonData.hash = highHash == 0 && lowHash == 0 ? null : highHash.toString(16) + lowHash.toString(16);\n\t\tskeletonData.version = input.readString();\n\t\tskeletonData.x = input.readFloat();\n\t\tskeletonData.y = input.readFloat();\n\t\tskeletonData.width = input.readFloat();\n\t\tskeletonData.height = input.readFloat();\n\n\t\tlet nonessential = input.readBoolean();\n\t\tif (nonessential) {\n\t\t\tskeletonData.fps = input.readFloat();\n\n\t\t\tskeletonData.imagesPath = input.readString();\n\t\t\tskeletonData.audioPath = input.readString();\n\t\t}\n\n\t\tlet n = 0;\n\t\t// Strings.\n\t\tn = input.readInt(true)\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tlet str = input.readString();\n\t\t\tif (!str) throw new Error(\"String in string table must not be null.\");\n\t\t\tinput.strings.push(str);\n\t\t}\n\n\t\t// Bones.\n\t\tn = input.readInt(true)\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tlet name = input.readString();\n\t\t\tif (!name) throw new Error(\"Bone name must not be null.\");\n\t\t\tlet parent = i == 0 ? null : skeletonData.bones[input.readInt(true)];\n\t\t\tlet data = new BoneData(i, name, parent);\n\t\t\tdata.rotation = input.readFloat();\n\t\t\tdata.x = input.readFloat() * scale;\n\t\t\tdata.y = input.readFloat() * scale;\n\t\t\tdata.scaleX = input.readFloat();\n\t\t\tdata.scaleY = input.readFloat();\n\t\t\tdata.shearX = input.readFloat();\n\t\t\tdata.shearY = input.readFloat();\n\t\t\tdata.length = input.readFloat() * scale;\n\t\t\tdata.transformMode = input.readInt(true);\n\t\t\tdata.skinRequired = input.readBoolean();\n\t\t\tif (nonessential) Color.rgba8888ToColor(data.color, input.readInt32());\n\t\t\tskeletonData.bones.push(data);\n\t\t}\n\n\t\t// Slots.\n\t\tn = input.readInt(true);\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tlet slotName = input.readString();\n\t\t\tif (!slotName) throw new Error(\"Slot name must not be null.\");\n\t\t\tlet boneData = skeletonData.bones[input.readInt(true)];\n\t\t\tlet data = new SlotData(i, slotName, boneData);\n\t\t\tColor.rgba8888ToColor(data.color, input.readInt32());\n\n\t\t\tlet darkColor = input.readInt32();\n\t\t\tif (darkColor != -1) Color.rgb888ToColor(data.darkColor = new Color(), darkColor);\n\n\t\t\tdata.attachmentName = input.readStringRef();\n\t\t\tdata.blendMode = input.readInt(true);\n\t\t\tskeletonData.slots.push(data);\n\t\t}\n\n\t\t// IK constraints.\n\t\tn = input.readInt(true);\n\t\tfor (let i = 0, nn; i < n; i++) {\n\t\t\tlet name = input.readString();\n\t\t\tif (!name) throw new Error(\"IK constraint data name must not be null.\");\n\t\t\tlet data = new IkConstraintData(name);\n\t\t\tdata.order = input.readInt(true);\n\t\t\tdata.skinRequired = input.readBoolean();\n\t\t\tnn = input.readInt(true);\n\t\t\tfor (let ii = 0; ii < nn; ii++)\n\t\t\t\tdata.bones.push(skeletonData.bones[input.readInt(true)]);\n\t\t\tdata.target = skeletonData.bones[input.readInt(true)];\n\t\t\tdata.mix = input.readFloat();\n\t\t\tdata.softness = input.readFloat() * scale;\n\t\t\tdata.bendDirection = input.readByte();\n\t\t\tdata.compress = input.readBoolean();\n\t\t\tdata.stretch = input.readBoolean();\n\t\t\tdata.uniform = input.readBoolean();\n\t\t\tskeletonData.ikConstraints.push(data);\n\t\t}\n\n\t\t// Transform constraints.\n\t\tn = input.readInt(true);\n\t\tfor (let i = 0, nn; i < n; i++) {\n\t\t\tlet name = input.readString();\n\t\t\tif (!name) throw new Error(\"Transform constraint data name must not be null.\");\n\t\t\tlet data = new TransformConstraintData(name);\n\t\t\tdata.order = input.readInt(true);\n\t\t\tdata.skinRequired = input.readBoolean();\n\t\t\tnn = input.readInt(true);\n\t\t\tfor (let ii = 0; ii < nn; ii++)\n\t\t\t\tdata.bones.push(skeletonData.bones[input.readInt(true)]);\n\t\t\tdata.target = skeletonData.bones[input.readInt(true)];\n\t\t\tdata.local = input.readBoolean();\n\t\t\tdata.relative = input.readBoolean();\n\t\t\tdata.offsetRotation = input.readFloat();\n\t\t\tdata.offsetX = input.readFloat() * scale;\n\t\t\tdata.offsetY = input.readFloat() * scale;\n\t\t\tdata.offsetScaleX = input.readFloat();\n\t\t\tdata.offsetScaleY = input.readFloat();\n\t\t\tdata.offsetShearY = input.readFloat();\n\t\t\tdata.mixRotate = input.readFloat();\n\t\t\tdata.mixX = input.readFloat();\n\t\t\tdata.mixY = input.readFloat();\n\t\t\tdata.mixScaleX = input.readFloat();\n\t\t\tdata.mixScaleY = input.readFloat();\n\t\t\tdata.mixShearY = input.readFloat();\n\t\t\tskeletonData.transformConstraints.push(data);\n\t\t}\n\n\t\t// Path constraints.\n\t\tn = input.readInt(true);\n\t\tfor (let i = 0, nn; i < n; i++) {\n\t\t\tlet name = input.readString();\n\t\t\tif (!name) throw new Error(\"Path constraint data name must not be null.\");\n\t\t\tlet data = new PathConstraintData(name);\n\t\t\tdata.order = input.readInt(true);\n\t\t\tdata.skinRequired = input.readBoolean();\n\t\t\tnn = input.readInt(true);\n\t\t\tfor (let ii = 0; ii < nn; ii++)\n\t\t\t\tdata.bones.push(skeletonData.bones[input.readInt(true)]);\n\t\t\tdata.target = skeletonData.slots[input.readInt(true)];\n\t\t\tdata.positionMode = input.readInt(true);\n\t\t\tdata.spacingMode = input.readInt(true);\n\t\t\tdata.rotateMode = input.readInt(true);\n\t\t\tdata.offsetRotation = input.readFloat();\n\t\t\tdata.position = input.readFloat();\n\t\t\tif (data.positionMode == PositionMode.Fixed) data.position *= scale;\n\t\t\tdata.spacing = input.readFloat();\n\t\t\tif (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed) data.spacing *= scale;\n\t\t\tdata.mixRotate = input.readFloat();\n\t\t\tdata.mixX = input.readFloat();\n\t\t\tdata.mixY = input.readFloat();\n\t\t\tskeletonData.pathConstraints.push(data);\n\t\t}\n\n\t\t// Default skin.\n\t\tlet defaultSkin = this.readSkin(input, skeletonData, true, nonessential);\n\t\tif (defaultSkin) {\n\t\t\tskeletonData.defaultSkin = defaultSkin;\n\t\t\tskeletonData.skins.push(defaultSkin);\n\t\t}\n\n\t\t// Skins.\n\t\t{\n\t\t\tlet i = skeletonData.skins.length;\n\t\t\tUtils.setArraySize(skeletonData.skins, n = i + input.readInt(true));\n\t\t\tfor (; i < n; i++) {\n\t\t\t\tlet skin = this.readSkin(input, skeletonData, false, nonessential);\n\t\t\t\tif (!skin) throw new Error(\"readSkin() should not have returned null.\");\n\t\t\t\tskeletonData.skins[i] = skin;\n\t\t\t}\n\t\t}\n\n\t\t// Linked meshes.\n\t\tn = this.linkedMeshes.length;\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tlet linkedMesh = this.linkedMeshes[i];\n\t\t\tlet skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n\t\t\tif (!skin) throw new Error(\"Not skin found for linked mesh.\");\n\t\t\tif (!linkedMesh.parent) throw new Error(\"Linked mesh parent must not be null\");\n\t\t\tlet parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n\t\t\tif (!parent) throw new Error(`Parent mesh not found: ${linkedMesh.parent}`);\n\t\t\tlinkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimeline ? parent as VertexAttachment : linkedMesh.mesh;\n\t\t\tlinkedMesh.mesh.setParentMesh(parent as MeshAttachment);\n\t\t\tif (linkedMesh.mesh.region != null) linkedMesh.mesh.updateRegion();\n\t\t}\n\t\tthis.linkedMeshes.length = 0;\n\n\t\t// Events.\n\t\tn = input.readInt(true);\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tlet eventName = input.readStringRef();\n\t\t\tif (!eventName) throw new Error\n\t\t\tlet data = new EventData(eventName);\n\t\t\tdata.intValue = input.readInt(false);\n\t\t\tdata.floatValue = input.readFloat();\n\t\t\tdata.stringValue = input.readString();\n\t\t\tdata.audioPath = input.readString();\n\t\t\tif (data.audioPath) {\n\t\t\t\tdata.volume = input.readFloat();\n\t\t\t\tdata.balance = input.readFloat();\n\t\t\t}\n\t\t\tskeletonData.events.push(data);\n\t\t}\n\n\t\t// Animations.\n\t\tn = input.readInt(true);\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tlet animationName = input.readString();\n\t\t\tif (!animationName) throw new Error(\"Animatio name must not be null.\");\n\t\t\tskeletonData.animations.push(this.readAnimation(input, animationName, skeletonData));\n\t\t}\n\t\treturn skeletonData;\n\t}\n\n\tprivate readSkin (input: BinaryInput, skeletonData: SkeletonData, defaultSkin: boolean, nonessential: boolean): Skin | null {\n\t\tlet skin = null;\n\t\tlet slotCount = 0;\n\n\t\tif (defaultSkin) {\n\t\t\tslotCount = input.readInt(true)\n\t\t\tif (slotCount == 0) return null;\n\t\t\tskin = new Skin(\"default\");\n\t\t} else {\n\t\t\tlet skinName = input.readStringRef();\n\t\t\tif (!skinName) throw new Error(\"Skin name must not be null.\");\n\t\t\tskin = new Skin(skinName);\n\t\t\tskin.bones.length = input.readInt(true);\n\t\t\tfor (let i = 0, n = skin.bones.length; i < n; i++)\n\t\t\t\tskin.bones[i] = skeletonData.bones[input.readInt(true)];\n\n\t\t\tfor (let i = 0, n = input.readInt(true); i < n; i++)\n\t\t\t\tskin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]);\n\t\t\tfor (let i = 0, n = input.readInt(true); i < n; i++)\n\t\t\t\tskin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]);\n\t\t\tfor (let i = 0, n = input.readInt(true); i < n; i++)\n\t\t\t\tskin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]);\n\n\t\t\tslotCount = input.readInt(true);\n\t\t}\n\n\t\tfor (let i = 0; i < slotCount; i++) {\n\t\t\tlet slotIndex = input.readInt(true);\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tlet name = input.readStringRef();\n\t\t\t\tif (!name) throw new Error(\"Attachment name must not be null\");\n\t\t\t\tlet attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name, nonessential);\n\t\t\t\tif (attachment) skin.setAttachment(slotIndex, name, attachment);\n\t\t\t}\n\t\t}\n\t\treturn skin;\n\t}\n\n\tprivate readAttachment (input: BinaryInput, skeletonData: SkeletonData, skin: Skin, slotIndex: number, attachmentName: string, nonessential: boolean): Attachment | null {\n\t\tlet scale = this.scale;\n\n\t\tlet name = input.readStringRef();\n\t\tif (!name) name = attachmentName;\n\n\t\tswitch (input.readByte()) {\n\t\t\tcase AttachmentType.Region: {\n\t\t\t\tlet path = input.readStringRef();\n\t\t\t\tlet rotation = input.readFloat();\n\t\t\t\tlet x = input.readFloat();\n\t\t\t\tlet y = input.readFloat();\n\t\t\t\tlet scaleX = input.readFloat();\n\t\t\t\tlet scaleY = input.readFloat();\n\t\t\t\tlet width = input.readFloat();\n\t\t\t\tlet height = input.readFloat();\n\t\t\t\tlet color = input.readInt32();\n\t\t\t\tlet sequence = this.readSequence(input);\n\n\t\t\t\tif (!path) path = name;\n\t\t\t\tlet region = this.attachmentLoader.newRegionAttachment(skin, name, path, sequence);\n\t\t\t\tif (!region) return null;\n\t\t\t\tregion.path = path;\n\t\t\t\tregion.x = x * scale;\n\t\t\t\tregion.y = y * scale;\n\t\t\t\tregion.scaleX = scaleX;\n\t\t\t\tregion.scaleY = scaleY;\n\t\t\t\tregion.rotation = rotation;\n\t\t\t\tregion.width = width * scale;\n\t\t\t\tregion.height = height * scale;\n\t\t\t\tColor.rgba8888ToColor(region.color, color);\n\t\t\t\tregion.sequence = sequence;\n\t\t\t\tif (sequence == null) region.updateRegion();\n\t\t\t\treturn region;\n\t\t\t}\n\t\t\tcase AttachmentType.BoundingBox: {\n\t\t\t\tlet vertexCount = input.readInt(true);\n\t\t\t\tlet vertices = this.readVertices(input, vertexCount);\n\t\t\t\tlet color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tlet box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n\t\t\t\tif (!box) return null;\n\t\t\t\tbox.worldVerticesLength = vertexCount << 1;\n\t\t\t\tbox.vertices = vertices.vertices!;\n\t\t\t\tbox.bones = vertices.bones;\n\t\t\t\tif (nonessential) Color.rgba8888ToColor(box.color, color);\n\t\t\t\treturn box;\n\t\t\t}\n\t\t\tcase AttachmentType.Mesh: {\n\t\t\t\tlet path = input.readStringRef();\n\t\t\t\tlet color = input.readInt32();\n\t\t\t\tlet vertexCount = input.readInt(true);\n\t\t\t\tlet uvs = this.readFloatArray(input, vertexCount << 1, 1);\n\t\t\t\tlet triangles = this.readShortArray(input);\n\t\t\t\tlet vertices = this.readVertices(input, vertexCount);\n\t\t\t\tlet hullLength = input.readInt(true);\n\t\t\t\tlet sequence = this.readSequence(input);\n\t\t\t\tlet edges: number[] = [];\n\t\t\t\tlet width = 0, height = 0;\n\t\t\t\tif (nonessential) {\n\t\t\t\t\tedges = this.readShortArray(input);\n\t\t\t\t\twidth = input.readFloat();\n\t\t\t\t\theight = input.readFloat();\n\t\t\t\t}\n\n\t\t\t\tif (!path) path = name;\n\t\t\t\tlet mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);\n\t\t\t\tif (!mesh) return null;\n\t\t\t\tmesh.path = path;\n\t\t\t\tColor.rgba8888ToColor(mesh.color, color);\n\t\t\t\tmesh.bones = vertices.bones;\n\t\t\t\tmesh.vertices = vertices.vertices!;\n\t\t\t\tmesh.worldVerticesLength = vertexCount << 1;\n\t\t\t\tmesh.triangles = triangles;\n\t\t\t\tmesh.regionUVs = uvs;\n\t\t\t\tif (sequence == null) mesh.updateRegion();\n\t\t\t\tmesh.hullLength = hullLength << 1;\n\t\t\t\tmesh.sequence = sequence;\n\t\t\t\tif (nonessential) {\n\t\t\t\t\tmesh.edges = edges;\n\t\t\t\t\tmesh.width = width * scale;\n\t\t\t\t\tmesh.height = height * scale;\n\t\t\t\t}\n\t\t\t\treturn mesh;\n\t\t\t}\n\t\t\tcase AttachmentType.LinkedMesh: {\n\t\t\t\tlet path = input.readStringRef();\n\t\t\t\tlet color = input.readInt32();\n\t\t\t\tlet skinName = input.readStringRef();\n\t\t\t\tlet parent = input.readStringRef();\n\t\t\t\tlet inheritTimelines = input.readBoolean();\n\t\t\t\tlet sequence = this.readSequence(input);\n\t\t\t\tlet width = 0, height = 0;\n\t\t\t\tif (nonessential) {\n\t\t\t\t\twidth = input.readFloat();\n\t\t\t\t\theight = input.readFloat();\n\t\t\t\t}\n\n\t\t\t\tif (!path) path = name;\n\t\t\t\tlet mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);\n\t\t\t\tif (!mesh) return null;\n\t\t\t\tmesh.path = path;\n\t\t\t\tColor.rgba8888ToColor(mesh.color, color);\n\t\t\t\tmesh.sequence = sequence;\n\t\t\t\tif (nonessential) {\n\t\t\t\t\tmesh.width = width * scale;\n\t\t\t\t\tmesh.height = height * scale;\n\t\t\t\t}\n\t\t\t\tthis.linkedMeshes.push(new LinkedMesh(mesh, skinName, slotIndex, parent, inheritTimelines));\n\t\t\t\treturn mesh;\n\t\t\t}\n\t\t\tcase AttachmentType.Path: {\n\t\t\t\tlet closed = input.readBoolean();\n\t\t\t\tlet constantSpeed = input.readBoolean();\n\t\t\t\tlet vertexCount = input.readInt(true);\n\t\t\t\tlet vertices = this.readVertices(input, vertexCount);\n\t\t\t\tlet lengths = Utils.newArray(vertexCount / 3, 0);\n\t\t\t\tfor (let i = 0, n = lengths.length; i < n; i++)\n\t\t\t\t\tlengths[i] = input.readFloat() * scale;\n\t\t\t\tlet color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tlet path = this.attachmentLoader.newPathAttachment(skin, name);\n\t\t\t\tif (!path) return null;\n\t\t\t\tpath.closed = closed;\n\t\t\t\tpath.constantSpeed = constantSpeed;\n\t\t\t\tpath.worldVerticesLength = vertexCount << 1;\n\t\t\t\tpath.vertices = vertices.vertices!;\n\t\t\t\tpath.bones = vertices.bones;\n\t\t\t\tpath.lengths = lengths;\n\t\t\t\tif (nonessential) Color.rgba8888ToColor(path.color, color);\n\t\t\t\treturn path;\n\t\t\t}\n\t\t\tcase AttachmentType.Point: {\n\t\t\t\tlet rotation = input.readFloat();\n\t\t\t\tlet x = input.readFloat();\n\t\t\t\tlet y = input.readFloat();\n\t\t\t\tlet color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tlet point = this.attachmentLoader.newPointAttachment(skin, name);\n\t\t\t\tif (!point) return null;\n\t\t\t\tpoint.x = x * scale;\n\t\t\t\tpoint.y = y * scale;\n\t\t\t\tpoint.rotation = rotation;\n\t\t\t\tif (nonessential) Color.rgba8888ToColor(point.color, color);\n\t\t\t\treturn point;\n\t\t\t}\n\t\t\tcase AttachmentType.Clipping: {\n\t\t\t\tlet endSlotIndex = input.readInt(true);\n\t\t\t\tlet vertexCount = input.readInt(true);\n\t\t\t\tlet vertices = this.readVertices(input, vertexCount);\n\t\t\t\tlet color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tlet clip = this.attachmentLoader.newClippingAttachment(skin, name);\n\t\t\t\tif (!clip) return null;\n\t\t\t\tclip.endSlot = skeletonData.slots[endSlotIndex];\n\t\t\t\tclip.worldVerticesLength = vertexCount << 1;\n\t\t\t\tclip.vertices = vertices.vertices!;\n\t\t\t\tclip.bones = vertices.bones;\n\t\t\t\tif (nonessential) Color.rgba8888ToColor(clip.color, color);\n\t\t\t\treturn clip;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate readSequence (input: BinaryInput) {\n\t\tif (!input.readBoolean()) return null;\n\t\tlet sequence = new Sequence(input.readInt(true));\n\t\tsequence.start = input.readInt(true);\n\t\tsequence.digits = input.readInt(true);\n\t\tsequence.setupIndex = input.readInt(true);\n\t\treturn sequence;\n\t}\n\n\tprivate readVertices (input: BinaryInput, vertexCount: number): Vertices {\n\t\tlet scale = this.scale;\n\t\tlet verticesLength = vertexCount << 1;\n\t\tlet vertices = new Vertices();\n\t\tif (!input.readBoolean()) {\n\t\t\tvertices.vertices = this.readFloatArray(input, verticesLength, scale);\n\t\t\treturn vertices;\n\t\t}\n\t\tlet weights = new Array<number>();\n\t\tlet bonesArray = new Array<number>();\n\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\tlet boneCount = input.readInt(true);\n\t\t\tbonesArray.push(boneCount);\n\t\t\tfor (let ii = 0; ii < boneCount; ii++) {\n\t\t\t\tbonesArray.push(input.readInt(true));\n\t\t\t\tweights.push(input.readFloat() * scale);\n\t\t\t\tweights.push(input.readFloat() * scale);\n\t\t\t\tweights.push(input.readFloat());\n\t\t\t}\n\t\t}\n\t\tvertices.vertices = Utils.toFloatArray(weights);\n\t\tvertices.bones = bonesArray;\n\t\treturn vertices;\n\t}\n\n\tprivate readFloatArray (input: BinaryInput, n: number, scale: number): number[] {\n\t\tlet array = new Array<number>(n);\n\t\tif (scale == 1) {\n\t\t\tfor (let i = 0; i < n; i++)\n\t\t\t\tarray[i] = input.readFloat();\n\t\t} else {\n\t\t\tfor (let i = 0; i < n; i++)\n\t\t\t\tarray[i] = input.readFloat() * scale;\n\t\t}\n\t\treturn array;\n\t}\n\n\tprivate readShortArray (input: BinaryInput): number[] {\n\t\tlet n = input.readInt(true);\n\t\tlet array = new Array<number>(n);\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tarray[i] = input.readShort();\n\t\treturn array;\n\t}\n\n\tprivate readAnimation (input: BinaryInput, name: string, skeletonData: SkeletonData): Animation {\n\t\tinput.readInt(true); // Number of timelines.\n\t\tlet timelines = new Array<Timeline>();\n\t\tlet scale = this.scale;\n\t\tlet tempColor1 = new Color();\n\t\tlet tempColor2 = new Color();\n\n\t\t// Slot timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tlet slotIndex = input.readInt(true);\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tlet timelineType = input.readByte();\n\t\t\t\tlet frameCount = input.readInt(true);\n\t\t\t\tlet frameLast = frameCount - 1;\n\t\t\t\tswitch (timelineType) {\n\t\t\t\t\tcase SLOT_ATTACHMENT: {\n\t\t\t\t\t\tlet timeline = new AttachmentTimeline(frameCount, slotIndex);\n\t\t\t\t\t\tfor (let frame = 0; frame < frameCount; frame++)\n\t\t\t\t\t\t\ttimeline.setFrame(frame, input.readFloat(), input.readStringRef());\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase SLOT_RGBA: {\n\t\t\t\t\t\tlet bezierCount = input.readInt(true);\n\t\t\t\t\t\tlet timeline = new RGBATimeline(frameCount, bezierCount, slotIndex);\n\n\t\t\t\t\t\tlet time = input.readFloat();\n\t\t\t\t\t\tlet r = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet g = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet b = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet a = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, r, g, b, a);\n\t\t\t\t\t\t\tif (frame == frameLast) break;\n\n\t\t\t\t\t\t\tlet time2 = input.readFloat();\n\t\t\t\t\t\t\tlet r2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet g2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet b2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet a2 = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 3, time, time2, a, a2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tr = r2;\n\t\t\t\t\t\t\tg = g2;\n\t\t\t\t\t\t\tb = b2;\n\t\t\t\t\t\t\ta = a2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase SLOT_RGB: {\n\t\t\t\t\t\tlet bezierCount = input.readInt(true);\n\t\t\t\t\t\tlet timeline = new RGBTimeline(frameCount, bezierCount, slotIndex);\n\n\t\t\t\t\t\tlet time = input.readFloat();\n\t\t\t\t\t\tlet r = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet g = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet b = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, r, g, b);\n\t\t\t\t\t\t\tif (frame == frameLast) break;\n\n\t\t\t\t\t\t\tlet time2 = input.readFloat();\n\t\t\t\t\t\t\tlet r2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet g2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet b2 = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tr = r2;\n\t\t\t\t\t\t\tg = g2;\n\t\t\t\t\t\t\tb = b2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase SLOT_RGBA2: {\n\t\t\t\t\t\tlet bezierCount = input.readInt(true);\n\t\t\t\t\t\tlet timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex);\n\n\t\t\t\t\t\tlet time = input.readFloat();\n\t\t\t\t\t\tlet r = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet g = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet b = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet a = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet r2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet g2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet b2 = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, r, g, b, a, r2, g2, b2);\n\t\t\t\t\t\t\tif (frame == frameLast) break;\n\t\t\t\t\t\t\tlet time2 = input.readFloat();\n\t\t\t\t\t\t\tlet nr = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet ng = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet nb = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet na = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet nr2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet ng2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet nb2 = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 3, time, time2, a, na, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 4, time, time2, r2, nr2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 5, time, time2, g2, ng2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 6, time, time2, b2, nb2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tr = nr;\n\t\t\t\t\t\t\tg = ng;\n\t\t\t\t\t\t\tb = nb;\n\t\t\t\t\t\t\ta = na;\n\t\t\t\t\t\t\tr2 = nr2;\n\t\t\t\t\t\t\tg2 = ng2;\n\t\t\t\t\t\t\tb2 = nb2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase SLOT_RGB2: {\n\t\t\t\t\t\tlet bezierCount = input.readInt(true);\n\t\t\t\t\t\tlet timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex);\n\n\t\t\t\t\t\tlet time = input.readFloat();\n\t\t\t\t\t\tlet r = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet g = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet b = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet r2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet g2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\tlet b2 = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, r, g, b, r2, g2, b2);\n\t\t\t\t\t\t\tif (frame == frameLast) break;\n\t\t\t\t\t\t\tlet time2 = input.readFloat();\n\t\t\t\t\t\t\tlet nr = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet ng = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet nb = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet nr2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet ng2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tlet nb2 = input.readUnsignedByte() / 255.0;\n\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 3, time, time2, r2, nr2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 4, time, time2, g2, ng2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 5, time, time2, b2, nb2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tr = nr;\n\t\t\t\t\t\t\tg = ng;\n\t\t\t\t\t\t\tb = nb;\n\t\t\t\t\t\t\tr2 = nr2;\n\t\t\t\t\t\t\tg2 = ng2;\n\t\t\t\t\t\t\tb2 = nb2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase SLOT_ALPHA: {\n\t\t\t\t\t\tlet timeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex);\n\t\t\t\t\t\tlet time = input.readFloat(), a = input.readUnsignedByte() / 255;\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, a);\n\t\t\t\t\t\t\tif (frame == frameLast) break;\n\t\t\t\t\t\t\tlet time2 = input.readFloat();\n\t\t\t\t\t\t\tlet a2 = input.readUnsignedByte() / 255;\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, a, a2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\ta = a2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Bone timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tlet boneIndex = input.readInt(true);\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tlet type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase BONE_ROTATE:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new RotateTimeline(frameCount, bezierCount, boneIndex), 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BONE_TRANSLATE:\n\t\t\t\t\t\ttimelines.push(readTimeline2(input, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BONE_TRANSLATEX:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BONE_TRANSLATEY:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BONE_SCALE:\n\t\t\t\t\t\ttimelines.push(readTimeline2(input, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BONE_SCALEX:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BONE_SCALEY:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BONE_SHEAR:\n\t\t\t\t\t\ttimelines.push(readTimeline2(input, new ShearTimeline(frameCount, bezierCount, boneIndex), 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BONE_SHEARX:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase BONE_SHEARY:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// IK constraint timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tlet index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;\n\t\t\tlet timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index);\n\t\t\tlet time = input.readFloat(), mix = input.readFloat(), softness = input.readFloat() * scale;\n\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\ttimeline.setFrame(frame, time, mix, softness, input.readByte(), input.readBoolean(), input.readBoolean());\n\t\t\t\tif (frame == frameLast) break;\n\t\t\t\tlet time2 = input.readFloat(), mix2 = input.readFloat(), softness2 = input.readFloat() * scale;\n\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale);\n\t\t\t\t}\n\t\t\t\ttime = time2;\n\t\t\t\tmix = mix2;\n\t\t\t\tsoftness = softness2;\n\t\t\t}\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\t// Transform constraint timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tlet index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;\n\t\t\tlet timeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index);\n\t\t\tlet time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat(),\n\t\t\t\tmixScaleX = input.readFloat(), mixScaleY = input.readFloat(), mixShearY = input.readFloat();\n\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\ttimeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);\n\t\t\t\tif (frame == frameLast) break;\n\t\t\t\tlet time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat(),\n\t\t\t\t\tmixScaleX2 = input.readFloat(), mixScaleY2 = input.readFloat(), mixShearY2 = input.readFloat();\n\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);\n\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1);\n\t\t\t\t}\n\t\t\t\ttime = time2;\n\t\t\t\tmixRotate = mixRotate2;\n\t\t\t\tmixX = mixX2;\n\t\t\t\tmixY = mixY2;\n\t\t\t\tmixScaleX = mixScaleX2;\n\t\t\t\tmixScaleY = mixScaleY2;\n\t\t\t\tmixShearY = mixShearY2;\n\t\t\t}\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\t// Path constraint timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tlet index = input.readInt(true);\n\t\t\tlet data = skeletonData.pathConstraints[index];\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\tcase PATH_POSITION:\n\t\t\t\t\t\ttimelines\n\t\t\t\t\t\t\t.push(readTimeline1(input, new PathConstraintPositionTimeline(input.readInt(true), input.readInt(true), index),\n\t\t\t\t\t\t\t\tdata.positionMode == PositionMode.Fixed ? scale : 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PATH_SPACING:\n\t\t\t\t\t\ttimelines\n\t\t\t\t\t\t\t.push(readTimeline1(input, new PathConstraintSpacingTimeline(input.readInt(true), input.readInt(true), index),\n\t\t\t\t\t\t\t\tdata.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed ? scale : 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PATH_MIX:\n\t\t\t\t\t\tlet timeline = new PathConstraintMixTimeline(input.readInt(true), input.readInt(true), index);\n\t\t\t\t\t\tlet time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat();\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, mixRotate, mixX, mixY);\n\t\t\t\t\t\t\tif (frame == frameLast) break;\n\t\t\t\t\t\t\tlet time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(),\n\t\t\t\t\t\t\t\tmixY2 = input.readFloat();\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);\n\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tmixRotate = mixRotate2;\n\t\t\t\t\t\t\tmixX = mixX2;\n\t\t\t\t\t\t\tmixY = mixY2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Deform timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tlet skin = skeletonData.skins[input.readInt(true)];\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tlet slotIndex = input.readInt(true);\n\t\t\t\tfor (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {\n\t\t\t\t\tlet attachmentName = input.readStringRef();\n\t\t\t\t\tif (!attachmentName) throw new Error(\"attachmentName must not be null.\");\n\t\t\t\t\tlet attachment = skin.getAttachment(slotIndex, attachmentName);\n\t\t\t\t\tlet timelineType = input.readByte();\n\t\t\t\t\tlet frameCount = input.readInt(true);\n\t\t\t\t\tlet frameLast = frameCount - 1;\n\n\t\t\t\t\tswitch (timelineType) {\n\t\t\t\t\t\tcase ATTACHMENT_DEFORM: {\n\t\t\t\t\t\t\tlet vertexAttachment = attachment as VertexAttachment;\n\t\t\t\t\t\t\tlet weighted = vertexAttachment.bones;\n\t\t\t\t\t\t\tlet vertices = vertexAttachment.vertices;\n\t\t\t\t\t\t\tlet deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n\n\n\t\t\t\t\t\t\tlet bezierCount = input.readInt(true);\n\t\t\t\t\t\t\tlet timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, vertexAttachment);\n\n\t\t\t\t\t\t\tlet time = input.readFloat();\n\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\t\tlet deform;\n\t\t\t\t\t\t\t\tlet end = input.readInt(true);\n\t\t\t\t\t\t\t\tif (end == 0)\n\t\t\t\t\t\t\t\t\tdeform = weighted ? Utils.newFloatArray(deformLength) : vertices;\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tdeform = Utils.newFloatArray(deformLength);\n\t\t\t\t\t\t\t\t\tlet start = input.readInt(true);\n\t\t\t\t\t\t\t\t\tend += start;\n\t\t\t\t\t\t\t\t\tif (scale == 1) {\n\t\t\t\t\t\t\t\t\t\tfor (let v = start; v < end; v++)\n\t\t\t\t\t\t\t\t\t\t\tdeform[v] = input.readFloat();\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tfor (let v = start; v < end; v++)\n\t\t\t\t\t\t\t\t\t\t\tdeform[v] = input.readFloat() * scale;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!weighted) {\n\t\t\t\t\t\t\t\t\t\tfor (let v = 0, vn = deform.length; v < vn; v++)\n\t\t\t\t\t\t\t\t\t\t\tdeform[v] += vertices[v];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, deform);\n\t\t\t\t\t\t\t\tif (frame == frameLast) break;\n\t\t\t\t\t\t\t\tlet time2 = input.readFloat();\n\t\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\t\tcase CURVE_STEPPED:\n\t\t\t\t\t\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase CURVE_BEZIER:\n\t\t\t\t\t\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase ATTACHMENT_SEQUENCE: {\n\t\t\t\t\t\t\tlet timeline = new SequenceTimeline(frameCount, slotIndex, attachment as unknown as HasTextureRegion);\n\t\t\t\t\t\t\tfor (let frame = 0; frame < frameCount; frame++) {\n\t\t\t\t\t\t\t\tlet time = input.readFloat();\n\t\t\t\t\t\t\t\tlet modeAndIndex = input.readInt32();\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, SequenceModeValues[modeAndIndex & 0xf], modeAndIndex >> 4,\n\t\t\t\t\t\t\t\t\tinput.readFloat());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Draw order timeline.\n\t\tlet drawOrderCount = input.readInt(true);\n\t\tif (drawOrderCount > 0) {\n\t\t\tlet timeline = new DrawOrderTimeline(drawOrderCount);\n\t\t\tlet slotCount = skeletonData.slots.length;\n\t\t\tfor (let i = 0; i < drawOrderCount; i++) {\n\t\t\t\tlet time = input.readFloat();\n\t\t\t\tlet offsetCount = input.readInt(true);\n\t\t\t\tlet drawOrder = Utils.newArray(slotCount, 0);\n\t\t\t\tfor (let ii = slotCount - 1; ii >= 0; ii--)\n\t\t\t\t\tdrawOrder[ii] = -1;\n\t\t\t\tlet unchanged = Utils.newArray(slotCount - offsetCount, 0);\n\t\t\t\tlet originalIndex = 0, unchangedIndex = 0;\n\t\t\t\tfor (let ii = 0; ii < offsetCount; ii++) {\n\t\t\t\t\tlet slotIndex = input.readInt(true);\n\t\t\t\t\t// Collect unchanged items.\n\t\t\t\t\twhile (originalIndex != slotIndex)\n\t\t\t\t\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t\t\t\t\t// Set changed items.\n\t\t\t\t\tdrawOrder[originalIndex + input.readInt(true)] = originalIndex++;\n\t\t\t\t}\n\t\t\t\t// Collect remaining unchanged items.\n\t\t\t\twhile (originalIndex < slotCount)\n\t\t\t\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t\t\t\t// Fill in unchanged items.\n\t\t\t\tfor (let ii = slotCount - 1; ii >= 0; ii--)\n\t\t\t\t\tif (drawOrder[ii] == -1) drawOrder[ii] = unchanged[--unchangedIndex];\n\t\t\t\ttimeline.setFrame(i, time, drawOrder);\n\t\t\t}\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\t// Event timeline.\n\t\tlet eventCount = input.readInt(true);\n\t\tif (eventCount > 0) {\n\t\t\tlet timeline = new EventTimeline(eventCount);\n\t\t\tfor (let i = 0; i < eventCount; i++) {\n\t\t\t\tlet time = input.readFloat();\n\t\t\t\tlet eventData = skeletonData.events[input.readInt(true)];\n\t\t\t\tlet event = new Event(time, eventData);\n\t\t\t\tevent.intValue = input.readInt(false);\n\t\t\t\tevent.floatValue = input.readFloat();\n\t\t\t\tevent.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue;\n\t\t\t\tif (event.data.audioPath) {\n\t\t\t\t\tevent.volume = input.readFloat();\n\t\t\t\t\tevent.balance = input.readFloat();\n\t\t\t\t}\n\t\t\t\ttimeline.setFrame(i, event);\n\t\t\t}\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\tlet duration = 0;\n\t\tfor (let i = 0, n = timelines.length; i < n; i++)\n\t\t\tduration = Math.max(duration, timelines[i].getDuration());\n\t\treturn new Animation(name, timelines, duration);\n\t}\n}\n\nexport class BinaryInput {\n\tconstructor (data: Uint8Array, public strings = new Array<string>(), private index: number = 0, private buffer = new DataView(data.buffer)) {\n\t}\n\n\treadByte (): number {\n\t\treturn this.buffer.getInt8(this.index++);\n\t}\n\n\treadUnsignedByte (): number {\n\t\treturn this.buffer.getUint8(this.index++);\n\t}\n\n\treadShort (): number {\n\t\tlet value = this.buffer.getInt16(this.index);\n\t\tthis.index += 2;\n\t\treturn value;\n\t}\n\n\treadInt32 (): number {\n\t\tlet value = this.buffer.getInt32(this.index)\n\t\tthis.index += 4;\n\t\treturn value;\n\t}\n\n\treadInt (optimizePositive: boolean) {\n\t\tlet b = this.readByte();\n\t\tlet result = b & 0x7F;\n\t\tif ((b & 0x80) != 0) {\n\t\t\tb = this.readByte();\n\t\t\tresult |= (b & 0x7F) << 7;\n\t\t\tif ((b & 0x80) != 0) {\n\t\t\t\tb = this.readByte();\n\t\t\t\tresult |= (b & 0x7F) << 14;\n\t\t\t\tif ((b & 0x80) != 0) {\n\t\t\t\t\tb = this.readByte();\n\t\t\t\t\tresult |= (b & 0x7F) << 21;\n\t\t\t\t\tif ((b & 0x80) != 0) {\n\t\t\t\t\t\tb = this.readByte();\n\t\t\t\t\t\tresult |= (b & 0x7F) << 28;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn optimizePositive ? result : ((result >>> 1) ^ -(result & 1));\n\t}\n\n\treadStringRef (): string | null {\n\t\tlet index = this.readInt(true);\n\t\treturn index == 0 ? null : this.strings[index - 1];\n\t}\n\n\treadString (): string | null {\n\t\tlet byteCount = this.readInt(true);\n\t\tswitch (byteCount) {\n\t\t\tcase 0:\n\t\t\t\treturn null;\n\t\t\tcase 1:\n\t\t\t\treturn \"\";\n\t\t}\n\t\tbyteCount--;\n\t\tlet chars = \"\";\n\t\tlet charCount = 0;\n\t\tfor (let i = 0; i < byteCount;) {\n\t\t\tlet b = this.readUnsignedByte();\n\t\t\tswitch (b >> 4) {\n\t\t\t\tcase 12:\n\t\t\t\tcase 13:\n\t\t\t\t\tchars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F));\n\t\t\t\t\ti += 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 14:\n\t\t\t\t\tchars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F));\n\t\t\t\t\ti += 3;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tchars += String.fromCharCode(b);\n\t\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t}\n\n\treadFloat (): number {\n\t\tlet value = this.buffer.getFloat32(this.index);\n\t\tthis.index += 4;\n\t\treturn value;\n\t}\n\n\treadBoolean (): boolean {\n\t\treturn this.readByte() != 0;\n\t}\n}\n\nclass LinkedMesh {\n\tparent: string | null; skin: string | null;\n\tslotIndex: number;\n\tmesh: MeshAttachment;\n\tinheritTimeline: boolean;\n\n\tconstructor (mesh: MeshAttachment, skin: string | null, slotIndex: number, parent: string | null, inheritDeform: boolean) {\n\t\tthis.mesh = mesh;\n\t\tthis.skin = skin;\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.parent = parent;\n\t\tthis.inheritTimeline = inheritDeform;\n\t}\n}\n\nclass Vertices {\n\tconstructor (public bones: Array<number> | null = null, public vertices: Array<number> | Float32Array | null = null) { }\n}\n\nenum AttachmentType { Region, BoundingBox, Mesh, LinkedMesh, Path, Point, Clipping }\n\nfunction readTimeline1 (input: BinaryInput, timeline: CurveTimeline1, scale: number): CurveTimeline1 {\n\tlet time = input.readFloat(), value = input.readFloat() * scale;\n\tfor (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {\n\t\ttimeline.setFrame(frame, time, value);\n\t\tif (frame == frameLast) break;\n\t\tlet time2 = input.readFloat(), value2 = input.readFloat() * scale;\n\t\tswitch (input.readByte()) {\n\t\t\tcase CURVE_STEPPED:\n\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\tbreak;\n\t\t\tcase CURVE_BEZIER:\n\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, value, value2, scale);\n\t\t}\n\t\ttime = time2;\n\t\tvalue = value2;\n\t}\n\treturn timeline;\n}\n\nfunction readTimeline2 (input: BinaryInput, timeline: CurveTimeline2, scale: number): CurveTimeline2 {\n\tlet time = input.readFloat(), value1 = input.readFloat() * scale, value2 = input.readFloat() * scale;\n\tfor (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1; ; frame++) {\n\t\ttimeline.setFrame(frame, time, value1, value2);\n\t\tif (frame == frameLast) break;\n\t\tlet time2 = input.readFloat(), nvalue1 = input.readFloat() * scale, nvalue2 = input.readFloat() * scale;\n\t\tswitch (input.readByte()) {\n\t\t\tcase CURVE_STEPPED:\n\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\tbreak;\n\t\t\tcase CURVE_BEZIER:\n\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, value1, nvalue1, scale);\n\t\t\t\tsetBezier(input, timeline, bezier++, frame, 1, time, time2, value2, nvalue2, scale);\n\t\t}\n\t\ttime = time2;\n\t\tvalue1 = nvalue1;\n\t\tvalue2 = nvalue2;\n\t}\n\treturn timeline;\n}\n\nfunction setBezier (input: BinaryInput, timeline: CurveTimeline, bezier: number, frame: number, value: number,\n\ttime1: number, time2: number, value1: number, value2: number, scale: number) {\n\ttimeline.setBezier(bezier, frame, value, time1, value1, input.readFloat(), input.readFloat() * scale, input.readFloat(), input.readFloat() * scale, time2, value2);\n}\n\nconst BONE_ROTATE = 0;\nconst BONE_TRANSLATE = 1;\nconst BONE_TRANSLATEX = 2;\nconst BONE_TRANSLATEY = 3;\nconst BONE_SCALE = 4;\nconst BONE_SCALEX = 5;\nconst BONE_SCALEY = 6;\nconst BONE_SHEAR = 7;\nconst BONE_SHEARX = 8;\nconst BONE_SHEARY = 9;\n\nconst SLOT_ATTACHMENT = 0;\nconst SLOT_RGBA = 1;\nconst SLOT_RGB = 2;\nconst SLOT_RGBA2 = 3;\nconst SLOT_RGB2 = 4;\nconst SLOT_ALPHA = 5;\n\nconst ATTACHMENT_DEFORM = 0;\nconst ATTACHMENT_SEQUENCE = 1;\n\nconst PATH_POSITION = 0;\nconst PATH_SPACING = 1;\nconst PATH_MIX = 2;\n\nconst CURVE_LINEAR = 0;\nconst CURVE_STEPPED = 1;\nconst CURVE_BEZIER = 2;\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { BoundingBoxAttachment } from \"./attachments/BoundingBoxAttachment\";\nimport { Skeleton } from \"./Skeleton\";\nimport { NumberArrayLike, Pool, Utils } from \"./Utils\";\n\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. */\nexport class SkeletonBounds {\n\n\t/** The left edge of the axis aligned bounding box. */\n\tminX = 0;\n\n\t/** The bottom edge of the axis aligned bounding box. */\n\tminY = 0;\n\n\t/** The right edge of the axis aligned bounding box. */\n\tmaxX = 0;\n\n\t/** The top edge of the axis aligned bounding box. */\n\tmaxY = 0;\n\n\t/** The visible bounding boxes. */\n\tboundingBoxes = new Array<BoundingBoxAttachment>();\n\n\t/** The world vertices for the bounding box polygons. */\n\tpolygons = new Array<NumberArrayLike>();\n\n\tprivate polygonPool = new Pool<NumberArrayLike>(() => {\n\t\treturn Utils.newFloatArray(16);\n\t});\n\n\t/** Clears any previous polygons, finds all visible bounding box attachments, and computes the world vertices for each bounding\n\t * box's polygon.\n\t * @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the\n\t *           SkeletonBounds AABB methods will always return true. */\n\tupdate (skeleton: Skeleton, updateAabb: boolean) {\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\t\tlet boundingBoxes = this.boundingBoxes;\n\t\tlet polygons = this.polygons;\n\t\tlet polygonPool = this.polygonPool;\n\t\tlet slots = skeleton.slots;\n\t\tlet slotCount = slots.length;\n\n\t\tboundingBoxes.length = 0;\n\t\tpolygonPool.freeAll(polygons);\n\t\tpolygons.length = 0;\n\n\t\tfor (let i = 0; i < slotCount; i++) {\n\t\t\tlet slot = slots[i];\n\t\t\tif (!slot.bone.active) continue;\n\t\t\tlet attachment = slot.getAttachment();\n\t\t\tif (attachment instanceof BoundingBoxAttachment) {\n\t\t\t\tlet boundingBox = attachment as BoundingBoxAttachment;\n\t\t\t\tboundingBoxes.push(boundingBox);\n\n\t\t\t\tlet polygon = polygonPool.obtain();\n\t\t\t\tif (polygon.length != boundingBox.worldVerticesLength) {\n\t\t\t\t\tpolygon = Utils.newFloatArray(boundingBox.worldVerticesLength);\n\t\t\t\t}\n\t\t\t\tpolygons.push(polygon);\n\t\t\t\tboundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2);\n\t\t\t}\n\t\t}\n\n\t\tif (updateAabb) {\n\t\t\tthis.aabbCompute();\n\t\t} else {\n\t\t\tthis.minX = Number.POSITIVE_INFINITY;\n\t\t\tthis.minY = Number.POSITIVE_INFINITY;\n\t\t\tthis.maxX = Number.NEGATIVE_INFINITY;\n\t\t\tthis.maxY = Number.NEGATIVE_INFINITY;\n\t\t}\n\t}\n\n\taabbCompute () {\n\t\tlet minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n\t\tlet polygons = this.polygons;\n\t\tfor (let i = 0, n = polygons.length; i < n; i++) {\n\t\t\tlet polygon = polygons[i];\n\t\t\tlet vertices = polygon;\n\t\t\tfor (let ii = 0, nn = polygon.length; ii < nn; ii += 2) {\n\t\t\t\tlet x = vertices[ii];\n\t\t\t\tlet y = vertices[ii + 1];\n\t\t\t\tminX = Math.min(minX, x);\n\t\t\t\tminY = Math.min(minY, y);\n\t\t\t\tmaxX = Math.max(maxX, x);\n\t\t\t\tmaxY = Math.max(maxY, y);\n\t\t\t}\n\t\t}\n\t\tthis.minX = minX;\n\t\tthis.minY = minY;\n\t\tthis.maxX = maxX;\n\t\tthis.maxY = maxY;\n\t}\n\n\t/** Returns true if the axis aligned bounding box contains the point. */\n\taabbContainsPoint (x: number, y: number) {\n\t\treturn x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;\n\t}\n\n\t/** Returns true if the axis aligned bounding box intersects the line segment. */\n\taabbIntersectsSegment (x1: number, y1: number, x2: number, y2: number) {\n\t\tlet minX = this.minX;\n\t\tlet minY = this.minY;\n\t\tlet maxX = this.maxX;\n\t\tlet maxY = this.maxY;\n\t\tif ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY))\n\t\t\treturn false;\n\t\tlet m = (y2 - y1) / (x2 - x1);\n\t\tlet y = m * (minX - x1) + y1;\n\t\tif (y > minY && y < maxY) return true;\n\t\ty = m * (maxX - x1) + y1;\n\t\tif (y > minY && y < maxY) return true;\n\t\tlet x = (minY - y1) / m + x1;\n\t\tif (x > minX && x < maxX) return true;\n\t\tx = (maxY - y1) / m + x1;\n\t\tif (x > minX && x < maxX) return true;\n\t\treturn false;\n\t}\n\n\t/** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */\n\taabbIntersectsSkeleton (bounds: SkeletonBounds) {\n\t\treturn this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;\n\t}\n\n\t/** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more\n\t * efficient to only call this method if {@link #aabbContainsPoint(float, float)} returns true. */\n\tcontainsPoint (x: number, y: number): BoundingBoxAttachment | null {\n\t\tlet polygons = this.polygons;\n\t\tfor (let i = 0, n = polygons.length; i < n; i++)\n\t\t\tif (this.containsPointPolygon(polygons[i], x, y)) return this.boundingBoxes[i];\n\t\treturn null;\n\t}\n\n\t/** Returns true if the polygon contains the point. */\n\tcontainsPointPolygon (polygon: NumberArrayLike, x: number, y: number) {\n\t\tlet vertices = polygon;\n\t\tlet nn = polygon.length;\n\n\t\tlet prevIndex = nn - 2;\n\t\tlet inside = false;\n\t\tfor (let ii = 0; ii < nn; ii += 2) {\n\t\t\tlet vertexY = vertices[ii + 1];\n\t\t\tlet prevY = vertices[prevIndex + 1];\n\t\t\tif ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) {\n\t\t\t\tlet vertexX = vertices[ii];\n\t\t\t\tif (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x) inside = !inside;\n\t\t\t}\n\t\t\tprevIndex = ii;\n\t\t}\n\t\treturn inside;\n\t}\n\n\t/** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it\n\t * is usually more efficient to only call this method if {@link #aabbIntersectsSegment()} returns\n\t * true. */\n\tintersectsSegment (x1: number, y1: number, x2: number, y2: number) {\n\t\tlet polygons = this.polygons;\n\t\tfor (let i = 0, n = polygons.length; i < n; i++)\n\t\t\tif (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2)) return this.boundingBoxes[i];\n\t\treturn null;\n\t}\n\n\t/** Returns true if the polygon contains any part of the line segment. */\n\tintersectsSegmentPolygon (polygon: NumberArrayLike, x1: number, y1: number, x2: number, y2: number) {\n\t\tlet vertices = polygon;\n\t\tlet nn = polygon.length;\n\n\t\tlet width12 = x1 - x2, height12 = y1 - y2;\n\t\tlet det1 = x1 * y2 - y1 * x2;\n\t\tlet x3 = vertices[nn - 2], y3 = vertices[nn - 1];\n\t\tfor (let ii = 0; ii < nn; ii += 2) {\n\t\t\tlet x4 = vertices[ii], y4 = vertices[ii + 1];\n\t\t\tlet det2 = x3 * y4 - y3 * x4;\n\t\t\tlet width34 = x3 - x4, height34 = y3 - y4;\n\t\t\tlet det3 = width12 * height34 - height12 * width34;\n\t\t\tlet x = (det1 * width34 - width12 * det2) / det3;\n\t\t\tif (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) {\n\t\t\t\tlet y = (det1 * height34 - height12 * det2) / det3;\n\t\t\t\tif (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1))) return true;\n\t\t\t}\n\t\t\tx3 = x4;\n\t\t\ty3 = y4;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/** Returns the polygon for the specified bounding box, or null. */\n\tgetPolygon (boundingBox: BoundingBoxAttachment) {\n\t\tif (!boundingBox) throw new Error(\"boundingBox cannot be null.\");\n\t\tlet index = this.boundingBoxes.indexOf(boundingBox);\n\t\treturn index == -1 ? null : this.polygons[index];\n\t}\n\n\t/** The width of the axis aligned bounding box. */\n\tgetWidth () {\n\t\treturn this.maxX - this.minX;\n\t}\n\n\t/** The height of the axis aligned bounding box. */\n\tgetHeight () {\n\t\treturn this.maxY - this.minY;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { NumberArrayLike, Pool } from \"./Utils\";\n\nexport class Triangulator {\n\tprivate convexPolygons = new Array<Array<number>>();\n\tprivate convexPolygonsIndices = new Array<Array<number>>();\n\n\tprivate indicesArray = new Array<number>();\n\tprivate isConcaveArray = new Array<boolean>();\n\tprivate triangles = new Array<number>();\n\n\tprivate polygonPool = new Pool<Array<number>>(() => {\n\t\treturn new Array<number>();\n\t});\n\n\tprivate polygonIndicesPool = new Pool<Array<number>>(() => {\n\t\treturn new Array<number>();\n\t});\n\n\tpublic triangulate (verticesArray: NumberArrayLike): Array<number> {\n\t\tlet vertices = verticesArray;\n\t\tlet vertexCount = verticesArray.length >> 1;\n\n\t\tlet indices = this.indicesArray;\n\t\tindices.length = 0;\n\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\tindices[i] = i;\n\n\t\tlet isConcave = this.isConcaveArray;\n\t\tisConcave.length = 0;\n\t\tfor (let i = 0, n = vertexCount; i < n; ++i)\n\t\t\tisConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices);\n\n\t\tlet triangles = this.triangles;\n\t\ttriangles.length = 0;\n\n\t\twhile (vertexCount > 3) {\n\t\t\t// Find ear tip.\n\t\t\tlet previous = vertexCount - 1, i = 0, next = 1;\n\t\t\twhile (true) {\n\t\t\t\touter:\n\t\t\t\tif (!isConcave[i]) {\n\t\t\t\t\tlet p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1;\n\t\t\t\t\tlet p1x = vertices[p1], p1y = vertices[p1 + 1];\n\t\t\t\t\tlet p2x = vertices[p2], p2y = vertices[p2 + 1];\n\t\t\t\t\tlet p3x = vertices[p3], p3y = vertices[p3 + 1];\n\t\t\t\t\tfor (let ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) {\n\t\t\t\t\t\tif (!isConcave[ii]) continue;\n\t\t\t\t\t\tlet v = indices[ii] << 1;\n\t\t\t\t\t\tlet vx = vertices[v], vy = vertices[v + 1];\n\t\t\t\t\t\tif (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) {\n\t\t\t\t\t\t\tif (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) {\n\t\t\t\t\t\t\t\tif (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) break outer;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (next == 0) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (!isConcave[i]) break;\n\t\t\t\t\t\ti--;\n\t\t\t\t\t} while (i > 0);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tprevious = i;\n\t\t\t\ti = next;\n\t\t\t\tnext = (next + 1) % vertexCount;\n\t\t\t}\n\n\t\t\t// Cut ear tip.\n\t\t\ttriangles.push(indices[(vertexCount + i - 1) % vertexCount]);\n\t\t\ttriangles.push(indices[i]);\n\t\t\ttriangles.push(indices[(i + 1) % vertexCount]);\n\t\t\tindices.splice(i, 1);\n\t\t\tisConcave.splice(i, 1);\n\t\t\tvertexCount--;\n\n\t\t\tlet previousIndex = (vertexCount + i - 1) % vertexCount;\n\t\t\tlet nextIndex = i == vertexCount ? 0 : i;\n\t\t\tisConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices);\n\t\t\tisConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices);\n\t\t}\n\n\t\tif (vertexCount == 3) {\n\t\t\ttriangles.push(indices[2]);\n\t\t\ttriangles.push(indices[0]);\n\t\t\ttriangles.push(indices[1]);\n\t\t}\n\n\t\treturn triangles;\n\t}\n\n\tdecompose (verticesArray: Array<number>, triangles: Array<number>): Array<Array<number>> {\n\t\tlet vertices = verticesArray;\n\t\tlet convexPolygons = this.convexPolygons;\n\t\tthis.polygonPool.freeAll(convexPolygons);\n\t\tconvexPolygons.length = 0;\n\n\t\tlet convexPolygonsIndices = this.convexPolygonsIndices;\n\t\tthis.polygonIndicesPool.freeAll(convexPolygonsIndices);\n\t\tconvexPolygonsIndices.length = 0;\n\n\t\tlet polygonIndices = this.polygonIndicesPool.obtain();\n\t\tpolygonIndices.length = 0;\n\n\t\tlet polygon = this.polygonPool.obtain();\n\t\tpolygon.length = 0;\n\n\t\t// Merge subsequent triangles if they form a triangle fan.\n\t\tlet fanBaseIndex = -1, lastWinding = 0;\n\t\tfor (let i = 0, n = triangles.length; i < n; i += 3) {\n\t\t\tlet t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1;\n\t\t\tlet x1 = vertices[t1], y1 = vertices[t1 + 1];\n\t\t\tlet x2 = vertices[t2], y2 = vertices[t2 + 1];\n\t\t\tlet x3 = vertices[t3], y3 = vertices[t3 + 1];\n\n\t\t\t// If the base of the last triangle is the same as this triangle, check if they form a convex polygon (triangle fan).\n\t\t\tlet merged = false;\n\t\t\tif (fanBaseIndex == t1) {\n\t\t\t\tlet o = polygon.length - 4;\n\t\t\t\tlet winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3);\n\t\t\t\tlet winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]);\n\t\t\t\tif (winding1 == lastWinding && winding2 == lastWinding) {\n\t\t\t\t\tpolygon.push(x3);\n\t\t\t\t\tpolygon.push(y3);\n\t\t\t\t\tpolygonIndices.push(t3);\n\t\t\t\t\tmerged = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Otherwise make this triangle the new base.\n\t\t\tif (!merged) {\n\t\t\t\tif (polygon.length > 0) {\n\t\t\t\t\tconvexPolygons.push(polygon);\n\t\t\t\t\tconvexPolygonsIndices.push(polygonIndices);\n\t\t\t\t} else {\n\t\t\t\t\tthis.polygonPool.free(polygon)\n\t\t\t\t\tthis.polygonIndicesPool.free(polygonIndices);\n\t\t\t\t}\n\t\t\t\tpolygon = this.polygonPool.obtain();\n\t\t\t\tpolygon.length = 0;\n\t\t\t\tpolygon.push(x1);\n\t\t\t\tpolygon.push(y1);\n\t\t\t\tpolygon.push(x2);\n\t\t\t\tpolygon.push(y2);\n\t\t\t\tpolygon.push(x3);\n\t\t\t\tpolygon.push(y3);\n\t\t\t\tpolygonIndices = this.polygonIndicesPool.obtain();\n\t\t\t\tpolygonIndices.length = 0;\n\t\t\t\tpolygonIndices.push(t1);\n\t\t\t\tpolygonIndices.push(t2);\n\t\t\t\tpolygonIndices.push(t3);\n\t\t\t\tlastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3);\n\t\t\t\tfanBaseIndex = t1;\n\t\t\t}\n\t\t}\n\n\t\tif (polygon.length > 0) {\n\t\t\tconvexPolygons.push(polygon);\n\t\t\tconvexPolygonsIndices.push(polygonIndices);\n\t\t}\n\n\t\t// Go through the list of polygons and try to merge the remaining triangles with the found triangle fans.\n\t\tfor (let i = 0, n = convexPolygons.length; i < n; i++) {\n\t\t\tpolygonIndices = convexPolygonsIndices[i];\n\t\t\tif (polygonIndices.length == 0) continue;\n\t\t\tlet firstIndex = polygonIndices[0];\n\t\t\tlet lastIndex = polygonIndices[polygonIndices.length - 1];\n\n\t\t\tpolygon = convexPolygons[i];\n\t\t\tlet o = polygon.length - 4;\n\t\t\tlet prevPrevX = polygon[o], prevPrevY = polygon[o + 1];\n\t\t\tlet prevX = polygon[o + 2], prevY = polygon[o + 3];\n\t\t\tlet firstX = polygon[0], firstY = polygon[1];\n\t\t\tlet secondX = polygon[2], secondY = polygon[3];\n\t\t\tlet winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY);\n\n\t\t\tfor (let ii = 0; ii < n; ii++) {\n\t\t\t\tif (ii == i) continue;\n\t\t\t\tlet otherIndices = convexPolygonsIndices[ii];\n\t\t\t\tif (otherIndices.length != 3) continue;\n\t\t\t\tlet otherFirstIndex = otherIndices[0];\n\t\t\t\tlet otherSecondIndex = otherIndices[1];\n\t\t\t\tlet otherLastIndex = otherIndices[2];\n\n\t\t\t\tlet otherPoly = convexPolygons[ii];\n\t\t\t\tlet x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1];\n\n\t\t\t\tif (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) continue;\n\t\t\t\tlet winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3);\n\t\t\t\tlet winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY);\n\t\t\t\tif (winding1 == winding && winding2 == winding) {\n\t\t\t\t\totherPoly.length = 0;\n\t\t\t\t\totherIndices.length = 0;\n\t\t\t\t\tpolygon.push(x3);\n\t\t\t\t\tpolygon.push(y3);\n\t\t\t\t\tpolygonIndices.push(otherLastIndex);\n\t\t\t\t\tprevPrevX = prevX;\n\t\t\t\t\tprevPrevY = prevY;\n\t\t\t\t\tprevX = x3;\n\t\t\t\t\tprevY = y3;\n\t\t\t\t\tii = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove empty polygons that resulted from the merge step above.\n\t\tfor (let i = convexPolygons.length - 1; i >= 0; i--) {\n\t\t\tpolygon = convexPolygons[i];\n\t\t\tif (polygon.length == 0) {\n\t\t\t\tconvexPolygons.splice(i, 1);\n\t\t\t\tthis.polygonPool.free(polygon);\n\t\t\t\tpolygonIndices = convexPolygonsIndices[i]\n\t\t\t\tconvexPolygonsIndices.splice(i, 1)\n\t\t\t\tthis.polygonIndicesPool.free(polygonIndices);\n\t\t\t}\n\t\t}\n\n\t\treturn convexPolygons;\n\t}\n\n\tprivate static isConcave (index: number, vertexCount: number, vertices: NumberArrayLike, indices: NumberArrayLike): boolean {\n\t\tlet previous = indices[(vertexCount + index - 1) % vertexCount] << 1;\n\t\tlet current = indices[index] << 1;\n\t\tlet next = indices[(index + 1) % vertexCount] << 1;\n\t\treturn !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next],\n\t\t\tvertices[next + 1]);\n\t}\n\n\tprivate static positiveArea (p1x: number, p1y: number, p2x: number, p2y: number, p3x: number, p3y: number): boolean {\n\t\treturn p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0;\n\t}\n\n\tprivate static winding (p1x: number, p1y: number, p2x: number, p2y: number, p3x: number, p3y: number): number {\n\t\tlet px = p2x - p1x, py = p2y - p1y;\n\t\treturn p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { ClippingAttachment } from \"./attachments/ClippingAttachment\";\nimport { Slot } from \"./Slot\";\nimport { Triangulator } from \"./Triangulator\";\nimport { Utils, Color, NumberArrayLike } from \"./Utils\";\n\nexport class SkeletonClipping {\n\tprivate triangulator = new Triangulator();\n\tprivate clippingPolygon = new Array<number>();\n\tprivate clipOutput = new Array<number>();\n\tclippedVertices = new Array<number>();\n\tclippedTriangles = new Array<number>();\n\tprivate scratch = new Array<number>();\n\n\tprivate clipAttachment: ClippingAttachment | null = null;\n\tprivate clippingPolygons: Array<Array<number>> | null = null;\n\n\tclipStart (slot: Slot, clip: ClippingAttachment): number {\n\t\tif (this.clipAttachment) return 0;\n\t\tthis.clipAttachment = clip;\n\n\t\tlet n = clip.worldVerticesLength;\n\t\tlet vertices = Utils.setArraySize(this.clippingPolygon, n);\n\t\tclip.computeWorldVertices(slot, 0, n, vertices, 0, 2);\n\t\tlet clippingPolygon = this.clippingPolygon;\n\t\tSkeletonClipping.makeClockwise(clippingPolygon);\n\t\tlet clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon));\n\t\tfor (let i = 0, n = clippingPolygons.length; i < n; i++) {\n\t\t\tlet polygon = clippingPolygons[i];\n\t\t\tSkeletonClipping.makeClockwise(polygon);\n\t\t\tpolygon.push(polygon[0]);\n\t\t\tpolygon.push(polygon[1]);\n\t\t}\n\n\t\treturn clippingPolygons.length;\n\t}\n\n\tclipEndWithSlot (slot: Slot) {\n\t\tif (this.clipAttachment && this.clipAttachment.endSlot == slot.data) this.clipEnd();\n\t}\n\n\tclipEnd () {\n\t\tif (!this.clipAttachment) return;\n\t\tthis.clipAttachment = null;\n\t\tthis.clippingPolygons = null;\n\t\tthis.clippedVertices.length = 0;\n\t\tthis.clippedTriangles.length = 0;\n\t\tthis.clippingPolygon.length = 0;\n\t}\n\n\tisClipping (): boolean {\n\t\treturn this.clipAttachment != null;\n\t}\n\n\tclipTriangles (vertices: NumberArrayLike, verticesLength: number, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike,\n\t\tlight: Color, dark: Color, twoColor: boolean) {\n\n\t\tlet clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;\n\t\tlet clippedTriangles = this.clippedTriangles;\n\t\tlet polygons = this.clippingPolygons!;\n\t\tlet polygonsCount = polygons.length;\n\t\tlet vertexSize = twoColor ? 12 : 8;\n\n\t\tlet index = 0;\n\t\tclippedVertices.length = 0;\n\t\tclippedTriangles.length = 0;\n\t\touter:\n\t\tfor (let i = 0; i < trianglesLength; i += 3) {\n\t\t\tlet vertexOffset = triangles[i] << 1;\n\t\t\tlet x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];\n\t\t\tlet u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1];\n\n\t\t\tvertexOffset = triangles[i + 1] << 1;\n\t\t\tlet x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];\n\t\t\tlet u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1];\n\n\t\t\tvertexOffset = triangles[i + 2] << 1;\n\t\t\tlet x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];\n\t\t\tlet u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1];\n\n\t\t\tfor (let p = 0; p < polygonsCount; p++) {\n\t\t\t\tlet s = clippedVertices.length;\n\t\t\t\tif (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {\n\t\t\t\t\tlet clipOutputLength = clipOutput.length;\n\t\t\t\t\tif (clipOutputLength == 0) continue;\n\t\t\t\t\tlet d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;\n\t\t\t\t\tlet d = 1 / (d0 * d2 + d1 * (y1 - y3));\n\n\t\t\t\t\tlet clipOutputCount = clipOutputLength >> 1;\n\t\t\t\t\tlet clipOutputItems = this.clipOutput;\n\t\t\t\t\tlet clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);\n\t\t\t\t\tfor (let ii = 0; ii < clipOutputLength; ii += 2) {\n\t\t\t\t\t\tlet x = clipOutputItems[ii], y = clipOutputItems[ii + 1];\n\t\t\t\t\t\tclippedVerticesItems[s] = x;\n\t\t\t\t\t\tclippedVerticesItems[s + 1] = y;\n\t\t\t\t\t\tclippedVerticesItems[s + 2] = light.r;\n\t\t\t\t\t\tclippedVerticesItems[s + 3] = light.g;\n\t\t\t\t\t\tclippedVerticesItems[s + 4] = light.b;\n\t\t\t\t\t\tclippedVerticesItems[s + 5] = light.a;\n\t\t\t\t\t\tlet c0 = x - x3, c1 = y - y3;\n\t\t\t\t\t\tlet a = (d0 * c0 + d1 * c1) * d;\n\t\t\t\t\t\tlet b = (d4 * c0 + d2 * c1) * d;\n\t\t\t\t\t\tlet c = 1 - a - b;\n\t\t\t\t\t\tclippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c;\n\t\t\t\t\t\tclippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c;\n\t\t\t\t\t\tif (twoColor) {\n\t\t\t\t\t\t\tclippedVerticesItems[s + 8] = dark.r;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 9] = dark.g;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 10] = dark.b;\n\t\t\t\t\t\t\tclippedVerticesItems[s + 11] = dark.a;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts += vertexSize;\n\t\t\t\t\t}\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tlet clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));\n\t\t\t\t\tclipOutputCount--;\n\t\t\t\t\tfor (let ii = 1; ii < clipOutputCount; ii++) {\n\t\t\t\t\t\tclippedTrianglesItems[s] = index;\n\t\t\t\t\t\tclippedTrianglesItems[s + 1] = (index + ii);\n\t\t\t\t\t\tclippedTrianglesItems[s + 2] = (index + ii + 1);\n\t\t\t\t\t\ts += 3;\n\t\t\t\t\t}\n\t\t\t\t\tindex += clipOutputCount + 1;\n\n\t\t\t\t} else {\n\t\t\t\t\tlet clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize);\n\t\t\t\t\tclippedVerticesItems[s] = x1;\n\t\t\t\t\tclippedVerticesItems[s + 1] = y1;\n\t\t\t\t\tclippedVerticesItems[s + 2] = light.r;\n\t\t\t\t\tclippedVerticesItems[s + 3] = light.g;\n\t\t\t\t\tclippedVerticesItems[s + 4] = light.b;\n\t\t\t\t\tclippedVerticesItems[s + 5] = light.a;\n\t\t\t\t\tif (!twoColor) {\n\t\t\t\t\t\tclippedVerticesItems[s + 6] = u1;\n\t\t\t\t\t\tclippedVerticesItems[s + 7] = v1;\n\n\t\t\t\t\t\tclippedVerticesItems[s + 8] = x2;\n\t\t\t\t\t\tclippedVerticesItems[s + 9] = y2;\n\t\t\t\t\t\tclippedVerticesItems[s + 10] = light.r;\n\t\t\t\t\t\tclippedVerticesItems[s + 11] = light.g;\n\t\t\t\t\t\tclippedVerticesItems[s + 12] = light.b;\n\t\t\t\t\t\tclippedVerticesItems[s + 13] = light.a;\n\t\t\t\t\t\tclippedVerticesItems[s + 14] = u2;\n\t\t\t\t\t\tclippedVerticesItems[s + 15] = v2;\n\n\t\t\t\t\t\tclippedVerticesItems[s + 16] = x3;\n\t\t\t\t\t\tclippedVerticesItems[s + 17] = y3;\n\t\t\t\t\t\tclippedVerticesItems[s + 18] = light.r;\n\t\t\t\t\t\tclippedVerticesItems[s + 19] = light.g;\n\t\t\t\t\t\tclippedVerticesItems[s + 20] = light.b;\n\t\t\t\t\t\tclippedVerticesItems[s + 21] = light.a;\n\t\t\t\t\t\tclippedVerticesItems[s + 22] = u3;\n\t\t\t\t\t\tclippedVerticesItems[s + 23] = v3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclippedVerticesItems[s + 6] = u1;\n\t\t\t\t\t\tclippedVerticesItems[s + 7] = v1;\n\t\t\t\t\t\tclippedVerticesItems[s + 8] = dark.r;\n\t\t\t\t\t\tclippedVerticesItems[s + 9] = dark.g;\n\t\t\t\t\t\tclippedVerticesItems[s + 10] = dark.b;\n\t\t\t\t\t\tclippedVerticesItems[s + 11] = dark.a;\n\n\t\t\t\t\t\tclippedVerticesItems[s + 12] = x2;\n\t\t\t\t\t\tclippedVerticesItems[s + 13] = y2;\n\t\t\t\t\t\tclippedVerticesItems[s + 14] = light.r;\n\t\t\t\t\t\tclippedVerticesItems[s + 15] = light.g;\n\t\t\t\t\t\tclippedVerticesItems[s + 16] = light.b;\n\t\t\t\t\t\tclippedVerticesItems[s + 17] = light.a;\n\t\t\t\t\t\tclippedVerticesItems[s + 18] = u2;\n\t\t\t\t\t\tclippedVerticesItems[s + 19] = v2;\n\t\t\t\t\t\tclippedVerticesItems[s + 20] = dark.r;\n\t\t\t\t\t\tclippedVerticesItems[s + 21] = dark.g;\n\t\t\t\t\t\tclippedVerticesItems[s + 22] = dark.b;\n\t\t\t\t\t\tclippedVerticesItems[s + 23] = dark.a;\n\n\t\t\t\t\t\tclippedVerticesItems[s + 24] = x3;\n\t\t\t\t\t\tclippedVerticesItems[s + 25] = y3;\n\t\t\t\t\t\tclippedVerticesItems[s + 26] = light.r;\n\t\t\t\t\t\tclippedVerticesItems[s + 27] = light.g;\n\t\t\t\t\t\tclippedVerticesItems[s + 28] = light.b;\n\t\t\t\t\t\tclippedVerticesItems[s + 29] = light.a;\n\t\t\t\t\t\tclippedVerticesItems[s + 30] = u3;\n\t\t\t\t\t\tclippedVerticesItems[s + 31] = v3;\n\t\t\t\t\t\tclippedVerticesItems[s + 32] = dark.r;\n\t\t\t\t\t\tclippedVerticesItems[s + 33] = dark.g;\n\t\t\t\t\t\tclippedVerticesItems[s + 34] = dark.b;\n\t\t\t\t\t\tclippedVerticesItems[s + 35] = dark.a;\n\t\t\t\t\t}\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tlet clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3);\n\t\t\t\t\tclippedTrianglesItems[s] = index;\n\t\t\t\t\tclippedTrianglesItems[s + 1] = (index + 1);\n\t\t\t\t\tclippedTrianglesItems[s + 2] = (index + 2);\n\t\t\t\t\tindex += 3;\n\t\t\t\t\tcontinue outer;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Clips the input triangle against the convex, clockwise clipping area. If the triangle lies entirely within the clipping\n\t * area, false is returned. The clipping area must duplicate the first vertex at the end of the vertices list. */\n\tclip (x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, clippingArea: Array<number>, output: Array<number>) {\n\t\tlet originalOutput = output;\n\t\tlet clipped = false;\n\n\t\t// Avoid copy at the end.\n\t\tlet input: Array<number>;\n\t\tif (clippingArea.length % 4 >= 2) {\n\t\t\tinput = output;\n\t\t\toutput = this.scratch;\n\t\t} else\n\t\t\tinput = this.scratch;\n\n\t\tinput.length = 0;\n\t\tinput.push(x1);\n\t\tinput.push(y1);\n\t\tinput.push(x2);\n\t\tinput.push(y2);\n\t\tinput.push(x3);\n\t\tinput.push(y3);\n\t\tinput.push(x1);\n\t\tinput.push(y1);\n\t\toutput.length = 0;\n\n\t\tlet clippingVertices = clippingArea;\n\t\tlet clippingVerticesLast = clippingArea.length - 4;\n\t\tfor (let i = 0; ; i += 2) {\n\t\t\tlet edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];\n\t\t\tlet edgeX2 = clippingVertices[i + 2], edgeY2 = clippingVertices[i + 3];\n\t\t\tlet deltaX = edgeX - edgeX2, deltaY = edgeY - edgeY2;\n\n\t\t\tlet inputVertices = input;\n\t\t\tlet inputVerticesLength = input.length - 2, outputStart = output.length;\n\t\t\tfor (let ii = 0; ii < inputVerticesLength; ii += 2) {\n\t\t\t\tlet inputX = inputVertices[ii], inputY = inputVertices[ii + 1];\n\t\t\t\tlet inputX2 = inputVertices[ii + 2], inputY2 = inputVertices[ii + 3];\n\t\t\t\tlet side2 = deltaX * (inputY2 - edgeY2) - deltaY * (inputX2 - edgeX2) > 0;\n\t\t\t\tif (deltaX * (inputY - edgeY2) - deltaY * (inputX - edgeX2) > 0) {\n\t\t\t\t\tif (side2) { // v1 inside, v2 inside\n\t\t\t\t\t\toutput.push(inputX2);\n\t\t\t\t\t\toutput.push(inputY2);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\t// v1 inside, v2 outside\n\t\t\t\t\tlet c0 = inputY2 - inputY, c2 = inputX2 - inputX;\n\t\t\t\t\tlet s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);\n\t\t\t\t\tif (Math.abs(s) > 0.000001) {\n\t\t\t\t\t\tlet ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;\n\t\t\t\t\t\toutput.push(edgeX + (edgeX2 - edgeX) * ua);\n\t\t\t\t\t\toutput.push(edgeY + (edgeY2 - edgeY) * ua);\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput.push(edgeX);\n\t\t\t\t\t\toutput.push(edgeY);\n\t\t\t\t\t}\n\t\t\t\t} else if (side2) { // v1 outside, v2 inside\n\t\t\t\t\tlet c0 = inputY2 - inputY, c2 = inputX2 - inputX;\n\t\t\t\t\tlet s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);\n\t\t\t\t\tif (Math.abs(s) > 0.000001) {\n\t\t\t\t\t\tlet ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;\n\t\t\t\t\t\toutput.push(edgeX + (edgeX2 - edgeX) * ua);\n\t\t\t\t\t\toutput.push(edgeY + (edgeY2 - edgeY) * ua);\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput.push(edgeX);\n\t\t\t\t\t\toutput.push(edgeY);\n\t\t\t\t\t}\n\t\t\t\t\toutput.push(inputX2);\n\t\t\t\t\toutput.push(inputY2);\n\t\t\t\t}\n\t\t\t\tclipped = true;\n\t\t\t}\n\n\t\t\tif (outputStart == output.length) { // All edges outside.\n\t\t\t\toriginalOutput.length = 0;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\toutput.push(output[0]);\n\t\t\toutput.push(output[1]);\n\n\t\t\tif (i == clippingVerticesLast) break;\n\t\t\tlet temp = output;\n\t\t\toutput = input;\n\t\t\toutput.length = 0;\n\t\t\tinput = temp;\n\t\t}\n\n\t\tif (originalOutput != output) {\n\t\t\toriginalOutput.length = 0;\n\t\t\tfor (let i = 0, n = output.length - 2; i < n; i++)\n\t\t\t\toriginalOutput[i] = output[i];\n\t\t} else\n\t\t\toriginalOutput.length = originalOutput.length - 2;\n\n\t\treturn clipped;\n\t}\n\n\tpublic static makeClockwise (polygon: NumberArrayLike) {\n\t\tlet vertices = polygon;\n\t\tlet verticeslength = polygon.length;\n\n\t\tlet area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0;\n\t\tfor (let i = 0, n = verticeslength - 3; i < n; i += 2) {\n\t\t\tp1x = vertices[i];\n\t\t\tp1y = vertices[i + 1];\n\t\t\tp2x = vertices[i + 2];\n\t\t\tp2y = vertices[i + 3];\n\t\t\tarea += p1x * p2y - p2x * p1y;\n\t\t}\n\t\tif (area < 0) return;\n\n\t\tfor (let i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) {\n\t\t\tlet x = vertices[i], y = vertices[i + 1];\n\t\t\tlet other = lastX - i;\n\t\t\tvertices[i] = vertices[other];\n\t\t\tvertices[i + 1] = vertices[other + 1];\n\t\t\tvertices[other] = x;\n\t\t\tvertices[other + 1] = y;\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Animation, Timeline, AttachmentTimeline, RGBATimeline, RGBTimeline, AlphaTimeline, RGBA2Timeline, RGB2Timeline, RotateTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, IkConstraintTimeline, TransformConstraintTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PathConstraintMixTimeline, DeformTimeline, DrawOrderTimeline, EventTimeline, CurveTimeline1, CurveTimeline2, CurveTimeline } from \"./Animation\";\nimport { VertexAttachment, Attachment } from \"./attachments/Attachment\";\nimport { AttachmentLoader } from \"./attachments/AttachmentLoader\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment\";\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, NumberArrayLike } from \"./Utils\";\nimport { Sequence, SequenceMode } from \"./attachments/Sequence\";\nimport { SequenceTimeline } from \"./Animation\";\nimport { HasTextureRegion } from \"./attachments/HasTextureRegion\";\n\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. */\nexport class SkeletonJson {\n\tattachmentLoader: AttachmentLoader;\n\n\t/** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at\n\t * runtime than were used in Spine.\n\t *\n\t * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */\n\tscale = 1;\n\tprivate linkedMeshes = new Array<LinkedMesh>();\n\n\tconstructor (attachmentLoader: AttachmentLoader) {\n\t\tthis.attachmentLoader = attachmentLoader;\n\t}\n\n\treadSkeletonData (json: string | any): SkeletonData {\n\t\tlet scale = this.scale;\n\t\tlet skeletonData = new SkeletonData();\n\t\tlet root = typeof (json) === \"string\" ? JSON.parse(json) : json;\n\n\t\t// Skeleton\n\t\tlet skeletonMap = root.skeleton;\n\t\tif (skeletonMap) {\n\t\t\tskeletonData.hash = skeletonMap.hash;\n\t\t\tskeletonData.version = skeletonMap.spine;\n\t\t\tskeletonData.x = skeletonMap.x;\n\t\t\tskeletonData.y = skeletonMap.y;\n\t\t\tskeletonData.width = skeletonMap.width;\n\t\t\tskeletonData.height = skeletonMap.height;\n\t\t\tskeletonData.fps = skeletonMap.fps;\n\t\t\tskeletonData.imagesPath = skeletonMap.images;\n\t\t}\n\n\t\t// Bones\n\t\tif (root.bones) {\n\t\t\tfor (let i = 0; i < root.bones.length; i++) {\n\t\t\t\tlet boneMap = root.bones[i];\n\n\t\t\t\tlet parent: BoneData | null = null;\n\t\t\t\tlet parentName: string = getValue(boneMap, \"parent\", null);\n\t\t\t\tif (parentName) parent = skeletonData.findBone(parentName);\n\t\t\t\tlet data = new BoneData(skeletonData.bones.length, boneMap.name, parent);\n\t\t\t\tdata.length = getValue(boneMap, \"length\", 0) * scale;\n\t\t\t\tdata.x = getValue(boneMap, \"x\", 0) * scale;\n\t\t\t\tdata.y = getValue(boneMap, \"y\", 0) * scale;\n\t\t\t\tdata.rotation = getValue(boneMap, \"rotation\", 0);\n\t\t\t\tdata.scaleX = getValue(boneMap, \"scaleX\", 1);\n\t\t\t\tdata.scaleY = getValue(boneMap, \"scaleY\", 1);\n\t\t\t\tdata.shearX = getValue(boneMap, \"shearX\", 0);\n\t\t\t\tdata.shearY = getValue(boneMap, \"shearY\", 0);\n\t\t\t\tdata.transformMode = Utils.enumValue(TransformMode, getValue(boneMap, \"transform\", \"Normal\"));\n\t\t\t\tdata.skinRequired = getValue(boneMap, \"skin\", false);\n\n\t\t\t\tlet color = getValue(boneMap, \"color\", null);\n\t\t\t\tif (color) data.color.setFromString(color);\n\n\t\t\t\tskeletonData.bones.push(data);\n\t\t\t}\n\t\t}\n\n\t\t// Slots.\n\t\tif (root.slots) {\n\t\t\tfor (let i = 0; i < root.slots.length; i++) {\n\t\t\t\tlet slotMap = root.slots[i];\n\t\t\t\tlet boneData = skeletonData.findBone(slotMap.bone);\n\t\t\t\tif (!boneData) throw new Error(`Couldn't find bone ${slotMap.bone} for slot ${slotMap.name}`);\n\t\t\t\tlet data = new SlotData(skeletonData.slots.length, slotMap.name, boneData);\n\n\t\t\t\tlet color: string = getValue(slotMap, \"color\", null);\n\t\t\t\tif (color) data.color.setFromString(color);\n\n\t\t\t\tlet dark: string = getValue(slotMap, \"dark\", null);\n\t\t\t\tif (dark) data.darkColor = Color.fromString(dark);\n\n\t\t\t\tdata.attachmentName = getValue(slotMap, \"attachment\", null);\n\t\t\t\tdata.blendMode = Utils.enumValue(BlendMode, getValue(slotMap, \"blend\", \"normal\"));\n\t\t\t\tskeletonData.slots.push(data);\n\t\t\t}\n\t\t}\n\n\t\t// IK constraints\n\t\tif (root.ik) {\n\t\t\tfor (let i = 0; i < root.ik.length; i++) {\n\t\t\t\tlet constraintMap = root.ik[i];\n\t\t\t\tlet data = new IkConstraintData(constraintMap.name);\n\t\t\t\tdata.order = getValue(constraintMap, \"order\", 0);\n\t\t\t\tdata.skinRequired = getValue(constraintMap, \"skin\", false);\n\n\t\t\t\tfor (let ii = 0; ii < constraintMap.bones.length; ii++) {\n\t\t\t\t\tlet bone = skeletonData.findBone(constraintMap.bones[ii]);\n\t\t\t\t\tif (!bone) throw new Error(`Couldn't find bone ${constraintMap.bones[ii]} for IK constraint ${constraintMap.name}.`);\n\t\t\t\t\tdata.bones.push(bone);\n\t\t\t\t}\n\n\t\t\t\tlet target = skeletonData.findBone(constraintMap.target);;\n\t\t\t\tif (!target) throw new Error(`Couldn't find target bone ${constraintMap.target} for IK constraint ${constraintMap.name}.`);\n\t\t\t\tdata.target = target;\n\n\t\t\t\tdata.mix = getValue(constraintMap, \"mix\", 1);\n\t\t\t\tdata.softness = getValue(constraintMap, \"softness\", 0) * scale;\n\t\t\t\tdata.bendDirection = getValue(constraintMap, \"bendPositive\", true) ? 1 : -1;\n\t\t\t\tdata.compress = getValue(constraintMap, \"compress\", false);\n\t\t\t\tdata.stretch = getValue(constraintMap, \"stretch\", false);\n\t\t\t\tdata.uniform = getValue(constraintMap, \"uniform\", false);\n\n\t\t\t\tskeletonData.ikConstraints.push(data);\n\t\t\t}\n\t\t}\n\n\t\t// Transform constraints.\n\t\tif (root.transform) {\n\t\t\tfor (let i = 0; i < root.transform.length; i++) {\n\t\t\t\tlet constraintMap = root.transform[i];\n\t\t\t\tlet data = new TransformConstraintData(constraintMap.name);\n\t\t\t\tdata.order = getValue(constraintMap, \"order\", 0);\n\t\t\t\tdata.skinRequired = getValue(constraintMap, \"skin\", false);\n\n\t\t\t\tfor (let ii = 0; ii < constraintMap.bones.length; ii++) {\n\t\t\t\t\tlet boneName = constraintMap.bones[ii];\n\t\t\t\t\tlet bone = skeletonData.findBone(boneName);\n\t\t\t\t\tif (!bone) throw new Error(`Couldn't find bone ${boneName} for transform constraint ${constraintMap.name}.`);\n\t\t\t\t\tdata.bones.push(bone);\n\t\t\t\t}\n\n\t\t\t\tlet targetName: string = constraintMap.target;\n\t\t\t\tlet target = skeletonData.findBone(targetName);\n\t\t\t\tif (!target) throw new Error(`Couldn't find target bone ${targetName} for transform constraint ${constraintMap.name}.`);\n\t\t\t\tdata.target = target;\n\n\t\t\t\tdata.local = getValue(constraintMap, \"local\", false);\n\t\t\t\tdata.relative = getValue(constraintMap, \"relative\", false);\n\t\t\t\tdata.offsetRotation = getValue(constraintMap, \"rotation\", 0);\n\t\t\t\tdata.offsetX = getValue(constraintMap, \"x\", 0) * scale;\n\t\t\t\tdata.offsetY = getValue(constraintMap, \"y\", 0) * scale;\n\t\t\t\tdata.offsetScaleX = getValue(constraintMap, \"scaleX\", 0);\n\t\t\t\tdata.offsetScaleY = getValue(constraintMap, \"scaleY\", 0);\n\t\t\t\tdata.offsetShearY = getValue(constraintMap, \"shearY\", 0);\n\n\t\t\t\tdata.mixRotate = getValue(constraintMap, \"mixRotate\", 1);\n\t\t\t\tdata.mixX = getValue(constraintMap, \"mixX\", 1);\n\t\t\t\tdata.mixY = getValue(constraintMap, \"mixY\", data.mixX);\n\t\t\t\tdata.mixScaleX = getValue(constraintMap, \"mixScaleX\", 1);\n\t\t\t\tdata.mixScaleY = getValue(constraintMap, \"mixScaleY\", data.mixScaleX);\n\t\t\t\tdata.mixShearY = getValue(constraintMap, \"mixShearY\", 1);\n\n\t\t\t\tskeletonData.transformConstraints.push(data);\n\t\t\t}\n\t\t}\n\n\t\t// Path constraints.\n\t\tif (root.path) {\n\t\t\tfor (let i = 0; i < root.path.length; i++) {\n\t\t\t\tlet constraintMap = root.path[i];\n\t\t\t\tlet data = new PathConstraintData(constraintMap.name);\n\t\t\t\tdata.order = getValue(constraintMap, \"order\", 0);\n\t\t\t\tdata.skinRequired = getValue(constraintMap, \"skin\", false);\n\n\t\t\t\tfor (let ii = 0; ii < constraintMap.bones.length; ii++) {\n\t\t\t\t\tlet boneName = constraintMap.bones[ii];\n\t\t\t\t\tlet bone = skeletonData.findBone(boneName);\n\t\t\t\t\tif (!bone) throw new Error(`Couldn't find bone ${boneName} for path constraint ${constraintMap.name}.`);\n\t\t\t\t\tdata.bones.push(bone);\n\t\t\t\t}\n\n\t\t\t\tlet targetName: string = constraintMap.target;\n\t\t\t\tlet target = skeletonData.findSlot(targetName);\n\t\t\t\tif (!target) throw new Error(`Couldn't find target slot ${targetName} for path constraint ${constraintMap.name}.`);\n\t\t\t\tdata.target = target;\n\n\t\t\t\tdata.positionMode = Utils.enumValue(PositionMode, getValue(constraintMap, \"positionMode\", \"Percent\"));\n\t\t\t\tdata.spacingMode = Utils.enumValue(SpacingMode, getValue(constraintMap, \"spacingMode\", \"Length\"));\n\t\t\t\tdata.rotateMode = Utils.enumValue(RotateMode, getValue(constraintMap, \"rotateMode\", \"Tangent\"));\n\t\t\t\tdata.offsetRotation = getValue(constraintMap, \"rotation\", 0);\n\t\t\t\tdata.position = getValue(constraintMap, \"position\", 0);\n\t\t\t\tif (data.positionMode == PositionMode.Fixed) data.position *= scale;\n\t\t\t\tdata.spacing = getValue(constraintMap, \"spacing\", 0);\n\t\t\t\tif (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed) data.spacing *= scale;\n\t\t\t\tdata.mixRotate = getValue(constraintMap, \"mixRotate\", 1);\n\t\t\t\tdata.mixX = getValue(constraintMap, \"mixX\", 1);\n\t\t\t\tdata.mixY = getValue(constraintMap, \"mixY\", data.mixX);\n\n\t\t\t\tskeletonData.pathConstraints.push(data);\n\t\t\t}\n\t\t}\n\n\t\t// Skins.\n\t\tif (root.skins) {\n\t\t\tfor (let i = 0; i < root.skins.length; i++) {\n\t\t\t\tlet skinMap = root.skins[i]\n\t\t\t\tlet skin = new Skin(skinMap.name);\n\n\t\t\t\tif (skinMap.bones) {\n\t\t\t\t\tfor (let ii = 0; ii < skinMap.bones.length; ii++) {\n\t\t\t\t\t\tlet boneName = skinMap.bones[ii];\n\t\t\t\t\t\tlet bone = skeletonData.findBone(boneName);\n\t\t\t\t\t\tif (!bone) throw new Error(`Couldn't find bone ${boneName} for skin ${skinMap.name}.`);\n\t\t\t\t\t\tskin.bones.push(bone);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (skinMap.ik) {\n\t\t\t\t\tfor (let ii = 0; ii < skinMap.ik.length; ii++) {\n\t\t\t\t\t\tlet constraintName = skinMap.ik[ii];\n\t\t\t\t\t\tlet constraint = skeletonData.findIkConstraint(constraintName);\n\t\t\t\t\t\tif (!constraint) throw new Error(`Couldn't find IK constraint ${constraintName} for skin ${skinMap.name}.`);\n\t\t\t\t\t\tskin.constraints.push(constraint);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (skinMap.transform) {\n\t\t\t\t\tfor (let ii = 0; ii < skinMap.transform.length; ii++) {\n\t\t\t\t\t\tlet constraintName = skinMap.transform[ii];\n\t\t\t\t\t\tlet constraint = skeletonData.findTransformConstraint(constraintName);\n\t\t\t\t\t\tif (!constraint) throw new Error(`Couldn't find transform constraint ${constraintName} for skin ${skinMap.name}.`);\n\t\t\t\t\t\tskin.constraints.push(constraint);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (skinMap.path) {\n\t\t\t\t\tfor (let ii = 0; ii < skinMap.path.length; ii++) {\n\t\t\t\t\t\tlet constraintName = skinMap.path[ii];\n\t\t\t\t\t\tlet constraint = skeletonData.findPathConstraint(constraintName);\n\t\t\t\t\t\tif (!constraint) throw new Error(`Couldn't find path constraint ${constraintName} for skin ${skinMap.name}.`);\n\t\t\t\t\t\tskin.constraints.push(constraint);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (let slotName in skinMap.attachments) {\n\t\t\t\t\tlet slot = skeletonData.findSlot(slotName);\n\t\t\t\t\tif (!slot) throw new Error(`Couldn't find slot ${slotName} for skin ${skinMap.name}.`);\n\t\t\t\t\tlet slotMap = skinMap.attachments[slotName];\n\t\t\t\t\tfor (let entryName in slotMap) {\n\t\t\t\t\t\tlet attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData);\n\t\t\t\t\t\tif (attachment) skin.setAttachment(slot.index, entryName, attachment);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tskeletonData.skins.push(skin);\n\t\t\t\tif (skin.name == \"default\") skeletonData.defaultSkin = skin;\n\t\t\t}\n\t\t}\n\n\t\t// Linked meshes.\n\t\tfor (let i = 0, n = this.linkedMeshes.length; i < n; i++) {\n\t\t\tlet linkedMesh = this.linkedMeshes[i];\n\t\t\tlet skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n\t\t\tif (!skin) throw new Error(`Skin not found: ${linkedMesh.skin}`);\n\t\t\tlet parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n\t\t\tif (!parent) throw new Error(`Parent mesh not found: ${linkedMesh.parent}`);\n\t\t\tlinkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimeline ? <VertexAttachment>parent : <VertexAttachment>linkedMesh.mesh;\n\t\t\tlinkedMesh.mesh.setParentMesh(<MeshAttachment>parent);\n\t\t\tif (linkedMesh.mesh.region != null) linkedMesh.mesh.updateRegion();\n\t\t}\n\t\tthis.linkedMeshes.length = 0;\n\n\t\t// Events.\n\t\tif (root.events) {\n\t\t\tfor (let eventName in root.events) {\n\t\t\t\tlet eventMap = root.events[eventName];\n\t\t\t\tlet data = new EventData(eventName);\n\t\t\t\tdata.intValue = getValue(eventMap, \"int\", 0);\n\t\t\t\tdata.floatValue = getValue(eventMap, \"float\", 0);\n\t\t\t\tdata.stringValue = getValue(eventMap, \"string\", \"\");\n\t\t\t\tdata.audioPath = getValue(eventMap, \"audio\", null);\n\t\t\t\tif (data.audioPath) {\n\t\t\t\t\tdata.volume = getValue(eventMap, \"volume\", 1);\n\t\t\t\t\tdata.balance = getValue(eventMap, \"balance\", 0);\n\t\t\t\t}\n\t\t\t\tskeletonData.events.push(data);\n\t\t\t}\n\t\t}\n\n\t\t// Animations.\n\t\tif (root.animations) {\n\t\t\tfor (let animationName in root.animations) {\n\t\t\t\tlet animationMap = root.animations[animationName];\n\t\t\t\tthis.readAnimation(animationMap, animationName, skeletonData);\n\t\t\t}\n\t\t}\n\n\t\treturn skeletonData;\n\t}\n\n\treadAttachment (map: any, skin: Skin, slotIndex: number, name: string, skeletonData: SkeletonData): Attachment | null {\n\t\tlet scale = this.scale;\n\t\tname = getValue(map, \"name\", name);\n\n\t\tswitch (getValue(map, \"type\", \"region\")) {\n\t\t\tcase \"region\": {\n\t\t\t\tlet path = getValue(map, \"path\", name);\n\t\t\t\tlet sequence = this.readSequence(getValue(map, \"sequence\", null));\n\t\t\t\tlet region = this.attachmentLoader.newRegionAttachment(skin, name, path, sequence);\n\t\t\t\tif (!region) return null;\n\t\t\t\tregion.path = path;\n\t\t\t\tregion.x = getValue(map, \"x\", 0) * scale;\n\t\t\t\tregion.y = getValue(map, \"y\", 0) * scale;\n\t\t\t\tregion.scaleX = getValue(map, \"scaleX\", 1);\n\t\t\t\tregion.scaleY = getValue(map, \"scaleY\", 1);\n\t\t\t\tregion.rotation = getValue(map, \"rotation\", 0);\n\t\t\t\tregion.width = map.width * scale;\n\t\t\t\tregion.height = map.height * scale;\n\t\t\t\tregion.sequence = sequence;\n\n\t\t\t\tlet color: string = getValue(map, \"color\", null);\n\t\t\t\tif (color) region.color.setFromString(color);\n\n\t\t\t\tif (region.region != null) region.updateRegion();\n\t\t\t\treturn region;\n\t\t\t}\n\t\t\tcase \"boundingbox\": {\n\t\t\t\tlet box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n\t\t\t\tif (!box) return null;\n\t\t\t\tthis.readVertices(map, box, map.vertexCount << 1);\n\t\t\t\tlet color: string = getValue(map, \"color\", null);\n\t\t\t\tif (color) box.color.setFromString(color);\n\t\t\t\treturn box;\n\t\t\t}\n\t\t\tcase \"mesh\":\n\t\t\tcase \"linkedmesh\": {\n\t\t\t\tlet path = getValue(map, \"path\", name);\n\t\t\t\tlet sequence = this.readSequence(getValue(map, \"sequence\", null));\n\t\t\t\tlet mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);\n\t\t\t\tif (!mesh) return null;\n\t\t\t\tmesh.path = path;\n\n\t\t\t\tlet color = getValue(map, \"color\", null);\n\t\t\t\tif (color) mesh.color.setFromString(color);\n\n\t\t\t\tmesh.width = getValue(map, \"width\", 0) * scale;\n\t\t\t\tmesh.height = getValue(map, \"height\", 0) * scale;\n\t\t\t\tmesh.sequence = sequence;\n\n\t\t\t\tlet parent: string = getValue(map, \"parent\", null);\n\t\t\t\tif (parent) {\n\t\t\t\t\tthis.linkedMeshes.push(new LinkedMesh(mesh, <string>getValue(map, \"skin\", null), slotIndex, parent, getValue(map, \"timelines\", true)));\n\t\t\t\t\treturn mesh;\n\t\t\t\t}\n\n\t\t\t\tlet uvs: Array<number> = map.uvs;\n\t\t\t\tthis.readVertices(map, mesh, uvs.length);\n\t\t\t\tmesh.triangles = map.triangles;\n\t\t\t\tmesh.regionUVs = uvs;\n\t\t\t\tif (mesh.region != null) mesh.updateRegion();\n\n\t\t\t\tmesh.edges = getValue(map, \"edges\", null);\n\t\t\t\tmesh.hullLength = getValue(map, \"hull\", 0) * 2;\n\t\t\t\treturn mesh;\n\t\t\t}\n\t\t\tcase \"path\": {\n\t\t\t\tlet path = this.attachmentLoader.newPathAttachment(skin, name);\n\t\t\t\tif (!path) return null;\n\t\t\t\tpath.closed = getValue(map, \"closed\", false);\n\t\t\t\tpath.constantSpeed = getValue(map, \"constantSpeed\", true);\n\n\t\t\t\tlet vertexCount = map.vertexCount;\n\t\t\t\tthis.readVertices(map, path, vertexCount << 1);\n\n\t\t\t\tlet lengths: Array<number> = Utils.newArray(vertexCount / 3, 0);\n\t\t\t\tfor (let i = 0; i < map.lengths.length; i++)\n\t\t\t\t\tlengths[i] = map.lengths[i] * scale;\n\t\t\t\tpath.lengths = lengths;\n\n\t\t\t\tlet color: string = getValue(map, \"color\", null);\n\t\t\t\tif (color) path.color.setFromString(color);\n\t\t\t\treturn path;\n\t\t\t}\n\t\t\tcase \"point\": {\n\t\t\t\tlet point = this.attachmentLoader.newPointAttachment(skin, name);\n\t\t\t\tif (!point) return null;\n\t\t\t\tpoint.x = getValue(map, \"x\", 0) * scale;\n\t\t\t\tpoint.y = getValue(map, \"y\", 0) * scale;\n\t\t\t\tpoint.rotation = getValue(map, \"rotation\", 0);\n\n\t\t\t\tlet color = getValue(map, \"color\", null);\n\t\t\t\tif (color) point.color.setFromString(color);\n\t\t\t\treturn point;\n\t\t\t}\n\t\t\tcase \"clipping\": {\n\t\t\t\tlet clip = this.attachmentLoader.newClippingAttachment(skin, name);\n\t\t\t\tif (!clip) return null;\n\n\t\t\t\tlet end = getValue(map, \"end\", null);\n\t\t\t\tif (end) clip.endSlot = skeletonData.findSlot(end);\n\n\t\t\t\tlet vertexCount = map.vertexCount;\n\t\t\t\tthis.readVertices(map, clip, vertexCount << 1);\n\n\t\t\t\tlet color: string = getValue(map, \"color\", null);\n\t\t\t\tif (color) clip.color.setFromString(color);\n\t\t\t\treturn clip;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\treadSequence (map: any) {\n\t\tif (map == null) return null;\n\t\tlet sequence = new Sequence(getValue(map, \"count\", 0));\n\t\tsequence.start = getValue(map, \"start\", 1);\n\t\tsequence.digits = getValue(map, \"digits\", 0);\n\t\tsequence.setupIndex = getValue(map, \"setup\", 0);\n\t\treturn sequence;\n\t}\n\n\treadVertices (map: any, attachment: VertexAttachment, verticesLength: number) {\n\t\tlet scale = this.scale;\n\t\tattachment.worldVerticesLength = verticesLength;\n\t\tlet vertices: Array<number> = map.vertices;\n\t\tif (verticesLength == vertices.length) {\n\t\t\tlet scaledVertices = Utils.toFloatArray(vertices);\n\t\t\tif (scale != 1) {\n\t\t\t\tfor (let i = 0, n = vertices.length; i < n; i++)\n\t\t\t\t\tscaledVertices[i] *= scale;\n\t\t\t}\n\t\t\tattachment.vertices = scaledVertices;\n\t\t\treturn;\n\t\t}\n\t\tlet weights = new Array<number>();\n\t\tlet bones = new Array<number>();\n\t\tfor (let i = 0, n = vertices.length; i < n;) {\n\t\t\tlet boneCount = vertices[i++];\n\t\t\tbones.push(boneCount);\n\t\t\tfor (let nn = i + boneCount * 4; i < nn; i += 4) {\n\t\t\t\tbones.push(vertices[i]);\n\t\t\t\tweights.push(vertices[i + 1] * scale);\n\t\t\t\tweights.push(vertices[i + 2] * scale);\n\t\t\t\tweights.push(vertices[i + 3]);\n\t\t\t}\n\t\t}\n\t\tattachment.bones = bones;\n\t\tattachment.vertices = Utils.toFloatArray(weights);\n\t}\n\n\treadAnimation (map: any, name: string, skeletonData: SkeletonData) {\n\t\tlet scale = this.scale;\n\t\tlet timelines = new Array<Timeline>();\n\n\t\t// Slot timelines.\n\t\tif (map.slots) {\n\t\t\tfor (let slotName in map.slots) {\n\t\t\t\tlet slotMap = map.slots[slotName];\n\t\t\t\tlet slot = skeletonData.findSlot(slotName);\n\t\t\t\tif (!slot) throw new Error(\"Slot not found: \" + slotName);\n\t\t\t\tlet slotIndex = slot.index;\n\t\t\t\tfor (let timelineName in slotMap) {\n\t\t\t\t\tlet timelineMap = slotMap[timelineName];\n\t\t\t\t\tif (!timelineMap) continue;\n\t\t\t\t\tlet frames = timelineMap.length;\n\t\t\t\t\tif (timelineName == \"attachment\") {\n\t\t\t\t\t\tlet timeline = new AttachmentTimeline(frames, slotIndex);\n\t\t\t\t\t\tfor (let frame = 0; frame < frames; frame++) {\n\t\t\t\t\t\t\tlet keyMap = timelineMap[frame];\n\t\t\t\t\t\t\ttimeline.setFrame(frame, getValue(keyMap, \"time\", 0), getValue(keyMap, \"name\", null));\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\n\t\t\t\t\t} else if (timelineName == \"rgba\") {\n\t\t\t\t\t\tlet timeline = new RGBATimeline(frames, frames << 2, slotIndex);\n\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\tlet color = Color.fromString(keyMap.color);\n\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, color.r, color.g, color.b, color.a);\n\t\t\t\t\t\t\tlet nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\tlet newColor = Color.fromString(nextMap.color);\n\t\t\t\t\t\t\tlet curve = keyMap.curve;\n\t\t\t\t\t\t\tif (curve) {\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tcolor = newColor;\n\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttimelines.push(timeline);\n\n\t\t\t\t\t} else if (timelineName == \"rgb\") {\n\t\t\t\t\t\tlet timeline = new RGBTimeline(frames, frames * 3, slotIndex);\n\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\tlet color = Color.fromString(keyMap.color);\n\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, color.r, color.g, color.b);\n\t\t\t\t\t\t\tlet nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\tlet newColor = Color.fromString(nextMap.color);\n\t\t\t\t\t\t\tlet curve = keyMap.curve;\n\t\t\t\t\t\t\tif (curve) {\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tcolor = newColor;\n\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttimelines.push(timeline);\n\n\t\t\t\t\t} else if (timelineName == \"alpha\") {\n\t\t\t\t\t\ttimelines.push(readTimeline1(timelineMap, new AlphaTimeline(frames, frames, slotIndex), 0, 1));\n\t\t\t\t\t} else if (timelineName == \"rgba2\") {\n\t\t\t\t\t\tlet timeline = new RGBA2Timeline(frames, frames * 7, slotIndex);\n\n\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\tlet color = Color.fromString(keyMap.light);\n\t\t\t\t\t\tlet color2 = Color.fromString(keyMap.dark);\n\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b);\n\t\t\t\t\t\t\tlet nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\tlet newColor = Color.fromString(nextMap.light);\n\t\t\t\t\t\t\tlet newColor2 = Color.fromString(nextMap.dark);\n\t\t\t\t\t\t\tlet curve = keyMap.curve;\n\t\t\t\t\t\t\tif (curve) {\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.r, newColor2.r, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.g, newColor2.g, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 6, time, time2, color2.b, newColor2.b, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tcolor = newColor;\n\t\t\t\t\t\t\tcolor2 = newColor2;\n\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttimelines.push(timeline);\n\n\t\t\t\t\t} else if (timelineName == \"rgb2\") {\n\t\t\t\t\t\tlet timeline = new RGB2Timeline(frames, frames * 6, slotIndex);\n\n\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\tlet color = Color.fromString(keyMap.light);\n\t\t\t\t\t\tlet color2 = Color.fromString(keyMap.dark);\n\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, color.r, color.g, color.b, color2.r, color2.g, color2.b);\n\t\t\t\t\t\t\tlet nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\tlet newColor = Color.fromString(nextMap.light);\n\t\t\t\t\t\t\tlet newColor2 = Color.fromString(nextMap.dark);\n\t\t\t\t\t\t\tlet curve = keyMap.curve;\n\t\t\t\t\t\t\tif (curve) {\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.r, newColor2.r, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.g, newColor2.g, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.b, newColor2.b, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tcolor = newColor;\n\t\t\t\t\t\t\tcolor2 = newColor2;\n\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Bone timelines.\n\t\tif (map.bones) {\n\t\t\tfor (let boneName in map.bones) {\n\t\t\t\tlet boneMap = map.bones[boneName];\n\t\t\t\tlet bone = skeletonData.findBone(boneName);\n\t\t\t\tif (!bone) throw new Error(\"Bone not found: \" + boneName);\n\t\t\t\tlet boneIndex = bone.index;\n\t\t\t\tfor (let timelineName in boneMap) {\n\t\t\t\t\tlet timelineMap = boneMap[timelineName];\n\t\t\t\t\tlet frames = timelineMap.length;\n\t\t\t\t\tif (frames == 0) continue;\n\n\t\t\t\t\tif (timelineName === \"rotate\") {\n\t\t\t\t\t\ttimelines.push(readTimeline1(timelineMap, new RotateTimeline(frames, frames, boneIndex), 0, 1));\n\t\t\t\t\t} else if (timelineName === \"translate\") {\n\t\t\t\t\t\tlet timeline = new TranslateTimeline(frames, frames << 1, boneIndex);\n\t\t\t\t\t\ttimelines.push(readTimeline2(timelineMap, timeline, \"x\", \"y\", 0, scale));\n\t\t\t\t\t} else if (timelineName === \"translatex\") {\n\t\t\t\t\t\tlet timeline = new TranslateXTimeline(frames, frames, boneIndex);\n\t\t\t\t\t\ttimelines.push(readTimeline1(timelineMap, timeline, 0, scale));\n\t\t\t\t\t} else if (timelineName === \"translatey\") {\n\t\t\t\t\t\tlet timeline = new TranslateYTimeline(frames, frames, boneIndex);\n\t\t\t\t\t\ttimelines.push(readTimeline1(timelineMap, timeline, 0, scale));\n\t\t\t\t\t} else if (timelineName === \"scale\") {\n\t\t\t\t\t\tlet timeline = new ScaleTimeline(frames, frames << 1, boneIndex);\n\t\t\t\t\t\ttimelines.push(readTimeline2(timelineMap, timeline, \"x\", \"y\", 1, 1));\n\t\t\t\t\t} else if (timelineName === \"scalex\") {\n\t\t\t\t\t\tlet timeline = new ScaleXTimeline(frames, frames, boneIndex);\n\t\t\t\t\t\ttimelines.push(readTimeline1(timelineMap, timeline, 1, 1));\n\t\t\t\t\t} else if (timelineName === \"scaley\") {\n\t\t\t\t\t\tlet timeline = new ScaleYTimeline(frames, frames, boneIndex);\n\t\t\t\t\t\ttimelines.push(readTimeline1(timelineMap, timeline, 1, 1));\n\t\t\t\t\t} else if (timelineName === \"shear\") {\n\t\t\t\t\t\tlet timeline = new ShearTimeline(frames, frames << 1, boneIndex);\n\t\t\t\t\t\ttimelines.push(readTimeline2(timelineMap, timeline, \"x\", \"y\", 0, 1));\n\t\t\t\t\t} else if (timelineName === \"shearx\") {\n\t\t\t\t\t\tlet timeline = new ShearXTimeline(frames, frames, boneIndex);\n\t\t\t\t\t\ttimelines.push(readTimeline1(timelineMap, timeline, 0, 1));\n\t\t\t\t\t} else if (timelineName === \"sheary\") {\n\t\t\t\t\t\tlet timeline = new ShearYTimeline(frames, frames, boneIndex);\n\t\t\t\t\t\ttimelines.push(readTimeline1(timelineMap, timeline, 0, 1));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// IK constraint timelines.\n\t\tif (map.ik) {\n\t\t\tfor (let constraintName in map.ik) {\n\t\t\t\tlet constraintMap = map.ik[constraintName];\n\t\t\t\tlet keyMap = constraintMap[0];\n\t\t\t\tif (!keyMap) continue;\n\n\t\t\t\tlet constraint = skeletonData.findIkConstraint(constraintName);\n\t\t\t\tif (!constraint) throw new Error(\"IK Constraint not found: \" + constraintName);\n\t\t\t\tlet constraintIndex = skeletonData.ikConstraints.indexOf(constraint);\n\t\t\t\tlet timeline = new IkConstraintTimeline(constraintMap.length, constraintMap.length << 1, constraintIndex);\n\n\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\tlet mix = getValue(keyMap, \"mix\", 1);\n\t\t\t\tlet softness = getValue(keyMap, \"softness\", 0) * scale;\n\n\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\ttimeline.setFrame(frame, time, mix, softness, getValue(keyMap, \"bendPositive\", true) ? 1 : -1, getValue(keyMap, \"compress\", false), getValue(keyMap, \"stretch\", false));\n\t\t\t\t\tlet nextMap = constraintMap[frame + 1];\n\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\tlet mix2 = getValue(nextMap, \"mix\", 1);\n\t\t\t\t\tlet softness2 = getValue(nextMap, \"softness\", 0) * scale;\n\t\t\t\t\tlet curve = keyMap.curve;\n\t\t\t\t\tif (curve) {\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mix, mix2, 1);\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, softness, softness2, scale);\n\t\t\t\t\t}\n\n\t\t\t\t\ttime = time2;\n\t\t\t\t\tmix = mix2;\n\t\t\t\t\tsoftness = softness2;\n\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t}\n\t\t\t\ttimelines.push(timeline);\n\t\t\t}\n\t\t}\n\n\t\t// Transform constraint timelines.\n\t\tif (map.transform) {\n\t\t\tfor (let constraintName in map.transform) {\n\t\t\t\tlet timelineMap = map.transform[constraintName];\n\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\tif (!keyMap) continue;\n\n\t\t\t\tlet constraint = skeletonData.findTransformConstraint(constraintName);\n\t\t\t\tif (!constraint) throw new Error(\"Transform constraint not found: \" + constraintName);\n\t\t\t\tlet constraintIndex = skeletonData.transformConstraints.indexOf(constraint);\n\t\t\t\tlet timeline = new TransformConstraintTimeline(timelineMap.length, timelineMap.length * 6, constraintIndex);\n\n\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\tlet mixRotate = getValue(keyMap, \"mixRotate\", 1);\n\t\t\t\tlet mixX = getValue(keyMap, \"mixX\", 1);\n\t\t\t\tlet mixY = getValue(keyMap, \"mixY\", mixX);\n\t\t\t\tlet mixScaleX = getValue(keyMap, \"mixScaleX\", 1);\n\t\t\t\tlet mixScaleY = getValue(keyMap, \"mixScaleY\", mixScaleX);\n\t\t\t\tlet mixShearY = getValue(keyMap, \"mixShearY\", 1);\n\n\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\ttimeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);\n\t\t\t\t\tlet nextMap = timelineMap[frame + 1];\n\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\tlet mixRotate2 = getValue(nextMap, \"mixRotate\", 1);\n\t\t\t\t\tlet mixX2 = getValue(nextMap, \"mixX\", 1);\n\t\t\t\t\tlet mixY2 = getValue(nextMap, \"mixY\", mixX2);\n\t\t\t\t\tlet mixScaleX2 = getValue(nextMap, \"mixScaleX\", 1);\n\t\t\t\t\tlet mixScaleY2 = getValue(nextMap, \"mixScaleY\", mixScaleX2);\n\t\t\t\t\tlet mixShearY2 = getValue(nextMap, \"mixShearY\", 1);\n\t\t\t\t\tlet curve = keyMap.curve;\n\t\t\t\t\tif (curve) {\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);\n\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\ttime = time2;\n\t\t\t\t\tmixRotate = mixRotate2;\n\t\t\t\t\tmixX = mixX2;\n\t\t\t\t\tmixY = mixY2;\n\t\t\t\t\tmixScaleX = mixScaleX2;\n\t\t\t\t\tmixScaleY = mixScaleY2;\n\t\t\t\t\tmixScaleX = mixScaleX2;\n\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t}\n\t\t\t\ttimelines.push(timeline);\n\t\t\t}\n\t\t}\n\n\t\t// Path constraint timelines.\n\t\tif (map.path) {\n\t\t\tfor (let constraintName in map.path) {\n\t\t\t\tlet constraintMap = map.path[constraintName];\n\t\t\t\tlet constraint = skeletonData.findPathConstraint(constraintName);\n\t\t\t\tif (!constraint) throw new Error(\"Path constraint not found: \" + constraintName);\n\t\t\t\tlet constraintIndex = skeletonData.pathConstraints.indexOf(constraint);\n\t\t\t\tfor (let timelineName in constraintMap) {\n\t\t\t\t\tlet timelineMap = constraintMap[timelineName];\n\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\tif (!keyMap) continue;\n\n\t\t\t\t\tlet frames = timelineMap.length;\n\t\t\t\t\tif (timelineName === \"position\") {\n\t\t\t\t\t\tlet timeline = new PathConstraintPositionTimeline(frames, frames, constraintIndex);\n\t\t\t\t\t\ttimelines.push(readTimeline1(timelineMap, timeline, 0, constraint.positionMode == PositionMode.Fixed ? scale : 1));\n\t\t\t\t\t} else if (timelineName === \"spacing\") {\n\t\t\t\t\t\tlet timeline = new PathConstraintSpacingTimeline(frames, frames, constraintIndex);\n\t\t\t\t\t\ttimelines.push(readTimeline1(timelineMap, timeline, 0, constraint.spacingMode == SpacingMode.Length || constraint.spacingMode == SpacingMode.Fixed ? scale : 1));\n\t\t\t\t\t} else if (timelineName === \"mix\") {\n\t\t\t\t\t\tlet timeline = new PathConstraintMixTimeline(frames, frames * 3, constraintIndex);\n\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\tlet mixRotate = getValue(keyMap, \"mixRotate\", 1);\n\t\t\t\t\t\tlet mixX = getValue(keyMap, \"mixX\", 1);\n\t\t\t\t\t\tlet mixY = getValue(keyMap, \"mixY\", mixX);\n\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\ttimeline.setFrame(frame, time, mixRotate, mixX, mixY);\n\t\t\t\t\t\t\tlet nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\tlet mixRotate2 = getValue(nextMap, \"mixRotate\", 1);\n\t\t\t\t\t\t\tlet mixX2 = getValue(nextMap, \"mixX\", 1);\n\t\t\t\t\t\t\tlet mixY2 = getValue(nextMap, \"mixY\", mixX2);\n\t\t\t\t\t\t\tlet curve = keyMap.curve;\n\t\t\t\t\t\t\tif (curve) {\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);\n\t\t\t\t\t\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\tmixRotate = mixRotate2;\n\t\t\t\t\t\t\tmixX = mixX2;\n\t\t\t\t\t\t\tmixY = mixY2;\n\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Attachment timelines.\n\t\tif (map.attachments) {\n\t\t\tfor (let attachmentsName in map.attachments) {\n\t\t\t\tlet attachmentsMap = map.attachments[attachmentsName];\n\t\t\t\tlet skin = skeletonData.findSkin(attachmentsName);\n\t\t\t\tif (!skin) throw new Error(\"Skin not found: \" + attachmentsName);\n\t\t\t\tfor (let slotMapName in attachmentsMap) {\n\t\t\t\t\tlet slotMap = attachmentsMap[slotMapName];\n\t\t\t\t\tlet slot = skeletonData.findSlot(slotMapName);\n\t\t\t\t\tif (!slot) throw new Error(\"Slot not found: \" + slotMapName);\n\t\t\t\t\tlet slotIndex = slot.index;\n\t\t\t\t\tfor (let attachmentMapName in slotMap) {\n\t\t\t\t\t\tlet attachmentMap = slotMap[attachmentMapName];\n\t\t\t\t\t\tlet attachment = <VertexAttachment>skin.getAttachment(slotIndex, attachmentMapName);\n\n\t\t\t\t\t\tfor (let timelineMapName in attachmentMap) {\n\t\t\t\t\t\t\tlet timelineMap = attachmentMap[timelineMapName];\n\t\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\t\tif (!keyMap) continue;\n\n\t\t\t\t\t\t\tif (timelineMapName == \"deform\") {\n\t\t\t\t\t\t\t\tlet weighted = attachment.bones;\n\t\t\t\t\t\t\t\tlet vertices = attachment.vertices;\n\t\t\t\t\t\t\t\tlet deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n\n\t\t\t\t\t\t\t\tlet timeline = new DeformTimeline(timelineMap.length, timelineMap.length, slotIndex, attachment);\n\t\t\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\t\t\tlet deform: NumberArrayLike;\n\t\t\t\t\t\t\t\t\tlet verticesValue: Array<Number> = getValue(keyMap, \"vertices\", null);\n\t\t\t\t\t\t\t\t\tif (!verticesValue)\n\t\t\t\t\t\t\t\t\t\tdeform = weighted ? Utils.newFloatArray(deformLength) : vertices;\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\tdeform = Utils.newFloatArray(deformLength);\n\t\t\t\t\t\t\t\t\t\tlet start = <number>getValue(keyMap, \"offset\", 0);\n\t\t\t\t\t\t\t\t\t\tUtils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);\n\t\t\t\t\t\t\t\t\t\tif (scale != 1) {\n\t\t\t\t\t\t\t\t\t\t\tfor (let i = start, n = i + verticesValue.length; i < n; i++)\n\t\t\t\t\t\t\t\t\t\t\t\tdeform[i] *= scale;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif (!weighted) {\n\t\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < deformLength; i++)\n\t\t\t\t\t\t\t\t\t\t\t\tdeform[i] += vertices[i];\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, deform);\n\t\t\t\t\t\t\t\t\tlet nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tlet time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\t\t\tlet curve = keyMap.curve;\n\t\t\t\t\t\t\t\t\tif (curve) bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1);\n\t\t\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\t} else if (timelineMapName == \"sequence\") {\n\t\t\t\t\t\t\t\tlet timeline = new SequenceTimeline(timelineMap.length, slotIndex, attachment as unknown as HasTextureRegion);\n\t\t\t\t\t\t\t\tlet lastDelay = 0;\n\t\t\t\t\t\t\t\tfor (let frame = 0; frame < timelineMap.length; frame++) {\n\t\t\t\t\t\t\t\t\tlet delay = getValue(keyMap, \"delay\", lastDelay);\n\t\t\t\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\t\t\tlet mode = SequenceMode[getValue(keyMap, \"mode\", \"hold\")] as unknown as number;\n\t\t\t\t\t\t\t\t\tlet index = getValue(keyMap, \"index\", 0);\n\t\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, mode, index, delay);\n\t\t\t\t\t\t\t\t\tlastDelay = delay;\n\t\t\t\t\t\t\t\t\tkeyMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Draw order timelines.\n\t\tif (map.drawOrder) {\n\t\t\tlet timeline = new DrawOrderTimeline(map.drawOrder.length);\n\t\t\tlet slotCount = skeletonData.slots.length;\n\t\t\tlet frame = 0;\n\t\t\tfor (let i = 0; i < map.drawOrder.length; i++, frame++) {\n\t\t\t\tlet drawOrderMap = map.drawOrder[i];\n\t\t\t\tlet drawOrder: Array<number> | null = null;\n\t\t\t\tlet offsets = getValue(drawOrderMap, \"offsets\", null);\n\t\t\t\tif (offsets) {\n\t\t\t\t\tdrawOrder = Utils.newArray<number>(slotCount, -1);\n\t\t\t\t\tlet unchanged = Utils.newArray<number>(slotCount - offsets.length, 0);\n\t\t\t\t\tlet originalIndex = 0, unchangedIndex = 0;\n\t\t\t\t\tfor (let ii = 0; ii < offsets.length; ii++) {\n\t\t\t\t\t\tlet offsetMap = offsets[ii];\n\t\t\t\t\t\tlet slot = skeletonData.findSlot(offsetMap.slot);\n\t\t\t\t\t\tif (!slot) throw new Error(\"Slot not found: \" + slot);\n\t\t\t\t\t\tlet slotIndex = slot.index;\n\t\t\t\t\t\t// Collect unchanged items.\n\t\t\t\t\t\twhile (originalIndex != slotIndex)\n\t\t\t\t\t\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t\t\t\t\t\t// Set changed items.\n\t\t\t\t\t\tdrawOrder[originalIndex + offsetMap.offset] = originalIndex++;\n\t\t\t\t\t}\n\t\t\t\t\t// Collect remaining unchanged items.\n\t\t\t\t\twhile (originalIndex < slotCount)\n\t\t\t\t\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t\t\t\t\t// Fill in unchanged items.\n\t\t\t\t\tfor (let ii = slotCount - 1; ii >= 0; ii--)\n\t\t\t\t\t\tif (drawOrder[ii] == -1) drawOrder[ii] = unchanged[--unchangedIndex];\n\t\t\t\t}\n\t\t\t\ttimeline.setFrame(frame, getValue(drawOrderMap, \"time\", 0), drawOrder);\n\t\t\t}\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\t// Event timelines.\n\t\tif (map.events) {\n\t\t\tlet timeline = new EventTimeline(map.events.length);\n\t\t\tlet frame = 0;\n\t\t\tfor (let i = 0; i < map.events.length; i++, frame++) {\n\t\t\t\tlet eventMap = map.events[i];\n\t\t\t\tlet eventData = skeletonData.findEvent(eventMap.name);\n\t\t\t\tif (!eventData) throw new Error(\"Event not found: \" + eventMap.name);\n\t\t\t\tlet event = new Event(Utils.toSinglePrecision(getValue(eventMap, \"time\", 0)), eventData);\n\t\t\t\tevent.intValue = getValue(eventMap, \"int\", eventData.intValue);\n\t\t\t\tevent.floatValue = getValue(eventMap, \"float\", eventData.floatValue);\n\t\t\t\tevent.stringValue = getValue(eventMap, \"string\", eventData.stringValue);\n\t\t\t\tif (event.data.audioPath) {\n\t\t\t\t\tevent.volume = getValue(eventMap, \"volume\", 1);\n\t\t\t\t\tevent.balance = getValue(eventMap, \"balance\", 0);\n\t\t\t\t}\n\t\t\t\ttimeline.setFrame(frame, event);\n\t\t\t}\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\tlet duration = 0;\n\t\tfor (let i = 0, n = timelines.length; i < n; i++)\n\t\t\tduration = Math.max(duration, timelines[i].getDuration());\n\t\tskeletonData.animations.push(new Animation(name, timelines, duration));\n\t}\n}\n\nclass LinkedMesh {\n\tparent: string; skin: string;\n\tslotIndex: number;\n\tmesh: MeshAttachment;\n\tinheritTimeline: boolean;\n\n\tconstructor (mesh: MeshAttachment, skin: string, slotIndex: number, parent: string, inheritDeform: boolean) {\n\t\tthis.mesh = mesh;\n\t\tthis.skin = skin;\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.parent = parent;\n\t\tthis.inheritTimeline = inheritDeform;\n\t}\n}\n\nfunction readTimeline1 (keys: any[], timeline: CurveTimeline1, defaultValue: number, scale: number) {\n\tlet keyMap = keys[0];\n\tlet time = getValue(keyMap, \"time\", 0);\n\tlet value = getValue(keyMap, \"value\", defaultValue) * scale;\n\tlet bezier = 0;\n\tfor (let frame = 0; ; frame++) {\n\t\ttimeline.setFrame(frame, time, value);\n\t\tlet nextMap = keys[frame + 1];\n\t\tif (!nextMap) {\n\t\t\ttimeline.shrink(bezier);\n\t\t\treturn timeline;\n\t\t}\n\t\tlet time2 = getValue(nextMap, \"time\", 0);\n\t\tlet value2 = getValue(nextMap, \"value\", defaultValue) * scale;\n\t\tif (keyMap.curve) bezier = readCurve(keyMap.curve, timeline, bezier, frame, 0, time, time2, value, value2, scale);\n\t\ttime = time2;\n\t\tvalue = value2;\n\t\tkeyMap = nextMap;\n\t}\n}\n\nfunction readTimeline2 (keys: any[], timeline: CurveTimeline2, name1: string, name2: string, defaultValue: number, scale: number) {\n\tlet keyMap = keys[0];\n\tlet time = getValue(keyMap, \"time\", 0);\n\tlet value1 = getValue(keyMap, name1, defaultValue) * scale;\n\tlet value2 = getValue(keyMap, name2, defaultValue) * scale;\n\tlet bezier = 0;\n\tfor (let frame = 0; ; frame++) {\n\t\ttimeline.setFrame(frame, time, value1, value2);\n\t\tlet nextMap = keys[frame + 1];\n\t\tif (!nextMap) {\n\t\t\ttimeline.shrink(bezier);\n\t\t\treturn timeline;\n\t\t}\n\t\tlet time2 = getValue(nextMap, \"time\", 0);\n\t\tlet nvalue1 = getValue(nextMap, name1, defaultValue) * scale;\n\t\tlet nvalue2 = getValue(nextMap, name2, defaultValue) * scale;\n\t\tlet curve = keyMap.curve;\n\t\tif (curve) {\n\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale);\n\t\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale);\n\t\t}\n\t\ttime = time2;\n\t\tvalue1 = nvalue1;\n\t\tvalue2 = nvalue2;\n\t\tkeyMap = nextMap;\n\t}\n}\n\nfunction readCurve (curve: any, timeline: CurveTimeline, bezier: number, frame: number, value: number, time1: number, time2: number,\n\tvalue1: number, value2: number, scale: number) {\n\tif (curve == \"stepped\") {\n\t\ttimeline.setStepped(frame);\n\t\treturn bezier;\n\t}\n\tlet i = value << 2;\n\tlet cx1 = curve[i];\n\tlet cy1 = curve[i + 1] * scale;\n\tlet cx2 = curve[i + 2];\n\tlet cy2 = curve[i + 3] * scale;\n\ttimeline.setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2);\n\treturn bezier + 1;\n}\n\nfunction getValue (map: any, property: string, defaultValue: any) {\n\treturn map[property] !== undefined ? map[property] : defaultValue;\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\n(() => {\n\tif (typeof Math.fround === \"undefined\") {\n\t\tMath.fround = (function (array) {\n\t\t\treturn function (x: number) {\n\t\t\t\treturn array[0] = x, array[0];\n\t\t\t};\n\t\t})(new Float32Array(1));\n\t}\n})();\n\nexport { }\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Restorable, BlendMode } from \"@esotericsoftware/spine-core\";\n\nexport class ManagedWebGLRenderingContext {\n\tpublic canvas: HTMLCanvasElement | OffscreenCanvas;\n\tpublic gl: WebGLRenderingContext;\n\tprivate restorables = new Array<Restorable>();\n\n\tconstructor (canvasOrContext: HTMLCanvasElement | WebGLRenderingContext, contextConfig: any = { alpha: \"true\" }) {\n\t\tif (!((canvasOrContext instanceof WebGLRenderingContext) || (typeof WebGL2RenderingContext !== 'undefined' && canvasOrContext instanceof WebGL2RenderingContext))) {\n\t\t\tlet canvas: HTMLCanvasElement = canvasOrContext;\n\t\t\tthis.gl = <WebGLRenderingContext>(canvas.getContext(\"webgl2\", contextConfig) || canvas.getContext(\"webgl\", contextConfig));\n\t\t\tthis.canvas = canvas;\n\t\t\tcanvas.addEventListener(\"webglcontextlost\", (e: any) => {\n\t\t\t\tlet event = <WebGLContextEvent>e;\n\t\t\t\tif (e) e.preventDefault();\n\t\t\t});\n\t\t\tcanvas.addEventListener(\"webglcontextrestored\", (e: any) => {\n\t\t\t\tfor (let i = 0, n = this.restorables.length; i < n; i++)\n\t\t\t\t\tthis.restorables[i].restore();\n\t\t\t});\n\t\t} else {\n\t\t\tthis.gl = canvasOrContext;\n\t\t\tthis.canvas = this.gl.canvas;\n\t\t}\n\t}\n\n\taddRestorable (restorable: Restorable) {\n\t\tthis.restorables.push(restorable);\n\t}\n\n\tremoveRestorable (restorable: Restorable) {\n\t\tlet index = this.restorables.indexOf(restorable);\n\t\tif (index > -1) this.restorables.splice(index, 1);\n\t}\n}\n\nconst ONE = 1;\nconst ONE_MINUS_SRC_COLOR = 0x0301;\nconst SRC_ALPHA = 0x0302;\nconst ONE_MINUS_SRC_ALPHA = 0x0303;\nconst ONE_MINUS_DST_ALPHA = 0x0305;\nconst DST_COLOR = 0x0306;\n\nexport class WebGLBlendModeConverter {\n\tstatic getDestGLBlendMode (blendMode: BlendMode) {\n\t\tswitch (blendMode) {\n\t\t\tcase BlendMode.Normal: return ONE_MINUS_SRC_ALPHA;\n\t\t\tcase BlendMode.Additive: return ONE;\n\t\t\tcase BlendMode.Multiply: return ONE_MINUS_SRC_ALPHA;\n\t\t\tcase BlendMode.Screen: return ONE_MINUS_SRC_ALPHA;\n\t\t\tdefault: throw new Error(\"Unknown blend mode: \" + blendMode);\n\t\t}\n\t}\n\n\tstatic getSourceColorGLBlendMode (blendMode: BlendMode, premultipliedAlpha: boolean = false) {\n\t\tswitch (blendMode) {\n\t\t\tcase BlendMode.Normal: return premultipliedAlpha ? ONE : SRC_ALPHA;\n\t\t\tcase BlendMode.Additive: return premultipliedAlpha ? ONE : SRC_ALPHA;\n\t\t\tcase BlendMode.Multiply: return DST_COLOR;\n\t\t\tcase BlendMode.Screen: return ONE;\n\t\t\tdefault: throw new Error(\"Unknown blend mode: \" + blendMode);\n\t\t}\n\t}\n\n\tstatic getSourceAlphaGLBlendMode (blendMode: BlendMode) {\n\t\tswitch (blendMode) {\n\t\t\tcase BlendMode.Normal: return ONE;\n\t\t\tcase BlendMode.Additive: return ONE;\n\t\t\tcase BlendMode.Multiply: return ONE_MINUS_SRC_ALPHA;\n\t\t\tcase BlendMode.Screen: return ONE_MINUS_SRC_COLOR;\n\t\t\tdefault: throw new Error(\"Unknown blend mode: \" + blendMode);\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Texture, Disposable, Restorable, TextureFilter, TextureWrap } from \"@esotericsoftware/spine-core\";\nimport { ManagedWebGLRenderingContext } from \"./WebGL\";\n\nexport class GLTexture extends Texture implements Disposable, Restorable {\n\tcontext: ManagedWebGLRenderingContext;\n\tprivate texture: WebGLTexture | null = null;\n\tprivate boundUnit = 0;\n\tprivate useMipMaps = false;\n\n\tpublic static DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL = false;\n\n\tconstructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, image: HTMLImageElement | ImageBitmap, useMipMaps: boolean = false) {\n\t\tsuper(image);\n\t\tthis.context = context instanceof ManagedWebGLRenderingContext ? context : new ManagedWebGLRenderingContext(context);\n\t\tthis.useMipMaps = useMipMaps;\n\t\tthis.restore();\n\t\tthis.context.addRestorable(this);\n\t}\n\n\tsetFilters (minFilter: TextureFilter, magFilter: TextureFilter) {\n\t\tlet gl = this.context.gl;\n\t\tthis.bind();\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, minFilter);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, GLTexture.validateMagFilter(magFilter));\n\t\tthis.useMipMaps = GLTexture.usesMipMaps(minFilter);\n\t\tif (this.useMipMaps) gl.generateMipmap(gl.TEXTURE_2D);\n\t}\n\n\tstatic validateMagFilter (magFilter: TextureFilter) {\n\t\tswitch (magFilter) {\n\t\t\tcase TextureFilter.MipMap:\n\t\t\tcase TextureFilter.MipMapLinearLinear:\n\t\t\tcase TextureFilter.MipMapLinearNearest:\n\t\t\tcase TextureFilter.MipMapNearestLinear:\n\t\t\tcase TextureFilter.MipMapNearestNearest:\n\t\t\t\treturn TextureFilter.Linear;\n\t\t\tdefault:\n\t\t\t\treturn magFilter;\n\t\t}\n\t}\n\n\tstatic usesMipMaps (filter: TextureFilter) {\n\t\tswitch (filter) {\n\t\t\tcase TextureFilter.MipMap:\n\t\t\tcase TextureFilter.MipMapLinearLinear:\n\t\t\tcase TextureFilter.MipMapLinearNearest:\n\t\t\tcase TextureFilter.MipMapNearestLinear:\n\t\t\tcase TextureFilter.MipMapNearestNearest:\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tsetWraps (uWrap: TextureWrap, vWrap: TextureWrap) {\n\t\tlet gl = this.context.gl;\n\t\tthis.bind();\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, uWrap);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, vWrap);\n\t}\n\n\tupdate (useMipMaps: boolean) {\n\t\tlet gl = this.context.gl;\n\t\tif (!this.texture) this.texture = this.context.gl.createTexture();\n\t\tthis.bind();\n\t\tif (GLTexture.DISABLE_UNPACK_PREMULTIPLIED_ALPHA_WEBGL) gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n\t\tgl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this._image);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, useMipMaps ? gl.LINEAR_MIPMAP_LINEAR : gl.LINEAR);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n\t\tgl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\t\tif (useMipMaps) gl.generateMipmap(gl.TEXTURE_2D);\n\t}\n\n\trestore () {\n\t\tthis.texture = null;\n\t\tthis.update(this.useMipMaps);\n\t}\n\n\tbind (unit: number = 0) {\n\t\tlet gl = this.context.gl;\n\t\tthis.boundUnit = unit;\n\t\tgl.activeTexture(gl.TEXTURE0 + unit);\n\t\tgl.bindTexture(gl.TEXTURE_2D, this.texture);\n\t}\n\n\tunbind () {\n\t\tlet gl = this.context.gl;\n\t\tgl.activeTexture(gl.TEXTURE0 + this.boundUnit);\n\t\tgl.bindTexture(gl.TEXTURE_2D, null);\n\t}\n\n\tdispose () {\n\t\tthis.context.removeRestorable(this);\n\t\tlet gl = this.context.gl;\n\t\tgl.deleteTexture(this.texture);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { AssetManagerBase, Downloader } from \"@esotericsoftware/spine-core\"\nimport { ManagedWebGLRenderingContext } from \"./WebGL\";\nimport { GLTexture } from \"./GLTexture\";\n\n\nexport class AssetManager extends AssetManagerBase {\n\tconstructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, pathPrefix: string = \"\", downloader: Downloader = new Downloader()) {\n\t\tsuper((image: HTMLImageElement | ImageBitmap) => {\n\t\t\treturn new GLTexture(context, image);\n\t\t}, pathPrefix, downloader);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Matrix4, M00, M01, M02, M03, M10, M11, M12, M13, M20, M21, M22, M23, M30, M31, M32, M33 } from \"./Matrix4\";\n\nexport class Vector3 {\n\tx = 0;\n\ty = 0;\n\tz = 0;\n\n\tconstructor (x: number = 0, y: number = 0, z: number = 0) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t}\n\n\tsetFrom (v: Vector3): Vector3 {\n\t\tthis.x = v.x;\n\t\tthis.y = v.y;\n\t\tthis.z = v.z;\n\t\treturn this;\n\t}\n\n\tset (x: number, y: number, z: number): Vector3 {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.z = z;\n\t\treturn this;\n\t}\n\n\tadd (v: Vector3): Vector3 {\n\t\tthis.x += v.x;\n\t\tthis.y += v.y;\n\t\tthis.z += v.z;\n\t\treturn this;\n\t}\n\n\tsub (v: Vector3): Vector3 {\n\t\tthis.x -= v.x;\n\t\tthis.y -= v.y;\n\t\tthis.z -= v.z;\n\t\treturn this;\n\t}\n\n\tscale (s: number): Vector3 {\n\t\tthis.x *= s;\n\t\tthis.y *= s;\n\t\tthis.z *= s;\n\t\treturn this;\n\t}\n\n\tnormalize (): Vector3 {\n\t\tlet len = this.length();\n\t\tif (len == 0) return this;\n\t\tlen = 1 / len;\n\t\tthis.x *= len;\n\t\tthis.y *= len;\n\t\tthis.z *= len;\n\t\treturn this;\n\t}\n\n\tcross (v: Vector3): Vector3 {\n\t\treturn this.set(this.y * v.z - this.z * v.y, this.z * v.x - this.x * v.z, this.x * v.y - this.y * v.x)\n\t}\n\n\tmultiply (matrix: Matrix4): Vector3 {\n\t\tlet l_mat = matrix.values;\n\t\treturn this.set(this.x * l_mat[M00] + this.y * l_mat[M01] + this.z * l_mat[M02] + l_mat[M03],\n\t\t\tthis.x * l_mat[M10] + this.y * l_mat[M11] + this.z * l_mat[M12] + l_mat[M13],\n\t\t\tthis.x * l_mat[M20] + this.y * l_mat[M21] + this.z * l_mat[M22] + l_mat[M23]);\n\t}\n\n\tproject (matrix: Matrix4): Vector3 {\n\t\tlet l_mat = matrix.values;\n\t\tlet l_w = 1 / (this.x * l_mat[M30] + this.y * l_mat[M31] + this.z * l_mat[M32] + l_mat[M33]);\n\t\treturn this.set((this.x * l_mat[M00] + this.y * l_mat[M01] + this.z * l_mat[M02] + l_mat[M03]) * l_w,\n\t\t\t(this.x * l_mat[M10] + this.y * l_mat[M11] + this.z * l_mat[M12] + l_mat[M13]) * l_w,\n\t\t\t(this.x * l_mat[M20] + this.y * l_mat[M21] + this.z * l_mat[M22] + l_mat[M23]) * l_w);\n\t}\n\n\tdot (v: Vector3): number {\n\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\t}\n\n\tlength (): number {\n\t\treturn Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);\n\t}\n\n\tdistance (v: Vector3): number {\n\t\tlet a = v.x - this.x;\n\t\tlet b = v.y - this.y;\n\t\tlet c = v.z - this.z;\n\t\treturn Math.sqrt(a * a + b * b + c * c);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Vector2 } from \"@esotericsoftware/spine-core\";\nimport { Vector3 } from \"./Vector3\";\n\nexport const M00 = 0;\nexport const M01 = 4;\nexport const M02 = 8;\nexport const M03 = 12;\nexport const M10 = 1;\nexport const M11 = 5;\nexport const M12 = 9;\nexport const M13 = 13;\nexport const M20 = 2;\nexport const M21 = 6;\nexport const M22 = 10;\nexport const M23 = 14;\nexport const M30 = 3;\nexport const M31 = 7;\nexport const M32 = 11;\nexport const M33 = 15;\n\nexport class Matrix4 {\n\ttemp: Float32Array = new Float32Array(16);\n\tvalues: Float32Array = new Float32Array(16);\n\n\tprivate static xAxis = new Vector3();\n\tprivate static yAxis = new Vector3();\n\tprivate static zAxis = new Vector3();\n\tprivate static tmpMatrix = new Matrix4();\n\n\tconstructor () {\n\t\tlet v = this.values;\n\t\tv[M00] = 1;\n\t\tv[M11] = 1;\n\t\tv[M22] = 1;\n\t\tv[M33] = 1;\n\t}\n\n\tset (values: ArrayLike<number>): Matrix4 {\n\t\tthis.values.set(values);\n\t\treturn this;\n\t}\n\n\ttranspose (): Matrix4 {\n\t\tlet t = this.temp;\n\t\tlet v = this.values;\n\t\tt[M00] = v[M00];\n\t\tt[M01] = v[M10];\n\t\tt[M02] = v[M20];\n\t\tt[M03] = v[M30];\n\t\tt[M10] = v[M01];\n\t\tt[M11] = v[M11];\n\t\tt[M12] = v[M21];\n\t\tt[M13] = v[M31];\n\t\tt[M20] = v[M02];\n\t\tt[M21] = v[M12];\n\t\tt[M22] = v[M22];\n\t\tt[M23] = v[M32];\n\t\tt[M30] = v[M03];\n\t\tt[M31] = v[M13];\n\t\tt[M32] = v[M23];\n\t\tt[M33] = v[M33];\n\t\treturn this.set(t);\n\t}\n\n\tidentity (): Matrix4 {\n\t\tlet v = this.values;\n\t\tv[M00] = 1;\n\t\tv[M01] = 0;\n\t\tv[M02] = 0;\n\t\tv[M03] = 0;\n\t\tv[M10] = 0;\n\t\tv[M11] = 1;\n\t\tv[M12] = 0;\n\t\tv[M13] = 0;\n\t\tv[M20] = 0;\n\t\tv[M21] = 0;\n\t\tv[M22] = 1;\n\t\tv[M23] = 0;\n\t\tv[M30] = 0;\n\t\tv[M31] = 0;\n\t\tv[M32] = 0;\n\t\tv[M33] = 1;\n\t\treturn this;\n\t}\n\n\tinvert (): Matrix4 {\n\t\tlet v = this.values;\n\t\tlet t = this.temp;\n\t\tlet l_det = v[M30] * v[M21] * v[M12] * v[M03] - v[M20] * v[M31] * v[M12] * v[M03] - v[M30] * v[M11] * v[M22] * v[M03]\n\t\t\t+ v[M10] * v[M31] * v[M22] * v[M03] + v[M20] * v[M11] * v[M32] * v[M03] - v[M10] * v[M21] * v[M32] * v[M03]\n\t\t\t- v[M30] * v[M21] * v[M02] * v[M13] + v[M20] * v[M31] * v[M02] * v[M13] + v[M30] * v[M01] * v[M22] * v[M13]\n\t\t\t- v[M00] * v[M31] * v[M22] * v[M13] - v[M20] * v[M01] * v[M32] * v[M13] + v[M00] * v[M21] * v[M32] * v[M13]\n\t\t\t+ v[M30] * v[M11] * v[M02] * v[M23] - v[M10] * v[M31] * v[M02] * v[M23] - v[M30] * v[M01] * v[M12] * v[M23]\n\t\t\t+ v[M00] * v[M31] * v[M12] * v[M23] + v[M10] * v[M01] * v[M32] * v[M23] - v[M00] * v[M11] * v[M32] * v[M23]\n\t\t\t- v[M20] * v[M11] * v[M02] * v[M33] + v[M10] * v[M21] * v[M02] * v[M33] + v[M20] * v[M01] * v[M12] * v[M33]\n\t\t\t- v[M00] * v[M21] * v[M12] * v[M33] - v[M10] * v[M01] * v[M22] * v[M33] + v[M00] * v[M11] * v[M22] * v[M33];\n\t\tif (l_det == 0) throw new Error(\"non-invertible matrix\");\n\t\tlet inv_det = 1.0 / l_det;\n\t\tt[M00] = v[M12] * v[M23] * v[M31] - v[M13] * v[M22] * v[M31] + v[M13] * v[M21] * v[M32]\n\t\t\t- v[M11] * v[M23] * v[M32] - v[M12] * v[M21] * v[M33] + v[M11] * v[M22] * v[M33];\n\t\tt[M01] = v[M03] * v[M22] * v[M31] - v[M02] * v[M23] * v[M31] - v[M03] * v[M21] * v[M32]\n\t\t\t+ v[M01] * v[M23] * v[M32] + v[M02] * v[M21] * v[M33] - v[M01] * v[M22] * v[M33];\n\t\tt[M02] = v[M02] * v[M13] * v[M31] - v[M03] * v[M12] * v[M31] + v[M03] * v[M11] * v[M32]\n\t\t\t- v[M01] * v[M13] * v[M32] - v[M02] * v[M11] * v[M33] + v[M01] * v[M12] * v[M33];\n\t\tt[M03] = v[M03] * v[M12] * v[M21] - v[M02] * v[M13] * v[M21] - v[M03] * v[M11] * v[M22]\n\t\t\t+ v[M01] * v[M13] * v[M22] + v[M02] * v[M11] * v[M23] - v[M01] * v[M12] * v[M23];\n\t\tt[M10] = v[M13] * v[M22] * v[M30] - v[M12] * v[M23] * v[M30] - v[M13] * v[M20] * v[M32]\n\t\t\t+ v[M10] * v[M23] * v[M32] + v[M12] * v[M20] * v[M33] - v[M10] * v[M22] * v[M33];\n\t\tt[M11] = v[M02] * v[M23] * v[M30] - v[M03] * v[M22] * v[M30] + v[M03] * v[M20] * v[M32]\n\t\t\t- v[M00] * v[M23] * v[M32] - v[M02] * v[M20] * v[M33] + v[M00] * v[M22] * v[M33];\n\t\tt[M12] = v[M03] * v[M12] * v[M30] - v[M02] * v[M13] * v[M30] - v[M03] * v[M10] * v[M32]\n\t\t\t+ v[M00] * v[M13] * v[M32] + v[M02] * v[M10] * v[M33] - v[M00] * v[M12] * v[M33];\n\t\tt[M13] = v[M02] * v[M13] * v[M20] - v[M03] * v[M12] * v[M20] + v[M03] * v[M10] * v[M22]\n\t\t\t- v[M00] * v[M13] * v[M22] - v[M02] * v[M10] * v[M23] + v[M00] * v[M12] * v[M23];\n\t\tt[M20] = v[M11] * v[M23] * v[M30] - v[M13] * v[M21] * v[M30] + v[M13] * v[M20] * v[M31]\n\t\t\t- v[M10] * v[M23] * v[M31] - v[M11] * v[M20] * v[M33] + v[M10] * v[M21] * v[M33];\n\t\tt[M21] = v[M03] * v[M21] * v[M30] - v[M01] * v[M23] * v[M30] - v[M03] * v[M20] * v[M31]\n\t\t\t+ v[M00] * v[M23] * v[M31] + v[M01] * v[M20] * v[M33] - v[M00] * v[M21] * v[M33];\n\t\tt[M22] = v[M01] * v[M13] * v[M30] - v[M03] * v[M11] * v[M30] + v[M03] * v[M10] * v[M31]\n\t\t\t- v[M00] * v[M13] * v[M31] - v[M01] * v[M10] * v[M33] + v[M00] * v[M11] * v[M33];\n\t\tt[M23] = v[M03] * v[M11] * v[M20] - v[M01] * v[M13] * v[M20] - v[M03] * v[M10] * v[M21]\n\t\t\t+ v[M00] * v[M13] * v[M21] + v[M01] * v[M10] * v[M23] - v[M00] * v[M11] * v[M23];\n\t\tt[M30] = v[M12] * v[M21] * v[M30] - v[M11] * v[M22] * v[M30] - v[M12] * v[M20] * v[M31]\n\t\t\t+ v[M10] * v[M22] * v[M31] + v[M11] * v[M20] * v[M32] - v[M10] * v[M21] * v[M32];\n\t\tt[M31] = v[M01] * v[M22] * v[M30] - v[M02] * v[M21] * v[M30] + v[M02] * v[M20] * v[M31]\n\t\t\t- v[M00] * v[M22] * v[M31] - v[M01] * v[M20] * v[M32] + v[M00] * v[M21] * v[M32];\n\t\tt[M32] = v[M02] * v[M11] * v[M30] - v[M01] * v[M12] * v[M30] - v[M02] * v[M10] * v[M31]\n\t\t\t+ v[M00] * v[M12] * v[M31] + v[M01] * v[M10] * v[M32] - v[M00] * v[M11] * v[M32];\n\t\tt[M33] = v[M01] * v[M12] * v[M20] - v[M02] * v[M11] * v[M20] + v[M02] * v[M10] * v[M21]\n\t\t\t- v[M00] * v[M12] * v[M21] - v[M01] * v[M10] * v[M22] + v[M00] * v[M11] * v[M22];\n\t\tv[M00] = t[M00] * inv_det;\n\t\tv[M01] = t[M01] * inv_det;\n\t\tv[M02] = t[M02] * inv_det;\n\t\tv[M03] = t[M03] * inv_det;\n\t\tv[M10] = t[M10] * inv_det;\n\t\tv[M11] = t[M11] * inv_det;\n\t\tv[M12] = t[M12] * inv_det;\n\t\tv[M13] = t[M13] * inv_det;\n\t\tv[M20] = t[M20] * inv_det;\n\t\tv[M21] = t[M21] * inv_det;\n\t\tv[M22] = t[M22] * inv_det;\n\t\tv[M23] = t[M23] * inv_det;\n\t\tv[M30] = t[M30] * inv_det;\n\t\tv[M31] = t[M31] * inv_det;\n\t\tv[M32] = t[M32] * inv_det;\n\t\tv[M33] = t[M33] * inv_det;\n\t\treturn this;\n\t}\n\n\tdeterminant (): number {\n\t\tlet v = this.values;\n\t\treturn v[M30] * v[M21] * v[M12] * v[M03] - v[M20] * v[M31] * v[M12] * v[M03] - v[M30] * v[M11] * v[M22] * v[M03]\n\t\t\t+ v[M10] * v[M31] * v[M22] * v[M03] + v[M20] * v[M11] * v[M32] * v[M03] - v[M10] * v[M21] * v[M32] * v[M03]\n\t\t\t- v[M30] * v[M21] * v[M02] * v[M13] + v[M20] * v[M31] * v[M02] * v[M13] + v[M30] * v[M01] * v[M22] * v[M13]\n\t\t\t- v[M00] * v[M31] * v[M22] * v[M13] - v[M20] * v[M01] * v[M32] * v[M13] + v[M00] * v[M21] * v[M32] * v[M13]\n\t\t\t+ v[M30] * v[M11] * v[M02] * v[M23] - v[M10] * v[M31] * v[M02] * v[M23] - v[M30] * v[M01] * v[M12] * v[M23]\n\t\t\t+ v[M00] * v[M31] * v[M12] * v[M23] + v[M10] * v[M01] * v[M32] * v[M23] - v[M00] * v[M11] * v[M32] * v[M23]\n\t\t\t- v[M20] * v[M11] * v[M02] * v[M33] + v[M10] * v[M21] * v[M02] * v[M33] + v[M20] * v[M01] * v[M12] * v[M33]\n\t\t\t- v[M00] * v[M21] * v[M12] * v[M33] - v[M10] * v[M01] * v[M22] * v[M33] + v[M00] * v[M11] * v[M22] * v[M33];\n\t}\n\n\ttranslate (x: number, y: number, z: number): Matrix4 {\n\t\tlet v = this.values;\n\t\tv[M03] += x;\n\t\tv[M13] += y;\n\t\tv[M23] += z;\n\t\treturn this;\n\t}\n\n\tcopy (): Matrix4 {\n\t\treturn new Matrix4().set(this.values);\n\t}\n\n\tprojection (near: number, far: number, fovy: number, aspectRatio: number): Matrix4 {\n\t\tthis.identity();\n\t\tlet l_fd = (1.0 / Math.tan((fovy * (Math.PI / 180)) / 2.0));\n\t\tlet l_a1 = (far + near) / (near - far);\n\t\tlet l_a2 = (2 * far * near) / (near - far);\n\t\tlet v = this.values;\n\t\tv[M00] = l_fd / aspectRatio;\n\t\tv[M10] = 0;\n\t\tv[M20] = 0;\n\t\tv[M30] = 0;\n\t\tv[M01] = 0;\n\t\tv[M11] = l_fd;\n\t\tv[M21] = 0;\n\t\tv[M31] = 0;\n\t\tv[M02] = 0;\n\t\tv[M12] = 0;\n\t\tv[M22] = l_a1;\n\t\tv[M32] = -1;\n\t\tv[M03] = 0;\n\t\tv[M13] = 0;\n\t\tv[M23] = l_a2;\n\t\tv[M33] = 0;\n\t\treturn this;\n\t}\n\n\tortho2d (x: number, y: number, width: number, height: number): Matrix4 {\n\t\treturn this.ortho(x, x + width, y, y + height, 0, 1);\n\t}\n\n\tortho (left: number, right: number, bottom: number, top: number, near: number, far: number): Matrix4 {\n\t\tthis.identity();\n\t\tlet x_orth = 2 / (right - left);\n\t\tlet y_orth = 2 / (top - bottom);\n\t\tlet z_orth = -2 / (far - near);\n\n\t\tlet tx = -(right + left) / (right - left);\n\t\tlet ty = -(top + bottom) / (top - bottom);\n\t\tlet tz = -(far + near) / (far - near);\n\n\t\tlet v = this.values;\n\t\tv[M00] = x_orth;\n\t\tv[M10] = 0;\n\t\tv[M20] = 0;\n\t\tv[M30] = 0;\n\t\tv[M01] = 0;\n\t\tv[M11] = y_orth;\n\t\tv[M21] = 0;\n\t\tv[M31] = 0;\n\t\tv[M02] = 0;\n\t\tv[M12] = 0;\n\t\tv[M22] = z_orth;\n\t\tv[M32] = 0;\n\t\tv[M03] = tx;\n\t\tv[M13] = ty;\n\t\tv[M23] = tz;\n\t\tv[M33] = 1;\n\t\treturn this;\n\t}\n\n\tmultiply (matrix: Matrix4): Matrix4 {\n\t\tlet t = this.temp;\n\t\tlet v = this.values;\n\t\tlet m = matrix.values;\n\t\tt[M00] = v[M00] * m[M00] + v[M01] * m[M10] + v[M02] * m[M20] + v[M03] * m[M30];\n\t\tt[M01] = v[M00] * m[M01] + v[M01] * m[M11] + v[M02] * m[M21] + v[M03] * m[M31];\n\t\tt[M02] = v[M00] * m[M02] + v[M01] * m[M12] + v[M02] * m[M22] + v[M03] * m[M32];\n\t\tt[M03] = v[M00] * m[M03] + v[M01] * m[M13] + v[M02] * m[M23] + v[M03] * m[M33];\n\t\tt[M10] = v[M10] * m[M00] + v[M11] * m[M10] + v[M12] * m[M20] + v[M13] * m[M30];\n\t\tt[M11] = v[M10] * m[M01] + v[M11] * m[M11] + v[M12] * m[M21] + v[M13] * m[M31];\n\t\tt[M12] = v[M10] * m[M02] + v[M11] * m[M12] + v[M12] * m[M22] + v[M13] * m[M32];\n\t\tt[M13] = v[M10] * m[M03] + v[M11] * m[M13] + v[M12] * m[M23] + v[M13] * m[M33];\n\t\tt[M20] = v[M20] * m[M00] + v[M21] * m[M10] + v[M22] * m[M20] + v[M23] * m[M30];\n\t\tt[M21] = v[M20] * m[M01] + v[M21] * m[M11] + v[M22] * m[M21] + v[M23] * m[M31];\n\t\tt[M22] = v[M20] * m[M02] + v[M21] * m[M12] + v[M22] * m[M22] + v[M23] * m[M32];\n\t\tt[M23] = v[M20] * m[M03] + v[M21] * m[M13] + v[M22] * m[M23] + v[M23] * m[M33];\n\t\tt[M30] = v[M30] * m[M00] + v[M31] * m[M10] + v[M32] * m[M20] + v[M33] * m[M30];\n\t\tt[M31] = v[M30] * m[M01] + v[M31] * m[M11] + v[M32] * m[M21] + v[M33] * m[M31];\n\t\tt[M32] = v[M30] * m[M02] + v[M31] * m[M12] + v[M32] * m[M22] + v[M33] * m[M32];\n\t\tt[M33] = v[M30] * m[M03] + v[M31] * m[M13] + v[M32] * m[M23] + v[M33] * m[M33];\n\t\treturn this.set(this.temp);\n\t}\n\n\tmultiplyLeft (matrix: Matrix4): Matrix4 {\n\t\tlet t = this.temp;\n\t\tlet v = this.values;\n\t\tlet m = matrix.values;\n\t\tt[M00] = m[M00] * v[M00] + m[M01] * v[M10] + m[M02] * v[M20] + m[M03] * v[M30];\n\t\tt[M01] = m[M00] * v[M01] + m[M01] * v[M11] + m[M02] * v[M21] + m[M03] * v[M31];\n\t\tt[M02] = m[M00] * v[M02] + m[M01] * v[M12] + m[M02] * v[M22] + m[M03] * v[M32];\n\t\tt[M03] = m[M00] * v[M03] + m[M01] * v[M13] + m[M02] * v[M23] + m[M03] * v[M33];\n\t\tt[M10] = m[M10] * v[M00] + m[M11] * v[M10] + m[M12] * v[M20] + m[M13] * v[M30];\n\t\tt[M11] = m[M10] * v[M01] + m[M11] * v[M11] + m[M12] * v[M21] + m[M13] * v[M31];\n\t\tt[M12] = m[M10] * v[M02] + m[M11] * v[M12] + m[M12] * v[M22] + m[M13] * v[M32];\n\t\tt[M13] = m[M10] * v[M03] + m[M11] * v[M13] + m[M12] * v[M23] + m[M13] * v[M33];\n\t\tt[M20] = m[M20] * v[M00] + m[M21] * v[M10] + m[M22] * v[M20] + m[M23] * v[M30];\n\t\tt[M21] = m[M20] * v[M01] + m[M21] * v[M11] + m[M22] * v[M21] + m[M23] * v[M31];\n\t\tt[M22] = m[M20] * v[M02] + m[M21] * v[M12] + m[M22] * v[M22] + m[M23] * v[M32];\n\t\tt[M23] = m[M20] * v[M03] + m[M21] * v[M13] + m[M22] * v[M23] + m[M23] * v[M33];\n\t\tt[M30] = m[M30] * v[M00] + m[M31] * v[M10] + m[M32] * v[M20] + m[M33] * v[M30];\n\t\tt[M31] = m[M30] * v[M01] + m[M31] * v[M11] + m[M32] * v[M21] + m[M33] * v[M31];\n\t\tt[M32] = m[M30] * v[M02] + m[M31] * v[M12] + m[M32] * v[M22] + m[M33] * v[M32];\n\t\tt[M33] = m[M30] * v[M03] + m[M31] * v[M13] + m[M32] * v[M23] + m[M33] * v[M33];\n\t\treturn this.set(this.temp);\n\t}\n\n\tlookAt (position: Vector3, direction: Vector3, up: Vector3) {\n\t\tlet xAxis = Matrix4.xAxis, yAxis = Matrix4.yAxis, zAxis = Matrix4.zAxis;\n\t\tzAxis.setFrom(direction).normalize();\n\t\txAxis.setFrom(direction).normalize();\n\t\txAxis.cross(up).normalize();\n\t\tyAxis.setFrom(xAxis).cross(zAxis).normalize();\n\t\tthis.identity();\n\t\tlet val = this.values;\n\t\tval[M00] = xAxis.x;\n\t\tval[M01] = xAxis.y;\n\t\tval[M02] = xAxis.z;\n\t\tval[M10] = yAxis.x;\n\t\tval[M11] = yAxis.y;\n\t\tval[M12] = yAxis.z;\n\t\tval[M20] = -zAxis.x;\n\t\tval[M21] = -zAxis.y;\n\t\tval[M22] = -zAxis.z;\n\n\t\tMatrix4.tmpMatrix.identity();\n\t\tMatrix4.tmpMatrix.values[M03] = -position.x;\n\t\tMatrix4.tmpMatrix.values[M13] = -position.y;\n\t\tMatrix4.tmpMatrix.values[M23] = -position.z;\n\t\tthis.multiply(Matrix4.tmpMatrix)\n\n\t\treturn this;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Matrix4 } from \"./Matrix4\";\nimport { Vector3 } from \"./Vector3\";\n\nexport class OrthoCamera {\n\tposition = new Vector3(0, 0, 0);\n\tdirection = new Vector3(0, 0, -1);\n\tup = new Vector3(0, 1, 0);\n\tnear = 0;\n\tfar = 100;\n\tzoom = 1;\n\tviewportWidth = 0;\n\tviewportHeight = 0;\n\tprojectionView = new Matrix4();\n\tinverseProjectionView = new Matrix4();\n\tprojection = new Matrix4();\n\tview = new Matrix4();\n\n\tconstructor (viewportWidth: number, viewportHeight: number) {\n\t\tthis.viewportWidth = viewportWidth;\n\t\tthis.viewportHeight = viewportHeight;\n\t\tthis.update();\n\t}\n\n\tupdate () {\n\t\tlet projection = this.projection;\n\t\tlet view = this.view;\n\t\tlet projectionView = this.projectionView;\n\t\tlet inverseProjectionView = this.inverseProjectionView;\n\t\tlet zoom = this.zoom, viewportWidth = this.viewportWidth, viewportHeight = this.viewportHeight;\n\t\tprojection.ortho(zoom * (-viewportWidth / 2), zoom * (viewportWidth / 2),\n\t\t\tzoom * (-viewportHeight / 2), zoom * (viewportHeight / 2),\n\t\t\tthis.near, this.far);\n\t\tview.lookAt(this.position, this.direction, this.up);\n\t\tprojectionView.set(projection.values);\n\t\tprojectionView.multiply(view);\n\t\tinverseProjectionView.set(projectionView.values).invert();\n\t}\n\n\tscreenToWorld (screenCoords: Vector3, screenWidth: number, screenHeight: number) {\n\t\tlet x = screenCoords.x, y = screenHeight - screenCoords.y - 1;\n\t\tscreenCoords.x = (2 * x) / screenWidth - 1;\n\t\tscreenCoords.y = (2 * y) / screenHeight - 1;\n\t\tscreenCoords.z = (2 * screenCoords.z) - 1;\n\t\tscreenCoords.project(this.inverseProjectionView);\n\t\treturn screenCoords;\n\t}\n\n\tworldToScreen (worldCoords: Vector3, screenWidth: number, screenHeight: number) {\n\t\tworldCoords.project(this.projectionView);\n\t\tworldCoords.x = screenWidth * (worldCoords.x + 1) / 2;\n\t\tworldCoords.y = screenHeight * (worldCoords.y + 1) / 2;\n\t\tworldCoords.z = (worldCoords.z + 1) / 2;\n\t\treturn worldCoords;\n\t}\n\n\tsetViewport (viewportWidth: number, viewportHeight: number) {\n\t\tthis.viewportWidth = viewportWidth;\n\t\tthis.viewportHeight = viewportHeight;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nexport class Input {\n\telement: HTMLElement;\n\tmouseX = 0;\n\tmouseY = 0;\n\tbuttonDown = false;\n\ttouch0: Touch | null = null;\n\ttouch1: Touch | null = null;\n\tinitialPinchDistance = 0;\n\tprivate listeners = new Array<InputListener>();\n\tprivate eventListeners: Array<{ target: any, event: any, func: any }> = [];\n\n\tconstructor (element: HTMLElement) {\n\t\tthis.element = element;\n\t\tthis.setupCallbacks(element);\n\t}\n\n\tprivate setupCallbacks (element: HTMLElement) {\n\t\tlet mouseDown = (ev: UIEvent) => {\n\t\t\tif (ev instanceof MouseEvent) {\n\t\t\t\tlet rect = element.getBoundingClientRect();\n\t\t\t\tthis.mouseX = ev.clientX - rect.left;;\n\t\t\t\tthis.mouseY = ev.clientY - rect.top;\n\t\t\t\tthis.buttonDown = true;\n\t\t\t\tthis.listeners.map((listener) => { if (listener.down) listener.down(this.mouseX, this.mouseY); });\n\n\t\t\t\tdocument.addEventListener(\"mousemove\", mouseMove);\n\t\t\t\tdocument.addEventListener(\"mouseup\", mouseUp);\n\t\t\t}\n\t\t}\n\n\t\tlet mouseMove = (ev: UIEvent) => {\n\t\t\tif (ev instanceof MouseEvent) {\n\t\t\t\tlet rect = element.getBoundingClientRect();\n\t\t\t\tthis.mouseX = ev.clientX - rect.left;;\n\t\t\t\tthis.mouseY = ev.clientY - rect.top;\n\n\t\t\t\tthis.listeners.map((listener) => {\n\t\t\t\t\tif (this.buttonDown) {\n\t\t\t\t\t\tif (listener.dragged) listener.dragged(this.mouseX, this.mouseY);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (listener.moved) listener.moved(this.mouseX, this.mouseY);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tlet mouseUp = (ev: UIEvent) => {\n\t\t\tif (ev instanceof MouseEvent) {\n\t\t\t\tlet rect = element.getBoundingClientRect();\n\t\t\t\tthis.mouseX = ev.clientX - rect.left;;\n\t\t\t\tthis.mouseY = ev.clientY - rect.top;\n\t\t\t\tthis.buttonDown = false;\n\t\t\t\tthis.listeners.map((listener) => { if (listener.up) listener.up(this.mouseX, this.mouseY); });\n\n\t\t\t\tdocument.removeEventListener(\"mousemove\", mouseMove);\n\t\t\t\tdocument.removeEventListener(\"mouseup\", mouseUp);\n\t\t\t}\n\t\t}\n\n\t\tlet mouseWheel = (e: WheelEvent) => {\n\t\t\te.preventDefault();\n\t\t\tlet deltaY = e.deltaY;\n\t\t\tif (e.deltaMode == WheelEvent.DOM_DELTA_LINE) deltaY *= 8;\n\t\t\tif (e.deltaMode == WheelEvent.DOM_DELTA_PAGE) deltaY *= 24;\n\t\t\tthis.listeners.map((listener) => { if (listener.wheel) listener.wheel(e.deltaY); });\n\t\t};\n\n\t\telement.addEventListener(\"mousedown\", mouseDown, true);\n\t\telement.addEventListener(\"mousemove\", mouseMove, true);\n\t\telement.addEventListener(\"mouseup\", mouseUp, true);\n\t\telement.addEventListener(\"wheel\", mouseWheel, true);\n\n\n\t\telement.addEventListener(\"touchstart\", (ev: TouchEvent) => {\n\t\t\tif (!this.touch0 || !this.touch1) {\n\t\t\t\tvar touches = ev.changedTouches;\n\t\t\t\tlet nativeTouch = touches.item(0);\n\t\t\t\tif (!nativeTouch) return;\n\t\t\t\tlet rect = element.getBoundingClientRect();\n\t\t\t\tlet x = nativeTouch.clientX - rect.left;\n\t\t\t\tlet y = nativeTouch.clientY - rect.top;\n\t\t\t\tlet touch = new Touch(nativeTouch.identifier, x, y);\n\t\t\t\tthis.mouseX = x;\n\t\t\t\tthis.mouseY = y;\n\t\t\t\tthis.buttonDown = true;\n\n\t\t\t\tif (!this.touch0) {\n\t\t\t\t\tthis.touch0 = touch;\n\t\t\t\t\tthis.listeners.map((listener) => { if (listener.down) listener.down(touch.x, touch.y) })\n\t\t\t\t} else if (!this.touch1) {\n\t\t\t\t\tthis.touch1 = touch;\n\t\t\t\t\tlet dx = this.touch1.x - this.touch0.x;\n\t\t\t\t\tlet dy = this.touch1.x - this.touch0.x;\n\t\t\t\t\tthis.initialPinchDistance = Math.sqrt(dx * dx + dy * dy);\n\t\t\t\t\tthis.listeners.map((listener) => { if (listener.zoom) listener.zoom(this.initialPinchDistance, this.initialPinchDistance) });\n\t\t\t\t}\n\t\t\t}\n\t\t\tev.preventDefault();\n\t\t}, false);\n\n\t\telement.addEventListener(\"touchmove\", (ev: TouchEvent) => {\n\t\t\tif (this.touch0) {\n\t\t\t\tvar touches = ev.changedTouches;\n\t\t\t\tlet rect = element.getBoundingClientRect();\n\t\t\t\tfor (var i = 0; i < touches.length; i++) {\n\t\t\t\t\tvar nativeTouch = touches[i];\n\t\t\t\t\tlet x = nativeTouch.clientX - rect.left;\n\t\t\t\t\tlet y = nativeTouch.clientY - rect.top;\n\n\t\t\t\t\tif (this.touch0.identifier === nativeTouch.identifier) {\n\t\t\t\t\t\tthis.touch0.x = this.mouseX = x;\n\t\t\t\t\t\tthis.touch0.y = this.mouseY = y;\n\t\t\t\t\t\tthis.listeners.map((listener) => { if (listener.dragged) listener.dragged(x, y) });\n\t\t\t\t\t}\n\t\t\t\t\tif (this.touch1 && this.touch1.identifier === nativeTouch.identifier) {\n\t\t\t\t\t\tthis.touch1.x = this.mouseX = x;\n\t\t\t\t\t\tthis.touch1.y = this.mouseY = y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.touch0 && this.touch1) {\n\t\t\t\t\tlet dx = this.touch1.x - this.touch0.x;\n\t\t\t\t\tlet dy = this.touch1.x - this.touch0.x;\n\t\t\t\t\tlet distance = Math.sqrt(dx * dx + dy * dy);\n\t\t\t\t\tthis.listeners.map((listener) => { if (listener.zoom) listener.zoom(this.initialPinchDistance, distance) });\n\t\t\t\t}\n\t\t\t}\n\t\t\tev.preventDefault();\n\t\t}, false);\n\n\t\tlet touchEnd = (ev: TouchEvent) => {\n\t\t\tif (this.touch0) {\n\t\t\t\tvar touches = ev.changedTouches;\n\t\t\t\tlet rect = element.getBoundingClientRect();\n\n\t\t\t\tfor (var i = 0; i < touches.length; i++) {\n\t\t\t\t\tvar nativeTouch = touches[i];\n\t\t\t\t\tlet x = nativeTouch.clientX - rect.left;\n\t\t\t\t\tlet y = nativeTouch.clientY - rect.top;\n\n\t\t\t\t\tif (this.touch0.identifier === nativeTouch.identifier) {\n\t\t\t\t\t\tthis.touch0 = null;\n\t\t\t\t\t\tthis.mouseX = x;\n\t\t\t\t\t\tthis.mouseY = y;\n\t\t\t\t\t\tthis.listeners.map((listener) => { if (listener.up) listener.up(x, y) });\n\n\t\t\t\t\t\tif (!this.touch1) {\n\t\t\t\t\t\t\tthis.buttonDown = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.touch0 = this.touch1;\n\t\t\t\t\t\t\tthis.touch1 = null;\n\t\t\t\t\t\t\tthis.mouseX = this.touch0.x;\n\t\t\t\t\t\t\tthis.mouseX = this.touch0.x;\n\t\t\t\t\t\t\tthis.buttonDown = true;\n\t\t\t\t\t\t\tthis.listeners.map((listener) => { if (listener.down) listener.down(this.touch0!.x, this.touch0!.y) });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this.touch1 && this.touch1.identifier) {\n\t\t\t\t\t\tthis.touch1 = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tev.preventDefault();\n\t\t};\n\t\telement.addEventListener(\"touchend\", touchEnd, false);\n\t\telement.addEventListener(\"touchcancel\", touchEnd);\n\t}\n\n\taddListener (listener: InputListener) {\n\t\tthis.listeners.push(listener);\n\t}\n\n\tremoveListener (listener: InputListener) {\n\t\tlet idx = this.listeners.indexOf(listener);\n\t\tif (idx > -1) {\n\t\t\tthis.listeners.splice(idx, 1);\n\t\t}\n\t}\n}\n\nexport class Touch {\n\tconstructor (public identifier: number, public x: number, public y: number) {\n\t}\n}\n\nexport interface InputListener {\n\tdown?(x: number, y: number): void;\n\tup?(x: number, y: number): void;\n\tmoved?(x: number, y: number): void;\n\tdragged?(x: number, y: number): void;\n\twheel?(delta: number): void;\n\tzoom?(initialDistance: number, distance: number): void;\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Input } from \"./Input\";\nimport { OrthoCamera } from \"./Camera\";\nimport { Vector3 } from \"./Vector3\";\n\nexport class CameraController {\n\tconstructor (public canvas: HTMLElement, public camera: OrthoCamera) {\n\t\tlet cameraX = 0, cameraY = 0, cameraZoom = 0;\n\t\tlet mouseX = 0, mouseY = 0;\n\t\tlet lastX = 0, lastY = 0;\n\t\tlet initialZoom = 0;\n\n\t\tnew Input(canvas).addListener({\n\t\t\tdown: (x: number, y: number) => {\n\t\t\t\tcameraX = camera.position.x;\n\t\t\t\tcameraY = camera.position.y;\n\t\t\t\tmouseX = lastX = x;\n\t\t\t\tmouseY = lastY = y;\n\t\t\t\tinitialZoom = camera.zoom;\n\t\t\t},\n\t\t\tdragged: (x: number, y: number) => {\n\t\t\t\tlet deltaX = x - mouseX;\n\t\t\t\tlet deltaY = y - mouseY;\n\t\t\t\tlet originWorld = camera.screenToWorld(new Vector3(0, 0), canvas.clientWidth, canvas.clientHeight);\n\t\t\t\tlet deltaWorld = camera.screenToWorld(new Vector3(deltaX, deltaY), canvas.clientWidth, canvas.clientHeight).sub(originWorld);\n\t\t\t\tcamera.position.set(cameraX - deltaWorld.x, cameraY - deltaWorld.y, 0);\n\t\t\t\tcamera.update();\n\t\t\t\tlastX = x;\n\t\t\t\tlastY = y;\n\t\t\t},\n\t\t\twheel: (delta: number) => {\n\t\t\t\tlet zoomAmount = delta / 200 * camera.zoom;\n\t\t\t\tlet newZoom = camera.zoom + zoomAmount;\n\t\t\t\tif (newZoom > 0) {\n\t\t\t\t\tlet x = 0, y = 0;\n\t\t\t\t\tif (delta < 0) {\n\t\t\t\t\t\tx = lastX; y = lastY;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet viewCenter = new Vector3(canvas.clientWidth / 2 + 15, canvas.clientHeight / 2);\n\t\t\t\t\t\tlet mouseToCenterX = lastX - viewCenter.x;\n\t\t\t\t\t\tlet mouseToCenterY = canvas.clientHeight - 1 - lastY - viewCenter.y;\n\t\t\t\t\t\tx = viewCenter.x - mouseToCenterX;\n\t\t\t\t\t\ty = canvas.clientHeight - 1 - viewCenter.y + mouseToCenterY;\n\t\t\t\t\t}\n\t\t\t\t\tlet oldDistance = camera.screenToWorld(new Vector3(x, y), canvas.clientWidth, canvas.clientHeight);\n\t\t\t\t\tcamera.zoom = newZoom;\n\t\t\t\t\tcamera.update();\n\t\t\t\t\tlet newDistance = camera.screenToWorld(new Vector3(x, y), canvas.clientWidth, canvas.clientHeight);\n\t\t\t\t\tcamera.position.add(oldDistance.sub(newDistance));\n\t\t\t\t\tcamera.update();\n\t\t\t\t}\n\t\t\t},\n\t\t\tzoom: (initialDistance, distance) => {\n\t\t\t\tlet newZoom = initialDistance / distance;\n\t\t\t\tcamera.zoom = initialZoom * newZoom;\n\t\t\t},\n\t\t\tup: (x: number, y: number) => {\n\t\t\t\tlastX = x;\n\t\t\t\tlastY = y;\n\t\t\t},\n\t\t\tmoved: (x: number, y: number) => {\n\t\t\t\tlastX = x;\n\t\t\t\tlastY = y;\n\t\t\t},\n\t\t});\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Disposable, Restorable } from \"@esotericsoftware/spine-core\";\nimport { ManagedWebGLRenderingContext } from \"./WebGL\";\n\nexport class Shader implements Disposable, Restorable {\n\tpublic static MVP_MATRIX = \"u_projTrans\";\n\tpublic static POSITION = \"a_position\";\n\tpublic static COLOR = \"a_color\";\n\tpublic static COLOR2 = \"a_color2\";\n\tpublic static TEXCOORDS = \"a_texCoords\";\n\tpublic static SAMPLER = \"u_texture\";\n\n\tprivate context: ManagedWebGLRenderingContext;\n\tprivate vs: WebGLShader | null = null;\n\tprivate vsSource: string;\n\tprivate fs: WebGLShader | null = null;\n\tprivate fsSource: string;\n\tprivate program: WebGLProgram | null = null;\n\tprivate tmp2x2: Float32Array = new Float32Array(2 * 2);\n\tprivate tmp3x3: Float32Array = new Float32Array(3 * 3);\n\tprivate tmp4x4: Float32Array = new Float32Array(4 * 4);\n\n\tpublic getProgram () { return this.program; }\n\tpublic getVertexShader () { return this.vertexShader; }\n\tpublic getFragmentShader () { return this.fragmentShader; }\n\tpublic getVertexShaderSource () { return this.vsSource; }\n\tpublic getFragmentSource () { return this.fsSource; }\n\n\tconstructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, private vertexShader: string, private fragmentShader: string) {\n\t\tthis.vsSource = vertexShader;\n\t\tthis.fsSource = fragmentShader;\n\t\tthis.context = context instanceof ManagedWebGLRenderingContext ? context : new ManagedWebGLRenderingContext(context);\n\t\tthis.context.addRestorable(this);\n\t\tthis.compile();\n\t}\n\n\tprivate compile () {\n\t\tlet gl = this.context.gl;\n\t\ttry {\n\t\t\tthis.vs = this.compileShader(gl.VERTEX_SHADER, this.vertexShader);\n\t\t\tif (!this.vs) throw new Error(\"Couldn't compile vertex shader.\");\n\t\t\tthis.fs = this.compileShader(gl.FRAGMENT_SHADER, this.fragmentShader);\n\t\t\tif (!this.fs) throw new Error(\"Couldn#t compile fragment shader.\");\n\t\t\tthis.program = this.compileProgram(this.vs, this.fs);\n\t\t} catch (e) {\n\t\t\tthis.dispose();\n\t\t\tthrow e;\n\t\t}\n\t}\n\n\tprivate compileShader (type: number, source: string) {\n\t\tlet gl = this.context.gl;\n\t\tlet shader = gl.createShader(type);\n\t\tif (!shader) throw new Error(\"Couldn't create shader.\");\n\t\tgl.shaderSource(shader, source);\n\t\tgl.compileShader(shader);\n\t\tif (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n\t\t\tlet error = \"Couldn't compile shader: \" + gl.getShaderInfoLog(shader);\n\t\t\tgl.deleteShader(shader);\n\t\t\tif (!gl.isContextLost()) throw new Error(error);\n\t\t}\n\t\treturn shader;\n\t}\n\n\tprivate compileProgram (vs: WebGLShader, fs: WebGLShader) {\n\t\tlet gl = this.context.gl;\n\t\tlet program = gl.createProgram();\n\t\tif (!program) throw new Error(\"Couldn't compile program.\");\n\t\tgl.attachShader(program, vs);\n\t\tgl.attachShader(program, fs);\n\t\tgl.linkProgram(program);\n\n\t\tif (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n\t\t\tlet error = \"Couldn't compile shader program: \" + gl.getProgramInfoLog(program);\n\t\t\tgl.deleteProgram(program);\n\t\t\tif (!gl.isContextLost()) throw new Error(error);\n\t\t}\n\t\treturn program;\n\t}\n\n\trestore () {\n\t\tthis.compile();\n\t}\n\n\tpublic bind () {\n\t\tthis.context.gl.useProgram(this.program);\n\t}\n\n\tpublic unbind () {\n\t\tthis.context.gl.useProgram(null);\n\t}\n\n\tpublic setUniformi (uniform: string, value: number) {\n\t\tthis.context.gl.uniform1i(this.getUniformLocation(uniform), value);\n\t}\n\n\tpublic setUniformf (uniform: string, value: number) {\n\t\tthis.context.gl.uniform1f(this.getUniformLocation(uniform), value);\n\t}\n\n\tpublic setUniform2f (uniform: string, value: number, value2: number) {\n\t\tthis.context.gl.uniform2f(this.getUniformLocation(uniform), value, value2);\n\t}\n\n\tpublic setUniform3f (uniform: string, value: number, value2: number, value3: number) {\n\t\tthis.context.gl.uniform3f(this.getUniformLocation(uniform), value, value2, value3);\n\t}\n\n\tpublic setUniform4f (uniform: string, value: number, value2: number, value3: number, value4: number) {\n\t\tthis.context.gl.uniform4f(this.getUniformLocation(uniform), value, value2, value3, value4);\n\t}\n\n\tpublic setUniform2x2f (uniform: string, value: ArrayLike<number>) {\n\t\tlet gl = this.context.gl;\n\t\tthis.tmp2x2.set(value);\n\t\tgl.uniformMatrix2fv(this.getUniformLocation(uniform), false, this.tmp2x2);\n\t}\n\n\tpublic setUniform3x3f (uniform: string, value: ArrayLike<number>) {\n\t\tlet gl = this.context.gl;\n\t\tthis.tmp3x3.set(value);\n\t\tgl.uniformMatrix3fv(this.getUniformLocation(uniform), false, this.tmp3x3);\n\t}\n\n\tpublic setUniform4x4f (uniform: string, value: ArrayLike<number>) {\n\t\tlet gl = this.context.gl;\n\t\tthis.tmp4x4.set(value);\n\t\tgl.uniformMatrix4fv(this.getUniformLocation(uniform), false, this.tmp4x4);\n\t}\n\n\tpublic getUniformLocation (uniform: string): WebGLUniformLocation | null {\n\t\tlet gl = this.context.gl;\n\t\tif (!this.program) throw new Error(\"Shader not compiled.\");\n\t\tlet location = gl.getUniformLocation(this.program, uniform);\n\t\tif (!location && !gl.isContextLost()) throw new Error(`Couldn't find location for uniform ${uniform}`);\n\t\treturn location;\n\t}\n\n\tpublic getAttributeLocation (attribute: string): number {\n\t\tlet gl = this.context.gl;\n\t\tif (!this.program) throw new Error(\"Shader not compiled.\");\n\t\tlet location = gl.getAttribLocation(this.program, attribute);\n\t\tif (location == -1 && !gl.isContextLost()) throw new Error(`Couldn't find location for attribute ${attribute}`);\n\t\treturn location;\n\t}\n\n\tpublic dispose () {\n\t\tthis.context.removeRestorable(this);\n\n\t\tlet gl = this.context.gl;\n\t\tif (this.vs) {\n\t\t\tgl.deleteShader(this.vs);\n\t\t\tthis.vs = null;\n\t\t}\n\n\t\tif (this.fs) {\n\t\t\tgl.deleteShader(this.fs);\n\t\t\tthis.fs = null;\n\t\t}\n\n\t\tif (this.program) {\n\t\t\tgl.deleteProgram(this.program);\n\t\t\tthis.program = null;\n\t\t}\n\t}\n\n\tpublic static newColoredTextured (context: ManagedWebGLRenderingContext | WebGLRenderingContext): Shader {\n\t\tlet vs = `\n\t\t\t\tattribute vec4 ${Shader.POSITION};\n\t\t\t\tattribute vec4 ${Shader.COLOR};\n\t\t\t\tattribute vec2 ${Shader.TEXCOORDS};\n\t\t\t\tuniform mat4 ${Shader.MVP_MATRIX};\n\t\t\t\tvarying vec4 v_color;\n\t\t\t\tvarying vec2 v_texCoords;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tv_color = ${Shader.COLOR};\n\t\t\t\t\tv_texCoords = ${Shader.TEXCOORDS};\n\t\t\t\t\tgl_Position = ${Shader.MVP_MATRIX} * ${Shader.POSITION};\n\t\t\t\t}\n\t\t\t`;\n\n\t\tlet fs = `\n\t\t\t\t#ifdef GL_ES\n\t\t\t\t\t#define LOWP lowp\n\t\t\t\t\tprecision mediump float;\n\t\t\t\t#else\n\t\t\t\t\t#define LOWP\n\t\t\t\t#endif\n\t\t\t\tvarying LOWP vec4 v_color;\n\t\t\t\tvarying vec2 v_texCoords;\n\t\t\t\tuniform sampler2D u_texture;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tgl_FragColor = v_color * texture2D(u_texture, v_texCoords);\n\t\t\t\t}\n\t\t\t`;\n\n\t\treturn new Shader(context, vs, fs);\n\t}\n\n\tpublic static newTwoColoredTextured (context: ManagedWebGLRenderingContext | WebGLRenderingContext): Shader {\n\t\tlet vs = `\n\t\t\t\tattribute vec4 ${Shader.POSITION};\n\t\t\t\tattribute vec4 ${Shader.COLOR};\n\t\t\t\tattribute vec4 ${Shader.COLOR2};\n\t\t\t\tattribute vec2 ${Shader.TEXCOORDS};\n\t\t\t\tuniform mat4 ${Shader.MVP_MATRIX};\n\t\t\t\tvarying vec4 v_light;\n\t\t\t\tvarying vec4 v_dark;\n\t\t\t\tvarying vec2 v_texCoords;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tv_light = ${Shader.COLOR};\n\t\t\t\t\tv_dark = ${Shader.COLOR2};\n\t\t\t\t\tv_texCoords = ${Shader.TEXCOORDS};\n\t\t\t\t\tgl_Position = ${Shader.MVP_MATRIX} * ${Shader.POSITION};\n\t\t\t\t}\n\t\t\t`;\n\n\t\tlet fs = `\n\t\t\t\t#ifdef GL_ES\n\t\t\t\t\t#define LOWP lowp\n\t\t\t\t\tprecision mediump float;\n\t\t\t\t#else\n\t\t\t\t\t#define LOWP\n\t\t\t\t#endif\n\t\t\t\tvarying LOWP vec4 v_light;\n\t\t\t\tvarying LOWP vec4 v_dark;\n\t\t\t\tvarying vec2 v_texCoords;\n\t\t\t\tuniform sampler2D u_texture;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tvec4 texColor = texture2D(u_texture, v_texCoords);\n\t\t\t\t\tgl_FragColor.a = texColor.a * v_light.a;\n\t\t\t\t\tgl_FragColor.rgb = ((texColor.a - 1.0) * v_dark.a + 1.0 - texColor.rgb) * v_dark.rgb + texColor.rgb * v_light.rgb;\n\t\t\t\t}\n\t\t\t`;\n\n\t\treturn new Shader(context, vs, fs);\n\t}\n\n\tpublic static newColored (context: ManagedWebGLRenderingContext | WebGLRenderingContext): Shader {\n\t\tlet vs = `\n\t\t\t\tattribute vec4 ${Shader.POSITION};\n\t\t\t\tattribute vec4 ${Shader.COLOR};\n\t\t\t\tuniform mat4 ${Shader.MVP_MATRIX};\n\t\t\t\tvarying vec4 v_color;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tv_color = ${Shader.COLOR};\n\t\t\t\t\tgl_Position = ${Shader.MVP_MATRIX} * ${Shader.POSITION};\n\t\t\t\t}\n\t\t\t`;\n\n\t\tlet fs = `\n\t\t\t\t#ifdef GL_ES\n\t\t\t\t\t#define LOWP lowp\n\t\t\t\t\tprecision mediump float;\n\t\t\t\t#else\n\t\t\t\t\t#define LOWP\n\t\t\t\t#endif\n\t\t\t\tvarying LOWP vec4 v_color;\n\n\t\t\t\tvoid main () {\n\t\t\t\t\tgl_FragColor = v_color;\n\t\t\t\t}\n\t\t\t`;\n\n\t\treturn new Shader(context, vs, fs);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Disposable, Restorable } from \"@esotericsoftware/spine-core\";\nimport { Shader } from \"./Shader\";\nimport { ManagedWebGLRenderingContext } from \"./WebGL\";\n\n\nexport class Mesh implements Disposable, Restorable {\n\tprivate context: ManagedWebGLRenderingContext;\n\tprivate vertices: Float32Array;\n\tprivate verticesBuffer: WebGLBuffer | null = null;\n\tprivate verticesLength = 0;\n\tprivate dirtyVertices = false;\n\tprivate indices: Uint16Array;\n\tprivate indicesBuffer: WebGLBuffer | null = null;\n\tprivate indicesLength = 0;\n\tprivate dirtyIndices = false;\n\tprivate elementsPerVertex = 0;\n\n\tgetAttributes (): VertexAttribute[] { return this.attributes; }\n\n\tmaxVertices (): number { return this.vertices.length / this.elementsPerVertex; }\n\tnumVertices (): number { return this.verticesLength / this.elementsPerVertex; }\n\tsetVerticesLength (length: number) {\n\t\tthis.dirtyVertices = true;\n\t\tthis.verticesLength = length;\n\t}\n\tgetVertices (): Float32Array { return this.vertices; }\n\n\tmaxIndices (): number { return this.indices.length; }\n\tnumIndices (): number { return this.indicesLength; }\n\tsetIndicesLength (length: number) {\n\t\tthis.dirtyIndices = true;\n\t\tthis.indicesLength = length;\n\t}\n\tgetIndices (): Uint16Array { return this.indices };\n\n\tgetVertexSizeInFloats (): number {\n\t\tlet size = 0;\n\t\tfor (var i = 0; i < this.attributes.length; i++) {\n\t\t\tlet attribute = this.attributes[i];\n\t\t\tsize += attribute.numElements;\n\t\t}\n\t\treturn size;\n\t}\n\n\tconstructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, private attributes: VertexAttribute[], maxVertices: number, maxIndices: number) {\n\t\tthis.context = context instanceof ManagedWebGLRenderingContext ? context : new ManagedWebGLRenderingContext(context);\n\t\tthis.elementsPerVertex = 0;\n\t\tfor (let i = 0; i < attributes.length; i++) {\n\t\t\tthis.elementsPerVertex += attributes[i].numElements;\n\t\t}\n\t\tthis.vertices = new Float32Array(maxVertices * this.elementsPerVertex);\n\t\tthis.indices = new Uint16Array(maxIndices);\n\t\tthis.context.addRestorable(this);\n\t}\n\n\tsetVertices (vertices: Array<number>) {\n\t\tthis.dirtyVertices = true;\n\t\tif (vertices.length > this.vertices.length) throw Error(\"Mesh can't store more than \" + this.maxVertices() + \" vertices\");\n\t\tthis.vertices.set(vertices, 0);\n\t\tthis.verticesLength = vertices.length;\n\t}\n\n\tsetIndices (indices: Array<number>) {\n\t\tthis.dirtyIndices = true;\n\t\tif (indices.length > this.indices.length) throw Error(\"Mesh can't store more than \" + this.maxIndices() + \" indices\");\n\t\tthis.indices.set(indices, 0);\n\t\tthis.indicesLength = indices.length;\n\t}\n\n\tdraw (shader: Shader, primitiveType: number) {\n\t\tthis.drawWithOffset(shader, primitiveType, 0, this.indicesLength > 0 ? this.indicesLength : this.verticesLength / this.elementsPerVertex);\n\t}\n\n\tdrawWithOffset (shader: Shader, primitiveType: number, offset: number, count: number) {\n\t\tlet gl = this.context.gl;\n\t\tif (this.dirtyVertices || this.dirtyIndices) this.update();\n\t\tthis.bind(shader);\n\t\tif (this.indicesLength > 0) {\n\t\t\tgl.drawElements(primitiveType, count, gl.UNSIGNED_SHORT, offset * 2);\n\t\t} else {\n\t\t\tgl.drawArrays(primitiveType, offset, count);\n\t\t}\n\t\tthis.unbind(shader);\n\t}\n\n\tbind (shader: Shader) {\n\t\tlet gl = this.context.gl;\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.verticesBuffer);\n\t\tlet offset = 0;\n\t\tfor (let i = 0; i < this.attributes.length; i++) {\n\t\t\tlet attrib = this.attributes[i];\n\t\t\tlet location = shader.getAttributeLocation(attrib.name);\n\t\t\tgl.enableVertexAttribArray(location);\n\t\t\tgl.vertexAttribPointer(location, attrib.numElements, gl.FLOAT, false, this.elementsPerVertex * 4, offset * 4);\n\t\t\toffset += attrib.numElements;\n\t\t}\n\t\tif (this.indicesLength > 0) gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer);\n\t}\n\n\tunbind (shader: Shader) {\n\t\tlet gl = this.context.gl;\n\t\tfor (let i = 0; i < this.attributes.length; i++) {\n\t\t\tlet attrib = this.attributes[i];\n\t\t\tlet location = shader.getAttributeLocation(attrib.name);\n\t\t\tgl.disableVertexAttribArray(location);\n\t\t}\n\t\tgl.bindBuffer(gl.ARRAY_BUFFER, null);\n\t\tif (this.indicesLength > 0) gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\n\t}\n\n\tprivate update () {\n\t\tlet gl = this.context.gl;\n\t\tif (this.dirtyVertices) {\n\t\t\tif (!this.verticesBuffer) {\n\t\t\t\tthis.verticesBuffer = gl.createBuffer();\n\t\t\t}\n\t\t\tgl.bindBuffer(gl.ARRAY_BUFFER, this.verticesBuffer);\n\t\t\tgl.bufferData(gl.ARRAY_BUFFER, this.vertices.subarray(0, this.verticesLength), gl.DYNAMIC_DRAW);\n\t\t\tthis.dirtyVertices = false;\n\t\t}\n\n\t\tif (this.dirtyIndices) {\n\t\t\tif (!this.indicesBuffer) {\n\t\t\t\tthis.indicesBuffer = gl.createBuffer();\n\t\t\t}\n\t\t\tgl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer);\n\t\t\tgl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices.subarray(0, this.indicesLength), gl.DYNAMIC_DRAW);\n\t\t\tthis.dirtyIndices = false;\n\t\t}\n\t}\n\n\trestore () {\n\t\tthis.verticesBuffer = null;\n\t\tthis.indicesBuffer = null;\n\t\tthis.update();\n\t}\n\n\tdispose () {\n\t\tthis.context.removeRestorable(this);\n\t\tlet gl = this.context.gl;\n\t\tgl.deleteBuffer(this.verticesBuffer);\n\t\tgl.deleteBuffer(this.indicesBuffer);\n\t}\n}\n\nexport class VertexAttribute {\n\tconstructor (public name: string, public type: VertexAttributeType, public numElements: number) { }\n}\n\nexport class Position2Attribute extends VertexAttribute {\n\tconstructor () {\n\t\tsuper(Shader.POSITION, VertexAttributeType.Float, 2);\n\t}\n}\n\nexport class Position3Attribute extends VertexAttribute {\n\tconstructor () {\n\t\tsuper(Shader.POSITION, VertexAttributeType.Float, 3);\n\t}\n}\n\nexport class TexCoordAttribute extends VertexAttribute {\n\tconstructor (unit: number = 0) {\n\t\tsuper(Shader.TEXCOORDS + (unit == 0 ? \"\" : unit), VertexAttributeType.Float, 2);\n\t}\n}\n\nexport class ColorAttribute extends VertexAttribute {\n\tconstructor () {\n\t\tsuper(Shader.COLOR, VertexAttributeType.Float, 4);\n\t}\n}\n\nexport class Color2Attribute extends VertexAttribute {\n\tconstructor () {\n\t\tsuper(Shader.COLOR2, VertexAttributeType.Float, 4);\n\t}\n}\n\nexport enum VertexAttributeType {\n\tFloat\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Disposable } from \"@esotericsoftware/spine-core\";\nimport { GLTexture } from \"./GLTexture\";\nimport { Mesh, Position2Attribute, ColorAttribute, TexCoordAttribute, Color2Attribute } from \"./Mesh\";\nimport { Shader } from \"./Shader\";\nimport { ManagedWebGLRenderingContext } from \"./WebGL\";\n\nexport class PolygonBatcher implements Disposable {\n\tprivate context: ManagedWebGLRenderingContext;\n\tprivate drawCalls = 0;\n\tprivate static globalDrawCalls = 0;\n\tprivate isDrawing = false;\n\tprivate mesh: Mesh;\n\tprivate shader: Shader | null = null;\n\tprivate lastTexture: GLTexture | null = null;\n\tprivate verticesLength = 0;\n\tprivate indicesLength = 0;\n\tprivate srcColorBlend: number;\n\tprivate srcAlphaBlend: number;\n\tprivate dstBlend: number;\n\tprivate cullWasEnabled = false;\n\n\tconstructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint: boolean = true, maxVertices: number = 10920) {\n\t\tif (maxVertices > 10920) throw new Error(\"Can't have more than 10920 triangles per batch: \" + maxVertices);\n\t\tthis.context = context instanceof ManagedWebGLRenderingContext ? context : new ManagedWebGLRenderingContext(context);\n\t\tlet attributes = twoColorTint ?\n\t\t\t[new Position2Attribute(), new ColorAttribute(), new TexCoordAttribute(), new Color2Attribute()] :\n\t\t\t[new Position2Attribute(), new ColorAttribute(), new TexCoordAttribute()];\n\t\tthis.mesh = new Mesh(context, attributes, maxVertices, maxVertices * 3);\n\t\tlet gl = this.context.gl;\n\t\tthis.srcColorBlend = gl.SRC_ALPHA;\n\t\tthis.srcAlphaBlend = gl.ONE;\n\t\tthis.dstBlend = gl.ONE_MINUS_SRC_ALPHA;\n\t}\n\n\tbegin (shader: Shader) {\n\t\tif (this.isDrawing) throw new Error(\"PolygonBatch is already drawing. Call PolygonBatch.end() before calling PolygonBatch.begin()\");\n\t\tthis.drawCalls = 0;\n\t\tthis.shader = shader;\n\t\tthis.lastTexture = null;\n\t\tthis.isDrawing = true;\n\n\t\tlet gl = this.context.gl;\n\t\tgl.enable(gl.BLEND);\n\t\tgl.blendFuncSeparate(this.srcColorBlend, this.dstBlend, this.srcAlphaBlend, this.dstBlend);\n\n\t\tthis.cullWasEnabled = gl.isEnabled(gl.CULL_FACE);\n\t\tif (this.cullWasEnabled) gl.disable(gl.CULL_FACE);\n\t}\n\n\tsetBlendMode (srcColorBlend: number, srcAlphaBlend: number, dstBlend: number) {\n\t\tif (this.srcColorBlend == srcColorBlend && this.srcAlphaBlend == srcAlphaBlend && this.dstBlend == dstBlend) return;\n\t\tthis.srcColorBlend = srcColorBlend;\n\t\tthis.srcAlphaBlend = srcAlphaBlend;\n\t\tthis.dstBlend = dstBlend;\n\t\tif (this.isDrawing) {\n\t\t\tthis.flush();\n\t\t\tlet gl = this.context.gl;\n\t\t\tgl.blendFuncSeparate(srcColorBlend, dstBlend, srcAlphaBlend, dstBlend);\n\t\t}\n\t}\n\n\tdraw (texture: GLTexture, vertices: ArrayLike<number>, indices: Array<number>) {\n\t\tif (texture != this.lastTexture) {\n\t\t\tthis.flush();\n\t\t\tthis.lastTexture = texture;\n\t\t} else if (this.verticesLength + vertices.length > this.mesh.getVertices().length ||\n\t\t\tthis.indicesLength + indices.length > this.mesh.getIndices().length) {\n\t\t\tthis.flush();\n\t\t}\n\n\t\tlet indexStart = this.mesh.numVertices();\n\t\tthis.mesh.getVertices().set(vertices, this.verticesLength);\n\t\tthis.verticesLength += vertices.length;\n\t\tthis.mesh.setVerticesLength(this.verticesLength)\n\n\t\tlet indicesArray = this.mesh.getIndices();\n\t\tfor (let i = this.indicesLength, j = 0; j < indices.length; i++, j++)\n\t\t\tindicesArray[i] = indices[j] + indexStart;\n\t\tthis.indicesLength += indices.length;\n\t\tthis.mesh.setIndicesLength(this.indicesLength);\n\t}\n\n\tflush () {\n\t\tif (this.verticesLength == 0) return;\n\t\tif (!this.lastTexture) throw new Error(\"No texture set.\");\n\t\tif (!this.shader) throw new Error(\"No shader set.\");\n\t\tthis.lastTexture.bind();\n\t\tthis.mesh.draw(this.shader, this.context.gl.TRIANGLES);\n\n\t\tthis.verticesLength = 0;\n\t\tthis.indicesLength = 0;\n\t\tthis.mesh.setVerticesLength(0);\n\t\tthis.mesh.setIndicesLength(0);\n\t\tthis.drawCalls++;\n\t\tPolygonBatcher.globalDrawCalls++;\n\t}\n\n\tend () {\n\t\tif (!this.isDrawing) throw new Error(\"PolygonBatch is not drawing. Call PolygonBatch.begin() before calling PolygonBatch.end()\");\n\t\tif (this.verticesLength > 0 || this.indicesLength > 0) this.flush();\n\t\tthis.shader = null;\n\t\tthis.lastTexture = null;\n\t\tthis.isDrawing = false;\n\n\t\tlet gl = this.context.gl;\n\t\tgl.disable(gl.BLEND);\n\t\tif (this.cullWasEnabled) gl.enable(gl.CULL_FACE);\n\t}\n\n\tgetDrawCalls () {\n\t\treturn this.drawCalls;\n\t}\n\n\tstatic getAndResetGlobalDrawCalls () {\n\t\tlet result = PolygonBatcher.globalDrawCalls;\n\t\tPolygonBatcher.globalDrawCalls = 0;\n\t\treturn result;\n\t}\n\n\tdispose () {\n\t\tthis.mesh.dispose();\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Disposable, Color, Vector2, MathUtils } from \"@esotericsoftware/spine-core\";\nimport { Mesh, Position2Attribute, ColorAttribute } from \"./Mesh\";\nimport { Shader } from \"./Shader\";\nimport { ManagedWebGLRenderingContext } from \"./WebGL\";\n\nexport class ShapeRenderer implements Disposable {\n\tprivate context: ManagedWebGLRenderingContext;\n\tprivate isDrawing = false;\n\tprivate mesh: Mesh;\n\tprivate shapeType = ShapeType.Filled;\n\tprivate color = new Color(1, 1, 1, 1);\n\tprivate shader: Shader | null = null;\n\tprivate vertexIndex = 0;\n\tprivate tmp = new Vector2();\n\tprivate srcColorBlend: number;\n\tprivate srcAlphaBlend: number;\n\tprivate dstBlend: number;\n\n\tconstructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext, maxVertices: number = 10920) {\n\t\tif (maxVertices > 10920) throw new Error(\"Can't have more than 10920 triangles per batch: \" + maxVertices);\n\t\tthis.context = context instanceof ManagedWebGLRenderingContext ? context : new ManagedWebGLRenderingContext(context);\n\t\tthis.mesh = new Mesh(context, [new Position2Attribute(), new ColorAttribute()], maxVertices, 0);\n\t\tlet gl = this.context.gl;\n\t\tthis.srcColorBlend = gl.SRC_ALPHA;\n\t\tthis.srcAlphaBlend = gl.ONE;\n\t\tthis.dstBlend = gl.ONE_MINUS_SRC_ALPHA;\n\t}\n\n\tbegin (shader: Shader) {\n\t\tif (this.isDrawing) throw new Error(\"ShapeRenderer.begin() has already been called\");\n\t\tthis.shader = shader;\n\t\tthis.vertexIndex = 0;\n\t\tthis.isDrawing = true;\n\n\t\tlet gl = this.context.gl;\n\t\tgl.enable(gl.BLEND);\n\t\tgl.blendFuncSeparate(this.srcColorBlend, this.dstBlend, this.srcAlphaBlend, this.dstBlend);\n\t}\n\n\tsetBlendMode (srcColorBlend: number, srcAlphaBlend: number, dstBlend: number) {\n\t\tthis.srcColorBlend = srcColorBlend;\n\t\tthis.srcAlphaBlend = srcAlphaBlend;\n\t\tthis.dstBlend = dstBlend;\n\t\tif (this.isDrawing) {\n\t\t\tthis.flush();\n\t\t\tlet gl = this.context.gl;\n\t\t\tgl.blendFuncSeparate(srcColorBlend, dstBlend, srcAlphaBlend, dstBlend);\n\t\t}\n\t}\n\n\tsetColor (color: Color) {\n\t\tthis.color.setFromColor(color);\n\t}\n\n\tsetColorWith (r: number, g: number, b: number, a: number) {\n\t\tthis.color.set(r, g, b, a);\n\t}\n\n\tpoint (x: number, y: number, color?: Color) {\n\t\tthis.check(ShapeType.Point, 1);\n\t\tif (!color) color = this.color;\n\t\tthis.vertex(x, y, color);\n\t}\n\n\tline (x: number, y: number, x2: number, y2: number, color?: Color) {\n\t\tthis.check(ShapeType.Line, 2);\n\t\tlet vertices = this.mesh.getVertices();\n\t\tlet idx = this.vertexIndex;\n\t\tif (!color) color = this.color;\n\t\tthis.vertex(x, y, color);\n\t\tthis.vertex(x2, y2, color);\n\t}\n\n\ttriangle (filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color?: Color, color2?: Color, color3?: Color) {\n\t\tthis.check(filled ? ShapeType.Filled : ShapeType.Line, 3);\n\t\tlet vertices = this.mesh.getVertices();\n\t\tlet idx = this.vertexIndex;\n\t\tif (!color) color = this.color;\n\t\tif (!color2) color2 = this.color;\n\t\tif (!color3) color3 = this.color;\n\t\tif (filled) {\n\t\t\tthis.vertex(x, y, color);\n\t\t\tthis.vertex(x2, y2, color2);\n\t\t\tthis.vertex(x3, y3, color3);\n\t\t} else {\n\t\t\tthis.vertex(x, y, color);\n\t\t\tthis.vertex(x2, y2, color2);\n\n\t\t\tthis.vertex(x2, y2, color);\n\t\t\tthis.vertex(x3, y3, color2);\n\n\t\t\tthis.vertex(x3, y3, color);\n\t\t\tthis.vertex(x, y, color2);\n\t\t}\n\t}\n\n\tquad (filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number, color?: Color, color2?: Color, color3?: Color, color4?: Color) {\n\t\tthis.check(filled ? ShapeType.Filled : ShapeType.Line, 3);\n\t\tlet vertices = this.mesh.getVertices();\n\t\tlet idx = this.vertexIndex;\n\t\tif (!color) color = this.color;\n\t\tif (!color2) color2 = this.color;\n\t\tif (!color3) color3 = this.color;\n\t\tif (!color4) color4 = this.color;\n\t\tif (filled) {\n\t\t\tthis.vertex(x, y, color); this.vertex(x2, y2, color2); this.vertex(x3, y3, color3);\n\t\t\tthis.vertex(x3, y3, color3); this.vertex(x4, y4, color4); this.vertex(x, y, color);\n\t\t} else {\n\t\t\tthis.vertex(x, y, color); this.vertex(x2, y2, color2);\n\t\t\tthis.vertex(x2, y2, color2); this.vertex(x3, y3, color3);\n\t\t\tthis.vertex(x3, y3, color3); this.vertex(x4, y4, color4);\n\t\t\tthis.vertex(x4, y4, color4); this.vertex(x, y, color);\n\t\t}\n\t}\n\n\trect (filled: boolean, x: number, y: number, width: number, height: number, color?: Color) {\n\t\tthis.quad(filled, x, y, x + width, y, x + width, y + height, x, y + height, color, color, color, color);\n\t}\n\n\trectLine (filled: boolean, x1: number, y1: number, x2: number, y2: number, width: number, color?: Color) {\n\t\tthis.check(filled ? ShapeType.Filled : ShapeType.Line, 8);\n\t\tif (!color) color = this.color;\n\t\tlet t = this.tmp.set(y2 - y1, x1 - x2);\n\t\tt.normalize();\n\t\twidth *= 0.5;\n\t\tlet tx = t.x * width;\n\t\tlet ty = t.y * width;\n\t\tif (!filled) {\n\t\t\tthis.vertex(x1 + tx, y1 + ty, color);\n\t\t\tthis.vertex(x1 - tx, y1 - ty, color);\n\t\t\tthis.vertex(x2 + tx, y2 + ty, color);\n\t\t\tthis.vertex(x2 - tx, y2 - ty, color);\n\n\t\t\tthis.vertex(x2 + tx, y2 + ty, color);\n\t\t\tthis.vertex(x1 + tx, y1 + ty, color);\n\n\t\t\tthis.vertex(x2 - tx, y2 - ty, color);\n\t\t\tthis.vertex(x1 - tx, y1 - ty, color);\n\t\t} else {\n\t\t\tthis.vertex(x1 + tx, y1 + ty, color);\n\t\t\tthis.vertex(x1 - tx, y1 - ty, color);\n\t\t\tthis.vertex(x2 + tx, y2 + ty, color);\n\n\t\t\tthis.vertex(x2 - tx, y2 - ty, color);\n\t\t\tthis.vertex(x2 + tx, y2 + ty, color);\n\t\t\tthis.vertex(x1 - tx, y1 - ty, color);\n\t\t}\n\t}\n\n\tx (x: number, y: number, size: number) {\n\t\tthis.line(x - size, y - size, x + size, y + size);\n\t\tthis.line(x - size, y + size, x + size, y - size);\n\t}\n\n\tpolygon (polygonVertices: ArrayLike<number>, offset: number, count: number, color?: Color) {\n\t\tif (count < 3) throw new Error(\"Polygon must contain at least 3 vertices\");\n\t\tthis.check(ShapeType.Line, count * 2);\n\t\tif (!color) color = this.color;\n\t\tlet vertices = this.mesh.getVertices();\n\t\tlet idx = this.vertexIndex;\n\n\t\toffset <<= 1;\n\t\tcount <<= 1;\n\n\t\tlet firstX = polygonVertices[offset];\n\t\tlet firstY = polygonVertices[offset + 1];\n\t\tlet last = offset + count;\n\n\t\tfor (let i = offset, n = offset + count - 2; i < n; i += 2) {\n\t\t\tlet x1 = polygonVertices[i];\n\t\t\tlet y1 = polygonVertices[i + 1];\n\n\t\t\tlet x2 = 0;\n\t\t\tlet y2 = 0;\n\n\t\t\tif (i + 2 >= last) {\n\t\t\t\tx2 = firstX;\n\t\t\t\ty2 = firstY;\n\t\t\t} else {\n\t\t\t\tx2 = polygonVertices[i + 2];\n\t\t\t\ty2 = polygonVertices[i + 3];\n\t\t\t}\n\n\t\t\tthis.vertex(x1, y1, color!);\n\t\t\tthis.vertex(x2, y2, color!);\n\t\t}\n\t}\n\n\tcircle (filled: boolean, x: number, y: number, radius: number, color?: Color, segments: number = 0) {\n\t\tif (segments == 0) segments = Math.max(1, (6 * MathUtils.cbrt(radius)) | 0);\n\t\tif (segments <= 0) throw new Error(\"segments must be > 0.\");\n\t\tif (!color) color = this.color;\n\t\tlet angle = 2 * MathUtils.PI / segments;\n\t\tlet cos = Math.cos(angle);\n\t\tlet sin = Math.sin(angle);\n\t\tlet cx = radius, cy = 0;\n\t\tif (!filled) {\n\t\t\tthis.check(ShapeType.Line, segments * 2 + 2);\n\t\t\tfor (let i = 0; i < segments; i++) {\n\t\t\t\tthis.vertex(x + cx, y + cy, color);\n\t\t\t\tlet temp = cx;\n\t\t\t\tcx = cos * cx - sin * cy;\n\t\t\t\tcy = sin * temp + cos * cy;\n\t\t\t\tthis.vertex(x + cx, y + cy, color);\n\t\t\t}\n\t\t\t// Ensure the last segment is identical to the first.\n\t\t\tthis.vertex(x + cx, y + cy, color);\n\t\t} else {\n\t\t\tthis.check(ShapeType.Filled, segments * 3 + 3);\n\t\t\tsegments--;\n\t\t\tfor (let i = 0; i < segments; i++) {\n\t\t\t\tthis.vertex(x, y, color);\n\t\t\t\tthis.vertex(x + cx, y + cy, color);\n\t\t\t\tlet temp = cx;\n\t\t\t\tcx = cos * cx - sin * cy;\n\t\t\t\tcy = sin * temp + cos * cy;\n\t\t\t\tthis.vertex(x + cx, y + cy, color);\n\t\t\t}\n\t\t\t// Ensure the last segment is identical to the first.\n\t\t\tthis.vertex(x, y, color);\n\t\t\tthis.vertex(x + cx, y + cy, color);\n\t\t}\n\n\t\tlet temp = cx;\n\t\tcx = radius;\n\t\tcy = 0;\n\t\tthis.vertex(x + cx, y + cy, color);\n\t}\n\n\tcurve (x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, segments: number, color?: Color) {\n\t\tthis.check(ShapeType.Line, segments * 2 + 2);\n\t\tif (!color) color = this.color;\n\n\t\t// Algorithm from: http://www.antigrain.com/research/bezier_interpolation/index.html#PAGE_BEZIER_INTERPOLATION\n\t\tlet subdiv_step = 1 / segments;\n\t\tlet subdiv_step2 = subdiv_step * subdiv_step;\n\t\tlet subdiv_step3 = subdiv_step * subdiv_step * subdiv_step;\n\n\t\tlet pre1 = 3 * subdiv_step;\n\t\tlet pre2 = 3 * subdiv_step2;\n\t\tlet pre4 = 6 * subdiv_step2;\n\t\tlet pre5 = 6 * subdiv_step3;\n\n\t\tlet tmp1x = x1 - cx1 * 2 + cx2;\n\t\tlet tmp1y = y1 - cy1 * 2 + cy2;\n\n\t\tlet tmp2x = (cx1 - cx2) * 3 - x1 + x2;\n\t\tlet tmp2y = (cy1 - cy2) * 3 - y1 + y2;\n\n\t\tlet fx = x1;\n\t\tlet fy = y1;\n\n\t\tlet dfx = (cx1 - x1) * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;\n\t\tlet dfy = (cy1 - y1) * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;\n\n\t\tlet ddfx = tmp1x * pre4 + tmp2x * pre5;\n\t\tlet ddfy = tmp1y * pre4 + tmp2y * pre5;\n\n\t\tlet dddfx = tmp2x * pre5;\n\t\tlet dddfy = tmp2y * pre5;\n\n\t\twhile (segments-- > 0) {\n\t\t\tthis.vertex(fx, fy, color!);\n\t\t\tfx += dfx;\n\t\t\tfy += dfy;\n\t\t\tdfx += ddfx;\n\t\t\tdfy += ddfy;\n\t\t\tddfx += dddfx;\n\t\t\tddfy += dddfy;\n\t\t\tthis.vertex(fx, fy, color!);\n\t\t}\n\t\tthis.vertex(fx, fy, color!);\n\t\tthis.vertex(x2, y2, color!);\n\t}\n\n\tprivate vertex (x: number, y: number, color: Color) {\n\t\tlet idx = this.vertexIndex;\n\t\tlet vertices = this.mesh.getVertices();\n\t\tvertices[idx++] = x;\n\t\tvertices[idx++] = y;\n\t\tvertices[idx++] = color.r;\n\t\tvertices[idx++] = color.g;\n\t\tvertices[idx++] = color.b;\n\t\tvertices[idx++] = color.a;\n\t\tthis.vertexIndex = idx;\n\t}\n\n\tend () {\n\t\tif (!this.isDrawing) throw new Error(\"ShapeRenderer.begin() has not been called\");\n\t\tthis.flush();\n\t\tlet gl = this.context.gl;\n\t\tgl.disable(gl.BLEND);\n\t\tthis.isDrawing = false;\n\t}\n\n\tprivate flush () {\n\t\tif (this.vertexIndex == 0) return;\n\t\tif (!this.shader) throw new Error(\"No shader set.\");\n\t\tthis.mesh.setVerticesLength(this.vertexIndex);\n\t\tthis.mesh.draw(this.shader, this.shapeType);\n\t\tthis.vertexIndex = 0;\n\t}\n\n\tprivate check (shapeType: ShapeType, numVertices: number) {\n\t\tif (!this.isDrawing) throw new Error(\"ShapeRenderer.begin() has not been called\");\n\t\tif (this.shapeType == shapeType) {\n\t\t\tif (this.mesh.maxVertices() - this.mesh.numVertices() < numVertices) this.flush();\n\t\t\telse return;\n\t\t} else {\n\t\t\tthis.flush();\n\t\t\tthis.shapeType = shapeType;\n\t\t}\n\t}\n\n\tdispose () {\n\t\tthis.mesh.dispose();\n\t}\n}\n\nexport enum ShapeType {\n\tPoint = 0x0000,\n\tLine = 0x0001,\n\tFilled = 0x0004\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Disposable, Color, SkeletonBounds, Utils, Skeleton, RegionAttachment, MeshAttachment, PathAttachment, ClippingAttachment } from \"@esotericsoftware/spine-core\";\nimport { ShapeRenderer } from \"./ShapeRenderer\";\nimport { ManagedWebGLRenderingContext } from \"./WebGL\";\n\nexport class SkeletonDebugRenderer implements Disposable {\n\tboneLineColor = new Color(1, 0, 0, 1);\n\tboneOriginColor = new Color(0, 1, 0, 1);\n\tattachmentLineColor = new Color(0, 0, 1, 0.5);\n\ttriangleLineColor = new Color(1, 0.64, 0, 0.5);\n\tpathColor = new Color().setFromString(\"FF7F00\");\n\tclipColor = new Color(0.8, 0, 0, 2);\n\taabbColor = new Color(0, 1, 0, 0.5);\n\tdrawBones = true;\n\tdrawRegionAttachments = true;\n\tdrawBoundingBoxes = true;\n\tdrawMeshHull = true;\n\tdrawMeshTriangles = true;\n\tdrawPaths = true;\n\tdrawSkeletonXY = false;\n\tdrawClipping = true;\n\tpremultipliedAlpha = false;\n\tscale = 1;\n\tboneWidth = 2;\n\n\tprivate context: ManagedWebGLRenderingContext;\n\tprivate bounds = new SkeletonBounds();\n\tprivate temp = new Array<number>();\n\tprivate vertices = Utils.newFloatArray(2 * 1024);\n\tprivate static LIGHT_GRAY = new Color(192 / 255, 192 / 255, 192 / 255, 1);\n\tprivate static GREEN = new Color(0, 1, 0, 1);\n\n\tconstructor (context: ManagedWebGLRenderingContext | WebGLRenderingContext) {\n\t\tthis.context = context instanceof ManagedWebGLRenderingContext ? context : new ManagedWebGLRenderingContext(context);\n\t}\n\n\tdraw (shapes: ShapeRenderer, skeleton: Skeleton, ignoredBones?: Array<string>) {\n\t\tlet skeletonX = skeleton.x;\n\t\tlet skeletonY = skeleton.y;\n\t\tlet gl = this.context.gl;\n\t\tlet srcFunc = this.premultipliedAlpha ? gl.ONE : gl.SRC_ALPHA;\n\t\tshapes.setBlendMode(srcFunc, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n\n\t\tlet bones = skeleton.bones;\n\t\tif (this.drawBones) {\n\t\t\tshapes.setColor(this.boneLineColor);\n\t\t\tfor (let i = 0, n = bones.length; i < n; i++) {\n\t\t\t\tlet bone = bones[i];\n\t\t\t\tif (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1) continue;\n\t\t\t\tif (!bone.parent) continue;\n\t\t\t\tlet x = bone.data.length * bone.a + bone.worldX;\n\t\t\t\tlet y = bone.data.length * bone.c + bone.worldY;\n\t\t\t\tshapes.rectLine(true, bone.worldX, bone.worldY, x, y, this.boneWidth * this.scale);\n\t\t\t}\n\t\t\tif (this.drawSkeletonXY) shapes.x(skeletonX, skeletonY, 4 * this.scale);\n\t\t}\n\n\t\tif (this.drawRegionAttachments) {\n\t\t\tshapes.setColor(this.attachmentLineColor);\n\t\t\tlet slots = skeleton.slots;\n\t\t\tfor (let i = 0, n = slots.length; i < n; i++) {\n\t\t\t\tlet slot = slots[i];\n\t\t\t\tlet attachment = slot.getAttachment();\n\t\t\t\tif (attachment instanceof RegionAttachment) {\n\t\t\t\t\tlet regionAttachment = <RegionAttachment>attachment;\n\t\t\t\t\tlet vertices = this.vertices;\n\t\t\t\t\tregionAttachment.computeWorldVertices(slot, vertices, 0, 2);\n\t\t\t\t\tshapes.line(vertices[0], vertices[1], vertices[2], vertices[3]);\n\t\t\t\t\tshapes.line(vertices[2], vertices[3], vertices[4], vertices[5]);\n\t\t\t\t\tshapes.line(vertices[4], vertices[5], vertices[6], vertices[7]);\n\t\t\t\t\tshapes.line(vertices[6], vertices[7], vertices[0], vertices[1]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.drawMeshHull || this.drawMeshTriangles) {\n\t\t\tlet slots = skeleton.slots;\n\t\t\tfor (let i = 0, n = slots.length; i < n; i++) {\n\t\t\t\tlet slot = slots[i];\n\t\t\t\tif (!slot.bone.active) continue;\n\t\t\t\tlet attachment = slot.getAttachment();\n\t\t\t\tif (!(attachment instanceof MeshAttachment)) continue;\n\t\t\t\tlet mesh = <MeshAttachment>attachment;\n\t\t\t\tlet vertices = this.vertices;\n\t\t\t\tmesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, 2);\n\t\t\t\tlet triangles = mesh.triangles;\n\t\t\t\tlet hullLength = mesh.hullLength;\n\t\t\t\tif (this.drawMeshTriangles) {\n\t\t\t\t\tshapes.setColor(this.triangleLineColor);\n\t\t\t\t\tfor (let ii = 0, nn = triangles.length; ii < nn; ii += 3) {\n\t\t\t\t\t\tlet v1 = triangles[ii] * 2, v2 = triangles[ii + 1] * 2, v3 = triangles[ii + 2] * 2;\n\t\t\t\t\t\tshapes.triangle(false, vertices[v1], vertices[v1 + 1], //\n\t\t\t\t\t\t\tvertices[v2], vertices[v2 + 1], //\n\t\t\t\t\t\t\tvertices[v3], vertices[v3 + 1] //\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.drawMeshHull && hullLength > 0) {\n\t\t\t\t\tshapes.setColor(this.attachmentLineColor);\n\t\t\t\t\thullLength = (hullLength >> 1) * 2;\n\t\t\t\t\tlet lastX = vertices[hullLength - 2], lastY = vertices[hullLength - 1];\n\t\t\t\t\tfor (let ii = 0, nn = hullLength; ii < nn; ii += 2) {\n\t\t\t\t\t\tlet x = vertices[ii], y = vertices[ii + 1];\n\t\t\t\t\t\tshapes.line(x, y, lastX, lastY);\n\t\t\t\t\t\tlastX = x;\n\t\t\t\t\t\tlastY = y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.drawBoundingBoxes) {\n\t\t\tlet bounds = this.bounds;\n\t\t\tbounds.update(skeleton, true);\n\t\t\tshapes.setColor(this.aabbColor);\n\t\t\tshapes.rect(false, bounds.minX, bounds.minY, bounds.getWidth(), bounds.getHeight());\n\t\t\tlet polygons = bounds.polygons;\n\t\t\tlet boxes = bounds.boundingBoxes;\n\t\t\tfor (let i = 0, n = polygons.length; i < n; i++) {\n\t\t\t\tlet polygon = polygons[i];\n\t\t\t\tshapes.setColor(boxes[i].color);\n\t\t\t\tshapes.polygon(polygon, 0, polygon.length);\n\t\t\t}\n\t\t}\n\n\t\tif (this.drawPaths) {\n\t\t\tlet slots = skeleton.slots;\n\t\t\tfor (let i = 0, n = slots.length; i < n; i++) {\n\t\t\t\tlet slot = slots[i];\n\t\t\t\tif (!slot.bone.active) continue;\n\t\t\t\tlet attachment = slot.getAttachment();\n\t\t\t\tif (!(attachment instanceof PathAttachment)) continue;\n\t\t\t\tlet path = <PathAttachment>attachment;\n\t\t\t\tlet nn = path.worldVerticesLength;\n\t\t\t\tlet world = this.temp = Utils.setArraySize(this.temp, nn, 0);\n\t\t\t\tpath.computeWorldVertices(slot, 0, nn, world, 0, 2);\n\t\t\t\tlet color = this.pathColor;\n\t\t\t\tlet x1 = world[2], y1 = world[3], x2 = 0, y2 = 0;\n\t\t\t\tif (path.closed) {\n\t\t\t\t\tshapes.setColor(color);\n\t\t\t\t\tlet cx1 = world[0], cy1 = world[1], cx2 = world[nn - 2], cy2 = world[nn - 1];\n\t\t\t\t\tx2 = world[nn - 4];\n\t\t\t\t\ty2 = world[nn - 3];\n\t\t\t\t\tshapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, 32);\n\t\t\t\t\tshapes.setColor(SkeletonDebugRenderer.LIGHT_GRAY);\n\t\t\t\t\tshapes.line(x1, y1, cx1, cy1);\n\t\t\t\t\tshapes.line(x2, y2, cx2, cy2);\n\t\t\t\t}\n\t\t\t\tnn -= 4;\n\t\t\t\tfor (let ii = 4; ii < nn; ii += 6) {\n\t\t\t\t\tlet cx1 = world[ii], cy1 = world[ii + 1], cx2 = world[ii + 2], cy2 = world[ii + 3];\n\t\t\t\t\tx2 = world[ii + 4];\n\t\t\t\t\ty2 = world[ii + 5];\n\t\t\t\t\tshapes.setColor(color);\n\t\t\t\t\tshapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, 32);\n\t\t\t\t\tshapes.setColor(SkeletonDebugRenderer.LIGHT_GRAY);\n\t\t\t\t\tshapes.line(x1, y1, cx1, cy1);\n\t\t\t\t\tshapes.line(x2, y2, cx2, cy2);\n\t\t\t\t\tx1 = x2;\n\t\t\t\t\ty1 = y2;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.drawBones) {\n\t\t\tshapes.setColor(this.boneOriginColor);\n\t\t\tfor (let i = 0, n = bones.length; i < n; i++) {\n\t\t\t\tlet bone = bones[i];\n\t\t\t\tif (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1) continue;\n\t\t\t\tshapes.circle(true, bone.worldX, bone.worldY, 3 * this.scale, this.boneOriginColor, 8);\n\t\t\t}\n\t\t}\n\n\t\tif (this.drawClipping) {\n\t\t\tlet slots = skeleton.slots;\n\t\t\tshapes.setColor(this.clipColor)\n\t\t\tfor (let i = 0, n = slots.length; i < n; i++) {\n\t\t\t\tlet slot = slots[i];\n\t\t\t\tif (!slot.bone.active) continue;\n\t\t\t\tlet attachment = slot.getAttachment();\n\t\t\t\tif (!(attachment instanceof ClippingAttachment)) continue;\n\t\t\t\tlet clip = <ClippingAttachment>attachment;\n\t\t\t\tlet nn = clip.worldVerticesLength;\n\t\t\t\tlet world = this.temp = Utils.setArraySize(this.temp, nn, 0);\n\t\t\t\tclip.computeWorldVertices(slot, 0, nn, world, 0, 2);\n\t\t\t\tfor (let i = 0, n = world.length; i < n; i += 2) {\n\t\t\t\t\tlet x = world[i];\n\t\t\t\t\tlet y = world[i + 1];\n\t\t\t\t\tlet x2 = world[(i + 2) % world.length];\n\t\t\t\t\tlet y2 = world[(i + 3) % world.length];\n\t\t\t\t\tshapes.line(x, y, x2, y2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdispose () {\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { NumberArrayLike, Color, SkeletonClipping, Vector2, Utils, Skeleton, BlendMode, RegionAttachment, TextureAtlasRegion, MeshAttachment, ClippingAttachment } from \"@esotericsoftware/spine-core\";\nimport { GLTexture } from \"./GLTexture\";\nimport { PolygonBatcher } from \"./PolygonBatcher\";\nimport { ManagedWebGLRenderingContext, WebGLBlendModeConverter } from \"./WebGL\";\n\n\nclass Renderable {\n\tconstructor (public vertices: NumberArrayLike, public numVertices: number, public numFloats: number) { }\n};\n\nexport type VertexTransformer = (vertices: NumberArrayLike, numVertices: number, stride: number) => void;\n\nexport class SkeletonRenderer {\n\tstatic QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];\n\n\tpremultipliedAlpha = false;\n\tprivate tempColor = new Color();\n\tprivate tempColor2 = new Color();\n\tprivate vertices: NumberArrayLike;\n\tprivate vertexSize = 2 + 2 + 4;\n\tprivate twoColorTint = false;\n\tprivate renderable: Renderable = new Renderable([], 0, 0);\n\tprivate clipper: SkeletonClipping = new SkeletonClipping();\n\tprivate temp = new Vector2();\n\tprivate temp2 = new Vector2();\n\tprivate temp3 = new Color();\n\tprivate temp4 = new Color();\n\n\tconstructor (context: ManagedWebGLRenderingContext, twoColorTint: boolean = true) {\n\t\tthis.twoColorTint = twoColorTint;\n\t\tif (twoColorTint)\n\t\t\tthis.vertexSize += 4;\n\t\tthis.vertices = Utils.newFloatArray(this.vertexSize * 1024);\n\t}\n\n\tdraw (batcher: PolygonBatcher, skeleton: Skeleton, slotRangeStart: number = -1, slotRangeEnd: number = -1, transformer: VertexTransformer | null = null) {\n\t\tlet clipper = this.clipper;\n\t\tlet premultipliedAlpha = this.premultipliedAlpha;\n\t\tlet twoColorTint = this.twoColorTint;\n\t\tlet blendMode: BlendMode | null = null;\n\n\t\tlet tempPos = this.temp;\n\t\tlet tempUv = this.temp2;\n\t\tlet tempLight = this.temp3;\n\t\tlet tempDark = this.temp4;\n\n\t\tlet renderable: Renderable = this.renderable;\n\t\tlet uvs: NumberArrayLike;\n\t\tlet triangles: Array<number>;\n\t\tlet drawOrder = skeleton.drawOrder;\n\t\tlet attachmentColor: Color;\n\t\tlet skeletonColor = skeleton.color;\n\t\tlet vertexSize = twoColorTint ? 12 : 8;\n\t\tlet inRange = false;\n\t\tif (slotRangeStart == -1) inRange = true;\n\t\tfor (let i = 0, n = drawOrder.length; i < n; i++) {\n\t\t\tlet clippedVertexSize = clipper.isClipping() ? 2 : vertexSize;\n\t\t\tlet slot = drawOrder[i];\n\t\t\tif (!slot.bone.active) {\n\t\t\t\tclipper.clipEndWithSlot(slot);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (slotRangeStart >= 0 && slotRangeStart == slot.data.index) {\n\t\t\t\tinRange = true;\n\t\t\t}\n\n\t\t\tif (!inRange) {\n\t\t\t\tclipper.clipEndWithSlot(slot);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (slotRangeEnd >= 0 && slotRangeEnd == slot.data.index) {\n\t\t\t\tinRange = false;\n\t\t\t}\n\n\t\t\tlet attachment = slot.getAttachment();\n\t\t\tlet texture: GLTexture;\n\t\t\tif (attachment instanceof RegionAttachment) {\n\t\t\t\tlet region = <RegionAttachment>attachment;\n\t\t\t\trenderable.vertices = this.vertices;\n\t\t\t\trenderable.numVertices = 4;\n\t\t\t\trenderable.numFloats = clippedVertexSize << 2;\n\t\t\t\tregion.computeWorldVertices(slot, renderable.vertices, 0, clippedVertexSize);\n\t\t\t\ttriangles = SkeletonRenderer.QUAD_TRIANGLES;\n\t\t\t\tuvs = region.uvs;\n\t\t\t\ttexture = <GLTexture>(<TextureAtlasRegion>region.region!.renderObject).page.texture;\n\t\t\t\tattachmentColor = region.color;\n\t\t\t} else if (attachment instanceof MeshAttachment) {\n\t\t\t\tlet mesh = <MeshAttachment>attachment;\n\t\t\t\trenderable.vertices = this.vertices;\n\t\t\t\trenderable.numVertices = (mesh.worldVerticesLength >> 1);\n\t\t\t\trenderable.numFloats = renderable.numVertices * clippedVertexSize;\n\t\t\t\tif (renderable.numFloats > renderable.vertices.length) {\n\t\t\t\t\trenderable.vertices = this.vertices = Utils.newFloatArray(renderable.numFloats);\n\t\t\t\t}\n\t\t\t\tmesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, renderable.vertices, 0, clippedVertexSize);\n\t\t\t\ttriangles = mesh.triangles;\n\t\t\t\ttexture = <GLTexture>(<TextureAtlasRegion>mesh.region!.renderObject).page.texture;\n\t\t\t\tuvs = mesh.uvs;\n\t\t\t\tattachmentColor = mesh.color;\n\t\t\t} else if (attachment instanceof ClippingAttachment) {\n\t\t\t\tlet clip = <ClippingAttachment>(attachment);\n\t\t\t\tclipper.clipStart(slot, clip);\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tclipper.clipEndWithSlot(slot);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (texture) {\n\t\t\t\tlet slotColor = slot.color;\n\t\t\t\tlet finalColor = this.tempColor;\n\t\t\t\tfinalColor.r = skeletonColor.r * slotColor.r * attachmentColor.r;\n\t\t\t\tfinalColor.g = skeletonColor.g * slotColor.g * attachmentColor.g;\n\t\t\t\tfinalColor.b = skeletonColor.b * slotColor.b * attachmentColor.b;\n\t\t\t\tfinalColor.a = skeletonColor.a * slotColor.a * attachmentColor.a;\n\t\t\t\tif (premultipliedAlpha) {\n\t\t\t\t\tfinalColor.r *= finalColor.a;\n\t\t\t\t\tfinalColor.g *= finalColor.a;\n\t\t\t\t\tfinalColor.b *= finalColor.a;\n\t\t\t\t}\n\t\t\t\tlet darkColor = this.tempColor2;\n\t\t\t\tif (!slot.darkColor)\n\t\t\t\t\tdarkColor.set(0, 0, 0, 1.0);\n\t\t\t\telse {\n\t\t\t\t\tif (premultipliedAlpha) {\n\t\t\t\t\t\tdarkColor.r = slot.darkColor.r * finalColor.a;\n\t\t\t\t\t\tdarkColor.g = slot.darkColor.g * finalColor.a;\n\t\t\t\t\t\tdarkColor.b = slot.darkColor.b * finalColor.a;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdarkColor.setFromColor(slot.darkColor);\n\t\t\t\t\t}\n\t\t\t\t\tdarkColor.a = premultipliedAlpha ? 1.0 : 0.0;\n\t\t\t\t}\n\n\t\t\t\tlet slotBlendMode = slot.data.blendMode;\n\t\t\t\tif (slotBlendMode != blendMode) {\n\t\t\t\t\tblendMode = slotBlendMode;\n\t\t\t\t\tbatcher.setBlendMode(\n\t\t\t\t\t\tWebGLBlendModeConverter.getSourceColorGLBlendMode(blendMode, premultipliedAlpha),\n\t\t\t\t\t\tWebGLBlendModeConverter.getSourceAlphaGLBlendMode(blendMode),\n\t\t\t\t\t\tWebGLBlendModeConverter.getDestGLBlendMode(blendMode));\n\t\t\t\t}\n\n\t\t\t\tif (clipper.isClipping()) {\n\t\t\t\t\tclipper.clipTriangles(renderable.vertices, renderable.numFloats, triangles, triangles.length, uvs, finalColor, darkColor, twoColorTint);\n\t\t\t\t\tlet clippedVertices = new Float32Array(clipper.clippedVertices);\n\t\t\t\t\tlet clippedTriangles = clipper.clippedTriangles;\n\t\t\t\t\tif (transformer) transformer(renderable.vertices, renderable.numFloats, vertexSize);\n\t\t\t\t\tbatcher.draw(texture, clippedVertices, clippedTriangles);\n\t\t\t\t} else {\n\t\t\t\t\tlet verts = renderable.vertices;\n\t\t\t\t\tif (!twoColorTint) {\n\t\t\t\t\t\tfor (let v = 2, u = 0, n = renderable.numFloats; v < n; v += vertexSize, u += 2) {\n\t\t\t\t\t\t\tverts[v] = finalColor.r;\n\t\t\t\t\t\t\tverts[v + 1] = finalColor.g;\n\t\t\t\t\t\t\tverts[v + 2] = finalColor.b;\n\t\t\t\t\t\t\tverts[v + 3] = finalColor.a;\n\t\t\t\t\t\t\tverts[v + 4] = uvs[u];\n\t\t\t\t\t\t\tverts[v + 5] = uvs[u + 1];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfor (let v = 2, u = 0, n = renderable.numFloats; v < n; v += vertexSize, u += 2) {\n\t\t\t\t\t\t\tverts[v] = finalColor.r;\n\t\t\t\t\t\t\tverts[v + 1] = finalColor.g;\n\t\t\t\t\t\t\tverts[v + 2] = finalColor.b;\n\t\t\t\t\t\t\tverts[v + 3] = finalColor.a;\n\t\t\t\t\t\t\tverts[v + 4] = uvs[u];\n\t\t\t\t\t\t\tverts[v + 5] = uvs[u + 1];\n\t\t\t\t\t\t\tverts[v + 6] = darkColor.r;\n\t\t\t\t\t\t\tverts[v + 7] = darkColor.g;\n\t\t\t\t\t\t\tverts[v + 8] = darkColor.b;\n\t\t\t\t\t\t\tverts[v + 9] = darkColor.a;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlet view = (renderable.vertices as Float32Array).subarray(0, renderable.numFloats);\n\t\t\t\t\tif (transformer) transformer(renderable.vertices, renderable.numFloats, vertexSize);\n\t\t\t\t\tbatcher.draw(texture, view, triangles);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tclipper.clipEndWithSlot(slot);\n\t\t}\n\t\tclipper.clipEnd();\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Color, Disposable, Skeleton, MathUtils, TextureAtlasRegion } from \"@esotericsoftware/spine-core\";\nimport { OrthoCamera } from \"./Camera\";\nimport { GLTexture } from \"./GLTexture\";\nimport { PolygonBatcher } from \"./PolygonBatcher\";\nimport { Shader } from \"./Shader\";\nimport { ShapeRenderer } from \"./ShapeRenderer\";\nimport { SkeletonDebugRenderer } from \"./SkeletonDebugRenderer\";\nimport { SkeletonRenderer, VertexTransformer } from \"./SkeletonRenderer\";\nimport { ManagedWebGLRenderingContext } from \"./WebGL\";\n;\n\nconst quad = [\n\t0, 0, 1, 1, 1, 1, 0, 0,\n\t0, 0, 1, 1, 1, 1, 0, 0,\n\t0, 0, 1, 1, 1, 1, 0, 0,\n\t0, 0, 1, 1, 1, 1, 0, 0,\n];\nconst QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];\nconst WHITE = new Color(1, 1, 1, 1);\n\nexport class SceneRenderer implements Disposable {\n\tcontext: ManagedWebGLRenderingContext;\n\tcanvas: HTMLCanvasElement;\n\tcamera: OrthoCamera;\n\tbatcher: PolygonBatcher;\n\tprivate twoColorTint = false;\n\tprivate batcherShader: Shader;\n\tprivate shapes: ShapeRenderer;\n\tprivate shapesShader: Shader;\n\tprivate activeRenderer: PolygonBatcher | ShapeRenderer | SkeletonDebugRenderer | null = null;\n\tskeletonRenderer: SkeletonRenderer;\n\tskeletonDebugRenderer: SkeletonDebugRenderer;\n\n\tconstructor (canvas: HTMLCanvasElement, context: ManagedWebGLRenderingContext | WebGLRenderingContext, twoColorTint: boolean = true) {\n\t\tthis.canvas = canvas;\n\t\tthis.context = context instanceof ManagedWebGLRenderingContext ? context : new ManagedWebGLRenderingContext(context);\n\t\tthis.twoColorTint = twoColorTint;\n\t\tthis.camera = new OrthoCamera(canvas.width, canvas.height);\n\t\tthis.batcherShader = twoColorTint ? Shader.newTwoColoredTextured(this.context) : Shader.newColoredTextured(this.context);\n\t\tthis.batcher = new PolygonBatcher(this.context, twoColorTint);\n\t\tthis.shapesShader = Shader.newColored(this.context);\n\t\tthis.shapes = new ShapeRenderer(this.context);\n\t\tthis.skeletonRenderer = new SkeletonRenderer(this.context, twoColorTint);\n\t\tthis.skeletonDebugRenderer = new SkeletonDebugRenderer(this.context);\n\t}\n\n\tdispose () {\n\t\tthis.batcher.dispose();\n\t\tthis.batcherShader.dispose();\n\t\tthis.shapes.dispose();\n\t\tthis.shapesShader.dispose();\n\t\tthis.skeletonDebugRenderer.dispose();\n\t}\n\n\tbegin () {\n\t\tthis.camera.update();\n\t\tthis.enableRenderer(this.batcher);\n\t}\n\n\tdrawSkeleton (skeleton: Skeleton, premultipliedAlpha = false, slotRangeStart = -1, slotRangeEnd = -1, transform: VertexTransformer |\u00A0null = null) {\n\t\tthis.enableRenderer(this.batcher);\n\t\tthis.skeletonRenderer.premultipliedAlpha = premultipliedAlpha;\n\t\tthis.skeletonRenderer.draw(this.batcher, skeleton, slotRangeStart, slotRangeEnd, transform);\n\t}\n\n\tdrawSkeletonDebug (skeleton: Skeleton, premultipliedAlpha = false, ignoredBones?: Array<string>) {\n\t\tthis.enableRenderer(this.shapes);\n\t\tthis.skeletonDebugRenderer.premultipliedAlpha = premultipliedAlpha;\n\t\tthis.skeletonDebugRenderer.draw(this.shapes, skeleton, ignoredBones);\n\t}\n\n\tdrawTexture (texture: GLTexture, x: number, y: number, width: number, height: number, color?: Color) {\n\t\tthis.enableRenderer(this.batcher);\n\t\tif (!color) color = WHITE;\n\t\tvar i = 0;\n\t\tquad[i++] = x;\n\t\tquad[i++] = y;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = 0;\n\t\tquad[i++] = 1;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t}\n\t\tquad[i++] = x + width;\n\t\tquad[i++] = y;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = 1;\n\t\tquad[i++] = 1;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t}\n\t\tquad[i++] = x + width;\n\t\tquad[i++] = y + height;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = 1;\n\t\tquad[i++] = 0;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t}\n\t\tquad[i++] = x;\n\t\tquad[i++] = y + height;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = 0;\n\t\tquad[i++] = 0;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i] = 0;\n\t\t}\n\t\tthis.batcher.draw(texture, quad, QUAD_TRIANGLES);\n\t}\n\n\tdrawTextureUV (texture: GLTexture, x: number, y: number, width: number, height: number, u: number, v: number, u2: number, v2: number, color?: Color) {\n\t\tthis.enableRenderer(this.batcher);\n\t\tif (!color) color = WHITE;\n\t\tvar i = 0;\n\t\tquad[i++] = x;\n\t\tquad[i++] = y;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = u;\n\t\tquad[i++] = v;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t}\n\t\tquad[i++] = x + width;\n\t\tquad[i++] = y;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = u2;\n\t\tquad[i++] = v;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t}\n\t\tquad[i++] = x + width;\n\t\tquad[i++] = y + height;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = u2;\n\t\tquad[i++] = v2;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t}\n\t\tquad[i++] = x;\n\t\tquad[i++] = y + height;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = u;\n\t\tquad[i++] = v2;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i] = 0;\n\t\t}\n\t\tthis.batcher.draw(texture, quad, QUAD_TRIANGLES);\n\t}\n\n\tdrawTextureRotated (texture: GLTexture, x: number, y: number, width: number, height: number, pivotX: number, pivotY: number, angle: number, color?: Color) {\n\t\tthis.enableRenderer(this.batcher);\n\t\tif (!color) color = WHITE;\n\n\t\t// bottom left and top right corner points relative to origin\n\t\tlet worldOriginX = x + pivotX;\n\t\tlet worldOriginY = y + pivotY;\n\t\tlet fx = -pivotX;\n\t\tlet fy = -pivotY;\n\t\tlet fx2 = width - pivotX;\n\t\tlet fy2 = height - pivotY;\n\n\t\t// construct corner points, start from top left and go counter clockwise\n\t\tlet p1x = fx;\n\t\tlet p1y = fy;\n\t\tlet p2x = fx;\n\t\tlet p2y = fy2;\n\t\tlet p3x = fx2;\n\t\tlet p3y = fy2;\n\t\tlet p4x = fx2;\n\t\tlet p4y = fy;\n\n\t\tlet x1 = 0;\n\t\tlet y1 = 0;\n\t\tlet x2 = 0;\n\t\tlet y2 = 0;\n\t\tlet x3 = 0;\n\t\tlet y3 = 0;\n\t\tlet x4 = 0;\n\t\tlet y4 = 0;\n\n\t\t// rotate\n\t\tif (angle != 0) {\n\t\t\tlet cos = MathUtils.cosDeg(angle);\n\t\t\tlet sin = MathUtils.sinDeg(angle);\n\n\t\t\tx1 = cos * p1x - sin * p1y;\n\t\t\ty1 = sin * p1x + cos * p1y;\n\n\t\t\tx4 = cos * p2x - sin * p2y;\n\t\t\ty4 = sin * p2x + cos * p2y;\n\n\t\t\tx3 = cos * p3x - sin * p3y;\n\t\t\ty3 = sin * p3x + cos * p3y;\n\n\t\t\tx2 = x3 + (x1 - x4);\n\t\t\ty2 = y3 + (y1 - y4);\n\t\t} else {\n\t\t\tx1 = p1x;\n\t\t\ty1 = p1y;\n\n\t\t\tx4 = p2x;\n\t\t\ty4 = p2y;\n\n\t\t\tx3 = p3x;\n\t\t\ty3 = p3y;\n\n\t\t\tx2 = p4x;\n\t\t\ty2 = p4y;\n\t\t}\n\n\t\tx1 += worldOriginX;\n\t\ty1 += worldOriginY;\n\t\tx2 += worldOriginX;\n\t\ty2 += worldOriginY;\n\t\tx3 += worldOriginX;\n\t\ty3 += worldOriginY;\n\t\tx4 += worldOriginX;\n\t\ty4 += worldOriginY;\n\n\t\tvar i = 0;\n\t\tquad[i++] = x1;\n\t\tquad[i++] = y1;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = 0;\n\t\tquad[i++] = 1;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t}\n\t\tquad[i++] = x2;\n\t\tquad[i++] = y2;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = 1;\n\t\tquad[i++] = 1;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t}\n\t\tquad[i++] = x3;\n\t\tquad[i++] = y3;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = 1;\n\t\tquad[i++] = 0;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t}\n\t\tquad[i++] = x4;\n\t\tquad[i++] = y4;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = 0;\n\t\tquad[i++] = 0;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i] = 0;\n\t\t}\n\t\tthis.batcher.draw(texture, quad, QUAD_TRIANGLES);\n\t}\n\n\tdrawRegion (region: TextureAtlasRegion, x: number, y: number, width: number, height: number, color?: Color) {\n\t\tthis.enableRenderer(this.batcher);\n\t\tif (!color) color = WHITE;\n\t\tvar i = 0;\n\t\tquad[i++] = x;\n\t\tquad[i++] = y;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = region.u;\n\t\tquad[i++] = region.v2;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t}\n\t\tquad[i++] = x + width;\n\t\tquad[i++] = y;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = region.u2;\n\t\tquad[i++] = region.v2;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t}\n\t\tquad[i++] = x + width;\n\t\tquad[i++] = y + height;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = region.u2;\n\t\tquad[i++] = region.v;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t}\n\t\tquad[i++] = x;\n\t\tquad[i++] = y + height;\n\t\tquad[i++] = color.r;\n\t\tquad[i++] = color.g;\n\t\tquad[i++] = color.b;\n\t\tquad[i++] = color.a;\n\t\tquad[i++] = region.u;\n\t\tquad[i++] = region.v;\n\t\tif (this.twoColorTint) {\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i++] = 0;\n\t\t\tquad[i] = 0;\n\t\t}\n\t\tthis.batcher.draw(<GLTexture>region.page.texture, quad, QUAD_TRIANGLES);\n\t}\n\n\tline (x: number, y: number, x2: number, y2: number, color?: Color, color2?: Color) {\n\t\tthis.enableRenderer(this.shapes);\n\t\tthis.shapes.line(x, y, x2, y2, color);\n\t}\n\n\ttriangle (filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, color?: Color, color2?: Color, color3?: Color) {\n\t\tthis.enableRenderer(this.shapes);\n\t\tthis.shapes.triangle(filled, x, y, x2, y2, x3, y3, color, color2, color3);\n\t}\n\n\tquad (filled: boolean, x: number, y: number, x2: number, y2: number, x3: number, y3: number, x4: number, y4: number, color?: Color, color2?: Color, color3?: Color, color4?: Color) {\n\t\tthis.enableRenderer(this.shapes);\n\t\tthis.shapes.quad(filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4);\n\t}\n\n\trect (filled: boolean, x: number, y: number, width: number, height: number, color?: Color) {\n\t\tthis.enableRenderer(this.shapes);\n\t\tthis.shapes.rect(filled, x, y, width, height, color);\n\t}\n\n\trectLine (filled: boolean, x1: number, y1: number, x2: number, y2: number, width: number, color?: Color) {\n\t\tthis.enableRenderer(this.shapes);\n\t\tthis.shapes.rectLine(filled, x1, y1, x2, y2, width, color);\n\t}\n\n\tpolygon (polygonVertices: ArrayLike<number>, offset: number, count: number, color?: Color) {\n\t\tthis.enableRenderer(this.shapes);\n\t\tthis.shapes.polygon(polygonVertices, offset, count, color);\n\t}\n\n\tcircle (filled: boolean, x: number, y: number, radius: number, color?: Color, segments: number = 0) {\n\t\tthis.enableRenderer(this.shapes);\n\t\tthis.shapes.circle(filled, x, y, radius, color, segments);\n\t}\n\n\tcurve (x1: number, y1: number, cx1: number, cy1: number, cx2: number, cy2: number, x2: number, y2: number, segments: number, color?: Color) {\n\t\tthis.enableRenderer(this.shapes);\n\t\tthis.shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color);\n\t}\n\n\tend () {\n\t\tif (this.activeRenderer === this.batcher) this.batcher.end();\n\t\telse if (this.activeRenderer === this.shapes) this.shapes.end();\n\t\tthis.activeRenderer = null;\n\t}\n\n\tresize (resizeMode: ResizeMode) {\n\t\tlet canvas = this.canvas;\n\t\tvar dpr = window.devicePixelRatio || 1;\n\t\tvar w = Math.round(canvas.clientWidth * dpr);\n\t\tvar h = Math.round(canvas.clientHeight * dpr);\n\n\t\tif (canvas.width != w || canvas.height != h) {\n\t\t\tcanvas.width = w;\n\t\t\tcanvas.height = h;\n\t\t}\n\t\tthis.context.gl.viewport(0, 0, canvas.width, canvas.height);\n\n\t\t// Nothing to do for stretch, we simply apply the viewport size of the camera.\n\t\tif (resizeMode === ResizeMode.Expand)\n\t\t\tthis.camera.setViewport(w, h);\n\t\telse if (resizeMode === ResizeMode.Fit) {\n\t\t\tlet sourceWidth = canvas.width, sourceHeight = canvas.height;\n\t\t\tlet targetWidth = this.camera.viewportWidth, targetHeight = this.camera.viewportHeight;\n\t\t\tlet targetRatio = targetHeight / targetWidth;\n\t\t\tlet sourceRatio = sourceHeight / sourceWidth;\n\t\t\tlet scale = targetRatio < sourceRatio ? targetWidth / sourceWidth : targetHeight / sourceHeight;\n\t\t\tthis.camera.setViewport(sourceWidth * scale, sourceHeight * scale);\n\t\t}\n\t\tthis.camera.update();\n\t}\n\n\tprivate enableRenderer (renderer: PolygonBatcher | ShapeRenderer | SkeletonDebugRenderer) {\n\t\tif (this.activeRenderer === renderer) return;\n\t\tthis.end();\n\t\tif (renderer instanceof PolygonBatcher) {\n\t\t\tthis.batcherShader.bind();\n\t\t\tthis.batcherShader.setUniform4x4f(Shader.MVP_MATRIX, this.camera.projectionView.values);\n\t\t\tthis.batcherShader.setUniformi(\"u_texture\", 0);\n\t\t\tthis.batcher.begin(this.batcherShader);\n\t\t\tthis.activeRenderer = this.batcher;\n\t\t} else if (renderer instanceof ShapeRenderer) {\n\t\t\tthis.shapesShader.bind();\n\t\t\tthis.shapesShader.setUniform4x4f(Shader.MVP_MATRIX, this.camera.projectionView.values);\n\t\t\tthis.shapes.begin(this.shapesShader);\n\t\t\tthis.activeRenderer = this.shapes;\n\t\t} else\n\t\t\tthis.activeRenderer = this.skeletonDebugRenderer;\n\t}\n}\n\nexport enum ResizeMode {\n\tStretch,\n\tExpand,\n\tFit\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { Color, Disposable, TimeKeeper } from \"@esotericsoftware/spine-core\";\nimport { GLTexture } from \"./GLTexture\";\nimport { ResizeMode, SceneRenderer } from \"./SceneRenderer\";\n\nlet spinnerImage: HTMLImageElement;\nlet logoImage: HTMLImageElement;\nlet loaded = 0;\n\nconst FADE_IN = 1, FADE_OUT = 1;\nconst logoWidth = 165, logoHeight = 108, spinnerSize = 163;\n\nexport class LoadingScreen implements Disposable {\n\tprivate renderer: SceneRenderer;\n\tprivate logo: GLTexture | null = null;\n\tprivate spinner: GLTexture | null = null;\n\tprivate angle = 0;\n\tprivate fadeOut = 0;\n\tprivate fadeIn = 0;\n\tprivate timeKeeper = new TimeKeeper();\n\tbackgroundColor = new Color(0.135, 0.135, 0.135, 1);\n\tprivate tempColor = new Color();\n\n\tconstructor (renderer: SceneRenderer) {\n\t\tthis.renderer = renderer;\n\n\t\tthis.timeKeeper.maxDelta = 9;\n\n\t\tif (!logoImage) {\n\t\t\tlet isSafari = navigator.userAgent.indexOf(\"Safari\") > -1; // Thank you Apple Inc.\n\t\t\tlet onload = () => loaded++;\n\n\t\t\tlogoImage = new Image();\n\t\t\tlogoImage.src = SPINE_LOGO_DATA;\n\t\t\tif (!isSafari) logoImage.crossOrigin = \"anonymous\";\n\t\t\tlogoImage.onload = onload;\n\n\t\t\tspinnerImage = new Image();\n\t\t\tspinnerImage.src = SPINNER_DATA;\n\t\t\tif (!isSafari) spinnerImage.crossOrigin = \"anonymous\";\n\t\t\tspinnerImage.onload = onload;\n\t\t}\n\t}\n\tdispose (): void {\n\t\tthis.logo?.dispose();\n\t\tthis.spinner?.dispose();\n\t}\n\n\tdraw (complete = false) {\n\t\tif (loaded < 2 || (complete && this.fadeOut > FADE_OUT)) return;\n\n\t\tthis.timeKeeper.update();\n\t\tlet a = Math.abs(Math.sin(this.timeKeeper.totalTime + 0.25));\n\t\tthis.angle -= this.timeKeeper.delta * 200 * (1 + 1.5 * Math.pow(a, 5));\n\n\t\tlet tempColor = this.tempColor;\n\t\tlet renderer = this.renderer;\n\t\tlet canvas = renderer.canvas;\n\t\tlet gl = renderer.context.gl;\n\n\t\trenderer.resize(ResizeMode.Expand);\n\t\trenderer.camera.position.set(canvas.width / 2, canvas.height / 2, 0);\n\t\trenderer.batcher.setBlendMode(gl.ONE, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);\n\n\t\tif (complete) {\n\t\t\tthis.fadeOut += this.timeKeeper.delta * (this.timeKeeper.totalTime < 1 ? 2 : 1);\n\t\t\tif (this.fadeOut > FADE_OUT) return;\n\t\t\ttempColor.setFromColor(this.backgroundColor);\n\t\t\ta = 1 - this.fadeOut / FADE_OUT;\n\t\t\ta = 1 - (a - 1) * (a - 1);\n\t\t\ttempColor.a *= a;\n\t\t\tif (tempColor.a > 0) {\n\t\t\t\trenderer.camera.zoom = 1;\n\t\t\t\trenderer.begin();\n\t\t\t\trenderer.quad(true, 0, 0, canvas.width, 0, canvas.width, canvas.height, 0, canvas.height,\n\t\t\t\t\ttempColor, tempColor, tempColor, tempColor);\n\t\t\t\trenderer.end();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.fadeIn += this.timeKeeper.delta;\n\t\t\tif (this.backgroundColor.a > 0) {\n\t\t\t\tgl.clearColor(this.backgroundColor.r, this.backgroundColor.g, this.backgroundColor.b, this.backgroundColor.a);\n\t\t\t\tgl.clear(gl.COLOR_BUFFER_BIT);\n\t\t\t}\n\t\t\ta = 1;\n\t\t}\n\t\ta *= Math.min(this.fadeIn / FADE_IN, 1);\n\t\ttempColor.set(a, a, a, a);\n\n\t\tif (!this.logo) {\n\t\t\tthis.logo = new GLTexture(renderer.context, logoImage);\n\t\t\tthis.spinner = new GLTexture(renderer.context, spinnerImage);\n\t\t}\n\t\trenderer.camera.zoom = Math.max(1, spinnerSize / canvas.height);\n\t\trenderer.begin();\n\t\trenderer.drawTexture(this.logo, (canvas.width - logoWidth) / 2, (canvas.height - logoHeight) / 2, logoWidth, logoHeight, tempColor);\n\t\tif (this.spinner) renderer.drawTextureRotated(this.spinner, (canvas.width - spinnerSize) / 2, (canvas.height - spinnerSize) / 2, spinnerSize, spinnerSize, spinnerSize / 2, spinnerSize / 2, this.angle, tempColor);\n\t\trenderer.end();\n\t}\n}\n\nlet SPINNER_DATA = \"data:image/png;base64,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\";\n\nlet SPINE_LOGO_DATA = \"data:image/png;base64,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\";\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated September 24, 2021. Replaces all prior versions.\n *\n * Copyright (c) 2013-2021, 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\nimport { TimeKeeper, AssetManager, ManagedWebGLRenderingContext, SceneRenderer, Input, StringMap } from \"./\";\n\n/** An app running inside a {@link SpineCanvas}. The app life-cycle\n * is as follows:\n *\n * 1. `loadAssets()` is called. The app can queue assets for loading via {@link SpineCanvas#assetManager}.\n * 2. `initialize()` is called when all assets are loaded. The app can setup anything it needs to enter the main application logic.\n * 3. `update()` is called periodically at screen refresh rate. The app can update its state.\n * 4. `render()` is called periodically at screen refresh rate. The app can render its state via {@link SpineCanvas#renderer} or directly via the WebGL context in {@link SpineCanvas.gl}`\n *\n * The `error()` method is called in case the assets could not be loaded.\n */\nexport interface SpineCanvasApp {\n\tloadAssets?(canvas: SpineCanvas): void;\n\tinitialize?(canvas: SpineCanvas): void;\n\tupdate?(canvas: SpineCanvas, delta: number): void;\n\trender?(canvas: SpineCanvas): void;\n\terror?(canvas: SpineCanvas, errors: StringMap<string>): void;\n}\n\n/** Configuration passed to the {@link SpineCanvas} constructor */\nexport interface SpineCanvasConfig {\n\t/* The {@link SpineCanvasApp} to be run in the canvas. */\n\tapp: SpineCanvasApp;\n\t/* The path prefix to be used by the {@link AssetManager}. */\n\tpathPrefix?: string;\n\t/* The WebGL context configuration */\n\twebglConfig?: any;\n}\n\n/** Manages the life-cycle and WebGL context of a {@link SpineCanvasApp}. The app loads\n * assets and initializes itself, then updates and renders its state at the screen refresh rate. */\nexport class SpineCanvas {\n\treadonly context: ManagedWebGLRenderingContext;\n\n\t/** Tracks the current time, delta, and other time related statistics. */\n\treadonly time = new TimeKeeper();\n\t/** The HTML canvas to render to. */\n\treadonly htmlCanvas: HTMLCanvasElement;\n\t/** The WebGL rendering context. */\n\treadonly gl: WebGLRenderingContext;\n\t/** The scene renderer for easy drawing of skeletons, shapes, and images. */\n\treadonly renderer: SceneRenderer;\n\t/** The asset manager to load assets with. */\n\treadonly assetManager: AssetManager;\n\t/** The input processor used to listen to mouse, touch, and keyboard events. */\n\treadonly input: Input;\n\n\t/** Constructs a new spine canvas, rendering to the provided HTML canvas. */\n\tconstructor (canvas: HTMLCanvasElement, config: SpineCanvasConfig) {\n\t\tif (!config.pathPrefix) config.pathPrefix = \"\";\n\t\tif (!config.app) config.app = {\n\t\t\tloadAssets: () => { },\n\t\t\tinitialize: () => { },\n\t\t\tupdate: () => { },\n\t\t\trender: () => { },\n\t\t\terror: () => { },\n\t\t}\n\t\tif (config.webglConfig) config.webglConfig = { alpha: true };\n\n\t\tthis.htmlCanvas = canvas;\n\t\tthis.context = new ManagedWebGLRenderingContext(canvas, config.webglConfig);\n\t\tthis.renderer = new SceneRenderer(canvas, this.context);\n\t\tthis.gl = this.context.gl;\n\t\tthis.assetManager = new AssetManager(this.context, config.pathPrefix);\n\t\tthis.input = new Input(canvas);\n\n\t\tif (config.app.loadAssets) config.app.loadAssets(this);\n\n\t\tlet loop = () => {\n\t\t\trequestAnimationFrame(loop);\n\t\t\tthis.time.update();\n\t\t\tif (config.app.update) config.app.update(this, this.time.delta);\n\t\t\tif (config.app.render) config.app.render(this);\n\t\t}\n\n\t\tlet waitForAssets = () => {\n\t\t\tif (this.assetManager.isLoadingComplete()) {\n\t\t\t\tif (this.assetManager.hasErrors()) {\n\t\t\t\t\tif (config.app.error) config.app.error(this, this.assetManager.getErrors());\n\t\t\t\t} else {\n\t\t\t\t\tif (config.app.initialize) config.app.initialize(this);\n\t\t\t\t\tloop();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\trequestAnimationFrame(waitForAssets);\n\t\t}\n\t\trequestAnimationFrame(waitForAssets);\n\t}\n\n\t/** Clears the canvas with the given color. The color values are given in the range [0,1]. */\n\tclear (r: number, g: number, b: number, a: number) {\n\t\tthis.gl.clearColor(r, g, b, a);\n\t\tthis.gl.clear(this.gl.COLOR_BUFFER_BIT);\n\t}\n}\n"],
  "mappings": "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,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAChF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAChF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAChF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAChF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAChF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAChF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAChF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAChF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAChF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAChF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAChF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAChF,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE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EAAE,OAAO,EAAE,OAAO,EAAE;AAC1E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC1E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC1E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC1E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC1E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC1E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC1E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC1E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC1E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC1E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC1E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC1E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC1E,QAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OA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",
  "names": ["Matrix4", "v", "SequenceMode", "MixBlend", "MixDirection", "x", "y", "i", "vertexAttachment", "i", "n", "timeline", "EventType", "TextureFilter", "TextureWrap", "page", "TransformMode", "PositionMode", "SpacingMode", "RotateMode", "closed", "pathLength", "multiplier", "BlendMode", "closed", "AttachmentType", "n", "LinkedMesh", "readTimeline1", "readTimeline2", "Matrix4", "Matrix4", "VertexAttributeType", "temp", "ShapeType", "i", "n", "n", "ResizeMode"]
}
