@esotericsoftware/spine-canvas 4.2.117 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CanvasTexture.d.ts +1 -1
- package/dist/CanvasTexture.js +1 -1
- package/dist/SkeletonRenderer.d.ts +1 -1
- package/dist/SkeletonRenderer.js +72 -63
- package/dist/esm/spine-canvas.min.mjs +2 -2
- package/dist/esm/spine-canvas.mjs +7825 -6185
- package/dist/esm/spine-canvas.mjs.map +4 -4
- package/dist/iife/spine-canvas.js +7825 -6185
- package/dist/iife/spine-canvas.js.map +4 -4
- package/dist/iife/spine-canvas.min.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/package.json +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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/
|
|
4
|
-
"sourcesContent": ["export * from \"./AssetManager.js\";\nexport * from \"./CanvasTexture.js\";\nexport * from \"./SkeletonRenderer.js\";\nexport * from \"@esotericsoftware/spine-core\"", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { MixBlend } from \"./Animation.js\";\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 type NumberArrayLike = Array<number> | Float32Array;\nexport type IntArrayLike = Array<number> | Int16Array;\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\ttoRgb888 () {\n\t\tconst hex = (x: number) => (\"0\" + (x * 255).toString(16)).slice(-2);\n\t\treturn Number(\"0x\" + hex(this.r) + hex(this.g) + hex(this.b));\n\t}\n\n\tstatic fromString (hex: string, color = new Color()): Color {\n\t\treturn color.setFromString(hex);\n\t}\n}\n\nexport class MathUtils {\n\tstatic PI = 3.1415927;\n\tstatic PI2 = MathUtils.PI * 2;\n\tstatic invPI2 = 1 / MathUtils.PI2;\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 atan2Deg (y: number, x: number) {\n\t\treturn Math.atan2(y, x) * 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): IntArrayLike {\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { NumberArrayLike, Utils } from \"../Utils.js\";\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { Slot } from \"../Slot.js\";\nimport { HasTextureRegion } from \"./HasTextureRegion.js\";\nimport { Utils } from \"../Utils.js\";\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", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { IkConstraint } from \"./IkConstraint.js\";\nimport { PathConstraint } from \"./PathConstraint.js\";\nimport { Skeleton } from \"./Skeleton.js\";\nimport { Slot } from \"./Slot.js\";\nimport { TransformConstraint } from \"./TransformConstraint.js\";\nimport { StringSet, Utils, MathUtils, NumberArrayLike } from \"./Utils.js\";\nimport { Event } from \"./Event.js\";\nimport { HasTextureRegion } from \"./attachments/HasTextureRegion.js\";\nimport { SequenceMode, SequenceModeValues } from \"./attachments/Sequence.js\";\nimport { PhysicsConstraint } from \"./PhysicsConstraint.js\";\nimport { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\nimport { Inherit } from \"./BoneData.js\";\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\tinherit: 7,\n\n\trgb: 8,\n\talpha: 9,\n\trgb2: 10,\n\n\tattachment: 11,\n\tdeform: 12,\n\n\tevent: 13,\n\tdrawOrder: 14,\n\n\tikConstraint: 15,\n\ttransformConstraint: 16,\n\n\tpathConstraintPosition: 17,\n\tpathConstraintSpacing: 18,\n\tpathConstraintMix: 19,\n\n\tphysicsConstraintInertia: 20,\n\tphysicsConstraintStrength: 21,\n\tphysicsConstraintDamping: 22,\n\tphysicsConstraintMass: 23,\n\tphysicsConstraintWind: 24,\n\tphysicsConstraintGravity: 25,\n\tphysicsConstraintMix: 26,\n\tphysicsConstraintReset: 27,\n\n\tsequence: 28,\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\tgetRelativeValue (time: number, alpha: number, blend: MixBlend, current: number, setup: number) {\n\t\tif (time < this.frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\treturn setup;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\treturn current + (setup - current) * alpha;\n\t\t\t}\n\t\t\treturn current;\n\t\t}\n\t\tlet value = this.getCurveValue(time);\n\t\tswitch (blend) {\n\t\t\tcase MixBlend.setup:\n\t\t\t\treturn setup + value * alpha;\n\t\t\tcase MixBlend.first:\n\t\t\tcase MixBlend.replace:\n\t\t\t\tvalue += setup - current;\n\t\t}\n\t\treturn current + value * alpha;\n\t}\n\n\tgetAbsoluteValue (time: number, alpha: number, blend: MixBlend, current: number, setup: number) {\n\t\tif (time < this.frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\treturn setup;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\treturn current + (setup - current) * alpha;\n\t\t\t}\n\t\t\treturn current;\n\t\t}\n\t\tlet value = this.getCurveValue(time);\n\t\tif (blend == MixBlend.setup) return setup + (value - setup) * alpha;\n\t\treturn current + (value - current) * alpha;\n\t}\n\n\tgetAbsoluteValue2 (time: number, alpha: number, blend: MixBlend, current: number, setup: number, value: number) {\n\t\tif (time < this.frames[0]) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\treturn setup;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\treturn current + (setup - current) * alpha;\n\t\t\t}\n\t\t\treturn current;\n\t\t}\n\t\tif (blend == MixBlend.setup) return setup + (value - setup) * alpha;\n\t\treturn current + (value - current) * alpha;\n\t}\n\n\tgetScaleValue (time: number, alpha: number, blend: MixBlend, direction: MixDirection, current: number, setup: number) {\n\t\tconst 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\treturn setup;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\t\treturn current + (setup - current) * alpha;\n\t\t\t}\n\t\t\treturn current;\n\t\t}\n\t\tlet value = this.getCurveValue(time) * setup;\n\t\tif (alpha == 1) {\n\t\t\tif (blend == MixBlend.add) return current + value - setup;\n\t\t\treturn value;\n\t\t}\n\t\t// Mixing out uses sign of setup or current pose, else use sign of key.\n\t\tif (direction == MixDirection.mixOut) {\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\treturn setup + (Math.abs(value) * MathUtils.signum(setup) - setup) * alpha;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\tcase MixBlend.replace:\n\t\t\t\t\treturn current + (Math.abs(value) * MathUtils.signum(current) - current) * alpha;\n\t\t\t}\n\t\t} else {\n\t\t\tlet s = 0;\n\t\t\tswitch (blend) {\n\t\t\t\tcase MixBlend.setup:\n\t\t\t\t\ts = Math.abs(setup) * MathUtils.signum(value);\n\t\t\t\t\treturn s + (value - s) * alpha;\n\t\t\t\tcase MixBlend.first:\n\t\t\t\tcase MixBlend.replace:\n\t\t\t\t\ts = Math.abs(current) * MathUtils.signum(value);\n\t\t\t\t\treturn s + (value - s) * alpha;\n\t\t\t}\n\t\t}\n\t\treturn current + (value - setup) * alpha;\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) bone.rotation = this.getRelativeValue(time, alpha, blend, bone.rotation, bone.data.rotation);\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) bone.x = this.getRelativeValue(time, alpha, blend, bone.x, bone.data.x);\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) bone.y = this.getRelativeValue(time, alpha, blend, bone.y, bone.data.y);\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) bone.scaleX = this.getScaleValue(time, alpha, blend, direction, bone.scaleX, bone.data.scaleX);\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) bone.scaleY = this.getScaleValue(time, alpha, blend, direction, bone.scaleY, bone.data.scaleY);\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) bone.shearX = this.getRelativeValue(time, alpha, blend, bone.shearX, bone.data.shearX);\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) bone.shearY = this.getRelativeValue(time, alpha, blend, bone.shearY, bone.data.shearY);\n\t}\n}\n\nexport class InheritTimeline extends Timeline implements BoneTimeline {\n\tboneIndex = 0;\n\n\tconstructor (frameCount: number, boneIndex: number) {\n\t\tsuper(frameCount, [Property.inherit + \"|\" + boneIndex]);\n\t\tthis.boneIndex = boneIndex;\n\t}\n\n\tpublic getFrameEntries () {\n\t\treturn 2/*ENTRIES*/;\n\t}\n\n\t/** Sets the transform mode 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\tpublic setFrame (frame: number, time: number, inherit: Inherit) {\n\t\tframe *= 2/*ENTRIES*/;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*INHERIT*/] = inherit;\n\t}\n\n\tpublic apply (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\tif (direction == MixDirection.mixOut) {\n\t\t\tif (blend == MixBlend.setup) bone.inherit = bone.data.inherit;\n\t\t\treturn;\n\t\t}\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (blend == MixBlend.setup || blend == MixBlend.first) bone.inherit = bone.data.inherit;\n\t\t\treturn;\n\t\t}\n\t\tbone.inherit = this.frames[Timeline.search(frames, time, 2/*ENTRIES*/) + 1/*INHERIT*/];\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]) {\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]) {\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) { // Apply after lastTime 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;\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 in {@link Skeleton#getIkConstraints()} that will be changed when this timeline is applied */\n\tconstraintIndex: 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.constraintIndex = 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.constraintIndex];\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\tconstraintIndex: 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.constraintIndex = 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.constraintIndex];\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 in {@link Skeleton#getPathConstraints()} that will be changed when this timeline is\n\t * applied. */\n\tconstraintIndex: number = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, pathConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, Property.pathConstraintPosition + \"|\" + pathConstraintIndex);\n\t\tthis.constraintIndex = 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.constraintIndex];\n\t\tif (constraint.active)\n\t\t\tconstraint.position = this.getAbsoluteValue(time, alpha, blend, constraint.position, constraint.data.position);\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 in {@link Skeleton#getPathConstraints()} that will be changed when this timeline is\n\t * applied. */\n\tconstraintIndex = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, pathConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, Property.pathConstraintSpacing + \"|\" + pathConstraintIndex);\n\t\tthis.constraintIndex = 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.constraintIndex];\n\t\tif (constraint.active)\n\t\t\tconstraint.spacing = this.getAbsoluteValue(time, alpha, blend, constraint.spacing, constraint.data.spacing);\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 in {@link Skeleton#getPathConstraints()} that will be changed when this timeline is\n\t * applied. */\n\tconstraintIndex = 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.constraintIndex = 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.constraintIndex];\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/** The base class for most {@link PhysicsConstraint} timelines. */\nexport abstract class PhysicsConstraintTimeline extends CurveTimeline1 {\n\t/** The index of the physics constraint in {@link Skeleton#getPhysicsConstraints()} that will be changed when this timeline\n\t * is applied, or -1 if all physics constraints in the skeleton will be changed. */\n\tconstraintIndex = 0;\n\n\t/** @param physicsConstraintIndex -1 for all physics constraints in the skeleton. */\n\tconstructor (frameCount: number, bezierCount: number, physicsConstraintIndex: number, property: number) {\n\t\tsuper(frameCount, bezierCount, property + \"|\" + physicsConstraintIndex);\n\t\tthis.constraintIndex = physicsConstraintIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\t\tlet constraint: PhysicsConstraint;\n\t\tif (this.constraintIndex == -1) {\n\t\t\tconst value = time >= this.frames[0] ? this.getCurveValue(time) : 0;\n\n\t\t\tfor (const constraint of skeleton.physicsConstraints) {\n\t\t\t\tif (constraint.active && this.global(constraint.data))\n\t\t\t\t\tthis.set(constraint, this.getAbsoluteValue2(time, alpha, blend, this.get(constraint), this.setup(constraint), value));\n\t\t\t}\n\t\t} else {\n\t\t\tconstraint = skeleton.physicsConstraints[this.constraintIndex];\n\t\t\tif (constraint.active) this.set(constraint, this.getAbsoluteValue(time, alpha, blend, this.get(constraint), this.setup(constraint)));\n\t\t}\n\t}\n\n\tabstract setup (constraint: PhysicsConstraint): number;\n\n\tabstract get (constraint: PhysicsConstraint): number;\n\n\tabstract set (constraint: PhysicsConstraint, value: number): void;\n\n\tabstract global (constraint: PhysicsConstraintData): boolean;\n}\n\n/** Changes a physics constraint's {@link PhysicsConstraint#getInertia()}. */\nexport class PhysicsConstraintInertiaTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, physicsConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintInertia);\n\t}\n\n\tsetup (constraint: PhysicsConstraint): number {\n\t\treturn constraint.data.inertia;\n\t}\n\n\tget (constraint: PhysicsConstraint): number {\n\t\treturn constraint.inertia;\n\t}\n\n\tset (constraint: PhysicsConstraint, value: number): void {\n\t\tconstraint.inertia = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.inertiaGlobal;\n\t}\n}\n\n/** Changes a physics constraint's {@link PhysicsConstraint#getStrength()}. */\nexport class PhysicsConstraintStrengthTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, physicsConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintStrength);\n\t}\n\n\tsetup (constraint: PhysicsConstraint): number {\n\t\treturn constraint.data.strength;\n\t}\n\n\tget (constraint: PhysicsConstraint): number {\n\t\treturn constraint.strength;\n\t}\n\n\tset (constraint: PhysicsConstraint, value: number): void {\n\t\tconstraint.strength = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.strengthGlobal;\n\t}\n}\n\n/** Changes a physics constraint's {@link PhysicsConstraint#getDamping()}. */\nexport class PhysicsConstraintDampingTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, physicsConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintDamping);\n\t}\n\n\tsetup (constraint: PhysicsConstraint): number {\n\t\treturn constraint.data.damping;\n\t}\n\n\tget (constraint: PhysicsConstraint): number {\n\t\treturn constraint.damping;\n\t}\n\n\tset (constraint: PhysicsConstraint, value: number): void {\n\t\tconstraint.damping = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.dampingGlobal;\n\t}\n}\n\n/** Changes a physics constraint's {@link PhysicsConstraint#getMassInverse()}. The timeline values are not inverted. */\nexport class PhysicsConstraintMassTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, physicsConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintMass);\n\t}\n\n\tsetup (constraint: PhysicsConstraint): number {\n\t\treturn 1 / constraint.data.massInverse;\n\t}\n\n\tget (constraint: PhysicsConstraint): number {\n\t\treturn 1 / constraint.massInverse;\n\t}\n\n\tset (constraint: PhysicsConstraint, value: number): void {\n\t\tconstraint.massInverse = 1 / value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.massGlobal;\n\t}\n}\n\n/** Changes a physics constraint's {@link PhysicsConstraint#getWind()}. */\nexport class PhysicsConstraintWindTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, physicsConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintWind);\n\t}\n\n\tsetup (constraint: PhysicsConstraint): number {\n\t\treturn constraint.data.wind;\n\t}\n\n\tget (constraint: PhysicsConstraint): number {\n\t\treturn constraint.wind;\n\t}\n\n\tset (constraint: PhysicsConstraint, value: number): void {\n\t\tconstraint.wind = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.windGlobal;\n\t}\n}\n\n/** Changes a physics constraint's {@link PhysicsConstraint#getGravity()}. */\nexport class PhysicsConstraintGravityTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, physicsConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintGravity);\n\t}\n\n\tsetup (constraint: PhysicsConstraint): number {\n\t\treturn constraint.data.gravity;\n\t}\n\n\tget (constraint: PhysicsConstraint): number {\n\t\treturn constraint.gravity;\n\t}\n\n\tset (constraint: PhysicsConstraint, value: number): void {\n\t\tconstraint.gravity = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.gravityGlobal;\n\t}\n}\n\n/** Changes a physics constraint's {@link PhysicsConstraint#getMix()}. */\nexport class PhysicsConstraintMixTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, physicsConstraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintMix);\n\t}\n\n\tsetup (constraint: PhysicsConstraint): number {\n\t\treturn constraint.data.mix;\n\t}\n\n\tget (constraint: PhysicsConstraint): number {\n\t\treturn constraint.mix;\n\t}\n\n\tset (constraint: PhysicsConstraint, value: number): void {\n\t\tconstraint.mix = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.mixGlobal;\n\t}\n}\n\n/** Resets a physics constraint when specific animation times are reached. */\nexport class PhysicsConstraintResetTimeline extends Timeline {\n\tprivate static propertyIds: string[] = [Property.physicsConstraintReset.toString()];\n\n\t/** The index of the physics constraint in {@link Skeleton#getPhysicsConstraints()} that will be reset when this timeline is\n\t* applied, or -1 if all physics constraints in the skeleton will be reset. */\n\tconstraintIndex: number;\n\n\t/** @param physicsConstraintIndex -1 for all physics constraints in the skeleton. */\n\tconstructor (frameCount: number, physicsConstraintIndex: number) {\n\t\tsuper(frameCount, PhysicsConstraintResetTimeline.propertyIds);\n\t\tthis.constraintIndex = physicsConstraintIndex;\n\t}\n\n\tgetFrameCount () {\n\t\treturn this.frames.length;\n\t}\n\n\t/** Sets the time for the specified frame.\n\t * @param frame Between 0 and <code>frameCount</code>, inclusive. */\n\tsetFrame (frame: number, time: number) {\n\t\tthis.frames[frame] = time;\n\t}\n\n\t/** Resets the physics constraint when frames > <code>lastTime</code> and <= <code>time</code>. */\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, blend: MixBlend, direction: MixDirection) {\n\n\t\tlet constraint: PhysicsConstraint | undefined;\n\t\tif (this.constraintIndex != -1) {\n\t\t\tconstraint = skeleton.physicsConstraints[this.constraintIndex];\n\t\t\tif (!constraint.active) return;\n\t\t}\n\n\t\tconst frames = this.frames;\n\n\t\tif (lastTime > time) { // Apply after lastTime for looped animations.\n\t\t\tthis.apply(skeleton, lastTime, Number.MAX_VALUE, [], alpha, blend, direction);\n\t\t\tlastTime = -1;\n\t\t} else if (lastTime >= frames[frames.length - 1]) // Last time is after last frame.\n\t\t\treturn;\n\t\tif (time < frames[0]) return;\n\n\t\tif (lastTime < frames[0] || time >= frames[Timeline.search1(frames, lastTime) + 1]) {\n\t\t\tif (constraint != null)\n\t\t\t\tconstraint.reset();\n\t\t\telse {\n\t\t\t\tfor (const constraint of skeleton.physicsConstraints) {\n\t\t\t\t\tif (constraint.active) constraint.reset();\n\t\t\t\t}\n\t\t\t}\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\tif (direction == MixDirection.mixOut) {\n\t\t\tif (blend == MixBlend.setup) slot.sequenceIndex = -1;\n\t\t\treturn;\n\t\t}\n\n\t\tlet frames = this.frames;\n\t\tif (time < frames[0]) {\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", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { AnimationStateData } from \"./AnimationStateData.js\";\nimport { Skeleton } from \"./Skeleton.js\";\nimport { Slot } from \"./Slot.js\";\nimport { StringSet, Pool, Utils, MathUtils } from \"./Utils.js\";\nimport { Event } from \"./Event.js\";\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// The from entry was applied at least once and the mix is complete.\n\t\tif (to.nextTrackLast != -1 && to.mixTime >= to.mixDuration) {\n\t\t\t// Mixing is complete for all entries before the from entry or the mix is instantaneous.\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 != null) 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 alpha = current.alpha;\n\t\t\tif (current.mixingFrom)\n\t\t\t\talpha *= this.applyMixingFrom(current, skeleton, blend);\n\t\t\telse if (current.trackTime >= current.trackEnd && !current.next)\n\t\t\t\talpha = 0;\n\t\t\tlet attachments = alpha >= current.alphaAttachmentThreshold;\n\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 && alpha == 1) || blend == MixBlend.add) {\n\t\t\t\tif (i == 0) attachments = true;\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(alpha, 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, attachments);\n\t\t\t\t\telse\n\t\t\t\t\t\ttimeline.apply(skeleton, animationLast, applyTime, applyEvents, alpha, 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, alpha, 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, attachments);\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(alpha, blend);\n\t\t\t\t\t\ttimeline.apply(skeleton, animationLast, applyTime, applyEvents, alpha, 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.mixAttachmentThreshold, drawOrder = mix < from.mixDrawOrderThreshold;\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 && alpha >= from.alphaAttachmentThreshold);\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 -= Math.ceil(diff / 360 - 0.5) * 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];\n\t\t\t\tlastDiff = timelinesRotation[i + 1];\n\t\t\t}\n\t\t\tlet loops = lastTotal - lastTotal % 360;\n\t\t\ttotal = diff + loops;\n\t\t\tlet current = diff >= 0, dir = lastTotal >= 0;\n\t\t\tif (Math.abs(lastDiff) <= 90 && MathUtils.signum(lastDiff) != MathUtils.signum(diff)) {\n\t\t\t\tif (Math.abs(lastTotal - loops) > 180) {\n\t\t\t\t\ttotal += 360 * MathUtils.signum(lastTotal);\n\t\t\t\t\tdir = current;\n\t\t\t\t} else if (loops != 0)\n\t\t\t\t\ttotal -= 360 * MathUtils.signum(lastTotal);\n\t\t\t\telse\n\t\t\t\t\tdir = current;\n\t\t\t}\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\tif (duration == 0)\n\t\t\t\tcomplete = true;\n\t\t\telse {\n\t\t\t\tconst cycles = Math.floor(entry.trackTime / duration);\n\t\t\t\tcomplete = cycles > 0 && cycles > Math.floor(entry.trackLast / duration);\n\t\t\t}\n\t\t} else\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\tif (delay < 0) delay = 0;\n\t\t} else {\n\t\t\tlast.next = entry;\n\t\t\tentry.previous = last;\n\t\t\tif (delay <= 0) delay = Math.max(delay + last.getTrackComplete() - entry.mixDuration, 0);\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 = Math.max(entry.delay + entry.mixDuration - mixDuration, 0);\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.alphaAttachmentThreshold = 0;\n\t\tentry.mixAttachmentThreshold = 0;\n\t\tentry.mixDrawOrderThreshold = 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\tmixAttachmentThreshold: number = 0;\n\n\t/** When {@link #getAlpha()} is greater than <code>alphaAttachmentThreshold</code>, attachment timelines are applied.\n\t * Defaults to 0, so attachment timelines are always applied. */\n\talphaAttachmentThreshold: number = 0;\n\n\t/** When the mix percentage ({@link #getMixTime()} / {@link #getMixDuration()}) is less than the\n\t * <code>mixDrawOrderThreshold</code>, draw order timelines are applied while this animation is being mixed out. Defaults to\n\t * 0, so draw order timelines are not applied while this animation is being mixed out. */\n\tmixDrawOrderThreshold: 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\t_mixDuration: number = 0; interruptAlpha: number = 0; totalAlpha: number = 0;\n\n\tget mixDuration () {\n\t\treturn this._mixDuration;\n\t}\n\n\tset mixDuration (mixDuration: number) {\n\t\tthis._mixDuration = mixDuration;\n\t}\n\n\tsetMixDurationWithDelay (mixDuration: number, delay: number) {\n\t\tthis._mixDuration = mixDuration;\n\t\tif (delay <= 0) {\n\t\t\tif (this.previous != null)\n\t\t\t\tdelay = Math.max(delay + this.previous.getTrackComplete() - mixDuration, 0);\n\t\t\telse\n\t\t\t\tdelay = 0;\n\t\t}\n\t\tthis.delay = delay;\n\t}\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\t/** Returns true if this track entry has been applied at least once.\n\t * <p>\n\t * See {@link AnimationState#apply(Skeleton)}. */\n\twasApplied () {\n\t\treturn this.nextTrackLast != -1;\n\t}\n\n\t/** Returns true if there is a {@link #getNext()} track entry and it will become the current track entry during the next\n\t * {@link AnimationState#update(float)}. */\n\tisNextReady () {\n\t\treturn this.next != null && this.nextTrackLast - this.next.delay >= 0;\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\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\tlet listeners = this.animState.listeners.slice();\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", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { SkeletonData } from \"./SkeletonData.js\";\nimport { StringMap } from \"./Utils.js\";\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { VertexAttachment, Attachment } from \"./Attachment.js\";\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { Color } from \"../Utils.js\";\nimport { VertexAttachment, Attachment } from \"./Attachment.js\";\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 | any;\n\n\tconstructor (image: HTMLImageElement | ImageBitmap | any) {\n\t\tthis._image = image;\n\t}\n\n\tgetImage (): HTMLImageElement | ImageBitmap | any {\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\ttexture: 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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { TextureFilter, TextureWrap, Texture, TextureRegion } from \"./Texture.js\";\nimport { Disposable, Utils, StringMap } from \"./Utils.js\";\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\tregions = new Array<TextureAtlasRegion>();\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\tfor (let region of this.regions)\n\t\t\tregion.texture = texture;\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\tpage.regions.push(this);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { TextureAtlasRegion } from \"../TextureAtlas.js\";\nimport { Color, NumberArrayLike, Utils } from \"../Utils.js\";\nimport { VertexAttachment, Attachment } from \"./Attachment.js\";\nimport { HasTextureRegion } from \"./HasTextureRegion.js\";\nimport { Sequence } from \"./Sequence.js\";\nimport { Slot } from \"../Slot.js\";\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, page = region.page;\n\t\t\tlet textureWidth = page.width, textureHeight = page.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 = this.uvs instanceof Float32Array ? Utils.newFloatArray(this.uvs.length) : 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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { VertexAttachment, Attachment } from \"./Attachment.js\";\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { Color, Vector2, MathUtils } from \"../Utils.js\";\nimport { VertexAttachment, Attachment } from \"./Attachment.js\";\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\tconst r = this.rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);\n\t\tconst x = cos * bone.a + sin * bone.b;\n\t\tconst y = cos * bone.c + sin * bone.d;\n\t\treturn MathUtils.atan2Deg(y, x);\t\t\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { TextureRegion } from \"../Texture.js\";\nimport { Color, MathUtils, NumberArrayLike, Utils } from \"../Utils.js\";\nimport { Attachment } from \"./Attachment.js\";\nimport { HasTextureRegion } from \"./HasTextureRegion.js\";\nimport { Sequence } from \"./Sequence.js\";\nimport { Slot } from \"../Slot.js\";\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\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 * MathUtils.degRad;\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.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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { BoundingBoxAttachment } from \"./attachments/BoundingBoxAttachment.js\";\nimport { ClippingAttachment } from \"./attachments/ClippingAttachment.js\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { PathAttachment } from \"./attachments/PathAttachment.js\";\nimport { PointAttachment } from \"./attachments/PointAttachment.js\";\nimport { RegionAttachment } from \"./attachments/RegionAttachment.js\";\nimport { Skin } from \"./Skin.js\";\nimport { TextureAtlas } from \"./TextureAtlas.js\";\nimport { Sequence } from \"./attachments/Sequence.js\"\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}\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\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\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\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 in degrees, counter clockwise. */\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\tinherit = Inherit.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\t/** The bone icon as it was in Spine, or null if nonessential data was not exported. */\n\ticon?: string;\n\n\t/** False if the bone was hidden in Spine and nonessential data was exported. Does not affect runtime rendering. */\n\tvisible = false;\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 Inherit { Normal, OnlyTranslation, NoRotationOrReflection, NoScale, NoScaleOrReflection }\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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, Inherit } from \"./BoneData.js\";\nimport { Physics, Skeleton } from \"./Skeleton.js\";\nimport { Updatable } from \"./Updatable.js\";\nimport { MathUtils, Vector2 } from \"./Utils.js\";\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\tinherit: Inherit = Inherit.Normal;\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 (physics: Physics) {\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\tconst sx = skeleton.scaleX, sy = skeleton.scaleY;\n\t\t\tconst rx = (rotation + shearX) * MathUtils.degRad;\n\t\t\tconst ry = (rotation + 90 + shearY) * MathUtils.degRad;\n\t\t\tthis.a = Math.cos(rx) * scaleX * sx;\n\t\t\tthis.b = Math.cos(ry) * scaleY * sx;\n\t\t\tthis.c = Math.sin(rx) * scaleX * sy;\n\t\t\tthis.d = Math.sin(ry) * 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.inherit) {\n\t\t\tcase Inherit.Normal: {\n\t\t\t\tconst rx = (rotation + shearX) * MathUtils.degRad;\n\t\t\t\tconst ry = (rotation + 90 + shearY) * MathUtils.degRad;\n\t\t\t\tconst la = Math.cos(rx) * scaleX;\n\t\t\t\tconst lb = Math.cos(ry) * scaleY;\n\t\t\t\tconst lc = Math.sin(rx) * scaleX;\n\t\t\t\tconst ld = Math.sin(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\treturn;\n\t\t\t}\n\t\t\tcase Inherit.OnlyTranslation: {\n\t\t\t\tconst rx = (rotation + shearX) * MathUtils.degRad;\n\t\t\t\tconst ry = (rotation + 90 + shearY) * MathUtils.degRad;\n\t\t\t\tthis.a = Math.cos(rx) * scaleX;\n\t\t\t\tthis.b = Math.cos(ry) * scaleY;\n\t\t\t\tthis.c = Math.sin(rx) * scaleX;\n\t\t\t\tthis.d = Math.sin(ry) * scaleY;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Inherit.NoRotationOrReflection: {\n\t\t\t\tlet sx = 1 / this.skeleton.scaleX, sy = 1 / this.skeleton.scaleY;\n\t\t\t\tpa *= sx;\n\t\t\t\tpc *= sy;\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 * sy - pb * sx * pc) / s;\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\tconst rx = (rotation + shearX - prx) * MathUtils.degRad;\n\t\t\t\tconst ry = (rotation + shearY - prx + 90) * MathUtils.degRad;\n\t\t\t\tconst la = Math.cos(rx) * scaleX;\n\t\t\t\tconst lb = Math.cos(ry) * scaleY;\n\t\t\t\tconst lc = Math.sin(rx) * scaleX;\n\t\t\t\tconst ld = Math.sin(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 Inherit.NoScale:\n\t\t\tcase Inherit.NoScaleOrReflection: {\n\t\t\t\trotation *= MathUtils.degRad;\n\t\t\t\tconst cos = Math.cos(rotation), sin = Math.sin(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.inherit == Inherit.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\trotation = Math.PI / 2 + Math.atan2(zc, za);\n\t\t\t\tconst zb = Math.cos(rotation) * s;\n\t\t\t\tconst zd = Math.sin(rotation) * s;\n\t\t\t\tshearX *= MathUtils.degRad;\n\t\t\t\tshearY = (90 + shearY) * MathUtils.degRad;\n\t\t\t\tconst la = Math.cos(shearX) * scaleX;\n\t\t\t\tconst lb = Math.cos(shearY) * scaleY;\n\t\t\t\tconst lc = Math.sin(shearX) * scaleX;\n\t\t\t\tconst ld = Math.sin(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\tthis.inherit = data.inherit;\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 ia = pd * pid, ib = pb * pid, ic = pc * pid, id = pa * pid;\n\t\tlet dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;\n\t\tthis.ax = (dx * ia - dy * ib);\n\t\tthis.ay = (dy * id - dx * ic);\n\n\t\tlet ra, rb, rc, rd;\n\t\tif (this.inherit == Inherit.OnlyTranslation) {\n\t\t\tra = this.a;\n\t\t\trb = this.b;\n\t\t\trc = this.c;\n\t\t\trd = this.d;\n\t\t} else {\n\t\t\tswitch (this.inherit) {\n\t\t\t\tcase Inherit.NoRotationOrReflection: {\n\t\t\t\t\tlet s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);\n\t\t\t\t\tpb = -pc * this.skeleton.scaleX * s / this.skeleton.scaleY;\n\t\t\t\t\tpd = pa * this.skeleton.scaleY * s / this.skeleton.scaleX;\n\t\t\t\t\tpid = 1 / (pa * pd - pb * pc);\n\t\t\t\t\tia = pd * pid;\n\t\t\t\t\tib = pb * pid;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase Inherit.NoScale:\n\t\t\t\tcase Inherit.NoScaleOrReflection:\n\t\t\t\t\tlet cos = MathUtils.cosDeg(this.rotation), sin = MathUtils.sinDeg(this.rotation);\n\t\t\t\t\tpa = (pa * cos + pb * sin) / this.skeleton.scaleX;\n\t\t\t\t\tpc = (pc * cos + pd * sin) / this.skeleton.scaleY;\n\t\t\t\t\tlet s = Math.sqrt(pa * pa + pc * pc);\n\t\t\t\t\tif (s > 0.00001) s = 1 / s;\n\t\t\t\t\tpa *= s;\n\t\t\t\t\tpc *= s;\n\t\t\t\t\ts = Math.sqrt(pa * pa + pc * pc);\n\t\t\t\t\tif (this.inherit == Inherit.NoScale && pid < 0 != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0)) s = -s;\n\t\t\t\t\tlet r = MathUtils.PI / 2 + Math.atan2(pc, pa);\n\t\t\t\t\tpb = Math.cos(r) * s;\n\t\t\t\t\tpd = Math.sin(r) * s;\n\t\t\t\t\tpid = 1 / (pa * pd - pb * pc);\n\t\t\t\t\tia = pd * pid;\n\t\t\t\t\tib = pb * pid;\n\t\t\t\t\tic = pc * pid;\n\t\t\t\t\tid = pa * pid;\n\t\t\t}\n\t\t\tra = ia * this.a - ib * this.c;\n\t\t\trb = ia * this.b - ib * this.d;\n\t\t\trc = id * this.c - ic * this.a;\n\t\t\trd = id * this.d - ic * this.b;\n\t\t}\n\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\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/** 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 point from world coordinates to the parent bone's local coordinates. */\n\tworldToParent (world: Vector2) {\n\t\tif (world == null) throw new Error(\"world cannot be null.\");\n\t\treturn this.parent == null ? world : this.parent.worldToLocal(world);\n\t}\n\n\t/** Transforms a point from the parent bone's coordinates to world coordinates. */\n\tparentToWorld (world: Vector2) {\n\t\tif (world == null) throw new Error(\"world cannot be null.\");\n\t\treturn this.parent == null ? world : this.parent.localToWorld(world);\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\n\t * {@link #update(Physics)} will need to be called on any child bones, recursively. */\n\trotateWorld (degrees: number) {\n\t\tdegrees *= MathUtils.degRad;\n\t\tconst sin = Math.sin(degrees), cos = Math.cos(degrees);\n\t\tconst ra = this.a, rb = this.b;\n\t\tthis.a = cos * ra - sin * this.c;\n\t\tthis.b = cos * rb - sin * this.d;\n\t\tthis.c = sin * ra + cos * this.c;\n\t\tthis.d = sin * rb + cos * this.d;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { TextureAtlas } from \"./TextureAtlas.js\";\nimport { Disposable, StringMap } from \"./Utils.js\";\n\nexport class AssetManagerBase implements Disposable {\n\tprivate pathPrefix: string = \"\";\n\tprivate textureLoader: (image: HTMLImageElement | ImageBitmap) => Texture;\n\tprivate downloader: Downloader;\n\tprivate cache: AssetCache;\n\tprivate errors: StringMap<string> = {};\n\tprivate toLoad = 0;\n\tprivate loaded = 0;\n\n\tconstructor (textureLoader: (image: HTMLImageElement | ImageBitmap) => Texture, pathPrefix: string = \"\", downloader = new Downloader(), cache = new AssetCache()) {\n\t\tthis.textureLoader = textureLoader;\n\t\tthis.pathPrefix = pathPrefix;\n\t\tthis.downloader = downloader;\n\t\tthis.cache = cache;\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.cache.assets[path] = asset;\n\t\tthis.cache.assetsRefCount[path] = (this.cache.assetsRefCount[path] || 0) + 1;\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\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tthis.cache.assetsLoaded[path] = new Promise<any>((resolve, reject) => {\n\t\t\tthis.downloader.downloadBinary(path, (data: Uint8Array): void => {\n\t\t\t\tthis.success(success, path, data);\n\t\t\t\tresolve(data);\n\t\t\t}, (status: number, responseText: string): void => {\n\t\t\t\tconst errorMsg = `Couldn't load binary ${path}: status ${status}, ${responseText}`;\n\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\treject(errorMsg);\n\t\t\t});\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\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tthis.cache.assetsLoaded[path] = new Promise<any>((resolve, reject) => {\n\t\t\tthis.downloader.downloadJson(path, (data: object): void => {\n\t\t\t\tthis.success(success, path, data);\n\t\t\t\tresolve(data);\n\t\t\t}, (status: number, responseText: string): void => {\n\t\t\t\tconst errorMsg = `Couldn't load JSON ${path}: status ${status}, ${responseText}`;\n\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\treject(errorMsg);\n\t\t\t});\n\t\t});\n\t}\n\n\treuseAssets (path: string,\n\t\tsuccess: (path: string, data: any) => void = () => { },\n\t\terror: (path: string, message: string) => void = () => { }) {\n\t\tconst loadedStatus = this.cache.assetsLoaded[path];\n\t\tconst alreadyExistsOrLoading = loadedStatus !== undefined;\n\t\tif (alreadyExistsOrLoading) {\n\t\t\tthis.cache.assetsLoaded[path] = loadedStatus\n\t\t\t\t.then(data => {\n\t\t\t\t\t// necessary when user preloads an image into the cache.\n\t\t\t\t\t// texture loader is not avaiable in the cache, so we transform in GLTexture at first use\n\t\t\t\t\tdata = (data instanceof Image || data instanceof ImageBitmap) ? this.textureLoader(data) : data;\n\t\t\t\t\tthis.success(success, path, data);\n\t\t\t\t\treturn data;\n\t\t\t\t})\n\t\t\t\t.catch(errorMsg => this.error(error, path, errorMsg));\n\t\t}\n\t\treturn alreadyExistsOrLoading;\n\t}\n\n\tloadTexture (path: string,\n\t\tsuccess: (path: string, texture: Texture) => void = () => { },\n\t\terror: (path: string, message: string) => void = () => { }) {\n\n\t\tpath = this.start(path);\n\n\t\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tthis.cache.assetsLoaded[path] = new Promise<any>((resolve, reject) => {\n\t\t\tlet isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document);\n\t\t\tlet isWebWorker = !isBrowser; // && typeof importScripts !== 'undefined';\n\t\t\tif (isWebWorker) {\n\t\t\t\tfetch(path, { mode: <RequestMode>\"cors\" }).then((response) => {\n\t\t\t\t\tif (response.ok) return response.blob();\n\t\t\t\t\tconst errorMsg = `Couldn't load image: ${path}`;\n\t\t\t\t\tthis.error(error, path, `Couldn't load image: ${path}`);\n\t\t\t\t\treject(errorMsg);\n\t\t\t\t}).then((blob) => {\n\t\t\t\t\treturn blob ? createImageBitmap(blob, { premultiplyAlpha: \"none\", colorSpaceConversion: \"none\" }) : null;\n\t\t\t\t}).then((bitmap) => {\n\t\t\t\t\tif (bitmap) {\n\t\t\t\t\t\tconst texture = this.createTexture(path, bitmap);\n\t\t\t\t\t\tthis.success(success, path, texture);\n\t\t\t\t\t\tresolve(texture);\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tlet image = new Image();\n\t\t\t\timage.crossOrigin = \"anonymous\";\n\t\t\t\timage.onload = () => {\n\t\t\t\t\tconst texture = this.createTexture(path, image);\n\t\t\t\t\tthis.success(success, path, texture);\n\t\t\t\t\tresolve(texture);\n\t\t\t\t};\n\t\t\t\timage.onerror = () => {\n\t\t\t\t\tconst errorMsg = `Couldn't load image: ${path}`;\n\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\treject(errorMsg);\n\t\t\t\t};\n\t\t\t\tif (this.downloader.rawDataUris[path]) path = this.downloader.rawDataUris[path];\n\t\t\t\timage.src = path;\n\t\t\t}\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\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tthis.cache.assetsLoaded[path] = new Promise<any>((resolve, reject) => {\n\t\t\tthis.downloader.downloadText(path, (atlasText: string): void => {\n\t\t\t\ttry {\n\t\t\t\t\tconst atlas = this.createTextureAtlas(path, atlasText);\n\t\t\t\t\tlet toLoad = atlas.pages.length, abort = false;\n\n\t\t\t\t\tif (toLoad === 0) {\n\t\t\t\t\t\tthis.success(success, path, atlas);\n\t\t\t\t\t\tresolve(atlas);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (let page of atlas.pages) {\n\t\t\t\t\t\tthis.loadTexture(!fileAlias ? parent + page.name : fileAlias[page.name!],\n\t\t\t\t\t\t\t(imagePath: string, texture: Texture) => {\n\t\t\t\t\t\t\t\tif (!abort) {\n\t\t\t\t\t\t\t\t\tpage.setTexture(texture);\n\t\t\t\t\t\t\t\t\tif (--toLoad == 0) {\n\t\t\t\t\t\t\t\t\t\tthis.success(success, path, atlas);\n\t\t\t\t\t\t\t\t\t\tresolve(atlas);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t(imagePath: string, message: string) => {\n\t\t\t\t\t\t\t\tif (!abort) {\n\t\t\t\t\t\t\t\t\tconst errorMsg = `Couldn't load texture ${path} page image: ${imagePath}`;\n\t\t\t\t\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\t\t\t\t\treject(errorMsg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tabort = true;\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} catch (e) {\n\t\t\t\t\tconst errorMsg = `Couldn't parse texture atlas ${path}: ${(e as any).message}`;\n\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\treject(errorMsg);\n\t\t\t\t}\n\t\t\t}, (status: number, responseText: string): void => {\n\t\t\t\tconst errorMsg = `Couldn't load texture atlas ${path}: status ${status}, ${responseText}`;\n\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\treject(errorMsg);\n\t\t\t});\n\t\t});\n\t}\n\n\tloadTextureAtlasButNoTextures (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\tpath = this.start(path);\n\n\t\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tthis.cache.assetsLoaded[path] = new Promise<any>((resolve, reject) => {\n\t\t\tthis.downloader.downloadText(path, (atlasText: string): void => {\n\t\t\t\ttry {\n\t\t\t\t\tconst atlas = this.createTextureAtlas(path, atlasText);\n\t\t\t\t\tthis.success(success, path, atlas);\n\t\t\t\t\tresolve(atlas);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconst errorMsg = `Couldn't parse texture atlas ${path}: ${(e as any).message}`;\n\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\treject(errorMsg);\n\t\t\t\t}\n\t\t\t}, (status: number, responseText: string): void => {\n\t\t\t\tconst errorMsg = `Couldn't load texture atlas ${path}: status ${status}, ${responseText}`;\n\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\treject(errorMsg);\n\t\t\t});\n\t\t});\n\t}\n\n\t// Promisified versions of load function\n\tasync loadBinaryAsync (path: string) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.loadBinary(path,\n\t\t\t\t(_, binary) => resolve(binary),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync loadJsonAsync (path: string) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.loadJson(path,\n\t\t\t\t(_, object) => resolve(object),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync loadTextureAsync (path: string) {\n\t\treturn new Promise<Texture>((resolve, reject) => {\n\t\t\tthis.loadTexture(path,\n\t\t\t\t(_, texture) => resolve(texture),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync loadTextureAtlasAsync (path: string) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.loadTextureAtlas(path,\n\t\t\t\t(_, atlas) => resolve(atlas),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync loadTextureAtlasButNoTexturesAsync (path: string) {\n\t\treturn new Promise<TextureAtlas>((resolve, reject) => {\n\t\t\tthis.loadTextureAtlasButNoTextures(path,\n\t\t\t\t(_, atlas) => resolve(atlas),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tsetCache (cache: AssetCache) {\n\t\tthis.cache = cache;\n\t}\n\n\tget (path: string) {\n\t\treturn this.cache.assets[this.pathPrefix + path];\n\t}\n\n\trequire (path: string) {\n\t\tpath = this.pathPrefix + path;\n\t\tlet asset = this.cache.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.cache.assets[path];\n\t\tif (asset.dispose) asset.dispose();\n\t\tdelete this.cache.assets[path];\n\t\tdelete this.cache.assetsRefCount[path];\n\t\tdelete this.cache.assetsLoaded[path];\n\t\treturn asset;\n\t}\n\n\tremoveAll () {\n\t\tfor (let path in this.cache.assets) {\n\t\t\tlet asset = this.cache.assets[path];\n\t\t\tif (asset.dispose) asset.dispose();\n\t\t}\n\t\tthis.cache.assets = {};\n\t\tthis.cache.assetsLoaded = {};\n\t\tthis.cache.assetsRefCount = {};\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\t// dispose asset only if it's not used by others\n\tdisposeAsset (path: string) {\n\t\tconst asset = this.cache.assets[path];\n\t\tif (asset instanceof TextureAtlas) {\n\t\t\tasset.dispose();\n\t\t\treturn;\n\t\t}\n\t\tthis.disposeAssetInternal(path);\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\tprivate disposeAssetInternal (path: string) {\n\t\tif (this.cache.assetsRefCount[path] > 0 && --this.cache.assetsRefCount[path] === 0) {\n\t\t\treturn this.remove(path);\n\t\t}\n\t}\n\n\tprivate createTextureAtlas (path: string, atlasText: string): TextureAtlas {\n\t\tconst atlas = new TextureAtlas(atlasText);\n\t\tatlas.dispose = () => {\n\t\t\tif (this.cache.assetsRefCount[path] <= 0) return;\n\t\t\tthis.disposeAssetInternal(path);\n\t\t\tfor (const page of atlas.pages) {\n\t\t\t\tpage.texture?.dispose();\n\t\t\t}\n\t\t}\n\t\treturn atlas;\n\t}\n\n\tprivate createTexture (path: string, image: HTMLImageElement | ImageBitmap): Texture {\n\t\tconst texture = this.textureLoader(image);\n\t\tconst textureDispose = texture.dispose.bind(texture);\n\t\ttexture.dispose = () => {\n\t\t\tif (this.disposeAssetInternal(path)) textureDispose();\n\t\t}\n\t\treturn texture;\n\t}\n}\n\nexport class AssetCache {\n\tpublic assets: StringMap<any> = {};\n\tpublic assetsRefCount: StringMap<number> = {};\n\tpublic assetsLoaded: StringMap<Promise<any>> = {};\n\n\tstatic AVAILABLE_CACHES = new Map<string, AssetCache>();\n\tstatic getCache (id: string) {\n\t\tconst cache = AssetCache.AVAILABLE_CACHES.get(id);\n\t\tif (cache) return cache;\n\n\t\tconst newCache = new AssetCache();\n\t\tAssetCache.AVAILABLE_CACHES.set(id, newCache);\n\t\treturn newCache;\n\t}\n\n\tasync addAsset (path: string, asset: any) {\n\t\tthis.assetsLoaded[path] = Promise.resolve(asset);\n\t\tthis.assets[path] = await asset;\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\n\t\tconst rawDataUri = this.rawDataUris[url];\n\t\t// we assume if a \".\" is included in a raw data uri, it is used to rewrite an asset URL\n\t\tif (rawDataUri && !rawDataUri.includes(\".\")) {\n\t\t\ttry {\n\t\t\t\tthis.finish(url, 200, this.dataUriToString(rawDataUri));\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\n\t\tlet request = new XMLHttpRequest();\n\t\trequest.overrideMimeType(\"text/html\");\n\t\trequest.open(\"GET\", rawDataUri ? rawDataUri : 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\n\t\tconst rawDataUri = this.rawDataUris[url];\n\t\t// we assume if a \".\" is included in a raw data uri, it is used to rewrite an asset URL\n\t\tif (rawDataUri && !rawDataUri.includes(\".\")) {\n\t\t\ttry {\n\t\t\t\tthis.finish(url, 200, this.dataUriToUint8Array(rawDataUri));\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\n\t\tlet request = new XMLHttpRequest();\n\t\trequest.open(\"GET\", rawDataUri ? rawDataUri : 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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { Inherit } from \"./BoneData.js\";\nimport { IkConstraintData } from \"./IkConstraintData.js\";\nimport { Physics, Skeleton } from \"./Skeleton.js\";\nimport { Updatable } from \"./Updatable.js\";\nimport { MathUtils } from \"./Utils.js\";\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\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\n\t\tthis.target = target;\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\t}\n\n\tisActive () {\n\t\treturn this.active;\n\t}\n\n\tsetToSetupPose () {\n\t\tconst data = this.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\t}\n\n\tupdate (physics: Physics) {\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.inherit) {\n\t\t\tcase Inherit.OnlyTranslation:\n\t\t\t\ttx = (targetX - bone.worldX) * MathUtils.signum(bone.skeleton.scaleX);\n\t\t\t\tty = (targetY - bone.worldY) * MathUtils.signum(bone.skeleton.scaleY);\n\t\t\t\tbreak;\n\t\t\tcase Inherit.NoRotationOrReflection:\n\t\t\t\tlet s = Math.abs(pa * pd - pb * pc) / Math.max(0.0001, 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\tif (Math.abs(d) <= 0.0001) {\n\t\t\t\t\ttx = 0;\n\t\t\t\t\tty = 0;\n\t\t\t\t} else {\n\t\t\t\t\ttx = (x * pd - y * pb) / d - bone.ax;\n\t\t\t\t\tty = (y * pa - x * pc) / d - bone.ay;\n\t\t\t\t}\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.inherit) {\n\t\t\t\tcase Inherit.NoScale:\n\t\t\t\tcase Inherit.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\tconst b = bone.data.length * sx;\n\t\t\tif (b > 0.0001) {\n\t\t\t\tconst dd = tx * tx + ty * ty;\n\t\t\t\tif ((compress && dd < b * b) || (stretch && dd > b * b)) {\n\t\t\t\t\tconst s = (Math.sqrt(dd) / b - 1) * alpha + 1;\n\t\t\t\t\tsx *= s;\n\t\t\t\t\tif (uniform) sy *= s;\n\t\t\t\t}\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\tif (parent.inherit != Inherit.Normal || child.inherit != Inherit.Normal) return;\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 = a * d - b * c, x = cwx - pp.worldX, y = cwy - pp.worldY;\n\t\tid = Math.abs(id) <= 0.0001 ? 0 : 1 / id;\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\tr0 = dd - r * r;\n\t\t\t\tif (r0 >= 0) {\n\t\t\t\t\ty = Math.sqrt(r0) * 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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { ConstraintData } from \"./ConstraintData.js\";\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 = 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/** 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 = 0;\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { ConstraintData } from \"./ConstraintData.js\";\nimport { SlotData } from \"./SlotData.js\";\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { Bone } from \"./Bone.js\";\nimport { PathConstraintData, RotateMode, SpacingMode, PositionMode } from \"./PathConstraintData.js\";\nimport { Physics, Skeleton } from \"./Skeleton.js\";\nimport { Slot } from \"./Slot.js\";\nimport { Updatable } from \"./Updatable.js\";\nimport { Utils, MathUtils } from \"./Utils.js\";\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\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\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\tsetToSetupPose () {\n\t\tconst data = this.data;\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\tupdate (physics: Physics) {\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\tlet x = setupLength * bone.a, y = setupLength * bone.c;\n\t\t\t\t\t\tlengths[i] = Math.sqrt(x * x + y * y);\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\nimport { Physics, Skeleton } from \"./Skeleton.js\";\nimport { Updatable } from \"./Updatable.js\";\nimport { MathUtils } from \"./Utils.js\";\n\n\n/** Stores the current pose for a physics constraint. A physics constraint applies physics to bones.\n * <p>\n * See <a href=\"http://esotericsoftware.com/spine-physics-constraints\">Physics constraints</a> in the Spine User Guide. */\nexport class PhysicsConstraint implements Updatable {\n\treadonly data: PhysicsConstraintData;\n\tprivate _bone: Bone | null = null;\n\t/** The bone constrained by this physics constraint. */\n\tpublic set bone (bone: Bone) { this._bone = bone; }\n\tpublic get bone () {\n\t\tif (!this._bone) throw new Error(\"Bone not set.\")\n\t\telse return this._bone;\n\t}\n\tinertia = 0;\n\tstrength = 0;\n\tdamping = 0;\n\tmassInverse = 0;\n\twind = 0;\n\tgravity = 0;\n\tmix = 0;\n\n\t_reset = true;\n\tux = 0;\n\tuy = 0;\n\tcx = 0;\n\tcy = 0;\n\ttx = 0;\n\tty = 0;\n\txOffset = 0;\n\txVelocity = 0;\n\tyOffset = 0;\n\tyVelocity = 0;\n\trotateOffset = 0;\n\trotateVelocity = 0;\n\tscaleOffset = 0\n\tscaleVelocity = 0;\n\n\tactive = false;\n\n\treadonly skeleton: Skeleton;\n\tremaining = 0;\n\tlastTime = 0;\n\n\tconstructor (data: PhysicsConstraintData, skeleton: Skeleton) {\n\t\tthis.data = data;\n\t\tthis.skeleton = skeleton;\n\n\t\tthis.bone = skeleton.bones[data.bone.index];\n\n\t\tthis.inertia = data.inertia;\n\t\tthis.strength = data.strength;\n\t\tthis.damping = data.damping;\n\t\tthis.massInverse = data.massInverse;\n\t\tthis.wind = data.wind;\n\t\tthis.gravity = data.gravity;\n\t\tthis.mix = data.mix;\n\t}\n\n\treset () {\n\t\tthis.remaining = 0;\n\t\tthis.lastTime = this.skeleton.time;\n\t\tthis._reset = true;\n\t\tthis.xOffset = 0;\n\t\tthis.xVelocity = 0;\n\t\tthis.yOffset = 0;\n\t\tthis.yVelocity = 0;\n\t\tthis.rotateOffset = 0;\n\t\tthis.rotateVelocity = 0;\n\t\tthis.scaleOffset = 0;\n\t\tthis.scaleVelocity = 0;\n\t}\n\n\tsetToSetupPose () {\n\t\tconst data = this.data;\n\t\tthis.inertia = data.inertia;\n\t\tthis.strength = data.strength;\n\t\tthis.damping = data.damping;\n\t\tthis.massInverse = data.massInverse;\n\t\tthis.wind = data.wind;\n\t\tthis.gravity = data.gravity;\n\t\tthis.mix = data.mix;\n\t}\n\n\tisActive () {\n\t\treturn this.active;\n\t}\n\n\t/** Applies the constraint to the constrained bones. */\n\tupdate (physics: Physics) {\n\t\tconst mix = this.mix;\n\t\tif (mix == 0) return;\n\n\t\tconst x = this.data.x > 0, y = this.data.y > 0, rotateOrShearX = this.data.rotate > 0 || this.data.shearX > 0, scaleX = this.data.scaleX > 0;\n\t\tconst bone = this.bone;\n\t\tconst l = bone.data.length;\n\n\t\tswitch (physics) {\n\t\t\tcase Physics.none:\n\t\t\t\treturn;\n\t\t\tcase Physics.reset:\n\t\t\t\tthis.reset();\n\t\t\t// Fall through.\n\t\t\tcase Physics.update:\n\t\t\t\tconst skeleton = this.skeleton;\n\t\t\t\tconst delta = Math.max(this.skeleton.time - this.lastTime, 0);\n\t\t\t\tthis.remaining += delta;\n\t\t\t\tthis.lastTime = skeleton.time;\n\n\t\t\t\tconst bx = bone.worldX, by = bone.worldY;\n\t\t\t\tif (this._reset) {\n\t\t\t\t\tthis._reset = false;\n\t\t\t\t\tthis.ux = bx;\n\t\t\t\t\tthis.uy = by;\n\t\t\t\t} else {\n\t\t\t\t\tlet a = this.remaining, i = this.inertia, t = this.data.step, f = this.skeleton.data.referenceScale, d = -1;\n\t\t\t\t\tlet qx = this.data.limit * delta, qy = qx * Math.abs(skeleton.scaleY);\n\t\t\t\t\tqx *= Math.abs(skeleton.scaleX);\n\t\t\t\t\tif (x || y) {\n\t\t\t\t\t\tif (x) {\n\t\t\t\t\t\t\tconst u = (this.ux - bx) * i;\n\t\t\t\t\t\t\tthis.xOffset += u > qx ? qx : u < -qx ? -qx : u;\n\t\t\t\t\t\t\tthis.ux = bx;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (y) {\n\t\t\t\t\t\t\tconst u = (this.uy - by) * i;\n\t\t\t\t\t\t\tthis.yOffset += u > qy ? qy : u < -qy ? -qy : u;\n\t\t\t\t\t\t\tthis.uy = by;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (a >= t) {\n\t\t\t\t\t\t\td = Math.pow(this.damping, 60 * t);\n\t\t\t\t\t\t\tconst m = this.massInverse * t, e = this.strength, w = this.wind * f * skeleton.scaleX, g = this.gravity * f * skeleton.scaleY;\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\tif (x) {\n\t\t\t\t\t\t\t\t\tthis.xVelocity += (w - this.xOffset * e) * m;\n\t\t\t\t\t\t\t\t\tthis.xOffset += this.xVelocity * t;\n\t\t\t\t\t\t\t\t\tthis.xVelocity *= d;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (y) {\n\t\t\t\t\t\t\t\t\tthis.yVelocity -= (g + this.yOffset * e) * m;\n\t\t\t\t\t\t\t\t\tthis.yOffset += this.yVelocity * t;\n\t\t\t\t\t\t\t\t\tthis.yVelocity *= d;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ta -= t;\n\t\t\t\t\t\t\t} while (a >= t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (x) bone.worldX += this.xOffset * mix * this.data.x;\n\t\t\t\t\t\tif (y) bone.worldY += this.yOffset * mix * this.data.y;\n\t\t\t\t\t}\n\t\t\t\t\tif (rotateOrShearX || scaleX) {\n\t\t\t\t\t\tlet ca = Math.atan2(bone.c, bone.a), c = 0, s = 0, mr = 0;\n\t\t\t\t\t\tlet dx = this.cx - bone.worldX, dy = this.cy - bone.worldY;\n\t\t\t\t\t\tif (dx > qx)\n\t\t\t\t\t\t\tdx = qx;\n\t\t\t\t\t\telse if (dx < -qx) //\n\t\t\t\t\t\t\tdx = -qx;\n\t\t\t\t\t\tif (dy > qy)\n\t\t\t\t\t\t\tdy = qy;\n\t\t\t\t\t\telse if (dy < -qy) //\n\t\t\t\t\t\t\tdy = -qy;\n\t\t\t\t\t\tif (rotateOrShearX) {\n\t\t\t\t\t\t\tmr = (this.data.rotate + this.data.shearX) * mix;\n\t\t\t\t\t\t\tlet r = Math.atan2(dy + this.ty, dx + this.tx) - ca - this.rotateOffset * mr;\n\t\t\t\t\t\t\tthis.rotateOffset += (r - Math.ceil(r * MathUtils.invPI2 - 0.5) * MathUtils.PI2) * i;\n\t\t\t\t\t\t\tr = this.rotateOffset * mr + ca;\n\t\t\t\t\t\t\tc = Math.cos(r);\n\t\t\t\t\t\t\ts = Math.sin(r);\n\t\t\t\t\t\t\tif (scaleX) {\n\t\t\t\t\t\t\t\tr = l * bone.getWorldScaleX();\n\t\t\t\t\t\t\t\tif (r > 0) this.scaleOffset += (dx * c + dy * s) * i / r;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tc = Math.cos(ca);\n\t\t\t\t\t\t\ts = Math.sin(ca);\n\t\t\t\t\t\t\tconst r = l * bone.getWorldScaleX();\n\t\t\t\t\t\t\tif (r > 0) this.scaleOffset += (dx * c + dy * s) * i / r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ta = this.remaining;\n\t\t\t\t\t\tif (a >= t) {\n\t\t\t\t\t\t\tif (d == -1) d = Math.pow(this.damping, 60 * t);\n\t\t\t\t\t\t\tconst m = this.massInverse * t, e = this.strength, w = this.wind, g = (Skeleton.yDown ? -this.gravity : this.gravity), h = l / f;\n\t\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\t\ta -= t;\n\t\t\t\t\t\t\t\tif (scaleX) {\n\t\t\t\t\t\t\t\t\tthis.scaleVelocity += (w * c - g * s - this.scaleOffset * e) * m;\n\t\t\t\t\t\t\t\t\tthis.scaleOffset += this.scaleVelocity * t;\n\t\t\t\t\t\t\t\t\tthis.scaleVelocity *= d;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (rotateOrShearX) {\n\t\t\t\t\t\t\t\t\tthis.rotateVelocity -= ((w * s + g * c) * h + this.rotateOffset * e) * m;\n\t\t\t\t\t\t\t\t\tthis.rotateOffset += this.rotateVelocity * t;\n\t\t\t\t\t\t\t\t\tthis.rotateVelocity *= d;\n\t\t\t\t\t\t\t\t\tif (a < t) break;\n\t\t\t\t\t\t\t\t\tconst r = this.rotateOffset * mr + ca;\n\t\t\t\t\t\t\t\t\tc = Math.cos(r);\n\t\t\t\t\t\t\t\t\ts = Math.sin(r);\n\t\t\t\t\t\t\t\t} else if (a < t) //\n\t\t\t\t\t\t\t\t\tbreak;\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\tthis.remaining = a;\n\t\t\t\t}\n\t\t\t\tthis.cx = bone.worldX;\n\t\t\t\tthis.cy = bone.worldY;\n\t\t\t\tbreak;\n\t\t\tcase Physics.pose:\n\t\t\t\tif (x) bone.worldX += this.xOffset * mix * this.data.x;\n\t\t\t\tif (y) bone.worldY += this.yOffset * mix * this.data.y;\n\t\t}\n\n\t\tif (rotateOrShearX) {\n\t\t\tlet o = this.rotateOffset * mix, s = 0, c = 0, a = 0;\n\t\t\tif (this.data.shearX > 0) {\n\t\t\t\tlet r = 0;\n\t\t\t\tif (this.data.rotate > 0) {\n\t\t\t\t\tr = o * this.data.rotate;\n\t\t\t\t\ts = Math.sin(r);\n\t\t\t\t\tc = Math.cos(r);\n\t\t\t\t\ta = bone.b;\n\t\t\t\t\tbone.b = c * a - s * bone.d;\n\t\t\t\t\tbone.d = s * a + c * bone.d;\n\t\t\t\t}\n\t\t\t\tr += o * this.data.shearX;\n\t\t\t\ts = Math.sin(r);\n\t\t\t\tc = Math.cos(r);\n\t\t\t\ta = bone.a;\n\t\t\t\tbone.a = c * a - s * bone.c;\n\t\t\t\tbone.c = s * a + c * bone.c;\n\t\t\t} else {\n\t\t\t\to *= this.data.rotate;\n\t\t\t\ts = Math.sin(o);\n\t\t\t\tc = Math.cos(o);\n\t\t\t\ta = bone.a;\n\t\t\t\tbone.a = c * a - s * bone.c;\n\t\t\t\tbone.c = s * a + c * bone.c;\n\t\t\t\ta = bone.b;\n\t\t\t\tbone.b = c * a - s * bone.d;\n\t\t\t\tbone.d = s * a + c * bone.d;\n\t\t\t}\n\t\t}\n\t\tif (scaleX) {\n\t\t\tconst s = 1 + this.scaleOffset * mix * this.data.scaleX;\n\t\t\tbone.a *= s;\n\t\t\tbone.c *= s;\n\t\t}\n\t\tif (physics != Physics.pose) {\n\t\t\tthis.tx = l * bone.a;\n\t\t\tthis.ty = l * bone.c;\n\t\t}\n\t\tbone.updateAppliedTransform();\n\t}\n\n\t/** Translates the physics constraint so next {@link #update(Physics)} forces are applied as if the bone moved an additional\n\t * amount in world space. */\n\ttranslate (x: number, y: number) {\n\t\tthis.ux -= x;\n\t\tthis.uy -= y;\n\t\tthis.cx -= x;\n\t\tthis.cy -= y;\n\t}\n\n\t/** Rotates the physics constraint so next {@link #update(Physics)} forces are applied as if the bone rotated around the\n\t * specified point in world space. */\n\trotate (x: number, y: number, degrees: number) {\n\t\tconst r = degrees * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);\n\t\tconst dx = this.cx - x, dy = this.cy - y;\n\t\tthis.translate(dx * cos - dy * sin - dx, dx * sin + dy * cos - dy);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { Bone } from \"./Bone.js\";\nimport { Skeleton } from \"./Skeleton.js\";\nimport { SlotData } from \"./SlotData.js\";\nimport { Color } from \"./Utils.js\";\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { Physics, Skeleton } from \"./Skeleton.js\";\nimport { TransformConstraintData } from \"./TransformConstraintData.js\";\nimport { Updatable } from \"./Updatable.js\";\nimport { Vector2, MathUtils } from \"./Utils.js\";\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\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\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}\n\n\tisActive () {\n\t\treturn this.active;\n\t}\n\n\tsetToSetupPose () {\n\t\tconst data = this.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}\n\n\tupdate (physics: Physics) {\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) rotation += (target.arotation - rotation + this.data.offsetRotation) * mixRotate;\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) shearY += (target.ashearY - shearY + 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\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { ClippingAttachment } from \"./attachments/ClippingAttachment.js\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { PathAttachment } from \"./attachments/PathAttachment.js\";\nimport { RegionAttachment } from \"./attachments/RegionAttachment.js\";\nimport { Bone } from \"./Bone.js\";\nimport { IkConstraint } from \"./IkConstraint.js\";\nimport { PathConstraint } from \"./PathConstraint.js\";\nimport { PhysicsConstraint } from \"./PhysicsConstraint.js\";\nimport { SkeletonClipping } from \"./SkeletonClipping.js\";\nimport { SkeletonData } from \"./SkeletonData.js\";\nimport { Skin } from \"./Skin.js\";\nimport { Slot } from \"./Slot.js\";\nimport { TransformConstraint } from \"./TransformConstraint.js\";\nimport { Updatable } from \"./Updatable.js\";\nimport { Color, Utils, MathUtils, Vector2, NumberArrayLike } from \"./Utils.js\";\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\tprivate static quadTriangles = [0, 1, 2, 2, 3, 0];\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 in the setup pose draw order. */\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\n\t/** The skeleton's physics constraints. */\n\tphysicsConstraints: Array<PhysicsConstraint>;\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 = 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\t/** Returns the skeleton's time. This is used for time-based manipulations, such as {@link PhysicsConstraint}.\n\t * <p>\n\t * See {@link #update(float)}. */\n\ttime = 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.physicsConstraints = new Array<PhysicsConstraint>();\n\t\tfor (let i = 0; i < data.physicsConstraints.length; i++) {\n\t\t\tlet physicsConstraintData = data.physicsConstraints[i];\n\t\t\tthis.physicsConstraints.push(new PhysicsConstraint(physicsConstraintData, 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 physicsConstraints = this.physicsConstraints;\n\t\tlet ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length, physicsCount = this.physicsConstraints.length;\n\t\tlet constraintCount = ikCount + transformCount + pathCount + physicsCount;\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\tfor (let ii = 0; ii < physicsCount; ii++) {\n\t\t\t\tconst constraint = physicsConstraints[ii];\n\t\t\t\tif (constraint.data.order == i) {\n\t\t\t\t\tthis.sortPhysicsConstraint(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\tsortPhysicsConstraint (constraint: PhysicsConstraint) {\n\t\tconst bone = constraint.bone;\n\t\tconstraint.active = bone.active && (!constraint.data.skinRequired || (this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true)));\n\t\tif (!constraint.active) return;\n\n\t\tthis.sortBone(bone);\n\n\t\tthis._updateCache.push(constraint);\n\n\t\tthis.sortReset(bone.children);\n\t\tbone.sorted = true;\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 (physics: Physics) {\n\t\tif (physics === undefined || physics === null) throw new Error(\"physics is undefined\");\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(physics);\n\t}\n\n\tupdateWorldTransformWith (physics: Physics, parent: Bone) {\n\t\tif (!parent) throw new Error(\"parent cannot be null.\");\n\n\t\tlet bones = this.bones;\n\t\tfor (let i = 1, n = bones.length; i < n; i++) { // Skip root bone.\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\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\tconst rx = (rootBone.rotation + rootBone.shearX) * MathUtils.degRad;\n\t\tconst ry = (rootBone.rotation + 90 + rootBone.shearY) * MathUtils.degRad;\n\t\tconst la = Math.cos(rx) * rootBone.scaleX;\n\t\tconst lb = Math.cos(ry) * rootBone.scaleY;\n\t\tconst lc = Math.sin(rx) * rootBone.scaleX;\n\t\tconst ld = Math.sin(ry) * 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(physics);\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\tfor (const bone of this.bones) bone.setToSetupPose();\n\t\tfor (const constraint of this.ikConstraints) constraint.setToSetupPose();\n\t\tfor (const constraint of this.transformConstraints) constraint.setToSetupPose();\n\t\tfor (const constraint of this.pathConstraints) constraint.setToSetupPose();\n\t\tfor (const constraint of this.physicsConstraints) constraint.setToSetupPose();\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 | null) {\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\treturn this.ikConstraints.find((constraint) => constraint.data.name == constraintName) ?? 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\treturn this.transformConstraints.find((constraint) => constraint.data.name == constraintName) ?? 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\treturn this.pathConstraints.find((constraint) => constraint.data.name == constraintName) ?? null;\n\t}\n\n\t/** Finds a physics constraint by comparing each physics constraint's name. It is more efficient to cache the results of this\n\t * method than to call it repeatedly. */\n\tfindPhysicsConstraint (constraintName: string) {\n\t\tif (constraintName == null) throw new Error(\"constraintName cannot be null.\");\n\t\treturn this.physicsConstraints.find((constraint) => constraint.data.name == constraintName) ?? 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 (clipper?: SkeletonClipping) {\n\t\tlet offset = new Vector2();\n\t\tlet size = new Vector2();\n\t\tthis.getBounds(offset, size, undefined, clipper);\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\t * @param clipper {@link SkeletonClipping} to use. If <code>null</code>, no clipping is applied. */\n\tgetBounds (offset: Vector2, size: Vector2, temp: Array<number> = new Array<number>(2), clipper: SkeletonClipping | null = null) {\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 triangles: 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\tattachment.computeWorldVertices(slot, vertices, 0, 2);\n\t\t\t\ttriangles = Skeleton.quadTriangles;\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\ttriangles = mesh.triangles;\n\t\t\t} else if (attachment instanceof ClippingAttachment && clipper != null) {\n\t\t\t\tclipper.clipStart(slot, attachment);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (vertices && triangles) {\n\t\t\t\tif (clipper != null && clipper.isClipping()) {\n\t\t\t\t\tclipper.clipTriangles(vertices, triangles, triangles.length);\n\t\t\t\t\tvertices = clipper.clippedVertices;\n\t\t\t\t\tverticesLength = clipper.clippedVertices.length;\n\t\t\t\t}\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\tif (clipper != null) clipper.clipEndWithSlot(slot);\n\t\t}\n\t\tif (clipper != null) clipper.clipEnd();\n\t\toffset.set(minX, minY);\n\t\tsize.set(maxX - minX, maxY - minY);\n\t}\n\n\t/** Increments the skeleton's {@link #time}. */\n\tupdate (delta: number) {\n\t\tthis.time += delta;\n\t}\n\n\tphysicsTranslate (x: number, y: number) {\n\t\tconst physicsConstraints = this.physicsConstraints;\n\t\tfor (let i = 0, n = physicsConstraints.length; i < n; i++)\n\t\t\tphysicsConstraints[i].translate(x, y);\n\t}\n\n\t/** Calls {@link PhysicsConstraint#rotate(float, float, float)} for each physics constraint. */\n\tphysicsRotate (x: number, y: number, degrees: number) {\n\t\tconst physicsConstraints = this.physicsConstraints;\n\t\tfor (let i = 0, n = physicsConstraints.length; i < n; i++)\n\t\t\tphysicsConstraints[i].rotate(x, y, degrees);\n\t}\n}\n\n/** Determines how physics and other non-deterministic updates are applied. */\nexport enum Physics {\n\t/** Physics are not updated or applied. */\n\tnone,\n\n\t/** Physics are reset to the current pose. */\n\treset,\n\n\t/** Physics are updated and the pose from physics is applied. */\n\tupdate,\n\n\t/** Physics are not updated but the pose from physics is applied. */\n\tpose\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { ConstraintData } from \"./ConstraintData.js\";\n\n\n/** Stores the setup pose for a {@link PhysicsConstraint}.\n * <p>\n * See <a href=\"http://esotericsoftware.com/spine-physics-constraints\">Physics constraints</a> in the Spine User Guide. */\nexport class PhysicsConstraintData extends ConstraintData {\n\tprivate _bone: BoneData | null = null;\n\t/** The bone constrained by this physics constraint. */\n\tpublic set bone (boneData: BoneData) { this._bone = boneData; }\n\tpublic get bone () {\n\t\tif (!this._bone) throw new Error(\"BoneData not set.\")\n\t\telse return this._bone;\n\t}\n\n\tx = 0;\n\ty = 0;\n\trotate = 0;\n\tscaleX = 0;\n\tshearX = 0;\n\tlimit = 0;\n\tstep = 0;\n\tinertia = 0;\n\tstrength = 0;\n\tdamping = 0;\n\tmassInverse = 0;\n\twind = 0;\n\tgravity = 0;\n\t/** A percentage (0-1) that controls the mix between the constrained and unconstrained poses. */\n\tmix = 0;\n\tinertiaGlobal = false;\n\tstrengthGlobal = false;\n\tdampingGlobal = false;\n\tmassGlobal = false;\n\twindGlobal = false;\n\tgravityGlobal = false;\n\tmixGlobal = false;\n\n\tconstructor (name: string) {\n\t\tsuper(name, 0, false);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\"\nimport { BoneData } from \"./BoneData.js\";\nimport { EventData } from \"./EventData.js\";\nimport { IkConstraintData } from \"./IkConstraintData.js\";\nimport { PathConstraintData } from \"./PathConstraintData.js\";\nimport { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\nimport { Skin } from \"./Skin.js\";\nimport { SlotData } from \"./SlotData.js\";\nimport { TransformConstraintData } from \"./TransformConstraintData.js\";\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 in the setup pose draw order. */\n\tslots = new Array<SlotData>(); // Setup pose draw order.\n\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 skeleton's physics constraints. */\n\tphysicsConstraints = new Array<PhysicsConstraintData>();\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/** Baseline scale factor for applying distance-dependent effects on non-scalable properties, such as angle or scale. Default\n\t * is 100. */\n\treferenceScale = 100;\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\tconst ikConstraints = this.ikConstraints;\n\t\tfor (let i = 0, n = ikConstraints.length; i < n; i++) {\n\t\t\tconst 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\tconst transformConstraints = this.transformConstraints;\n\t\tfor (let i = 0, n = transformConstraints.length; i < n; i++) {\n\t\t\tconst 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\tconst pathConstraints = this.pathConstraints;\n\t\tfor (let i = 0, n = pathConstraints.length; i < n; i++) {\n\t\t\tconst constraint = pathConstraints[i];\n\t\t\tif (constraint.name == constraintName) return constraint;\n\t\t}\n\t\treturn null;\n\t}\n\n\t/** Finds a physics constraint by comparing each physics 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\tfindPhysicsConstraint (constraintName: string) {\n\t\tif (!constraintName) throw new Error(\"constraintName cannot be null.\");\n\t\tconst physicsConstraints = this.physicsConstraints;\n\t\tfor (let i = 0, n = physicsConstraints.length; i < n; i++) {\n\t\t\tconst constraint = physicsConstraints[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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { BoneData } from \"./BoneData.js\";\nimport { ConstraintData } from \"./ConstraintData.js\";\nimport { Skeleton } from \"./Skeleton.js\";\nimport { Color, StringMap } from \"./Utils.js\";\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\t/** The color of the skin as it was in Spine, or a default color if nonessential data was not exported. */\n\tcolor = new Color(0.99607843, 0.61960787, 0.30980393, 1); // fe9e4fff\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { Color } from \"./Utils.js\";\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\t/** False if the slot was hidden in Spine and nonessential data was exported. Does not affect runtime rendering. */\n\tvisible = true;\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { BoneData } from \"./BoneData.js\";\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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, InheritTimeline, 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, PhysicsConstraintResetTimeline, PhysicsConstraintInertiaTimeline, PhysicsConstraintStrengthTimeline, PhysicsConstraintDampingTimeline, PhysicsConstraintMassTimeline, PhysicsConstraintWindTimeline, PhysicsConstraintGravityTimeline, PhysicsConstraintMixTimeline } from \"./Animation.js\";\nimport { VertexAttachment, Attachment } from \"./attachments/Attachment.js\";\nimport { AttachmentLoader } from \"./attachments/AttachmentLoader.js\";\nimport { HasTextureRegion } from \"./attachments/HasTextureRegion.js\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { Sequence, SequenceModeValues } from \"./attachments/Sequence.js\";\nimport { BoneData } from \"./BoneData.js\";\nimport { Event } from \"./Event.js\";\nimport { EventData } from \"./EventData.js\";\nimport { IkConstraintData } from \"./IkConstraintData.js\";\nimport { PathConstraintData, PositionMode, SpacingMode } from \"./PathConstraintData.js\";\nimport { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\nimport { SkeletonData } from \"./SkeletonData.js\";\nimport { Skin } from \"./Skin.js\";\nimport { SlotData } from \"./SlotData.js\";\nimport { TransformConstraintData } from \"./TransformConstraintData.js\";\nimport { Color, Utils } from \"./Utils.js\";\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 | ArrayBuffer): 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\t\tskeletonData.referenceScale = input.readFloat() * scale;\n\n\t\tlet nonessential = input.readBoolean();\n\t\tif (nonessential) {\n\t\t\tskeletonData.fps = input.readFloat();\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.inherit = input.readByte();\n\t\t\tdata.skinRequired = input.readBoolean();\n\t\t\tif (nonessential) {\n\t\t\t\tColor.rgba8888ToColor(data.color, input.readInt32());\n\t\t\t\tdata.icon = input.readString() ?? undefined;\n\t\t\t\tdata.visible = input.readBoolean();\n\t\t\t}\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\tif (nonessential) data.visible = input.readBoolean();\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\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\tlet flags = input.readByte();\n\t\t\tdata.skinRequired = (flags & 1) != 0;\n\t\t\tdata.bendDirection = (flags & 2) != 0 ? 1 : -1;\n\t\t\tdata.compress = (flags & 4) != 0;\n\t\t\tdata.stretch = (flags & 8) != 0;\n\t\t\tdata.uniform = (flags & 16) != 0;\n\t\t\tif ((flags & 32) != 0) data.mix = (flags & 64) != 0 ? input.readFloat() : 1;\n\t\t\tif ((flags & 128) != 0) data.softness = input.readFloat() * scale;\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\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\tlet flags = input.readByte();\n\t\t\tdata.skinRequired = (flags & 1) != 0;\n\t\t\tdata.local = (flags & 2) != 0;\n\t\t\tdata.relative = (flags & 4) != 0;\n\t\t\tif ((flags & 8) != 0) data.offsetRotation = input.readFloat();\n\t\t\tif ((flags & 16) != 0) data.offsetX = input.readFloat() * scale;\n\t\t\tif ((flags & 32) != 0) data.offsetY = input.readFloat() * scale;\n\t\t\tif ((flags & 64) != 0) data.offsetScaleX = input.readFloat();\n\t\t\tif ((flags & 128) != 0) data.offsetScaleY = input.readFloat();\n\t\t\tflags = input.readByte();\n\t\t\tif ((flags & 1) != 0) data.offsetShearY = input.readFloat();\n\t\t\tif ((flags & 2) != 0) data.mixRotate = input.readFloat();\n\t\t\tif ((flags & 4) != 0) data.mixX = input.readFloat();\n\t\t\tif ((flags & 8) != 0) data.mixY = input.readFloat();\n\t\t\tif ((flags & 16) != 0) data.mixScaleX = input.readFloat();\n\t\t\tif ((flags & 32) != 0) data.mixScaleY = input.readFloat();\n\t\t\tif ((flags & 64) != 0) data.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\tconst flags = input.readByte();\n\t\t\tdata.positionMode = flags & 1;\n\t\t\tdata.spacingMode = (flags >> 1) & 3;\n\t\t\tdata.rotateMode = (flags >> 3) & 3;\n\t\t\tif ((flags & 128) != 0) data.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// Physics constraints.\n\t\tn = input.readInt(true);\n\t\tfor (let i = 0, nn; i < n; i++) {\n\t\t\tconst name = input.readString();\n\t\t\tif (!name) throw new Error(\"Physics constraint data name must not be null.\");\n\t\t\tconst data = new PhysicsConstraintData(name);\n\t\t\tdata.order = input.readInt(true);\n\t\t\tdata.bone = skeletonData.bones[input.readInt(true)];\n\t\t\tlet flags = input.readByte();\n\t\t\tdata.skinRequired = (flags & 1) != 0;\n\t\t\tif ((flags & 2) != 0) data.x = input.readFloat();\n\t\t\tif ((flags & 4) != 0) data.y = input.readFloat();\n\t\t\tif ((flags & 8) != 0) data.rotate = input.readFloat();\n\t\t\tif ((flags & 16) != 0) data.scaleX = input.readFloat();\n\t\t\tif ((flags & 32) != 0) data.shearX = input.readFloat();\n\t\t\tdata.limit = ((flags & 64) != 0 ? input.readFloat() : 5000) * scale;\n\t\t\tdata.step = 1 / input.readUnsignedByte();\n\t\t\tdata.inertia = input.readFloat();\n\t\t\tdata.strength = input.readFloat();\n\t\t\tdata.damping = input.readFloat();\n\t\t\tdata.massInverse = (flags & 128) != 0 ? input.readFloat() : 1;\n\t\t\tdata.wind = input.readFloat();\n\t\t\tdata.gravity = input.readFloat();\n\t\t\tflags = input.readByte();\n\t\t\tif ((flags & 1) != 0) data.inertiaGlobal = true;\n\t\t\tif ((flags & 2) != 0) data.strengthGlobal = true;\n\t\t\tif ((flags & 4) != 0) data.dampingGlobal = true;\n\t\t\tif ((flags & 8) != 0) data.massGlobal = true;\n\t\t\tif ((flags & 16) != 0) data.windGlobal = true;\n\t\t\tif ((flags & 32) != 0) data.gravityGlobal = true;\n\t\t\tif ((flags & 64) != 0) data.mixGlobal = true;\n\t\t\tdata.mix = (flags & 128) != 0 ? input.readFloat() : 1;\n\t\t\tskeletonData.physicsConstraints.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\tconst skin = skeletonData.skins[linkedMesh.skinIndex];\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.readString();\n\t\t\tif (!eventName) throw new Error(\"Event data name must not be null\");\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.readString();\n\t\t\tif (!skinName) throw new Error(\"Skin name must not be null.\");\n\t\t\tskin = new Skin(skinName);\n\t\t\tif (nonessential) Color.rgba8888ToColor(skin.color, input.readInt32());\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\t\t\tfor (let i = 0, n = input.readInt(true); i < n; i++)\n\t\t\t\tskin.constraints.push(skeletonData.physicsConstraints[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)\n\t\t\t\t\tthrow 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 | null | undefined, nonessential: boolean): Attachment | null {\n\t\tlet scale = this.scale;\n\n\t\tlet flags = input.readByte();\n\t\tconst name = (flags & 8) != 0 ? input.readStringRef() : attachmentName;\n\t\tif (!name) throw new Error(\"Attachment name must not be null\");\n\t\tswitch ((flags & 0b111) as AttachmentType) { // BUG?\n\t\t\tcase AttachmentType.Region: {\n\t\t\t\tlet path = (flags & 16) != 0 ? input.readStringRef() : null;\n\t\t\t\tconst color = (flags & 32) != 0 ? input.readInt32() : 0xffffffff;\n\t\t\t\tconst sequence = (flags & 64) != 0 ? this.readSequence(input) : null;\n\t\t\t\tlet rotation = (flags & 128) != 0 ? input.readFloat() : 0;\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\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 vertices = this.readVertices(input, (flags & 16) != 0);\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 = vertices.length;\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 = (flags & 16) != 0 ? input.readStringRef() : name;\n\t\t\t\tconst color = (flags & 32) != 0 ? input.readInt32() : 0xffffffff;\n\t\t\t\tconst sequence = (flags & 64) != 0 ? this.readSequence(input) : null;\n\t\t\t\tconst hullLength = input.readInt(true);\n\t\t\t\tconst vertices = this.readVertices(input, (flags & 128) != 0);\n\t\t\t\tconst uvs = this.readFloatArray(input, vertices.length, 1);\n\t\t\t\tconst triangles = this.readShortArray(input, (vertices.length - hullLength - 2) * 3);\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, input.readInt(true));\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 = vertices.length;\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\tconst path = (flags & 16) != 0 ? input.readStringRef() : name;\n\t\t\t\tif (path == null) throw new Error(\"Path of linked mesh must not be null\");\n\t\t\t\tconst color = (flags & 32) != 0 ? input.readInt32() : 0xffffffff;\n\t\t\t\tconst sequence = (flags & 64) != 0 ? this.readSequence(input) : null;\n\t\t\t\tconst inheritTimelines = (flags & 128) != 0;\n\t\t\t\tconst skinIndex = input.readInt(true);\n\t\t\t\tconst parent = input.readStringRef();\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\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, skinIndex, slotIndex, parent, inheritTimelines));\n\t\t\t\treturn mesh;\n\t\t\t}\n\t\t\tcase AttachmentType.Path: {\n\t\t\t\tconst closed = (flags & 16) != 0;\n\t\t\t\tconst constantSpeed = (flags & 32) != 0;\n\t\t\t\tconst vertices = this.readVertices(input, (flags & 64) != 0);\n\n\t\t\t\tconst lengths = Utils.newArray(vertices.length / 6, 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\tconst color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tconst 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 = vertices.length;\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\tconst rotation = input.readFloat();\n\t\t\t\tconst x = input.readFloat();\n\t\t\t\tconst y = input.readFloat();\n\t\t\t\tconst color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tconst 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\tconst endSlotIndex = input.readInt(true);\n\t\t\t\tconst vertices = this.readVertices(input, (flags & 16) != 0);\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 = vertices.length;\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\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, weighted: boolean): Vertices {\n\t\tconst scale = this.scale;\n\t\tconst vertexCount = input.readInt(true);\n\t\tconst vertices = new Vertices();\n\t\tvertices.length = vertexCount << 1;\n\t\tif (!weighted) {\n\t\t\tvertices.vertices = this.readFloatArray(input, vertices.length, 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, n: number): number[] {\n\t\tlet array = new Array<number>(n);\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tarray[i] = input.readInt(true);\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\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);\n\t\t\t\tif (type == BONE_INHERIT) {\n\t\t\t\t\tlet timeline = new InheritTimeline(frameCount, boneIndex);\n\t\t\t\t\tfor (let frame = 0; frame < frameCount; frame++) {\n\t\t\t\t\t\ttimeline.setFrame(frame, input.readFloat(), input.readByte());\n\t\t\t\t\t}\n\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet 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 flags = input.readByte();\n\t\t\tlet time = input.readFloat(), mix = (flags & 1) != 0 ? ((flags & 2) != 0 ? input.readFloat() : 1) : 0;\n\t\t\tlet softness = (flags & 4) != 0 ? input.readFloat() * scale : 0;\n\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\ttimeline.setFrame(frame, time, mix, softness, (flags & 8) != 0 ? 1 : -1, (flags & 16) != 0, (flags & 32) != 0);\n\t\t\t\tif (frame == frameLast) break;\n\t\t\t\tflags = input.readByte();\n\t\t\t\tconst time2 = input.readFloat(), mix2 = (flags & 1) != 0 ? ((flags & 2) != 0 ? input.readFloat() : 1) : 0;\n\t\t\t\tconst softness2 = (flags & 4) != 0 ? input.readFloat() * scale : 0;\n\t\t\t\tif ((flags & 64) != 0) {\n\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t} else if ((flags & 128) != 0) {\n\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);\n\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\tconst type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);\n\t\t\t\tswitch (type) {\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(frameCount, bezierCount, 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(frameCount, bezierCount, 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(frameCount, bezierCount, 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// Physics timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tconst index = input.readInt(true) - 1;\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst type = input.readByte(), frameCount = input.readInt(true);\n\t\t\t\tif (type == PHYSICS_RESET) {\n\t\t\t\t\tconst timeline = new PhysicsConstraintResetTimeline(frameCount, index);\n\t\t\t\t\tfor (let frame = 0; frame < frameCount; frame++)\n\t\t\t\t\t\ttimeline.setFrame(frame, input.readFloat());\n\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst bezierCount = input.readInt(true);\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase PHYSICS_INERTIA:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new PhysicsConstraintInertiaTimeline(frameCount, bezierCount, index), 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PHYSICS_STRENGTH:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new PhysicsConstraintStrengthTimeline(frameCount, bezierCount, index), 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PHYSICS_DAMPING:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new PhysicsConstraintDampingTimeline(frameCount, bezierCount, index), 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PHYSICS_MASS:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new PhysicsConstraintMassTimeline(frameCount, bezierCount, index), 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PHYSICS_WIND:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new PhysicsConstraintWindTimeline(frameCount, bezierCount, index), 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PHYSICS_GRAVITY:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new PhysicsConstraintGravityTimeline(frameCount, bezierCount, index), 1));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase PHYSICS_MIX:\n\t\t\t\t\t\ttimelines.push(readTimeline1(input, new PhysicsConstraintMixTimeline(frameCount, bezierCount, index), 1));\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.readString();\n\t\t\t\tif (event.stringValue == null) event.stringValue = 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 | ArrayBuffer, public strings = new Array<string>(), private index: number = 0, private buffer = new DataView(data instanceof ArrayBuffer ? data : 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; skinIndex: number;\n\tslotIndex: number;\n\tmesh: MeshAttachment;\n\tinheritTimeline: boolean;\n\n\tconstructor (mesh: MeshAttachment, skinIndex: number, slotIndex: number, parent: string | null, inheritDeform: boolean) {\n\t\tthis.mesh = mesh;\n\t\tthis.skinIndex = skinIndex;\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, public length: number = 0) { }\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;\nconst BONE_INHERIT = 10;\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 PHYSICS_INERTIA = 0;\nconst PHYSICS_STRENGTH = 1;\nconst PHYSICS_DAMPING = 2;\nconst PHYSICS_MASS = 4;\nconst PHYSICS_WIND = 5;\nconst PHYSICS_GRAVITY = 6;\nconst PHYSICS_MIX = 7;\nconst PHYSICS_RESET = 8;\n\nconst CURVE_LINEAR = 0;\nconst CURVE_STEPPED = 1;\nconst CURVE_BEZIER = 2;\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { Skeleton } from \"./Skeleton.js\";\nimport { NumberArrayLike, Pool, Utils } from \"./Utils.js\";\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport { Slot } from \"./Slot.js\";\nimport { Triangulator } from \"./Triangulator.js\";\nimport { Utils, Color, NumberArrayLike } from \"./Utils.js\";\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\tclippedUVs = 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\t/**\n\t* @deprecated Use clipTriangles without verticesLength parameter. Mark for removal in 4.3.\n\t*/\n\tclipTriangles (vertices: NumberArrayLike, verticesLength: number, triangles: NumberArrayLike, trianglesLength: number): void;\n\n\t/**\n\t * @deprecated Use clipTriangles without verticesLength parameter. Mark for removal in 4.3.\n\t */\n\tclipTriangles (vertices: NumberArrayLike, verticesLength: number, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike, light: Color, dark: Color, twoColor: boolean): void;\n\n\tclipTriangles (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number): void;\n\tclipTriangles (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike, light: Color, dark: Color, twoColor: boolean): void;\n\tclipTriangles (\n\t\tvertices: NumberArrayLike,\n\t\tverticesLengthOrTriangles: number | NumberArrayLike,\n\t\ttrianglesOrTrianglesLength: NumberArrayLike | number,\n\t\ttrianglesLengthOrUvs?: number | NumberArrayLike,\n\t\tuvsOrLight?: NumberArrayLike | Color,\n\t\tlightOrDark?: Color,\n\t\tdarkOrTwoColor?: Color | boolean,\n\t\ttwoColorParam?: boolean\n\t): void {\n\t\t// Determine which overload is being used\n\t\tlet triangles: NumberArrayLike;\n\t\tlet trianglesLength: number;\n\t\tlet uvs: NumberArrayLike | undefined;\n\t\tlet light: Color | undefined;\n\t\tlet dark: Color | undefined;\n\t\tlet twoColor: boolean | undefined;\n\n\t\tif (typeof verticesLengthOrTriangles === 'number') {\n\t\t\ttriangles = trianglesOrTrianglesLength as NumberArrayLike;\n\t\t\ttrianglesLength = trianglesLengthOrUvs as number;\n\t\t\tuvs = uvsOrLight as NumberArrayLike;\n\t\t\tlight = lightOrDark as Color | undefined;\n\t\t\tdark = darkOrTwoColor as Color | undefined;\n\t\t\ttwoColor = twoColorParam;\n\t\t} else {\n\t\t\ttriangles = verticesLengthOrTriangles;\n\t\t\ttrianglesLength = trianglesOrTrianglesLength as number;\n\t\t\tuvs = trianglesLengthOrUvs as NumberArrayLike;\n\t\t\tlight = uvsOrLight as Color | undefined;\n\t\t\tdark = lightOrDark as Color | undefined;\n\t\t\ttwoColor = darkOrTwoColor as boolean;\n\t\t}\n\n\t\tif (uvs && light && dark && typeof twoColor === 'boolean')\n\t\t\tthis.clipTrianglesRender(vertices, triangles, trianglesLength, uvs, light, dark, twoColor);\n\t\telse\n\t\t\tthis.clipTrianglesNoRender(vertices, triangles, trianglesLength);\n\t}\n\n\tprivate clipTrianglesNoRender (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number) {\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\n\t\tlet index = 0;\n\t\tclippedVertices.length = 0;\n\t\tclippedTriangles.length = 0;\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\n\t\t\tvertexOffset = triangles[i + 1] << 1;\n\t\t\tlet x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];\n\n\t\t\tvertexOffset = triangles[i + 2] << 1;\n\t\t\tlet x3 = vertices[vertexOffset], y3 = vertices[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\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 * 2);\n\t\t\t\t\tfor (let ii = 0; ii < clipOutputLength; ii += 2, s += 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}\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++, s += 3) {\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}\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 * 2);\n\t\t\t\t\tclippedVerticesItems[s] = x1;\n\t\t\t\t\tclippedVerticesItems[s + 1] = y1;\n\n\t\t\t\t\tclippedVerticesItems[s + 2] = x2;\n\t\t\t\t\tclippedVerticesItems[s + 3] = y2;\n\n\t\t\t\t\tclippedVerticesItems[s + 4] = x3;\n\t\t\t\t\tclippedVerticesItems[s + 5] = y3;\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\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate clipTrianglesRender (vertices: NumberArrayLike, 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\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, s += vertexSize) {\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}\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++, s += 3) {\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}\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\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic clipTrianglesUnpacked (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike) {\n\t\tlet clipOutput = this.clipOutput, clippedVertices = this.clippedVertices, clippedUVs = this.clippedUVs;\n\t\tlet clippedTriangles = this.clippedTriangles;\n\t\tlet polygons = this.clippingPolygons!;\n\t\tlet polygonsCount = polygons.length;\n\n\t\tlet index = 0;\n\t\tclippedVertices.length = 0;\n\t\tclippedUVs.length = 0;\n\t\tclippedTriangles.length = 0;\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 * 2);\n\t\t\t\t\tlet clippedUVsItems = Utils.setArraySize(clippedUVs, s + clipOutputCount * 2);\n\t\t\t\t\tfor (let ii = 0; ii < clipOutputLength; ii += 2, s += 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\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\tclippedUVsItems[s] = u1 * a + u2 * b + u3 * c;\n\t\t\t\t\t\tclippedUVsItems[s + 1] = v1 * a + v2 * b + v3 * c;\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++, s += 3) {\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}\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 * 2);\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] = x2;\n\t\t\t\t\tclippedVerticesItems[s + 3] = y2;\n\t\t\t\t\tclippedVerticesItems[s + 4] = x3;\n\t\t\t\t\tclippedVerticesItems[s + 5] = y3;\n\n\t\t\t\t\tlet clippedUVSItems = Utils.setArraySize(clippedUVs, s + 3 * 2);\n\t\t\t\t\tclippedUVSItems[s] = u1;\n\t\t\t\t\tclippedUVSItems[s + 1] = v1;\n\t\t\t\t\tclippedUVSItems[s + 2] = u2;\n\t\t\t\t\tclippedUVSItems[s + 3] = v2;\n\t\t\t\t\tclippedUVSItems[s + 4] = u3;\n\t\t\t\t\tclippedUVSItems[s + 5] = v3;\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\tbreak;\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 clippingVerticesLast = clippingArea.length - 4;\n\t\tlet clippingVertices = clippingArea;\n\t\tfor (let i = 0; ; i += 2) {\n\t\t\tlet edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];\n\t\t\tlet ex = edgeX - clippingVertices[i + 2], ey = edgeY - clippingVertices[i + 3];\n\n\t\t\tlet outputStart = output.length;\n\t\t\tlet inputVertices = input;\n\t\t\tfor (let ii = 0, nn = input.length - 2; ii < nn;) {\n\t\t\t\tlet inputX = inputVertices[ii], inputY = inputVertices[ii + 1];\n\t\t\t\tii += 2;\n\t\t\t\tlet inputX2 = inputVertices[ii], inputY2 = inputVertices[ii + 1];\n\t\t\t\tlet s2 = ey * (edgeX - inputX2) > ex * (edgeY - inputY2);\n\t\t\t\tlet s1 = ey * (edgeX - inputX) - ex * (edgeY - inputY);\n\t\t\t\tif (s1 > 0) {\n\t\t\t\t\tif (s2) { // 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 ix = inputX2 - inputX, iy = inputY2 - inputY, t = s1 / (ix * ey - iy * ex);\n\t\t\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\t\t\toutput.push(inputX + ix * t);\n\t\t\t\t\t\toutput.push(inputY + iy * t);\n\t\t\t\t\t} else {\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} else if (s2) { // v1 outside, v2 inside\n\t\t\t\t\tlet ix = inputX2 - inputX, iy = inputY2 - inputY, t = s1 / (ix * ey - iy * ex);\n\t\t\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\t\t\toutput.push(inputX + ix * t);\n\t\t\t\t\t\toutput.push(inputY + iy * t);\n\t\t\t\t\t\toutput.push(inputX2);\n\t\t\t\t\t\toutput.push(inputY2);\n\t\t\t\t\t} else {\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}\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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, InheritTimeline, 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, PhysicsConstraintResetTimeline, PhysicsConstraintInertiaTimeline, PhysicsConstraintStrengthTimeline, PhysicsConstraintDampingTimeline, PhysicsConstraintMassTimeline, PhysicsConstraintWindTimeline, PhysicsConstraintGravityTimeline, PhysicsConstraintMixTimeline } from \"./Animation.js\";\nimport { VertexAttachment, Attachment } from \"./attachments/Attachment.js\";\nimport { AttachmentLoader } from \"./attachments/AttachmentLoader.js\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { BoneData, Inherit } from \"./BoneData.js\";\nimport { EventData } from \"./EventData.js\";\nimport { Event } from \"./Event.js\";\nimport { IkConstraintData } from \"./IkConstraintData.js\";\nimport { PathConstraintData, PositionMode, SpacingMode, RotateMode } from \"./PathConstraintData.js\";\nimport { SkeletonData } from \"./SkeletonData.js\";\nimport { Skin } from \"./Skin.js\";\nimport { SlotData, BlendMode } from \"./SlotData.js\";\nimport { TransformConstraintData } from \"./TransformConstraintData.js\";\nimport { Utils, Color, NumberArrayLike } from \"./Utils.js\";\nimport { Sequence, SequenceMode } from \"./attachments/Sequence.js\";\nimport { SequenceTimeline } from \"./Animation.js\";\nimport { HasTextureRegion } from \"./attachments/HasTextureRegion.js\";\nimport { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\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.referenceScale = getValue(skeletonMap, \"referenceScale\", 100) * scale;\n\t\t\tskeletonData.fps = skeletonMap.fps;\n\t\t\tskeletonData.imagesPath = skeletonMap.images ?? null;\n\t\t\tskeletonData.audioPath = skeletonMap.audio ?? null;\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.inherit = Utils.enumValue(Inherit, getValue(boneMap, \"inherit\", \"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 slotName = slotMap.name;\n\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 ${slotName}`);\n\t\t\t\tlet data = new SlotData(skeletonData.slots.length, slotName, 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\tdata.visible = getValue(slotMap, \"visible\", true);\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// Physics constraints.\n\t\tif (root.physics) {\n\t\t\tfor (let i = 0; i < root.physics.length; i++) {\n\t\t\t\tconst constraintMap = root.physics[i];\n\t\t\t\tconst data = new PhysicsConstraintData(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\tconst boneName = constraintMap.bone;\n\t\t\t\tconst bone = skeletonData.findBone(boneName);\n\t\t\t\tif (bone == null) throw new Error(\"Physics bone not found: \" + boneName);\n\t\t\t\tdata.bone = bone;\n\n\t\t\t\tdata.x = getValue(constraintMap, \"x\", 0);\n\t\t\t\tdata.y = getValue(constraintMap, \"y\", 0);\n\t\t\t\tdata.rotate = getValue(constraintMap, \"rotate\", 0);\n\t\t\t\tdata.scaleX = getValue(constraintMap, \"scaleX\", 0);\n\t\t\t\tdata.shearX = getValue(constraintMap, \"shearX\", 0);\n\t\t\t\tdata.limit = getValue(constraintMap, \"limit\", 5000) * scale;\n\t\t\t\tdata.step = 1 / getValue(constraintMap, \"fps\", 60);\n\t\t\t\tdata.inertia = getValue(constraintMap, \"inertia\", 1);\n\t\t\t\tdata.strength = getValue(constraintMap, \"strength\", 100);\n\t\t\t\tdata.damping = getValue(constraintMap, \"damping\", 1);\n\t\t\t\tdata.massInverse = 1 / getValue(constraintMap, \"mass\", 1);\n\t\t\t\tdata.wind = getValue(constraintMap, \"wind\", 0);\n\t\t\t\tdata.gravity = getValue(constraintMap, \"gravity\", 0);\n\t\t\t\tdata.mix = getValue(constraintMap, \"mix\", 1);\n\t\t\t\tdata.inertiaGlobal = getValue(constraintMap, \"inertiaGlobal\", false);\n\t\t\t\tdata.strengthGlobal = getValue(constraintMap, \"strengthGlobal\", false);\n\t\t\t\tdata.dampingGlobal = getValue(constraintMap, \"dampingGlobal\", false);\n\t\t\t\tdata.massGlobal = getValue(constraintMap, \"massGlobal\", false);\n\t\t\t\tdata.windGlobal = getValue(constraintMap, \"windGlobal\", false);\n\t\t\t\tdata.gravityGlobal = getValue(constraintMap, \"gravityGlobal\", false);\n\t\t\t\tdata.mixGlobal = getValue(constraintMap, \"mixGlobal\", false);\n\n\t\t\t\tskeletonData.physicsConstraints.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\tif (skinMap.physics) {\n\t\t\t\t\tfor (let ii = 0; ii < skinMap.physics.length; ii++) {\n\t\t\t\t\t\tlet constraintName = skinMap.physics[ii];\n\t\t\t\t\t\tlet constraint = skeletonData.findPhysicsConstraint(constraintName);\n\t\t\t\t\t\tif (!constraint) throw new Error(`Couldn't find physics 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} else if (timelineName === \"inherit\") {\n\t\t\t\t\t\tlet timeline = new InheritTimeline(frames, bone.index);\n\t\t\t\t\t\tfor (let frame = 0; frame < timelineMap.length; frame++) {\n\t\t\t\t\t\t\tlet aFrame = timelineMap[frame];\n\t\t\t\t\t\t\ttimeline.setFrame(frame, getValue(aFrame, \"time\", 0), Utils.enumValue(Inherit, getValue(aFrame, \"inherit\", \"Normal\")));\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// 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// Physics constraint timelines.\n\t\tif (map.physics) {\n\t\t\tfor (let constraintName in map.physics) {\n\t\t\t\tlet constraintMap = map.physics[constraintName];\n\t\t\t\tlet constraintIndex = -1;\n\t\t\t\tif (constraintName.length > 0) {\n\t\t\t\t\tlet constraint = skeletonData.findPhysicsConstraint(constraintName);\n\t\t\t\t\tif (!constraint) throw new Error(\"Physics constraint not found: \" + constraintName);\n\t\t\t\t\tconstraintIndex = skeletonData.physicsConstraints.indexOf(constraint);\n\t\t\t\t}\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 == \"reset\") {\n\t\t\t\t\t\tconst timeline = new PhysicsConstraintResetTimeline(frames, constraintIndex);\n\t\t\t\t\t\tfor (let frame = 0; keyMap != null; keyMap = timelineMap[frame + 1], frame++)\n\t\t\t\t\t\t\ttimeline.setFrame(frame, getValue(keyMap, \"time\", 0));\n\t\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet timeline;\n\t\t\t\t\tif (timelineName == \"inertia\")\n\t\t\t\t\t\ttimeline = new PhysicsConstraintInertiaTimeline(frames, frames, constraintIndex);\n\t\t\t\t\telse if (timelineName == \"strength\")\n\t\t\t\t\t\ttimeline = new PhysicsConstraintStrengthTimeline(frames, frames, constraintIndex);\n\t\t\t\t\telse if (timelineName == \"damping\")\n\t\t\t\t\t\ttimeline = new PhysicsConstraintDampingTimeline(frames, frames, constraintIndex);\n\t\t\t\t\telse if (timelineName == \"mass\")\n\t\t\t\t\t\ttimeline = new PhysicsConstraintMassTimeline(frames, frames, constraintIndex);\n\t\t\t\t\telse if (timelineName == \"wind\")\n\t\t\t\t\t\ttimeline = new PhysicsConstraintWindTimeline(frames, frames, constraintIndex);\n\t\t\t\t\telse if (timelineName == \"gravity\")\n\t\t\t\t\t\ttimeline = new PhysicsConstraintGravityTimeline(frames, frames, constraintIndex);\n\t\t\t\t\telse if (timelineName == \"mix\") //\n\t\t\t\t\t\ttimeline = new PhysicsConstraintMixTimeline(frames, frames, constraintIndex);\n\t\t\t\t\telse\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\ttimelines.push(readTimeline1(timelineMap, timeline, 0, 1));\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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, TextureFilter, TextureWrap } from \"@esotericsoftware/spine-core\";\n\nexport class CanvasTexture extends Texture {\n\tconstructor (image: HTMLImageElement | ImageBitmap) {\n\t\tsuper(image);\n\t}\n\n\tsetFilters (minFilter: TextureFilter, magFilter: TextureFilter) { }\n\tsetWraps (uWrap: TextureWrap, vWrap: TextureWrap) { }\n\tdispose () { }\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 { CanvasTexture } from \"./CanvasTexture.js\";\n\nexport class AssetManager extends AssetManagerBase {\n\tconstructor (pathPrefix: string = \"\", downloader: Downloader = new Downloader()) {\n\t\tsuper((image: HTMLImageElement | ImageBitmap) => { return new CanvasTexture(image); }, pathPrefix, downloader);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 { Utils, Color, Skeleton, RegionAttachment, BlendMode, MeshAttachment, Slot, TextureRegion, TextureAtlasRegion } from \"@esotericsoftware/spine-core\";\nimport { CanvasTexture } from \"./CanvasTexture.js\";\n\nconst worldVertices = Utils.newFloatArray(8);\n\nexport class SkeletonRenderer {\n\tstatic QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];\n\tstatic VERTEX_SIZE = 2 + 2 + 4;\n\n\tprivate ctx: CanvasRenderingContext2D;\n\n\tpublic triangleRendering = false;\n\tpublic debugRendering = false;\n\tprivate vertices = Utils.newFloatArray(8 * 1024);\n\tprivate tempColor = new Color();\n\n\tconstructor (context: CanvasRenderingContext2D) {\n\t\tthis.ctx = context;\n\t}\n\n\tdraw (skeleton: Skeleton) {\n\t\tif (this.triangleRendering) this.drawTriangles(skeleton);\n\t\telse this.drawImages(skeleton);\n\t}\n\n\tprivate drawImages (skeleton: Skeleton) {\n\t\tlet ctx = this.ctx;\n\t\tlet color = this.tempColor;\n\t\tlet skeletonColor = skeleton.color;\n\t\tlet drawOrder = skeleton.drawOrder;\n\n\t\tif (this.debugRendering) ctx.strokeStyle = \"green\";\n\n\t\tfor (let i = 0, n = drawOrder.length; i < n; i++) {\n\t\t\tlet slot = drawOrder[i];\n\t\t\tlet bone = slot.bone;\n\t\t\tif (!bone.active) continue;\n\n\t\t\tlet attachment = slot.getAttachment();\n\t\t\tif (!(attachment instanceof RegionAttachment)) continue;\n\t\t\tattachment.computeWorldVertices(slot, worldVertices, 0, 2);\n\t\t\tlet region: TextureRegion = <TextureRegion>attachment.region;\n\n\t\t\tlet image: HTMLImageElement = (<CanvasTexture>region.texture).getImage() as HTMLImageElement;\n\n\t\t\tlet slotColor = slot.color;\n\t\t\tlet regionColor = attachment.color;\n\t\t\tcolor.set(skeletonColor.r * slotColor.r * regionColor.r,\n\t\t\t\tskeletonColor.g * slotColor.g * regionColor.g,\n\t\t\t\tskeletonColor.b * slotColor.b * regionColor.b,\n\t\t\t\tskeletonColor.a * slotColor.a * regionColor.a);\n\n\t\t\tctx.save();\n\t\t\tctx.transform(bone.a, bone.c, bone.b, bone.d, bone.worldX, bone.worldY);\n\t\t\tctx.translate(attachment.offset[0], attachment.offset[1]);\n\t\t\tctx.rotate(attachment.rotation * Math.PI / 180);\n\n\t\t\tlet atlasScale = attachment.width / region.originalWidth;\n\t\t\tctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY);\n\n\t\t\tlet w = region.width, h = region.height;\n\t\t\tctx.translate(w / 2, h / 2);\n\t\t\tif (attachment.region!.degrees == 90) {\n\t\t\t\tlet t = w;\n\t\t\t\tw = h;\n\t\t\t\th = t;\n\t\t\t\tctx.rotate(-Math.PI / 2);\n\t\t\t}\n\t\t\tctx.scale(1, -1);\n\t\t\tctx.translate(-w / 2, -h / 2);\n\n\t\t\tctx.globalAlpha = color.a;\n\t\t\tctx.drawImage(image, image.width * region.u, image.height * region.v, w, h, 0, 0, w, h);\n\t\t\tif (this.debugRendering) ctx.strokeRect(0, 0, w, h);\n\t\t\tctx.restore();\n\t\t}\n\t}\n\n\tprivate drawTriangles (skeleton: Skeleton) {\n\t\tlet ctx = this.ctx;\n\t\tlet color = this.tempColor;\n\t\tlet skeletonColor = skeleton.color;\n\t\tlet drawOrder = skeleton.drawOrder;\n\n\t\tlet blendMode: BlendMode | null = null;\n\t\tlet vertices: ArrayLike<number> = this.vertices;\n\t\tlet triangles: Array<number> | null = null;\n\n\t\tfor (let i = 0, n = drawOrder.length; i < n; i++) {\n\t\t\tlet slot = drawOrder[i];\n\t\t\tlet attachment = slot.getAttachment();\n\n\t\t\tlet texture: HTMLImageElement;\n\t\t\tlet region: TextureAtlasRegion;\n\t\t\tif (attachment instanceof RegionAttachment) {\n\t\t\t\tlet regionAttachment = <RegionAttachment>attachment;\n\t\t\t\tvertices = this.computeRegionVertices(slot, regionAttachment, false);\n\t\t\t\ttriangles = SkeletonRenderer.QUAD_TRIANGLES;\n\t\t\t\ttexture = (<CanvasTexture>regionAttachment.region!.texture).getImage() as HTMLImageElement;\n\t\t\t} else if (attachment instanceof MeshAttachment) {\n\t\t\t\tlet mesh = <MeshAttachment>attachment;\n\t\t\t\tvertices = this.computeMeshVertices(slot, mesh, false);\n\t\t\t\ttriangles = mesh.triangles;\n\t\t\t\ttexture = (<CanvasTexture>mesh.region!.texture).getImage() as HTMLImageElement;\n\t\t\t} else\n\t\t\t\tcontinue;\n\n\t\t\tif (texture) {\n\t\t\t\tif (slot.data.blendMode != blendMode) blendMode = slot.data.blendMode;\n\n\t\t\t\tlet slotColor = slot.color;\n\t\t\t\tlet attachmentColor = attachment.color;\n\t\t\t\tcolor.set(skeletonColor.r * slotColor.r * attachmentColor.r,\n\t\t\t\t\tskeletonColor.g * slotColor.g * attachmentColor.g,\n\t\t\t\t\tskeletonColor.b * slotColor.b * attachmentColor.b,\n\t\t\t\t\tskeletonColor.a * slotColor.a * attachmentColor.a);\n\n\t\t\t\tctx.globalAlpha = color.a;\n\n\t\t\t\tfor (var j = 0; j < triangles.length; j += 3) {\n\t\t\t\t\tlet t1 = triangles[j] * 8, t2 = triangles[j + 1] * 8, t3 = triangles[j + 2] * 8;\n\n\t\t\t\t\tlet x0 = vertices[t1], y0 = vertices[t1 + 1], u0 = vertices[t1 + 6], v0 = vertices[t1 + 7];\n\t\t\t\t\tlet x1 = vertices[t2], y1 = vertices[t2 + 1], u1 = vertices[t2 + 6], v1 = vertices[t2 + 7];\n\t\t\t\t\tlet x2 = vertices[t3], y2 = vertices[t3 + 1], u2 = vertices[t3 + 6], v2 = vertices[t3 + 7];\n\n\t\t\t\t\tthis.drawTriangle(texture, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2);\n\n\t\t\t\t\tif (this.debugRendering) {\n\t\t\t\t\t\tctx.strokeStyle = \"green\";\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tctx.moveTo(x0, y0);\n\t\t\t\t\t\tctx.lineTo(x1, y1);\n\t\t\t\t\t\tctx.lineTo(x2, y2);\n\t\t\t\t\t\tctx.lineTo(x0, y0);\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.ctx.globalAlpha = 1;\n\t}\n\n\t// Adapted from http://extremelysatisfactorytotalitarianism.com/blog/?p=2120\n\t// Apache 2 licensed\n\tprivate drawTriangle (img: HTMLImageElement, x0: number, y0: number, u0: number, v0: number,\n\t\tx1: number, y1: number, u1: number, v1: number,\n\t\tx2: number, y2: number, u2: number, v2: number) {\n\t\tlet ctx = this.ctx;\n\n\t\tconst width = img.width - 1;\n\t\tconst height = img.height - 1;\n\t\tu0 *= width;\n\t\tv0 *= height;\n\t\tu1 *= width;\n\t\tv1 *= height;\n\t\tu2 *= width;\n\t\tv2 *= height;\n\n\t\tctx.beginPath();\n\t\tctx.moveTo(x0, y0);\n\t\tctx.lineTo(x1, y1);\n\t\tctx.lineTo(x2, y2);\n\t\tctx.closePath();\n\n\t\tx1 -= x0;\n\t\ty1 -= y0;\n\t\tx2 -= x0;\n\t\ty2 -= y0;\n\n\t\tu1 -= u0;\n\t\tv1 -= v0;\n\t\tu2 -= u0;\n\t\tv2 -= v0;\n\n\t\tlet det = u1 * v2 - u2 * v1;\n\t\tif (det == 0) return;\n\t\tdet = 1 / det;\n\n\t\t// linear transformation\n\t\tconst a = (v2 * x1 - v1 * x2) * det;\n\t\tconst b = (v2 * y1 - v1 * y2) * det;\n\t\tconst c = (u1 * x2 - u2 * x1) * det;\n\t\tconst d = (u1 * y2 - u2 * y1) * det;\n\n\t\t// translation\n\t\tconst e = x0 - a * u0 - c * v0;\n\t\tconst f = y0 - b * u0 - d * v0;\n\n\t\tctx.save();\n\t\tctx.transform(a, b, c, d, e, f);\n\t\tctx.clip();\n\t\tctx.drawImage(img, 0, 0);\n\t\tctx.restore();\n\t}\n\n\tprivate computeRegionVertices (slot: Slot, region: RegionAttachment, pma: boolean) {\n\t\tlet skeletonColor = slot.bone.skeleton.color;\n\t\tlet slotColor = slot.color;\n\t\tlet regionColor = region.color;\n\t\tlet alpha = skeletonColor.a * slotColor.a * regionColor.a;\n\t\tlet multiplier = pma ? alpha : 1;\n\t\tlet color = this.tempColor;\n\t\tcolor.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier,\n\t\t\tskeletonColor.g * slotColor.g * regionColor.g * multiplier,\n\t\t\tskeletonColor.b * slotColor.b * regionColor.b * multiplier,\n\t\t\talpha);\n\n\t\tregion.computeWorldVertices(slot, this.vertices, 0, SkeletonRenderer.VERTEX_SIZE);\n\n\t\tlet vertices = this.vertices;\n\t\tlet uvs = region.uvs;\n\n\t\tvertices[RegionAttachment.C1R] = color.r;\n\t\tvertices[RegionAttachment.C1G] = color.g;\n\t\tvertices[RegionAttachment.C1B] = color.b;\n\t\tvertices[RegionAttachment.C1A] = color.a;\n\t\tvertices[RegionAttachment.U1] = uvs[0];\n\t\tvertices[RegionAttachment.V1] = uvs[1];\n\n\t\tvertices[RegionAttachment.C2R] = color.r;\n\t\tvertices[RegionAttachment.C2G] = color.g;\n\t\tvertices[RegionAttachment.C2B] = color.b;\n\t\tvertices[RegionAttachment.C2A] = color.a;\n\t\tvertices[RegionAttachment.U2] = uvs[2];\n\t\tvertices[RegionAttachment.V2] = uvs[3];\n\n\t\tvertices[RegionAttachment.C3R] = color.r;\n\t\tvertices[RegionAttachment.C3G] = color.g;\n\t\tvertices[RegionAttachment.C3B] = color.b;\n\t\tvertices[RegionAttachment.C3A] = color.a;\n\t\tvertices[RegionAttachment.U3] = uvs[4];\n\t\tvertices[RegionAttachment.V3] = uvs[5];\n\n\t\tvertices[RegionAttachment.C4R] = color.r;\n\t\tvertices[RegionAttachment.C4G] = color.g;\n\t\tvertices[RegionAttachment.C4B] = color.b;\n\t\tvertices[RegionAttachment.C4A] = color.a;\n\t\tvertices[RegionAttachment.U4] = uvs[6];\n\t\tvertices[RegionAttachment.V4] = uvs[7];\n\n\t\treturn vertices;\n\t}\n\n\tprivate computeMeshVertices (slot: Slot, mesh: MeshAttachment, pma: boolean) {\n\t\tlet skeletonColor = slot.bone.skeleton.color;\n\t\tlet slotColor = slot.color;\n\t\tlet regionColor = mesh.color;\n\t\tlet alpha = skeletonColor.a * slotColor.a * regionColor.a;\n\t\tlet multiplier = pma ? alpha : 1;\n\t\tlet color = this.tempColor;\n\t\tcolor.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier,\n\t\t\tskeletonColor.g * slotColor.g * regionColor.g * multiplier,\n\t\t\tskeletonColor.b * slotColor.b * regionColor.b * multiplier,\n\t\t\talpha);\n\n\t\tlet vertexCount = mesh.worldVerticesLength / 2;\n\t\tlet vertices = this.vertices;\n\t\tif (vertices.length < mesh.worldVerticesLength) this.vertices = vertices = Utils.newFloatArray(mesh.worldVerticesLength);\n\t\tmesh.computeWorldVertices(slot, 0, mesh.worldVerticesLength, vertices, 0, SkeletonRenderer.VERTEX_SIZE);\n\n\t\tlet uvs = mesh.uvs;\n\t\tfor (let i = 0, u = 0, v = 2; i < vertexCount; i++) {\n\t\t\tvertices[v++] = color.r;\n\t\t\tvertices[v++] = color.g;\n\t\t\tvertices[v++] = color.b;\n\t\t\tvertices[v++] = color.a;\n\t\t\tvertices[v++] = uvs[u++];\n\t\t\tvertices[v++] = uvs[u++];\n\t\t\tv += 2;\n\t\t}\n\n\t\treturn vertices;\n\t}\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["
|
|
3
|
+
"sources": ["../../src/index.ts", "../../../spine-core/src/Utils.ts", "../../../spine-core/src/Texture.ts", "../../../spine-core/src/TextureAtlas.ts", "../../../spine-core/src/attachments/Attachment.ts", "../../../spine-core/src/attachments/MeshAttachment.ts", "../../../spine-core/src/attachments/RegionAttachment.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/AssetManagerBase.ts", "../../../spine-core/src/attachments/BoundingBoxAttachment.ts", "../../../spine-core/src/attachments/ClippingAttachment.ts", "../../../spine-core/src/attachments/PathAttachment.ts", "../../../spine-core/src/attachments/PointAttachment.ts", "../../../spine-core/src/AtlasAttachmentLoader.ts", "../../../spine-core/src/PosedData.ts", "../../../spine-core/src/BoneData.ts", "../../../spine-core/src/BonePose.ts", "../../../spine-core/src/Posed.ts", "../../../spine-core/src/PosedActive.ts", "../../../spine-core/src/Bone.ts", "../../../spine-core/src/Constraint.ts", "../../../spine-core/src/DrawOrder.ts", "../../../spine-core/src/ConstraintData.ts", "../../../spine-core/src/Event.ts", "../../../spine-core/src/EventData.ts", "../../../spine-core/src/IkConstraintPose.ts", "../../../spine-core/src/IkConstraint.ts", "../../../spine-core/src/IkConstraintData.ts", "../../../spine-core/src/PathConstraintPose.ts", "../../../spine-core/src/PathConstraintData.ts", "../../../spine-core/src/PathConstraint.ts", "../../../spine-core/src/Physics.ts", "../../../spine-core/src/PhysicsConstraintPose.ts", "../../../spine-core/src/SlotPose.ts", "../../../spine-core/src/Slot.ts", "../../../spine-core/src/Skeleton.ts", "../../../spine-core/src/PhysicsConstraint.ts", "../../../spine-core/src/PhysicsConstraintData.ts", "../../../spine-core/src/polyfills.ts", "../../../spine-core/src/SliderPose.ts", "../../../spine-core/src/Slider.ts", "../../../spine-core/src/SliderData.ts", "../../../spine-core/src/SkeletonData.ts", "../../../spine-core/src/Skin.ts", "../../../spine-core/src/SlotData.ts", "../../../spine-core/src/TransformConstraintPose.ts", "../../../spine-core/src/TransformConstraint.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/SkeletonRendererCore.ts", "../../src/CanvasTexture.ts", "../../src/AssetManager.ts", "../../src/SkeletonRenderer.ts"],
|
|
4
|
+
"sourcesContent": ["export * from \"@esotericsoftware/spine-core\"\nexport * from \"./AssetManager.js\";\nexport * from \"./CanvasTexture.js\";\nexport * from \"./SkeletonRenderer.js\";", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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/** biome-ignore-all lint/complexity/noStaticOnlyClass: too much things to update */\n\nimport type { Skeleton } from \"./Skeleton.js\";\n\nexport interface StringMap<T> {\n\t[key: string]: T;\n}\n\nexport class IntSet {\n\tarray = [] as (number | undefined)[];\n\n\tadd (value: number): boolean {\n\t\tconst 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\tconst 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\tconst oldSize = this.size;\n\t\tfor (let 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 type NumberArrayLike = Array<number> | Float32Array;\nexport type IntArrayLike = Array<number> | Int16Array;\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\ttoRgb888 () {\n\t\tconst hex = (x: number) => (`0${(x * 255).toString(16)}`).slice(-2);\n\t\treturn Number(`0x${hex(this.r)}${hex(this.g)}${hex(this.b)}`);\n\t}\n\n\tstatic fromString (hex: string, color = new Color()): Color {\n\t\treturn color.setFromString(hex);\n\t}\n}\n\nexport class MathUtils {\n\tstatic epsilon = 0.00001;\n\tstatic epsilon2 = MathUtils.epsilon * MathUtils.epsilon;\n\t// biome-ignore lint/suspicious/noApproximativeNumericConstant: reference runtime\n\tstatic PI = 3.1415927;\n\tstatic PI2 = MathUtils.PI * 2;\n\tstatic invPI2 = 1 / MathUtils.PI2;\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 atan2Deg (y: number, x: number) {\n\t\treturn Math.atan2(y, x) * MathUtils.radDeg;\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\tconst 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\tconst u = Math.random();\n\t\tconst 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\tstatic readonly linear: Interpolation = new class extends Interpolation {\n\t\tprotected applyInternal (a: number): number {\n\t\t\treturn a;\n\t\t}\n\t}();\n\n\t/** Aka \"smoothstep\". */\n\tstatic readonly smooth: Interpolation = new class extends Interpolation {\n\t\tprotected applyInternal (a: number): number {\n\t\t\treturn a * a * (3 - 2 * a);\n\t\t}\n\t}();\n\n\t/** Slow, then fast. */\n\tstatic readonly slowFast: Interpolation = new class extends Interpolation {\n\t\tprotected applyInternal (a: number): number {\n\t\t\treturn a * a;\n\t\t}\n\t}();\n\n\t/** Fast, then slow. */\n\tstatic readonly fastSlow: Interpolation = new class extends Interpolation {\n\t\tprotected applyInternal (a: number): number {\n\t\t\treturn (a - 1) * (a - 1) * -1 + 1;\n\t\t}\n\t}();\n\n\tstatic readonly circle: Interpolation = new class extends Interpolation {\n\t\tprotected applyInternal (a: number): number {\n\t\t\tif (a <= 0.5) {\n\t\t\t\ta *= 2;\n\t\t\t\treturn (1 - Math.sqrt(1 - a * a)) / 2;\n\t\t\t}\n\t\t\ta--;\n\t\t\ta *= 2;\n\t\t\treturn (Math.sqrt(1 - a * a) + 1) / 2;\n\t\t}\n\t}();\n\n\tprotected abstract applyInternal (a: number): number;\n\n\tapply (a: number): number;\n\tapply (start: number, end: number, a: number): number;\n\tapply (start: number, end?: number, a?: number): number {\n\t\tif (end === undefined || a === undefined) return this.applyInternal(start);\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\t// biome-ignore lint/suspicious/noExplicitAny: ok any in this case\n\tstatic setArraySize<T> (array: Array<T>, size: number, value: any = 0): Array<T> {\n\t\tconst 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\t// biome-ignore lint/suspicious/noExplicitAny: ok any in this case\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\tconst array: T[] = [];\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\tconst array: number[] = [];\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): IntArrayLike {\n\t\tif (Utils.SUPPORTS_TYPED_ARRAYS)\n\t\t\treturn new Int16Array(size)\n\t\telse {\n\t\t\tconst array: number[] = [];\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>): number[] | Float32Array {\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 https://esotericsoftware.com/forum/d/10109-ios-10-disappearing-graphics\n\tstatic webkit602BugfixHelper (alpha: number) {\n\t}\n\n\tstatic contains<T> (array: Array<T>, element: T, identity = true) {\n\t\tfor (let i = 0; i < array.length; i++)\n\t\t\tif (array[i] === element) return true;\n\t\treturn false;\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: ok any in this case\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\tconst bone = skeleton.bones[i].appliedPose;\n\t\t\tconsole.log(`${bone.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 = [] as T[];\n\tprivate instantiator: () => T;\n\n\tconstructor (instantiator: () => T) {\n\t\tthis.instantiator = instantiator;\n\t}\n\n\tobtain () {\n\t\t// biome-ignore lint/style/noNonNullAssertion: length check\n\t\treturn this.items.length > 0 ? this.items.pop()! : this.instantiator();\n\t}\n\n\tfree (item: T) {\n\t\t// biome-ignore lint/suspicious/noExplicitAny: T can be anything\n\t\t(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\tconst x = this.x;\n\t\tconst y = this.y;\n\t\treturn Math.sqrt(x * x + y * y);\n\t}\n\n\tnormalize () {\n\t\tconst 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\tconst 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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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/** biome-ignore-all lint/suspicious/noExplicitAny: textures can be various type */\n\nexport abstract class Texture {\n\tprotected _image: HTMLImageElement | ImageBitmap | any;\n\n\tconstructor (image: HTMLImageElement | ImageBitmap | any) {\n\t\tthis._image = image;\n\t}\n\n\tgetImage (): HTMLImageElement | ImageBitmap | any {\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\ttexture: 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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { AssetManagerBase } from \"./AssetManagerBase.js\";\nimport { type Texture, TextureFilter, TextureRegion, TextureWrap } from \"./Texture.js\";\nimport { type Disposable, type StringMap, Utils } from \"./Utils.js\";\n\nexport class TextureAtlas implements Disposable {\n\tpages = [] as TextureAtlasPage[];\n\tregions = [] as TextureAtlasRegion[];\n\n\tconstructor (atlasText: string) {\n\t\tconst reader = new TextureAtlasReader(atlasText);\n\t\tconst entry = new Array<string>(4);\n\n\t\tconst 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\tconst 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\tconst 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\tconst region = new TextureAtlasRegion(page, line);\n\n\t\t\t\twhile (true) {\n\t\t\t\t\tconst count = reader.readEntry(entry, line = reader.readLine());\n\t\t\t\t\tif (count === 0) break;\n\t\t\t\t\tconst 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\tconst 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 (const page of this.pages)\n\t\t\tpage.setTexture(assetManager.get(pathPrefix + page.name) as Texture);\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\tconst 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\tconst 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\tregions = [] as TextureAtlasRegion[];\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\tfor (const region of this.regions)\n\t\t\tregion.texture = texture;\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\tpage.regions.push(this);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Skeleton } from \"../Skeleton.js\";\nimport type { Slot } from \"../Slot.js\";\nimport type { SlotPose } from \"../SlotPose.js\";\nimport { type NumberArrayLike, Utils } from \"../Utils.js\";\n\n/** The base class for all attachments. Multiple {@link Skeleton} instances, slots, or skins can use the same attachments. */\nexport abstract class Attachment {\n\tprivate static readonly empty: number[] = [];\n\n\tname: string;\n\n\t/** Timelines for the timeline attachment are also applied to this attachment.\n\t * @return May be null if no attachment-specific timelines should be applied. */\n\ttimelineAttachment?: Attachment;\n\n\t/** Slots that can have attachments whose {@link timelineAttachment} is this attachment. */\n\ttimelineSlots: number[] = Attachment.empty;\n\n\tconstructor (name: string) {\n\t\tif (!name) throw new Error(\"name cannot be null.\");\n\t\tthis.name = name;\n\t\tthis.timelineAttachment = this;\n\t}\n\n\tabstract copy (): Attachment;\n\n\t/** Returns true if the {@code slotIndex} or any {@link timelineSlots} have an attachment whose {@link timelineAttachment} is\n\t * this attachment.\n\t * @param slots The {@link Skeleton.slots}.\n\t * @param slotIndex The timeline's primary slot index. */\n\tpublic isTimelineActive (slots: Slot[], slotIndex: number, appliedPose: boolean): boolean {\n\t\tlet slot = slots[slotIndex];\n\t\tif (slot.bone.isActive()) {\n\t\t\tconst other = (appliedPose ? slot.getAppliedPose() : slot.getPose()).getAttachment();\n\t\t\tif (other != null && other.timelineAttachment === this) return true;\n\t\t}\n\t\tfor (let i = 0, n = this.timelineSlots.length; i < n; i++) {\n\t\t\tslot = slots[this.timelineSlots[i]];\n\t\t\tif (!slot.bone.isActive()) continue;\n\t\t\tconst other = (appliedPose ? slot.getAppliedPose() : slot.getPose()).getAttachment();\n\t\t\tif (other != null && other.timelineAttachment === this) return true;\n\t\t}\n\t\treturn false;\n\t}\n}\n\n/** Base class for an attachment with vertices that are transformed by one or more bones and can be deformed by\n * {@link SlotPose.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 that affect the {@link vertices}. The entries are, for each vertex, the number of bones affecting the vertex\n\t * followed by that many bone indices, which is {@link Skeleton.getBones} index. Null 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` triplets 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\tconstructor (name: string) {\n\t\tsuper(name);\n\t}\n\n\t/** Transforms the attachment's local {@link vertices} to world coordinates. If {@link SlotPose.getDeform} is not empty, it\n\t * is used to deform the vertices.\n\t *\n\t * See <a href=\"https://esotericsoftware.com/spine-runtime-skeletons#World-transforms\">World transforms</a> 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 (skeleton: Skeleton, slot: Slot, start: number, count: number, worldVertices: NumberArrayLike, offset: number,\n\t\tstride: number) {\n\n\t\tcount = offset + (count >> 1) * stride;\n\t\tconst deformArray = slot.appliedPose.deform;\n\t\tlet vertices = this.vertices;\n\t\tconst bones = this.bones;\n\t\tif (!bones) {\n\t\t\tif (deformArray.length > 0) vertices = deformArray;\n\t\t\tconst bone = slot.bone.appliedPose;\n\t\t\tconst x = bone.worldX;\n\t\t\tconst y = bone.worldY;\n\t\t\tconst 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\tconst 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\tconst n = bones[v];\n\t\t\tv += n + 1;\n\t\t\tskip += n;\n\t\t}\n\t\tconst 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\tconst bone = skeletonBones[bones[v]].appliedPose;\n\t\t\t\t\tconst 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\tconst 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\tconst bone = skeletonBones[bones[v]].appliedPose;\n\t\t\t\t\tconst 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 = [];\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\tattachment.timelineSlots = this.timelineSlots;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { TextureRegion } from \"../Texture.js\";\nimport { TextureAtlasRegion } from \"../TextureAtlas.js\";\nimport { Color, type NumberArrayLike, Utils } from \"../Utils.js\";\nimport { VertexAttachment } from \"./Attachment.js\";\nimport type { HasSequence } from \"./HasSequence.js\";\nimport type { Sequence } from \"./Sequence.js\";\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 that 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 HasSequence {\n\treadonly sequence: Sequence;\n\n\t/** The UV pair for each vertex, normalized within the texture region. */\n\tregionUVs: NumberArrayLike = [];\n\n\t/** Triplets of vertex indices which describe the mesh's triangulation. */\n\ttriangles: Array<number> = [];\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/** The name of the texture region for this attachment. */\n\tpath?: string;\n\n\t/** The color to tint the mesh. */\n\tcolor = new Color(1, 1, 1, 1);\n\n\tprivate sourceMesh: MeshAttachment | null = null;\n\n\t/** Vertex index pairs describing edges for controlling triangulation, or null if nonessential data was not exported. Mesh\n\t * triangles do not never cross edges. Triangulation is not performed at runtime. */\n\tedges: Array<number> = [];\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\ttempColor = new Color(0, 0, 0, 0);\n\n\tconstructor (name: string, sequence: Sequence) {\n\t\tsuper(name);\n\t\tthis.sequence = sequence;\n\t}\n\n\tcopy (): MeshAttachment {\n\t\tif (this.sourceMesh) return this.newLinkedMesh();\n\n\t\tconst copy = new MeshAttachment(this.name, this.sequence.copy());\n\t\tcopy.path = this.path;\n\t\tcopy.color.setFromColor(this.color);\n\n\t\tthis.copyTo(copy);\n\t\tcopy.regionUVs = [];\n\t\tUtils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length);\n\t\tcopy.triangles = [];\n\t\tUtils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length);\n\t\tcopy.hullLength = this.hullLength;\n\n\t\t// Nonessential.\n\t\tif (this.edges) {\n\t\t\tcopy.edges = [];\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\tupdateSequence () {\n\t\tthis.sequence.update(this);\n\t}\n\n\t/** The source 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 * source mesh, but may have a different {@link name} or {@link path}, and therefore a different texture region. */\n\tgetSourceMesh () {\n\t\treturn this.sourceMesh;\n\t}\n\n\tsetSourceMesh (sourceMesh: MeshAttachment | null) {\n\t\tthis.sourceMesh = sourceMesh;\n\t\tif (sourceMesh) {\n\t\t\tthis.bones = sourceMesh.bones;\n\t\t\tthis.vertices = sourceMesh.vertices;\n\t\t\tthis.worldVerticesLength = sourceMesh.worldVerticesLength;\n\t\t\tthis.regionUVs = sourceMesh.regionUVs;\n\t\t\tthis.triangles = sourceMesh.triangles;\n\t\t\tthis.hullLength = sourceMesh.hullLength;\n\t\t\tthis.worldVerticesLength = sourceMesh.worldVerticesLength\n\t\t\tthis.edges = sourceMesh.edges;\n\t\t\tthis.width = sourceMesh.width;\n\t\t\tthis.height = sourceMesh.height;\n\t\t}\n\t}\n\n\t/** Returns a new mesh with the {@link sourceMesh} set to this mesh's source mesh, if any, else to this mesh. **/\n\tnewLinkedMesh (): MeshAttachment {\n\t\tconst copy = new MeshAttachment(this.name, this.sequence.copy());\n\t\tcopy.timelineAttachment = this.timelineAttachment;\n\t\tcopy.path = this.path;\n\t\tcopy.color.setFromColor(this.color);\n\t\tcopy.setSourceMesh(this.sourceMesh ? this.sourceMesh : this);\n\t\tcopy.updateSequence();\n\t\treturn copy;\n\t}\n\n\t/** Computes {@link Sequence.getUVs | UVs} for a mesh attachment.\n\t * @param uvs Output array for the computed UVs, same length as regionUVs. */\n\tstatic computeUVs (region: TextureRegion | null, regionUVs: NumberArrayLike, uvs: NumberArrayLike): void {\n\t\tif (!region) throw new Error(\"Region not set.\");\n\t\tconst n = uvs.length;\n\t\tlet u = region.u, v = region.v, width = 0, height = 0;\n\t\tif (region instanceof TextureAtlasRegion) {\n\t\t\tconst page = region.page;\n\t\t\tconst textureWidth = page.width, textureHeight = page.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\tdefault:\n\t\t\t\t\tu -= region.offsetX / textureWidth;\n\t\t\t\t\tv -= (region.originalHeight - region.offsetY - region.height) / textureHeight;\n\t\t\t\t\twidth = region.originalWidth / textureWidth;\n\t\t\t\t\theight = region.originalHeight / textureHeight;\n\t\t\t}\n\t\t} else if (!region) {\n\t\t\tu = v = 0;\n\t\t\twidth = height = 1;\n\t\t} else {\n\t\t\twidth = region.u2 - u;\n\t\t\theight = 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", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { SlotPose } from \"../SlotPose.js\";\nimport type { Slot } from \"../Slot.js\";\nimport type { TextureRegion } from \"../Texture.js\";\nimport { Color, MathUtils, type NumberArrayLike } from \"../Utils.js\";\nimport { Attachment } from \"./Attachment.js\";\nimport type { HasSequence } from \"./HasSequence.js\";\nimport type { Sequence } from \"./Sequence.js\";\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 HasSequence {\n\treadonly sequence: Sequence;\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 scaleX. */\n\tscaleX = 1;\n\n\t/** The local scaleY. */\n\tscaleY = 1;\n\n\t/** The local rotation in degrees, counter clockwise. */\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 name of the texture region for this attachment. */\n\tpath?: string;\n\n\t/** The color to tint the region attachment. */\n\tcolor = new Color(1, 1, 1, 1);\n\n\ttempColor = new Color(1, 1, 1, 1);\n\n\tconstructor (name: string, sequence: Sequence) {\n\t\tsuper(name);\n\t\tthis.sequence = sequence;\n\t}\n\n\tcopy (): Attachment {\n\t\tconst copy = new RegionAttachment(this.name, this.sequence.copy());\n\t\tcopy.path = this.path;\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\tcopy.color.setFromColor(this.color);\n\t\treturn copy;\n\t}\n\n\t/** Transforms the attachment's four vertices to world coordinates.\n\t *\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 >= `offset` + 8.\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, vertexOffsets: NumberArrayLike, worldVertices: NumberArrayLike, offset: number, stride: number) {\n\n\t\tconst bone = slot.bone.appliedPose;\n\t\tconst x = bone.worldX, y = bone.worldY;\n\t\tconst a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n\n\t\tlet offsetX = vertexOffsets[0];\n\t\tlet offsetY = vertexOffsets[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 = vertexOffsets[2];\n\t\toffsetY = vertexOffsets[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 = vertexOffsets[4];\n\t\toffsetY = vertexOffsets[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 = vertexOffsets[6];\n\t\toffsetY = vertexOffsets[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\tgetOffsets (pose: SlotPose): number[] {\n\t\t// biome-ignore lint/style/noNonNullAssertion: offsets are always defined after updateSequence\n\t\treturn this.sequence.offsets![this.sequence.resolveIndex(pose)];\n\t}\n\n\tupdateSequence () {\n\t\tthis.sequence.update(this);\n\t}\n\n\t/** Computes {@link Sequence.getUVs | UVs} and {@link Sequence.getOffsets | offsets} for a region attachment.\n\t * @param uvs Output array for the computed UVs, length of 8.\n\t * @param offset Output array for the computed vertex offsets, length of 8. */\n\tstatic computeUVs (region: TextureRegion | null, x: number, y: number, scaleX: number, scaleY: number, rotation: number, width: number,\n\t\theight: number, offset: number[], uvs: NumberArrayLike): void {\n\n\t\tif (!region) throw new Error(\"Region not set.\");\n\t\tconst regionScaleX = width / region.originalWidth * scaleX;\n\t\tconst regionScaleY = height / region.originalHeight * scaleY;\n\t\tconst localX = -width / 2 * scaleX + region.offsetX * regionScaleX;\n\t\tconst localY = -height / 2 * scaleY + region.offsetY * regionScaleY;\n\t\tconst localX2 = localX + region.width * regionScaleX;\n\t\tconst localY2 = localY + region.height * regionScaleY;\n\t\tconst radians = rotation * MathUtils.degRad;\n\t\tconst cos = Math.cos(radians);\n\t\tconst sin = Math.sin(radians);\n\t\tconst localXCos = localX * cos + x;\n\t\tconst localXSin = localX * sin;\n\t\tconst localYCos = localY * cos + y;\n\t\tconst localYSin = localY * sin;\n\t\tconst localX2Cos = localX2 * cos + x;\n\t\tconst localX2Sin = localX2 * sin;\n\t\tconst localY2Cos = localY2 * cos + y;\n\t\tconst localY2Sin = localY2 * sin;\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 == 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} else {\n\t\t\tuvs[1] = region.v2;\n\t\t\tuvs[2] = region.u;\n\t\t\tuvs[5] = region.v;\n\t\t\tuvs[6] = region.u2;\n\t\t\tif (region.degrees === 90) {\n\t\t\t\tuvs[0] = region.u2;\n\t\t\t\tuvs[3] = region.v2;\n\t\t\t\tuvs[4] = region.u;\n\t\t\t\tuvs[7] = region.v;\n\t\t\t} else {\n\t\t\t\tuvs[0] = region.u;\n\t\t\t\tuvs[3] = region.v;\n\t\t\t\tuvs[4] = region.u2;\n\t\t\t\tuvs[7] = region.v2;\n\t\t\t}\n\t\t}\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { SlotPose } from \"../SlotPose.js\";\nimport type { TextureRegion } from \"../Texture.js\";\nimport { type NumberArrayLike, Utils } from \"../Utils.js\";\nimport type { HasSequence } from \"./HasSequence.js\";\nimport { MeshAttachment } from \"./MeshAttachment.js\";\nimport { RegionAttachment } from \"./RegionAttachment.js\";\n\n/** Holds texture regions, UVs, and vertex offsets for rendering a region or mesh attachment. {@link regions Regions} must be\n * populated and {@link update} called before use. */\nexport class Sequence {\n\tprivate static _nextID = 0;\n\n\tid = Sequence.nextID();\n\n\t/** The list of texture regions this sequence will display. */\n\tregions: Array<TextureRegion | null>;\n\n\treadonly pathSuffix: boolean;\n\tuvs?: NumberArrayLike[];\n\n\t/** Returns vertex offsets from the center of a {@link RegionAttachment}. Invalid to call for a {@link MeshAttachment}. */\n\toffsets?: number[][];\n\n\t/** The starting number for the numeric {@link getPath | path} suffix. */\n\tstart = 0;\n\n\t/** The minimum number of digits in the numeric {@link getPath | path} suffix, for zero padding. 0 for no zero\n\t * padding. */\n\tdigits = 0;\n\n\t/** The index of the region to show for the setup pose. */\n\tsetupIndex = 0;\n\n\t/** @param count The number of texture regions this sequence will display.\n\t * @param pathSuffix If true, the {@link getPath | path} has a numeric suffix. If false, all regions will use the\n\t * same path, so `count` should be 1. */\n\tconstructor (count: number, pathSuffix: boolean) {\n\t\tthis.regions = new Array<TextureRegion>(count);\n\t\tthis.pathSuffix = pathSuffix;\n\t}\n\n\tcopy (): Sequence {\n\t\tconst regionCount = this.regions.length;\n\t\tconst copy = new Sequence(regionCount, this.pathSuffix);\n\t\tUtils.arrayCopy(this.regions, 0, copy.regions, 0, regionCount);\n\t\tcopy.start = this.start;\n\t\tcopy.digits = this.digits;\n\t\tcopy.setupIndex = this.setupIndex;\n\n\t\tif (this.uvs != null) {\n\t\t\tconst length = this.uvs[0].length;\n\t\t\tcopy.uvs = [];\n\t\t\tfor (let i = 0; i < regionCount; i++) {\n\t\t\t\tcopy.uvs[i] = Utils.newFloatArray(length);\n\t\t\t\tUtils.arrayCopy(this.uvs[i], 0, copy.uvs[i], 0, length);\n\t\t\t}\n\t\t}\n\t\tif (this.offsets != null) {\n\t\t\tcopy.offsets = [];\n\t\t\tfor (let i = 0; i < regionCount; i++) {\n\t\t\t\tcopy.offsets[i] = [];\n\t\t\t\tUtils.arrayCopy(this.offsets[i], 0, copy.offsets[i], 0, 8);\n\t\t\t}\n\t\t}\n\n\t\treturn copy;\n\t}\n\n\t/** Computes UVs and offsets for the specified attachment. Must be called if the regions or attachment properties are\n\t * changed. */\n\tpublic update (attachment: HasSequence) {\n\t\tconst regionCount = this.regions.length;\n\t\tif (attachment instanceof RegionAttachment) {\n\t\t\tthis.uvs = [];\n\t\t\tthis.offsets = [];\n\t\t\tfor (let i = 0; i < regionCount; i++) {\n\t\t\t\tthis.uvs[i] = Utils.newFloatArray(8);\n\t\t\t\tthis.offsets[i] = [];\n\t\t\t\tRegionAttachment.computeUVs(this.regions[i], attachment.x, attachment.y, attachment.scaleX, attachment.scaleY, attachment.rotation,\n\t\t\t\t\tattachment.width, attachment.height, this.offsets[i], this.uvs[i]);\n\t\t\t}\n\t\t} else if (attachment instanceof MeshAttachment) {\n\t\t\tconst regionUVs = attachment.regionUVs;\n\t\t\tthis.uvs = [];\n\t\t\tthis.offsets = undefined;\n\t\t\tfor (let i = 0; i < regionCount; i++) {\n\t\t\t\tthis.uvs[i] = Utils.newFloatArray(regionUVs.length);\n\t\t\t\tMeshAttachment.computeUVs(this.regions[i], regionUVs, this.uvs[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Returns the {@link regions} index for the {@link SlotPose.getSequenceIndex}. */\n\tresolveIndex (pose: SlotPose): number {\n\t\tlet index = pose.sequenceIndex;\n\t\tif (index === -1) index = this.setupIndex;\n\t\tif (index >= this.regions.length) index = this.regions.length - 1;\n\t\treturn index;\n\t}\n\n\t/** Returns the UVs for the specified index. {@link regions Regions} must be populated and {@link update} called\n\t * before calling this method. */\n\tgetUVs (index: number): Float32Array {\n\t\t// biome-ignore lint/style/noNonNullAssertion: uvs are always defined after updateSequence\n\t\treturn this.uvs![index] as Float32Array;\n\t}\n\n\t/** Returns true if the {@link getPath | path} has a numeric suffix. */\n\thasPathSuffix (): boolean {\n\t\treturn this.pathSuffix;\n\t}\n\n\t/** Returns the specified base path with an optional numeric suffix for the specified index. */\n\tgetPath (basePath: string, index: number): string {\n\t\tif (!this.pathSuffix) return basePath;\n\t\tlet result = basePath;\n\t\tconst 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\n/** Controls how {@link Sequence.regions} are displayed over time. */\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", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Attachment, VertexAttachment } from \"./attachments/Attachment.js\";\nimport type { HasSequence } from \"./attachments/HasSequence.js\";\nimport { SequenceMode, SequenceModeValues } from \"./attachments/Sequence.js\";\nimport type { Bone } from \"./Bone.js\";\nimport type { Inherit } from \"./BoneData.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport type { Event } from \"./Event.js\";\nimport type { IkConstraint } from \"./IkConstraint.js\";\nimport type { IkConstraintPose } from \"./IkConstraintPose.js\";\nimport type { PathConstraint } from \"./PathConstraint.js\";\nimport type { PathConstraintPose } from \"./PathConstraintPose.js\";\nimport type { PhysicsConstraint } from \"./PhysicsConstraint.js\";\nimport type { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\nimport type { PhysicsConstraintPose } from \"./PhysicsConstraintPose.js\";\nimport type { Posed } from \"./Posed.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { SkeletonData } from \"./SkeletonData.js\";\nimport type { Slider } from \"./Slider.js\";\nimport type { SliderPose } from \"./SliderPose.js\";\nimport type { Slot } from \"./Slot.js\";\nimport type { SlotPose } from \"./SlotPose.js\";\nimport type { TransformConstraint } from \"./TransformConstraint.js\";\nimport type { TransformConstraintPose } from \"./TransformConstraintPose.js\";\nimport { Color, type NumberArrayLike, StringSet, Utils } from \"./Utils.js\";\n\n/** Stores a list of timelines to animate a skeleton's pose over time.\n *\n * See <a href='https://esotericsoftware.com/spine-applying-animations#Timeline-API'>Applying Animations</a> in the Spine Runtimes\n * Guide. */\nexport class Animation {\n\t/** The animation's name, unique across all animations in the skeleton.\n\t *\n\t * See {@link SkeletonData.findAnimation}. */\n\treadonly name: string;\n\n\t/** The duration of the animation in seconds, which is usually the highest time of all frames in the timelines. The duration is\n\t * used to know when the animation has completed and, for animations that repeat, when it should loop back to the start. */\n\ttimelines: Array<Timeline> = [];\n\n\treadonly timelineIds: StringSet;\n\n\t/** {@link Skeleton.getBones} indices that this animation's timelines modify.\n\t *\n\t * See {@link BoneTimeline.bones}. */\n\treadonly bones: Array<number>;\n\n\t// Nonessential.\n\t/** The color of the animation as it was in Spine, or a default color if nonessential data was not exported. */\n\treadonly color = new Color(1, 1, 1, 1);\n\n\t/** The duration of the animation in seconds, which is usually the highest time of all frames in the timeline. The duration is\n\t * used to know when it has completed and when it should loop back to the start. */\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.duration = duration;\n\t\tthis.timelineIds = new StringSet();\n\t\tthis.bones = [] as number[];\n\t\tthis.setTimelines(timelines);\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\n\t\tconst n = timelines.length;\n\t\tthis.timelineIds.clear();\n\t\tthis.bones.length = 0;\n\t\tconst boneSet = new Set();\n\t\tconst items = timelines;\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst timeline = items[i];\n\t\t\tthis.timelineIds.addAll(timeline.propertyIds);\n\t\t\tif (isBoneTimeline(timeline) && boneSet.add(timeline.boneIndex))\n\t\t\t\tthis.bones.push(timeline.boneIndex);\n\t\t}\n\t}\n\n\t/** Returns true if this animation contains a timeline with any of the specified property IDs.\n\t *\n\t * See {@link Timeline.propertyIds}. */\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 the animation's timelines to the specified skeleton.\n\t *\n\t * See {@link Timeline.apply} and\n\t * <a href='https://esotericsoftware.com/spine-applying-animations#Timeline-API'>Applying Animations</a> in the Spine Runtimes\n\t * Guide.\n\t * @param skeleton The skeleton the animation is applied to. This provides access to the bones, slots, and other skeleton\n\t * components the timelines may change.\n\t * @param lastTime The last time in seconds this animation was applied. Some timelines trigger only at discrete times, in which\n\t * case all keys are triggered between `lastTime` (exclusive) and `time` (inclusive). Pass -1\n\t * the first time an animation is applied to ensure frame 0 is triggered.\n\t * @param time The time in seconds the skeleton is being posed for. Timelines find the frame before and after this time and\n\t * interpolate between the frame values.\n\t * @param loop True if `time` beyond the {@link duration} repeats the animation, else the last frame is used.\n\t * @param events If any events are fired, they are added to this list. Pass null to ignore fired events or if no timelines fire\n\t * events.\n\t * @param alpha 0 applies setup or current values (depending on `fromSetup`), 1 uses timeline values, and\n\t * intermediate values interpolate between them. Adjusting `alpha` over time can mix an animation in or\n\t * out.\n\t * @param fromSetup If true, `alpha` transitions between setup and timeline values, setup values are used before the\n\t * first frame (current values are not used). If false, `alpha` transitions between current and timeline\n\t * values, no change is made before the first frame.\n\t * @param add If true, for timelines that support it, their values are added to the setup or current values (depending on\n\t * `fromSetup`).\n\t * @param out True when the animation is mixing out, else it is mixing in. Used by timelines that perform instant transitions.\n\t * @param appliedPose True to modify {@link Posed.appliedPose}, else {@link Posed.pose} is modified. */\n\tapply (skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array<Event> | null, alpha: number,\n\t\tfromSetup: boolean, add: boolean, out: boolean, appliedPose: boolean) {\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\tconst 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, fromSetup, add, out, appliedPose);\n\t}\n}\n\n\nexport enum Property {\n\trotate,\n\tx,\n\ty,\n\tscaleX,\n\tscaleY,\n\tshearX,\n\tshearY,\n\tinherit,\n\trgb,\n\talpha,\n\trgb2,\n\tattachment,\n\tdeform,\n\tevent,\n\tdrawOrder,\n\tikConstraint,\n\ttransformConstraint,\n\tpathConstraintPosition,\n\tpathConstraintSpacing,\n\tpathConstraintMix,\n\tphysicsConstraintInertia,\n\tphysicsConstraintStrength,\n\tphysicsConstraintDamping,\n\tphysicsConstraintMass,\n\tphysicsConstraintWind,\n\tphysicsConstraintGravity,\n\tphysicsConstraintMix,\n\tphysicsConstraintReset,\n\tsequence,\n\tsliderTime,\n\tsliderMix,\n}\n\n/** The base class for all timelines.\n *\n * See <a href='https://esotericsoftware.com/spine-applying-animations#Timeline-API'>Applying Animations</a> in the Spine\n * Runtimes Guide. */\nexport abstract class Timeline {\n\treadonly propertyIds: string[];\n\treadonly frames: NumberArrayLike;\n\n\t/** True if this timeline supports additive blending. */\n\tadditive = false;\n\n\t/** True if this timeline sets values instantaneously and does not support interpolation between frames. */\n\tinstant = false;\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\t/** The number of values stored per frame. */\n\tgetFrameEntries (): number {\n\t\treturn 1;\n\t}\n\n\t/** The number of frames in this timeline. */\n\tgetFrameCount () {\n\t\treturn this.frames.length / this.getFrameEntries();\n\t}\n\n\t/** The duration of the timeline in seconds, which is usually the highest time of all frames in the timeline. */\n\tgetDuration (): number {\n\t\treturn this.frames[this.frames.length - this.getFrameEntries()];\n\t}\n\n\t/** Applies this timeline to the skeleton.\n\t *\n\t * See <a href='https://esotericsoftware.com/spine-applying-animations#Timeline-API'>Applying Animations</a> in the Spine\n\t * Runtimes Guide.\n\t * @param skeleton The skeleton the timeline is applied to. This provides access to the bones, slots, and other skeleton\n\t * components the timelines may change.\n\t * @param lastTime The last time in seconds this timeline was applied. Some timelines trigger only at discrete times, in\n\t * which case all keys are triggered between `lastTime` (exclusive) and `time` (inclusive).\n\t * Pass -1 the first time a timeline is applied to ensure frame 0 is triggered.\n\t * @param time The time in seconds the skeleton is being posed for. Timelines find the frame before and after this time and\n\t * interpolate between the frame values.\n\t * @param events If any events are fired, they are added to this list. Pass null to ignore fired events or if no timelines\n\t * fire events.\n\t * @param alpha 0 applies setup or current values (depending on `fromSetup`), 1 uses timeline values, and\n\t * intermediate values interpolate between them. Adjusting `alpha` over time can mix a timeline in or\n\t * out.\n\t * @param fromSetup If true, `alpha` transitions between setup and timeline values, setup values are used before\n\t * the first frame (current values are not used). If false, `alpha` transitions between current and\n\t * timeline values, no change is made before the first frame.\n\t * @param add If true, for timelines that support it, their values are added to the setup or current values (depending on\n\t * `fromSetup`).\n\t * @param out True when the animation is mixing out, else it is mixing in. Used by timelines that perform instant\n\t * transitions.\n\t * @param appliedPose True to modify {@link Posed.appliedPose}, else {@link Posed.pose} is modified. */\n\tabstract apply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event> | null, alpha: number,\n\t\tfromSetup: boolean, add: boolean, out: boolean, appliedPose: boolean): void;\n\n\t/** Linear search using the specified stride (default 1).\n\t * @param time Must be >= the first value in `frames`.\n\t * @return The index of the first value <= `time`. */\n\tstatic search (frames: NumberArrayLike, time: number, step = 1) {\n\t\tconst 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\n/** An interface for timelines that change a slot's properties. */\nexport interface SlotTimeline {\n\t/** The index of the slot in {@link Skeleton.slots} that will be changed when this timeline is applied. */\n\tslotIndex: number;\n}\n\nexport function isSlotTimeline (obj: Timeline & Partial<SlotTimeline>): obj is Timeline & SlotTimeline {\n\treturn typeof obj === 'object' && obj !== null && typeof obj.slotIndex === 'number';\n}\n\n/** The base class for timelines that interpolate between frame values using stepped, linear, or a Bezier curve. */\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 `bezierCount` (specified in the constructor) was larger\n\t * than the actual number of Bezier curves. */\n\tshrink (bezierCount: number) {\n\t\tconst size = this.getFrameCount() + bezierCount * 18/*BEZIER_SIZE*/;\n\t\tif (this.curves.length > size) {\n\t\t\tconst 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 `bezierCount - 1` (specified\n\t * in the constructor), inclusive.\n\t * @param frame Between 0 and `frameCount - 1`, 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\tconst 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\tconst tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = (value1 - cy1 * 2 + cy2) * 0.03;\n\t\tconst 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 frames} for the values of the frame before `time`.\n\t * @param valueOffset The offset from `frameIndex` to the value this curve is used for.\n\t * @param i The index of the Bezier segments. See {@link getCurveType}. */\n\tgetBezierValue (time: number, frameIndex: number, valueOffset: number, i: number) {\n\t\tconst curves = this.curves;\n\t\tif (curves[i] > time) {\n\t\t\tconst 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\tconst 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\tconst 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\tconst 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\n/** The base class for a {@link CurveTimeline} that sets one property with a curve. */\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 `frameCount`, 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\tconst 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\tconst curveType = this.curves[i >> 1];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst 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\t}\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\t/** Returns the interpolated value for properties relative to the setup value. The timeline value is added to the setup\n\t * value, rather than replacing it.\n\t *\n\t * See {@link Timeline.apply}.\n\t * @param current The current value for the property.\n\t * @param setup The setup value for the property. */\n\tgetRelativeValue (time: number, alpha: number, fromSetup: boolean, add: boolean, current: number, setup: number) {\n\t\tif (time < this.frames[0]) return fromSetup ? setup : current;\n\t\tconst value = this.getCurveValue(time);\n\t\treturn fromSetup ? setup + value * alpha : current + (add ? value : value + setup - current) * alpha;\n\t}\n\n\t/** Returns the interpolated value for properties set as absolute values. The timeline value replaces the setup value,\n\t * rather than being relative to it.\n\t *\n\t * See {@link Timeline.apply}.\n\t * @param current The current value for the property.\n\t * @param setup The setup value for the property. */\n\tgetAbsoluteValue (time: number, alpha: number, fromSetup: boolean, add: boolean, current: number, setup: number): number;\n\n\t/** Returns the interpolated value for properties set as absolute values, using the specified timeline value rather than\n\t * calling {@link getCurveValue}.\n\t *\n\t * See {@link Timeline.apply}.\n\t * @param current The current value for the property.\n\t * @param setup The setup value for the property.\n\t * @param value The timeline value to apply. */\n\tgetAbsoluteValue (time: number, alpha: number, fromSetup: boolean, add: boolean, current: number, setup: number, value: number): number;\n\n\tgetAbsoluteValue (time: number, alpha: number, fromSetup: boolean, add: boolean, current: number, setup: number, value?: number) {\n\t\tif (value === undefined)\n\t\t\treturn this.getAbsoluteValue1(time, alpha, fromSetup, add, current, setup);\n\t\telse\n\t\t\treturn this.getAbsoluteValue2(time, alpha, fromSetup, add, current, setup, value);\n\t}\n\n\tprivate getAbsoluteValue1 (time: number, alpha: number, fromSetup: boolean, add: boolean, current: number, setup: number) {\n\t\tif (time < this.frames[0]) return fromSetup ? setup : current;\n\t\tconst value = this.getCurveValue(time);\n\t\treturn fromSetup ? setup + (add ? value : value - setup) * alpha : current + (add ? value : value - current) * alpha;\n\t}\n\n\tprivate getAbsoluteValue2 (time: number, alpha: number, fromSetup: boolean, add: boolean, current: number, setup: number, value: number) {\n\t\tif (time < this.frames[0]) return fromSetup ? setup : current;\n\t\treturn fromSetup ? setup + (add ? value : value - setup) * alpha : current + (add ? value : value - current) * alpha;\n\t}\n\n\t/** Returns the interpolated value for scale properties. The timeline and setup values are multiplied and sign adjusted.\n\t *\n\t * See {@link Timeline.apply}.\n\t * @param current The current value for the property.\n\t * @param setup The setup value for the property. */\n\tgetScaleValue (time: number, alpha: number, fromSetup: boolean, add: boolean, out: boolean, current: number, setup: number) {\n\t\tif (time < this.frames[0]) return fromSetup ? setup : current;\n\t\tconst value = this.getCurveValue(time) * setup;\n\t\tif (alpha === 1 && !add) return value;\n\t\tlet base = fromSetup ? setup : current;\n\t\tif (add) return base + (value - setup) * alpha;\n\t\tif (out) return base + (Math.abs(value) * Math.sign(base) - base) * alpha;\n\t\tbase = Math.abs(base) * Math.sign(value);\n\t\treturn base + (value - base) * alpha;\n\t}\n}\n\n/** An interface for timelines that change a bone's properties. */\nexport interface BoneTimeline {\n\t/** The index of the bone in {@link Skeleton.bones} that is changed by this timeline. */\n\tboneIndex: number;\n}\n\nexport function isBoneTimeline (obj: Timeline & Partial<BoneTimeline>): obj is Timeline & BoneTimeline {\n\treturn typeof obj === 'object' && obj !== null && typeof obj.boneIndex === 'number';\n}\n\n/** The base class for timelines that change 1 bone property with a curve. */\nexport abstract class BoneTimeline1 extends CurveTimeline1 implements BoneTimeline {\n\treadonly boneIndex: number;\n\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number, property: Property) {\n\t\tsuper(frameCount, bezierCount, `${property}|${boneIndex}`);\n\t\tthis.boneIndex = boneIndex;\n\t\tthis.additive = true;\n\t}\n\n\tpublic apply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event> | null, alpha: number,\n\t\tfromSetup: boolean, add: boolean, out: boolean, appliedPose: boolean) {\n\t\tconst bone = skeleton.bones[this.boneIndex];\n\t\tif (bone.active)\n\t\t\tthis.apply1(appliedPose ? bone.appliedPose : bone.pose, bone.data.setupPose, time, alpha, fromSetup, add, out);\n\t}\n\n\tprotected abstract apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean): void;\n}\n\n/** The base class for timelines that change two bone properties with a curve. */\nexport abstract class BoneTimeline2 extends CurveTimeline implements BoneTimeline {\n\treadonly boneIndex;\n\n\t/** @param bezierCount The maximum number of Bezier curves. See {@link shrink}.\n\t * @param propertyIds Unique identifiers for the properties the timeline modifies. */\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number, property1: Property, property2: Property) {\n\t\tsuper(frameCount, bezierCount, `${property1}|${boneIndex}`, `${property2}|${boneIndex}`);\n\t\tthis.boneIndex = boneIndex;\n\t\tthis.additive = true;\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 `frameCount`, 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\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event> | null, alpha: number,\n\t\tfromSetup: boolean, add: boolean, out: boolean, appliedPose: boolean): void {\n\t\tconst bone = skeleton.bones[this.boneIndex];\n\t\tif (bone.active)\n\t\t\tthis.apply1(appliedPose ? bone.appliedPose : bone.pose, bone.data.setupPose, time, alpha, fromSetup, add, out);\n\t}\n\n\tprotected abstract apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean,): void;\n}\n\n/** Changes {@link BonePose.rotation}. */\nexport class RotateTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.rotate);\n\t}\n\n\tapply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.rotation = this.getRelativeValue(time, alpha, fromSetup, add, pose.rotation, setup.rotation);\n\t}\n}\n\n/** Changes {@link BonePose.x} and {@link BonePose.y}. */\nexport class TranslateTimeline extends BoneTimeline2 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.x, Property.y);\n\t}\n\n\tapply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tpose.x = setup.x;\n\t\t\t\tpose.y = setup.y;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet x = 0, y = 0;\n\t\tconst i = Timeline.search(frames, time, 3/*ENTRIES*/);\n\t\tconst curveType = this.curves[i / 3/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst 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\tconst 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\t}\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\tif (fromSetup) {\n\t\t\tpose.x = setup.x + x * alpha;\n\t\t\tpose.y = setup.y + y * alpha;\n\t\t} else if (add) {\n\t\t\tpose.x += x * alpha;\n\t\t\tpose.y += y * alpha;\n\t\t} else {\n\t\t\tpose.x += (setup.x + x - pose.x) * alpha;\n\t\t\tpose.y += (setup.y + y - pose.y) * alpha;\n\t\t}\n\t}\n}\n\n/** Changes {@link BonePose.x}. */\nexport class TranslateXTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.x);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.x = this.getRelativeValue(time, alpha, fromSetup, add, pose.x, setup.x);\n\t}\n}\n\n/** Changes {@link BonePose.y}. */\nexport class TranslateYTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.y);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.y = this.getRelativeValue(time, alpha, fromSetup, add, pose.y, setup.y);\n\t}\n}\n\n/** Changes {@link BonePose.scaleX} and {@link BonePose.scaleY}. */\nexport class ScaleTimeline extends BoneTimeline2 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.scaleX, Property.scaleY);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tpose.scaleX = setup.scaleX;\n\t\t\t\tpose.scaleY = setup.scaleY;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet x: number, y: number;\n\t\tconst i = Timeline.search(frames, time, 3/*ENTRIES*/);\n\t\tconst curveType = this.curves[i / 3/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst 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\tconst 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\t}\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 *= setup.scaleX;\n\t\ty *= setup.scaleY;\n\n\t\tif (alpha === 1 && !add) {\n\t\t\tpose.scaleX = x;\n\t\t\tpose.scaleY = y;\n\t\t} else {\n\t\t\tlet bx = 0, by = 0;\n\t\t\tif (fromSetup) {\n\t\t\t\tbx = setup.scaleX;\n\t\t\t\tby = setup.scaleY;\n\t\t\t} else {\n\t\t\t\tbx = pose.scaleX;\n\t\t\t\tby = pose.scaleY;\n\t\t\t}\n\t\t\tif (add) {\n\t\t\t\tpose.scaleX = bx + (x - setup.scaleX) * alpha;\n\t\t\t\tpose.scaleY = by + (y - setup.scaleY) * alpha;\n\t\t\t} else if (out) {\n\t\t\t\tpose.scaleX = bx + (Math.abs(x) * Math.sign(bx) - bx) * alpha;\n\t\t\t\tpose.scaleY = by + (Math.abs(y) * Math.sign(by) - by) * alpha;\n\t\t\t} else {\n\t\t\t\tbx = Math.abs(bx) * Math.sign(x);\n\t\t\t\tby = Math.abs(by) * Math.sign(y);\n\t\t\t\tpose.scaleX = bx + (x - bx) * alpha;\n\t\t\t\tpose.scaleY = by + (y - by) * alpha;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Changes a {@link BonePose.scaleX}. */\nexport class ScaleXTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.scaleX);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.scaleX = this.getScaleValue(time, alpha, fromSetup, add, out, pose.scaleX, setup.scaleX);\n\t}\n}\n\n/** Changes a {@link BonePose.scaleY}. */\nexport class ScaleYTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.scaleY);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.scaleY = this.getScaleValue(time, alpha, fromSetup, add, out, pose.scaleY, setup.scaleY);\n\t}\n}\n\n/** Changes {@link Bone.shearX} and {@link Bone.shearY}. */\nexport class ShearTimeline extends BoneTimeline2 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.shearX, Property.shearY);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean, out: boolean,) {\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tpose.shearX = setup.shearX;\n\t\t\t\tpose.shearY = setup.shearY;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet x = 0, y = 0;\n\t\tconst i = Timeline.search(frames, time, 3/*ENTRIES*/);\n\t\tconst curveType = this.curves[i / 3/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst 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\tconst 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\t}\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\tif (fromSetup) {\n\t\t\tpose.shearX = setup.shearX + x * alpha;\n\t\t\tpose.shearY = setup.shearY + y * alpha;\n\t\t} else if (add) {\n\t\t\tpose.shearX += x * alpha;\n\t\t\tpose.shearY += y * alpha;\n\t\t} else {\n\t\t\tpose.shearX += (setup.shearX + x - pose.shearX) * alpha;\n\t\t\tpose.shearY += (setup.shearY + y - pose.shearY) * alpha;\n\t\t}\n\t}\n}\n\n/** Changes {@link Bone.shearX} and {@link Bone.shearY}. */\nexport class ShearXTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.shearX);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.shearX = this.getRelativeValue(time, alpha, fromSetup, add, pose.shearX, setup.shearX);\n\t}\n}\n\n/** Changes {@link Bone.shearX} and {@link Bone.shearY}. */\nexport class ShearYTimeline extends BoneTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, boneIndex: number) {\n\t\tsuper(frameCount, bezierCount, boneIndex, Property.shearY);\n\t}\n\n\tprotected apply1 (pose: BonePose, setup: BonePose, time: number, alpha: number, fromSetup: boolean, add: boolean,\n\t\tout: boolean) {\n\t\tpose.shearY = this.getRelativeValue(time, alpha, fromSetup, add, pose.shearY, setup.shearY);\n\t}\n}\n\n/** Changes {@link BonePose.inherit}. */\nexport class InheritTimeline extends Timeline implements BoneTimeline {\n\treadonly boneIndex: number;\n\n\tconstructor (frameCount: number, boneIndex: number) {\n\t\tsuper(frameCount, `${Property.inherit}|${boneIndex}`);\n\t\tthis.boneIndex = boneIndex;\n\t\tthis.instant = true;\n\t}\n\n\tpublic getFrameEntries () {\n\t\treturn 2/*ENTRIES*/;\n\t}\n\n\t/** Sets the inherit transform mode for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds. */\n\tpublic setFrame (frame: number, time: number, inherit: Inherit) {\n\t\tframe *= 2/*ENTRIES*/;\n\t\tthis.frames[frame] = time;\n\t\tthis.frames[frame + 1/*INHERIT*/] = inherit;\n\t}\n\n\tpublic apply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst bone = skeleton.bones[this.boneIndex];\n\t\tif (!bone.active) return;\n\t\tconst pose = appliedPose ? bone.appliedPose : bone.pose;\n\n\t\tif (out) {\n\t\t\tif (fromSetup) pose.inherit = bone.data.setupPose.inherit;\n\t\t} else {\n\t\t\tconst frames = this.frames;\n\t\t\tif (time < frames[0]) {\n\t\t\t\tif (fromSetup) pose.inherit = bone.data.setupPose.inherit;\n\t\t\t} else\n\t\t\t\tpose.inherit = this.frames[Timeline.search(frames, time, 2/*ENTRIES*/) + 1/*INHERIT*/];\n\t\t}\n\t}\n}\n/** The base class for timelines that change any number of slot properties with a curve. */\nexport abstract class SlotCurveTimeline extends CurveTimeline implements SlotTimeline {\n\treadonly slotIndex: number;\n\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number, ...propertyIds: string[]) {\n\t\tsuper(frameCount, bezierCount, ...propertyIds);\n\t\tthis.slotIndex = slotIndex;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst slot = skeleton.slots[this.slotIndex];\n\t\tif (slot.bone.active) this.apply1(slot, appliedPose ? slot.appliedPose : slot.pose, time, alpha, fromSetup, add);\n\t}\n\n\tprotected abstract apply1 (slot: Slot, pose: SlotPose, time: number, alpha: number, fromSetup: boolean, add: boolean): void;\n}\n\n/** Changes {@link SlotPose.color}. */\nexport class RGBATimeline extends SlotCurveTimeline {\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, slotIndex, //\n\t\t\t`${Property.rgb}|${slotIndex}`, //\n\t\t\t`${Property.alpha}|${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\tprotected apply1 (slot: Slot, pose: SlotPose, time: number, alpha: number, fromSetup: boolean, add: boolean) {\n\t\tconst color = pose.color;\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) color.setFromColor(slot.data.setupPose.color);\n\t\t\treturn;\n\t\t}\n\n\t\tlet r = 0, g = 0, b = 0, a = 0;\n\t\tconst i = Timeline.search(frames, time, 5/*ENTRIES*/);\n\t\tconst curveType = this.curves[i / 5/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst 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\tconst 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\t}\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 (fromSetup) {\n\t\t\t\tconst setup = slot.data.setupPose.color;\n\t\t\t\tcolor.set(setup.r + (r - setup.r) * alpha, setup.g + (g - setup.g) * alpha, setup.b + (b - setup.b) * alpha,\n\t\t\t\t\tsetup.a + (a - setup.a) * alpha);\n\t\t\t} else\n\t\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 RGB for a slot's {@link SlotPose.color}. */\nexport class RGBTimeline extends SlotCurveTimeline {\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, slotIndex, `${Property.rgb}|${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\tprotected apply1 (slot: Slot, pose: SlotPose, time: number, alpha: number, fromSetup: boolean, add: boolean) {\n\t\tconst color = pose.color;\n\t\tlet r = 0, g = 0, b = 0;\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = slot.data.setupPose.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\treturn;\n\t\t}\n\n\t\tconst i = Timeline.search(frames, time, 4/*ENTRIES*/);\n\t\tconst curveType = this.curves[i >> 2];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst 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\tconst 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\t}\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\tif (fromSetup) {\n\t\t\t\tconst setup = slot.data.setupPose.color;\n\t\t\t\tr = setup.r + (r - setup.r) * alpha;\n\t\t\t\tg = setup.g + (g - setup.g) * alpha;\n\t\t\t\tb = setup.b + (b - setup.b) * alpha;\n\t\t\t} else {\n\t\t\t\tr = color.r + (r - color.r) * alpha;\n\t\t\t\tg = color.g + (g - color.g) * alpha;\n\t\t\t\tb = color.b + (b - color.b) * alpha;\n\t\t\t}\n\t\t}\n\t\tcolor.r = r < 0 ? 0 : (r > 1 ? 1 : r);\n\t\tcolor.g = g < 0 ? 0 : (g > 1 ? 1 : g);\n\t\tcolor.b = b < 0 ? 0 : (b > 1 ? 1 : b);\n\t}\n}\n\n/** Changes alpha for a slot's {@link SlotPose.color}. */\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, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst slot = skeleton.slots[this.slotIndex];\n\t\tif (!slot.bone.active) return;\n\n\t\tconst color = (appliedPose ? slot.appliedPose : slot.pose).color;\n\t\tlet a = 0;\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) color.a = slot.data.setupPose.color.a;\n\t\t\treturn;\n\t\t}\n\n\t\ta = this.getCurveValue(time);\n\t\tif (alpha !== 1) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = slot.data.setupPose.color;\n\t\t\t\ta = setup.a + (a - setup.a) * alpha;\n\t\t\t} else\n\t\t\t\ta = color.a + (a - color.a) * alpha;\n\t\t}\n\t\tcolor.a = a < 0 ? 0 : (a > 1 ? 1 : a);\n\t}\n}\n\n/** Changes {@link SlotPose.color} and {@link SlotPose.darkColor} for two color tinting. */\nexport class RGBA2Timeline extends SlotCurveTimeline {\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, slotIndex, //\n\t\t\t`${Property.rgb}|${slotIndex}`, //\n\t\t\t`${Property.alpha}|${slotIndex}`, //\n\t\t\t`${Property.rgb2}|${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\tprotected apply1 (slot: Slot, pose: SlotPose, time: number, alpha: number, fromSetup: boolean, add: boolean) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\tconst light = pose.color, dark = pose.darkColor!;\n\t\tlet r2 = 0, g2 = 0, b2 = 0\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = slot.data.setupPose;\n\t\t\t\tlight.setFromColor(setup.color);\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\t\t\tconst setupDark = setup.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\treturn;\n\t\t}\n\n\t\tlet r = 0, g = 0, b = 0, a = 0;\n\t\tconst i = Timeline.search(frames, time, 8/*ENTRIES*/);\n\t\tconst curveType = this.curves[i >> 3];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst 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\tconst 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\t}\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\telse if (fromSetup) {\n\t\t\tconst setupPose = slot.data.setupPose;\n\t\t\tlet setup = setupPose.color;\n\t\t\tlight.set(setup.r + (r - setup.r) * alpha, setup.g + (g - setup.g) * alpha, setup.b + (b - setup.b) * alpha,\n\t\t\t\tsetup.a + (a - setup.a) * alpha);\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\t\tsetup = setupPose.darkColor!;\n\t\t\tr2 = setup.r + (r2 - setup.r) * alpha;\n\t\t\tg2 = setup.g + (g2 - setup.g) * alpha;\n\t\t\tb2 = setup.b + (b2 - setup.b) * alpha;\n\t\t} else {\n\t\t\tlight.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);\n\t\t\tr2 = dark.r + (r2 - dark.r) * alpha;\n\t\t\tg2 = dark.g + (g2 - dark.g) * alpha;\n\t\t\tb2 = dark.b + (b2 - dark.b) * alpha;\n\t\t}\n\t\tdark.r = r2 < 0 ? 0 : (r2 > 1 ? 1 : r2);\n\t\tdark.g = g2 < 0 ? 0 : (g2 > 1 ? 1 : g2);\n\t\tdark.b = b2 < 0 ? 0 : (b2 > 1 ? 1 : b2);\n\t}\n}\n\n/** Changes {@link SlotPose.color} and {@link SlotPose.darkColor} for two color tinting. */\nexport class RGB2Timeline extends SlotCurveTimeline {\n\tconstructor (frameCount: number, bezierCount: number, slotIndex: number) {\n\t\tsuper(frameCount, bezierCount, slotIndex, //\n\t\t\t`${Property.rgb}|${slotIndex}`, //\n\t\t\t`${Property.rgb2}|${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\tprotected apply1 (slot: Slot, pose: SlotPose, time: number, alpha: number, fromSetup: boolean, add: boolean) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\tconst light = pose.color, dark = pose.darkColor!;\n\t\tlet r = 0, g = 0, b = 0, r2 = 0, g2 = 0, b2 = 0\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = slot.data.setupPose;\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\t\t\tconst setupLight = setup.color, setupDark = setup.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\treturn;\n\t\t}\n\n\t\tconst i = Timeline.search(frames, time, 7/*ENTRIES*/);\n\t\tconst curveType = this.curves[i / 7/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst 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\tconst 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\t}\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\tif (fromSetup) {\n\t\t\t\tconst setupPose = slot.data.setupPose;\n\t\t\t\tlet setup = setupPose.color;\n\t\t\t\tr = setup.r + (r - setup.r) * alpha;\n\t\t\t\tg = setup.g + (g - setup.g) * alpha;\n\t\t\t\tb = setup.b + (b - setup.b) * alpha;\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\t\t\tsetup = setupPose.darkColor!;\n\t\t\t\tr2 = setup.r + (r2 - setup.r) * alpha;\n\t\t\t\tg2 = setup.g + (g2 - setup.g) * alpha;\n\t\t\t\tb2 = setup.b + (b2 - setup.b) * alpha;\n\t\t\t} else {\n\t\t\t\tr = light.r + (r - light.r) * alpha;\n\t\t\t\tg = light.g + (g - light.g) * alpha;\n\t\t\t\tb = light.b + (b - light.b) * alpha;\n\t\t\t\tr2 = dark.r + (r2 - dark.r) * alpha;\n\t\t\t\tg2 = dark.g + (g2 - dark.g) * alpha;\n\t\t\t\tb2 = dark.b + (b2 - dark.b) * alpha;\n\t\t\t}\n\t\t}\n\t\tlight.r = r < 0 ? 0 : (r > 1 ? 1 : r);\n\t\tlight.g = g < 0 ? 0 : (g > 1 ? 1 : g);\n\t\tlight.b = b < 0 ? 0 : (b > 1 ? 1 : b);\n\t\tdark.r = r2 < 0 ? 0 : (r2 > 1 ? 1 : r2);\n\t\tdark.g = g2 < 0 ? 0 : (g2 > 1 ? 1 : g2);\n\t\tdark.b = b2 < 0 ? 0 : (b2 > 1 ? 1 : b2);\n\t}\n}\n\n/** Changes {@link SlotPose.ttachment}. */\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, `${Property.attachment}|${slotIndex}`);\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.attachmentNames = new Array<string>(frameCount);\n\t\tthis.instant = true;\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, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst slot = skeleton.slots[this.slotIndex];\n\t\tif (!slot.bone.active) return;\n\t\tconst pose = appliedPose ? slot.appliedPose : slot.pose;\n\n\t\tif (out || time < this.frames[0]) {\n\t\t\tif (fromSetup) this.setAttachment(skeleton, pose, slot.data.attachmentName);\n\t\t} else\n\t\t\tthis.setAttachment(skeleton, pose, this.attachmentNames[Timeline.search(this.frames, time)]);\n\t}\n\n\tsetAttachment (skeleton: Skeleton, pose: SlotPose, attachmentName: string | null) {\n\t\tpose.setAttachment(!attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName));\n\t}\n}\n\n/** Changes {@link SlotPose.deform} to deform a {@link VertexAttachment}. */\nexport class DeformTimeline extends CurveTimeline implements SlotTimeline {\n\treadonly slotIndex: number;\n\n\t/** The attachment that will be deformed.\n\t *\n\t * See {@link VertexAttachment.getTimelineAttachment}. */\n\treadonly attachment: 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, `${Property.deform}|${slotIndex}|${attachment.id}`);\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.attachment = attachment;\n\t\tthis.vertices = new Array<NumberArrayLike>(frameCount);\n\t\tthis.additive = true;\n\t}\n\n\tgetFrameCount () {\n\t\treturn this.frames.length;\n\t}\n\n\t/** Sets the time and vertices for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds.\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\tconst 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\tconst tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = cy2 * 0.03 - cy1 * 0.06;\n\t\tconst 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\tconst curves = this.curves;\n\t\tlet i = curves[frame];\n\t\tswitch (i) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst x = this.frames[frame];\n\t\t\t\treturn (time - x) / (this.frames[frame + this.getFrameEntries()] - x);\n\t\t\t}\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\tconst x = this.frames[frame];\n\t\t\treturn curves[i + 1] * (time - x) / (curves[i] - x);\n\t\t}\n\t\tconst 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\tconst 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\tconst 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, events: Event[] | null, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\t\tconst slots = skeleton.slots;\n\t\tif (!this.attachment.isTimelineActive(slots, this.slotIndex, appliedPose)) return;\n\t\tconst timelineSlots = this.attachment.timelineSlots;\n\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tthis.applyBeforeFirst(slots[this.slotIndex], appliedPose, fromSetup);\n\t\t\tfor (const slotIndex of timelineSlots)\n\t\t\t\tthis.applyBeforeFirst(slots[slotIndex], appliedPose, fromSetup);\n\t\t\treturn;\n\t\t}\n\n\t\tlet v1: NumberArrayLike, v2: NumberArrayLike | null;\n\t\tlet percent: number;\n\t\tif (time >= frames[frames.length - 1]) {\n\t\t\tpercent = 0;\n\t\t\tv1 = this.vertices[frames.length - 1];\n\t\t\tv2 = null;\n\t\t} else {\n\t\t\tconst frame = Timeline.search(frames, time);\n\t\t\tpercent = this.getCurvePercent(time, frame);\n\t\t\tv1 = this.vertices[frame];\n\t\t\tv2 = this.vertices[frame + 1];\n\t\t}\n\n\t\tconst vertexCount = this.vertices[0].length;\n\t\tthis.applyToSlot(slots[this.slotIndex], appliedPose, v1, v2, percent, vertexCount, alpha, fromSetup, add);\n\t\tfor (const slotIndex of timelineSlots)\n\t\t\tthis.applyToSlot(slots[slotIndex], appliedPose, v1, v2, percent, vertexCount, alpha, fromSetup, add);\n\t}\n\n\tprivate applyToSlot (slot: Slot, appliedPose: boolean, v1: NumberArrayLike, v2: NumberArrayLike | null, percent: number, vertexCount: number,\n\t\talpha: number, fromSetup: boolean, add: boolean) {\n\t\tif (!slot.bone.active) return;\n\t\tconst pose = appliedPose ? slot.appliedPose : slot.pose;\n\t\tif (pose.attachment === null || pose.attachment.timelineAttachment !== this.attachment) return;\n\n\t\tconst vertexAttachment = pose.attachment as VertexAttachment;\n\t\tconst deform = pose.deform;\n\t\tif (deform.length === 0) fromSetup = true;\n\t\tdeform.length = vertexCount;\n\n\t\tif (v2 === null) { // Time is after last frame.\n\t\t\tif (alpha === 1) {\n\t\t\t\tif (add && !fromSetup) {\n\t\t\t\t\tif (!vertexAttachment.bones) { // Unweighted vertex positions, no alpha.\n\t\t\t\t\t\tconst 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] += v1[i] - setupVertices[i];\n\t\t\t\t\t} else { // Weighted deform offsets, no alpha.\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\t\tdeform[i] += v1[i];\n\t\t\t\t\t}\n\t\t\t\t} else // Vertex positions or deform offsets, no alpha.\n\t\t\t\t\tUtils.arrayCopy(v1, 0, deform, 0, vertexCount);\n\t\t\t} else if (fromSetup) {\n\t\t\t\tif (!vertexAttachment.bones) { // Unweighted vertex positions, with alpha.\n\t\t\t\t\tconst setupVertices = vertexAttachment.vertices;\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tconst setup = setupVertices[i];\n\t\t\t\t\t\tdeform[i] = setup + (v1[i] - setup) * alpha;\n\t\t\t\t\t}\n\t\t\t\t} else { // Weighted deform offsets, with alpha.\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\tdeform[i] = v1[i] * alpha;\n\t\t\t\t}\n\t\t\t} else if (add) {\n\t\t\t\tif (!vertexAttachment.bones) { // Unweighted vertex positions, no alpha.\n\t\t\t\t\tconst setupVertices = vertexAttachment.vertices;\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\tdeform[i] += (v1[i] - setupVertices[i]) * alpha;\n\t\t\t\t} else { // Weighted deform offsets, alpha.\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\t\tdeform[i] += v1[i] * alpha;\n\t\t\t\t}\n\t\t\t} else { // Vertex positions or deform offsets, with alpha.\n\t\t\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\t\t\tdeform[i] += (v1[i] - deform[i]) * alpha;\n\t\t\t}\n\t\t} else { // Between frames.\n\t\t\tif (alpha === 1) {\n\t\t\t\tif (add && !fromSetup) {\n\t\t\t\t\tif (!vertexAttachment.bones) { // Unweighted vertex positions, no alpha.\n\t\t\t\t\t\tconst setupVertices = vertexAttachment.vertices;\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\t\tconst prev = v1[i];\n\t\t\t\t\t\t\tdeform[i] += prev + (v2[i] - prev) * percent - setupVertices[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t} else { // Weighted deform offsets, no alpha.\n\t\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\t\tconst prev = v1[i];\n\t\t\t\t\t\t\tdeform[i] += prev + (v2[i] - prev) * percent;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if (percent === 0)\n\t\t\t\t\tUtils.arrayCopy(v1, 0, deform, 0, vertexCount)\n\t\t\t\telse { // Vertex positions or deform offsets, no alpha.\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tconst prev = v1[i];\n\t\t\t\t\t\tdeform[i] = prev + (v2[i] - prev) * percent;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (fromSetup) {\n\t\t\t\tif (!vertexAttachment.bones) { // Unweighted vertex positions, with alpha.\n\t\t\t\t\tconst setupVertices = vertexAttachment.vertices;\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tconst prev = v1[i], setup = setupVertices[i];\n\t\t\t\t\t\tdeform[i] = setup + (prev + (v2[i] - prev) * percent - setup) * alpha;\n\t\t\t\t\t}\n\t\t\t\t} else { // Weighted deform offsets, with alpha.\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tconst prev = v1[i];\n\t\t\t\t\t\tdeform[i] = (prev + (v2[i] - prev) * percent) * alpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (add) {\n\t\t\t\tif (!vertexAttachment.bones) { // Unweighted vertex positions, with alpha.\n\t\t\t\t\tconst setupVertices = vertexAttachment.vertices;\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tconst prev = v1[i];\n\t\t\t\t\t\tdeform[i] += (prev + (v2[i] - prev) * percent - setupVertices[i]) * alpha;\n\t\t\t\t\t}\n\t\t\t\t} else { // Weighted deform offsets, with alpha.\n\t\t\t\t\tfor (let i = 0; i < vertexCount; i++) {\n\t\t\t\t\t\tconst prev = v1[i];\n\t\t\t\t\t\tdeform[i] += (prev + (v2[i] - prev) * percent) * alpha;\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\tconst prev = v1[i];\n\t\t\t\t\tdeform[i] += (prev + (v2[i] - prev) * percent - deform[i]) * alpha;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate applyBeforeFirst (slot: Slot, appliedPose: boolean, fromSetup: boolean) {\n\t\tif (!slot.bone.active) return;\n\t\tconst pose = appliedPose ? slot.appliedPose : slot.pose;\n\t\tif (pose.attachment == null || pose.attachment.timelineAttachment !== this.attachment) return;\n\t\tif (pose.deform.length === 0) fromSetup = true;\n\t\tif (fromSetup) pose.deform.length = 0;\n\t}\n}\n\n/** Changes {@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\treadonly slotIndex: number;\n\treadonly attachment: Attachment;\n\n\tconstructor (frameCount: number, slotIndex: number, attachment: Attachment) {\n\t\tsuper(frameCount, `${Property.sequence}|${slotIndex}|${(attachment as unknown as HasSequence).sequence.id}`);\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.attachment = attachment;\n\t\tthis.instant = true;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn SequenceTimeline.ENTRIES;\n\t}\n\n\tgetSlotIndex () {\n\t\treturn this.slotIndex;\n\t}\n\n\t/** The attachment for which the {@link SlotPose.sequenceIndex} will be set.\n\t *\n\t * See {@link VertexAttachment.timelineAttachment}. */\n\tgetAttachment () {\n\t\treturn this.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 `frameCount`, inclusive.\n\t * @param time Seconds between frames. */\n\tsetFrame (frame: number, time: number, mode: SequenceMode, index: number, delay: number) {\n\t\tconst 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, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\t\tconst slots = skeleton.slots;\n\t\tif (!this.attachment.isTimelineActive(slots, this.slotIndex, appliedPose)) return;\n\t\tconst timelineSlots = this.attachment.timelineSlots;\n\n\t\tconst frames = this.frames;\n\t\tif (out || time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tthis.setupPose(slots[this.slotIndex], appliedPose);\n\t\t\t\tfor (const slotIndex of timelineSlots)\n\t\t\t\t\tthis.setupPose(slots[slotIndex], appliedPose)\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst i = Timeline.search(frames, time, SequenceTimeline.ENTRIES);\n\t\tconst before = frames[i];\n\t\tconst modeAndIndex = frames[i + SequenceTimeline.MODE];\n\t\tconst delay = frames[i + SequenceTimeline.DELAY];\n\n\t\tthis.applyToSlot(slots[this.slotIndex], appliedPose, time, before, modeAndIndex, delay);\n\t\tfor (const slotIndex of timelineSlots)\n\t\t\tthis.applyToSlot(slots[slotIndex], appliedPose, time, before, modeAndIndex, delay);\n\t}\n\n\tprivate setupPose (slot: Slot, appliedPose: boolean) {\n\t\tif (!slot.bone.active) return;\n\t\tconst pose = appliedPose ? slot.appliedPose : slot.pose;\n\t\tif (pose.attachment === null || pose.attachment.timelineAttachment !== this.attachment) return;\n\t\tpose.sequenceIndex = -1;\n\t}\n\n\tprivate applyToSlot (slot: Slot, appliedPose: boolean, time: number, before: number, modeAndIndex: number, delay: number) {\n\t\tif (!slot.bone.active) return;\n\t\tconst pose = appliedPose ? slot.appliedPose : slot.pose;\n\t\tif (pose.attachment === null || pose.attachment.timelineAttachment !== this.attachment) return;\n\n\t\tlet index = modeAndIndex >> 4, count = (pose.attachment as unknown as HasSequence).sequence.regions.length;\n\t\tconst 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: index = Math.min(count - 1, index); break;\n\t\t\t\tcase SequenceMode.loop: index %= count; break;\n\t\t\t\tcase SequenceMode.pingpong: {\n\t\t\t\t\tconst 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: index = Math.max(count - 1 - index, 0); break;\n\t\t\t\tcase SequenceMode.loopReverse: index = count - 1 - (index % count); break;\n\t\t\t\tcase SequenceMode.pingpongReverse: {\n\t\t\t\t\tconst 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\tpose.sequenceIndex = index;\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\t\tthis.events = new Array<Event>(frameCount);\n\t\tthis.instant = true;\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 | null, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number,\n\t\tfromSetup: boolean, add: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tif (!firedEvents) return;\n\n\t\tconst frames = this.frames;\n\t\tconst frameCount = this.frames.length;\n\n\t\tif (lastTime > time) { // Apply after lastTime for looped animations.\n\t\t\tthis.apply(null, lastTime, Number.MAX_VALUE, firedEvents, 0, false, false, false, false);\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;\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.search(frames, lastTime) + 1;\n\t\t\tconst 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 the {@link Skeleton.getDrawOrder}. */\nexport class DrawOrderTimeline extends Timeline {\n\tstatic readonly propertyID = `${Property.drawOrder}`;\n\tstatic propertyIds = [DrawOrderTimeline.propertyID];\n\n\t/** The draw order for each key frame. See {@link setFrame}. */\n\tprivate readonly drawOrders: 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\tthis.instant = true;\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 Ordered {@link Skeleton.slots} indices, or 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,\n\t\tfromSetup: boolean, add: boolean, out: boolean, appliedPose: boolean) {\n\t\tconst pose = (appliedPose ? skeleton.drawOrder.appliedPose : skeleton.drawOrder.pose);\n\t\tconst setup = skeleton.slots;\n\t\tif (out || time < this.frames[0]) {\n\t\t\tif (fromSetup) Utils.arrayCopy(setup, 0, pose, 0, skeleton.slots.length);\n\t\t\treturn;\n\t\t}\n\n\t\tconst order = this.drawOrders[Timeline.search(this.frames, time)];\n\t\tif (!order)\n\t\t\tUtils.arrayCopy(setup, 0, pose, 0, skeleton.slots.length);\n\t\telse {\n\t\t\tfor (let i = 0, n = order.length; i < n; i++)\n\t\t\t\tpose[i] = setup[order[i]];\n\t\t}\n\t}\n}\n\n/** Changes a subset of the {@link Skeleton.getDrawOrder | draw order}. */\nexport class DrawOrderFolderTimeline extends Timeline {\n\tprivate readonly slots: number[];\n\tprivate readonly inFolder: boolean[];\n\tprivate readonly drawOrders: Array<Array<number> | null>;\n\n\t/** @param slots {@link Skeleton.slots} indices controlled by this timeline, in setup order.\n\t * @param slotCount The maximum number of slots in the skeleton. */\n\tconstructor (frameCount: number, slots: number[], slotCount: number) {\n\t\tsuper(frameCount, ...DrawOrderFolderTimeline.propertyIds(slots));\n\t\tthis.slots = slots;\n\t\tthis.drawOrders = new Array(frameCount);\n\t\tthis.inFolder = new Array(slotCount);\n\t\tfor (const i of slots)\n\t\t\tthis.inFolder[i] = true;\n\t\tthis.instant = true;\n\t}\n\n\tprivate static propertyIds (slots: number[]): string[] {\n\t\tconst n = slots.length;\n\t\tconst ids = new Array(n);\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tids[i] = `d${slots[i]}`;\n\t\treturn ids;\n\t}\n\n\tgetFrameCount (): number {\n\t\treturn this.frames.length;\n\t}\n\n\t/** The {@link Skeleton.getSlots} indices that this timeline affects, in setup order. */\n\tgetSlots (): number[] {\n\t\treturn this.slots;\n\t}\n\n\t/** The draw order for each frame. See {@link setFrame}. */\n\tgetDrawOrders (): Array<Array<number> | null> {\n\t\treturn this.drawOrders;\n\t}\n\n\t/** Sets the time and draw order for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds.\n\t * @param drawOrder Ordered {@link getSlots} indices, or null to use setup pose order. */\n\tsetFrame (frame: number, time: number, drawOrder: Array<number> | null): void {\n\t\tthis.frames[frame] = time;\n\t\tthis.drawOrders[frame] = drawOrder;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, events: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean): void {\n\t\tconst pose = (appliedPose ? skeleton.drawOrder.appliedPose : skeleton.drawOrder.pose);\n\t\tconst setup = skeleton.slots;\n\t\tif (out || time < this.frames[0]) {\n\t\t\tif (fromSetup) this.setup(pose, setup);\n\t\t} else {\n\t\t\tconst order = this.drawOrders[Timeline.search(this.frames, time)];\n\t\t\tif (!order)\n\t\t\t\tthis.setup(pose, setup);\n\t\t\telse {\n\t\t\t\tconst inFolder = this.inFolder;\n\t\t\t\tconst slots = this.slots;\n\t\t\t\tfor (let i = 0, found = 0, done = slots.length; ; i++) {\n\t\t\t\t\tif (inFolder[pose[i].data.index]) {\n\t\t\t\t\t\tpose[i] = setup[slots[order[found]]];\n\t\t\t\t\t\tif (++found === done) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate setup (pose: Slot[], setup: Slot[]): void {\n\t\tconst { inFolder, slots } = this;\n\t\tfor (let i = 0, found = 0, done = slots.length; ; i++) {\n\t\t\tif (inFolder[pose[i].data.index]) {\n\t\t\t\tpose[i] = setup[slots[found]];\n\t\t\t\tif (++found === done) break;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport interface ConstraintTimeline {\n\t/** The index of the constraint in {@link Skeleton.constraints} that will be changed when this timeline is applied, or -1 if\n\t * a specific constraint will not be changed. */\n\treadonly constraintIndex: number;\n}\n\nexport function isConstraintTimeline (obj: Timeline & Partial<ConstraintTimeline>): obj is Timeline & ConstraintTimeline {\n\treturn typeof obj === 'object' && obj !== null && typeof obj.constraintIndex === 'number';\n}\n\n/** Changes {@link IkConstraintPose.mix)}, {@link IkConstraintPose.softness},\n * {@link IkConstraintPose.bendDirection}, {@link IkConstraintPose.stretch}, and\n * {@link IkConstraintPose.compress}. */\nexport class IkConstraintTimeline extends CurveTimeline implements ConstraintTimeline {\n\treadonly constraintIndex: number = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, `${Property.ikConstraint}|${constraintIndex}`);\n\t\tthis.constraintIndex = constraintIndex;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 6/*ENTRIES*/;\n\t}\n\n\t/** Sets the time, mix, softness, bend direction, compress, and stretch for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds.\n\t * @param bendDirection 1 or -1. */\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, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as IkConstraint;\n\t\tif (!constraint.active) return;\n\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = constraint.data.setupPose;\n\t\t\t\tpose.mix = setup.mix;\n\t\t\t\tpose.softness = setup.softness;\n\t\t\t\tpose.bendDirection = setup.bendDirection;\n\t\t\t\tpose.compress = setup.compress;\n\t\t\t\tpose.stretch = setup.stretch;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet mix = 0, softness = 0;\n\t\tconst i = Timeline.search(frames, time, 6/*ENTRIES*/)\n\t\tconst curveType = this.curves[i / 6/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst 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\tconst 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\t}\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\tconst base = fromSetup ? constraint.data.setupPose : pose;\n\t\tpose.mix = base.mix + (mix - base.mix) * alpha;\n\t\tpose.softness = base.softness + (softness - base.softness) * alpha;\n\t\tif (out) {\n\t\t\tif (fromSetup) {\n\t\t\t\tpose.bendDirection = base.bendDirection;\n\t\t\t\tpose.compress = base.compress;\n\t\t\t\tpose.stretch = base.stretch;\n\t\t\t}\n\t\t} else {\n\t\t\tpose.bendDirection = frames[i + 3/*BEND_DIRECTION*/];\n\t\t\tpose.compress = frames[i + 4/*COMPRESS*/] !== 0;\n\t\t\tpose.stretch = frames[i + 5/*STRETCH*/] !== 0;\n\t\t}\n\t}\n}\n\n/** Changes {@link TransformConstraintPose.mixRotate}, {@link TransformConstraintPose.mixX},\n * {@link TransformConstraintPose.mixY}, {@link TransformConstraintPose.mixScaleX},\n * {@link TransformConstraintPose.mixScaleY}, and {@link TransformConstraintPose.mixShearY}. */\nexport class TransformConstraintTimeline extends CurveTimeline implements ConstraintTimeline {\n\t/** The index of the transform constraint slot in {@link Skeleton.transformConstraints} that will be changed. */\n\tconstraintIndex: number = 0;\n\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, `${Property.transformConstraint}|${constraintIndex}`);\n\t\tthis.constraintIndex = constraintIndex;\n\t\tthis.additive = true;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 7/*ENTRIES*/;\n\t}\n\n\t/** Sets the time, rotate mix, translate mix, scale mix, and shear mix for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds. */\n\tsetFrame (frame: number, time: number, mixRotate: number, mixX: number, mixY: number, mixScaleX: number, mixScaleY: number,\n\t\tmixShearY: number) {\n\t\tconst 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, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as TransformConstraint;\n\t\tif (!constraint.active) return;\n\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = constraint.data.setupPose;\n\t\t\t\tpose.mixRotate = setup.mixRotate;\n\t\t\t\tpose.mixX = setup.mixX;\n\t\t\t\tpose.mixY = setup.mixY;\n\t\t\t\tpose.mixScaleX = setup.mixScaleX;\n\t\t\t\tpose.mixScaleY = setup.mixScaleY;\n\t\t\t\tpose.mixShearY = setup.mixShearY;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet rotate: number, x: number, y: number, scaleX: number, scaleY: number, shearY: number;\n\t\tconst i = Timeline.search(frames, time, 7/*ENTRIES*/);\n\t\tconst curveType = this.curves[i / 7/*ENTRIES*/];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst 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\tconst 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\t}\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\tconst base = fromSetup ? constraint.data.setupPose : pose;\n\t\tif (add) {\n\t\t\tpose.mixRotate = base.mixRotate + rotate * alpha;\n\t\t\tpose.mixX = base.mixX + x * alpha;\n\t\t\tpose.mixY = base.mixY + y * alpha;\n\t\t\tpose.mixScaleX = base.mixScaleX + scaleX * alpha;\n\t\t\tpose.mixScaleY = base.mixScaleY + scaleY * alpha;\n\t\t\tpose.mixShearY = base.mixShearY + shearY * alpha;\n\t\t} else {\n\t\t\tpose.mixRotate = base.mixRotate + (rotate - base.mixRotate) * alpha;\n\t\t\tpose.mixX = base.mixX + (x - base.mixX) * alpha;\n\t\t\tpose.mixY = base.mixY + (y - base.mixY) * alpha;\n\t\t\tpose.mixScaleX = base.mixScaleX + (scaleX - base.mixScaleX) * alpha;\n\t\t\tpose.mixScaleY = base.mixScaleY + (scaleY - base.mixScaleY) * alpha;\n\t\t\tpose.mixShearY = base.mixShearY + (shearY - base.mixShearY) * alpha;\n\t\t}\n\t}\n}\n\n/** The base class for timelines that change 1 constraint property with a curve. */\nexport abstract class ConstraintTimeline1 extends CurveTimeline1 implements ConstraintTimeline {\n\treadonly constraintIndex: number;\n\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number, property: Property) {\n\t\tsuper(frameCount, bezierCount, `${property}|${constraintIndex}`);\n\t\tthis.constraintIndex = constraintIndex;\n\t}\n}\n\n/** Changes {@link PathConstraintPose.position}. */\nexport class PathConstraintPositionTimeline extends ConstraintTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.pathConstraintPosition);\n\t\tthis.additive = true;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as PathConstraint;\n\t\tif (constraint.active) {\n\t\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\t\t\tpose.position = this.getAbsoluteValue(time, alpha, fromSetup, add, pose.position, constraint.data.setupPose.position);\n\t\t}\n\t}\n}\n\n/** Changes {@link PathConstraintPose.spacing}. */\nexport class PathConstraintSpacingTimeline extends ConstraintTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.pathConstraintSpacing);\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as PathConstraint;\n\t\tif (constraint.active) {\n\t\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\t\t\tpose.spacing = this.getAbsoluteValue(time, alpha, fromSetup, false, pose.spacing,\n\t\t\t\tconstraint.data.setupPose.spacing);\n\t\t}\n\t}\n}\n\n/** Changes {@link PathConstraint.mixRotate}, {@link PathConstraint.mixX}, and\n * {@link PathConstraint.mixY}. */\nexport class PathConstraintMixTimeline extends CurveTimeline implements ConstraintTimeline {\n\treadonly constraintIndex: number;\n\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, `${Property.pathConstraintMix}|${constraintIndex}`);\n\t\tthis.constraintIndex = constraintIndex;\n\t}\n\n\tgetFrameEntries () {\n\t\treturn 4/*ENTRIES*/;\n\t}\n\n\t/** Sets the time and color for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive.\n\t * @param time The frame time in seconds. */\n\tsetFrame (frame: number, time: number, mixRotate: number, mixX: number, mixY: number) {\n\t\tconst 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, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as PathConstraint;\n\t\tif (!constraint.active) return;\n\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\n\t\tconst frames = this.frames;\n\t\tif (time < frames[0]) {\n\t\t\tif (fromSetup) {\n\t\t\t\tconst setup = constraint.data.setupPose;\n\t\t\t\tpose.mixRotate = setup.mixRotate;\n\t\t\t\tpose.mixX = setup.mixX;\n\t\t\t\tpose.mixY = setup.mixY;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tlet rotate: number, x: number, y: number;\n\t\tconst i = Timeline.search(frames, time, 4/*ENTRIES*/);\n\t\tconst curveType = this.curves[i >> 2];\n\t\tswitch (curveType) {\n\t\t\tcase 0/*LINEAR*/: {\n\t\t\t\tconst 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\tconst 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\t}\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\tconst base = fromSetup ? constraint.data.setupPose : pose;\n\t\tif (add) {\n\t\t\tpose.mixRotate = base.mixRotate + rotate * alpha;\n\t\t\tpose.mixX = base.mixX + x * alpha;\n\t\t\tpose.mixY = base.mixY + y * alpha;\n\t\t} else {\n\t\t\tpose.mixRotate = base.mixRotate + (rotate - base.mixRotate) * alpha;\n\t\t\tpose.mixX = base.mixX + (x - base.mixX) * alpha;\n\t\t\tpose.mixY = base.mixY + (y - base.mixY) * alpha;\n\t\t}\n\t}\n}\n\n/** The base class for most {@link PhysicsConstraint} timelines. */\nexport abstract class PhysicsConstraintTimeline extends ConstraintTimeline1 {\n\t/** @param constraintIndex -1 for all physics constraints in the skeleton. */\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number, property: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, property);\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tif (add && !this.additive) add = false;\n\t\tif (this.constraintIndex === -1) {\n\t\t\tconst value = time >= this.frames[0] ? this.getCurveValue(time) : 0;\n\t\t\tconst constraints = skeleton.physics;\n\t\t\tfor (const constraint of constraints) {\n\t\t\t\tif (constraint.active && this.global(constraint.data)) {\n\t\t\t\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\t\t\t\t\tthis.set(pose, this.getAbsoluteValue(time, alpha, fromSetup, add, this.get(pose), this.get(constraint.data.setupPose), value));\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst constraint = skeleton.constraints[this.constraintIndex] as PhysicsConstraint;\n\t\t\tif (constraint.active) {\n\t\t\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\t\t\t\tthis.set(pose, this.getAbsoluteValue(time, alpha, fromSetup, add, this.get(pose), this.get(constraint.data.setupPose)));\n\t\t\t}\n\t\t}\n\t}\n\n\tabstract get (pose: PhysicsConstraintPose): number;\n\n\tabstract set (pose: PhysicsConstraintPose, value: number): void;\n\n\tabstract global (constraint: PhysicsConstraintData): boolean;\n}\n\n/** Changes {@link PhysicsConstraintPose.inertia}. */\nexport class PhysicsConstraintInertiaTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintInertia);\n\t}\n\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn pose.inertia;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.inertia = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.inertiaGlobal;\n\t}\n}\n\n/** Changes {@link PhysicsConstraintPose.strength}. */\nexport class PhysicsConstraintStrengthTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintStrength);\n\t}\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn pose.strength;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.strength = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.strengthGlobal;\n\t}\n}\n\n/** Changes {@link PhysicsConstraintPose.damping}. */\nexport class PhysicsConstraintDampingTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintDamping);\n\t}\n\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn pose.damping;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.damping = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.dampingGlobal;\n\t}\n}\n\n/** Changes {@link PhysicsConstraintPose.massInverse}. The timeline values are not inverted. */\nexport class PhysicsConstraintMassTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintMass);\n\t}\n\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn 1 / pose.massInverse;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.massInverse = 1 / value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.massGlobal;\n\t}\n}\n\n/** Changes {@link PhysicsConstraintPose.wind}. */\nexport class PhysicsConstraintWindTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintWind);\n\t\tthis.additive = true;\n\t}\n\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn pose.wind;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.wind = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.windGlobal;\n\t}\n}\n\n/** Changes {@link PhysicsConstraintPose.gravity}. */\nexport class PhysicsConstraintGravityTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintGravity);\n\t\tthis.additive = true;\n\t}\n\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn pose.gravity;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.gravity = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.gravityGlobal;\n\t}\n}\n\n/** Changes {@link PhysicsConstraintPose.mix}. */\nexport class PhysicsConstraintMixTimeline extends PhysicsConstraintTimeline {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.physicsConstraintMix);\n\t}\n\n\tget (pose: PhysicsConstraintPose): number {\n\t\treturn pose.mix;\n\t}\n\n\tset (pose: PhysicsConstraintPose, value: number): void {\n\t\tpose.mix = value;\n\t}\n\n\tglobal (constraint: PhysicsConstraintData): boolean {\n\t\treturn constraint.mixGlobal;\n\t}\n}\n\n/** Resets a physics constraint when specific animation times are reached. */\nexport class PhysicsConstraintResetTimeline extends Timeline implements ConstraintTimeline {\n\tprivate static propertyIds: string[] = [Property.physicsConstraintReset.toString()];\n\n\t/** The index of the physics constraint in {@link Skeleton.contraints} that will be reset when this timeline is\n\t* applied, or -1 if all physics constraints in the skeleton will be reset. */\n\treadonly constraintIndex: number;\n\n\t/** @param constraintIndex -1 for all physics constraints in the skeleton. */\n\tconstructor (frameCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, ...PhysicsConstraintResetTimeline.propertyIds);\n\t\tthis.constraintIndex = constraintIndex;\n\t\tthis.instant = true;\n\t}\n\n\tgetFrameCount () {\n\t\treturn this.frames.length;\n\t}\n\n\t/** Sets the time for the specified frame.\n\t * @param frame Between 0 and `frameCount`, inclusive. */\n\tsetFrame (frame: number, time: number) {\n\t\tthis.frames[frame] = time;\n\t}\n\n\t/** Resets the physics constraint when frames > `lastTime` and <= `time`. */\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tlet constraint: PhysicsConstraint | undefined;\n\t\tif (this.constraintIndex !== -1) {\n\t\t\tconstraint = skeleton.constraints[this.constraintIndex] as PhysicsConstraint;\n\t\t\tif (!constraint.active) return;\n\t\t}\n\n\t\tconst frames = this.frames;\n\n\t\tif (lastTime > time) { // Apply after lastTime for looped animations.\n\t\t\tthis.apply(skeleton, lastTime, Number.MAX_VALUE, [], alpha, false, false, false, false);\n\t\t\tlastTime = -1;\n\t\t} else if (lastTime >= frames[frames.length - 1]) // Last time is after last frame.\n\t\t\treturn;\n\t\tif (time < frames[0]) return;\n\n\t\tif (lastTime < frames[0] || time >= frames[Timeline.search(frames, lastTime) + 1]) {\n\t\t\tif (constraint != null)\n\t\t\t\tconstraint.reset(skeleton);\n\t\t\telse {\n\t\t\t\tfor (const constraint of skeleton.physics) {\n\t\t\t\t\tif (constraint.active) constraint.reset(skeleton);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** Changes {@link SliderPose.time}. */\nexport class SliderTimeline extends ConstraintTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.sliderTime);\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as Slider;\n\t\tif (constraint.active) {\n\t\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\t\t\tpose.time = this.getAbsoluteValue(time, alpha, fromSetup, add, pose.time, constraint.data.setupPose.time);\n\t\t}\n\t}\n}\n\n/** Changes {@link SliderPose.mix}. */\nexport class SliderMixTimeline extends ConstraintTimeline1 {\n\tconstructor (frameCount: number, bezierCount: number, constraintIndex: number) {\n\t\tsuper(frameCount, bezierCount, constraintIndex, Property.sliderMix);\n\t\tthis.additive = true;\n\t}\n\n\tapply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array<Event>, alpha: number, fromSetup: boolean,\n\t\tadd: boolean, out: boolean, appliedPose: boolean) {\n\n\t\tconst constraint = skeleton.constraints[this.constraintIndex] as Slider;\n\t\tif (constraint.active) {\n\t\t\tconst pose = appliedPose ? constraint.appliedPose : constraint.pose;\n\t\t\tpose.mix = this.getAbsoluteValue(time, alpha, fromSetup, add, pose.mix, constraint.data.setupPose.mix);\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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/** biome-ignore-all lint/style/noNonNullAssertion: reference runtime expects some nullable to not be null */\n\nimport { Animation, AttachmentTimeline, DrawOrderFolderTimeline, DrawOrderTimeline, EventTimeline, RotateTimeline, Timeline } from \"./Animation.js\";\nimport type { AnimationStateData } from \"./AnimationStateData.js\";\nimport type { Event } from \"./Event.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Slot } from \"./Slot.js\";\nimport { Interpolation, MathUtils, Pool, StringSet, Utils } from \"./Utils.js\";\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#AnimationState-API) in the Spine Runtimes Guide. */\nexport class AnimationState {\n\tstatic readonly emptyAnimation = new Animation(\"<empty>\", [], 0);\n\n\t/** The AnimationStateData to look up mix durations. */\n\tdata: AnimationStateData;\n\n\t/** The list of tracks that have had animations. May contain null entries for tracks that currently have no animation. */\n\treadonly tracks = [] as (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 {@link TrackEntry.timeScale} to affect a single animation. */\n\ttimeScale = 1;\n\tunkeyedState = 0;\n\n\treadonly events = [] as Event[];\n\treadonly listeners = [] as 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\tconst tracks = this.tracks;\n\t\tfor (let i = 0, n = tracks.length; i < n; i++) {\n\t\t\tconst 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\tconst 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.setTrack(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\tconst from = to.mixingFrom;\n\t\tif (!from) return true;\n\n\t\tconst finished = this.updateMixingFrom(from, delta);\n\n\t\tfrom.animationLast = from.nextAnimationLast;\n\t\tfrom.trackLast = from.nextTrackLast;\n\n\t\t// The from entry was applied at least once and the mix is complete.\n\t\tif (to.nextTrackLast !== -1 && to.mixTime >= to.mixDuration) {\n\t\t\t// Mixing is complete for all entries before the from entry or the mix is instantaneous.\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 != null) from.mixingFrom.mixingTo = to;\n\t\t\t\tif (from.totalAlpha === 0) {\n\t\t\t\t\tfor (let next = to; next.mixingTo != null; next = next.mixingTo)\n\t\t\t\t\t\tnext.keepHold = true;\n\t\t\t\t}\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. The animation state is not changed, so can be applied to multiple\n\t * 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\tconst events = this.events;\n\t\tconst tracks = this.tracks;\n\t\tlet applied = false;\n\n\t\tfor (let i = 0, n = tracks.length; i < n; i++) {\n\t\t\tconst current = tracks[i];\n\t\t\tif (!current || current.delay > 0) continue;\n\t\t\tapplied = true;\n\n\t\t\t// Apply mixing from entries first.\n\t\t\tlet alpha = current.alpha;\n\t\t\tif (current.mixingFrom)\n\t\t\t\talpha *= this.applyMixingFrom(current, skeleton);\n\t\t\telse if (current.trackTime >= current.trackEnd && !current.next)\n\t\t\t\talpha = 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\tconst timelines = current.animation!.timelines;\n\t\t\tconst timelineCount = timelines.length;\n\t\t\tif ((i === 0 && alpha === 1)) {\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(alpha);\n\t\t\t\t\tconst timeline = timelines[ii];\n\t\t\t\t\tif (timeline instanceof AttachmentTimeline)\n\t\t\t\t\t\tthis.applyAttachmentTimeline(timeline, skeleton, applyTime, true, true);\n\t\t\t\t\telse\n\t\t\t\t\t\ttimeline.apply(skeleton, animationLast, applyTime, applyEvents, alpha, true, false, false, false);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst timelineMode = current.timelineMode;\n\t\t\t\tconst retainAttachments = alpha >= current.alphaAttachmentThreshold;\n\t\t\t\tconst add = current.additive, shortestRotation = add || current.shortestRotation;\n\t\t\t\tconst 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\tconst timeline = timelines[ii];\n\t\t\t\t\tconst fromSetup = (timelineMode[ii] & FIRST) !== 0;\n\t\t\t\t\tif (!shortestRotation && timeline instanceof RotateTimeline) {\n\t\t\t\t\t\tthis.applyRotateTimeline(timeline, skeleton, applyTime, alpha, fromSetup, 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, fromSetup, retainAttachments);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// This fixes the WebKit 602 specific issue described at https://esotericsoftware.com/forum/d/10109-ios-10-disappearing-graphics\n\t\t\t\t\t\tUtils.webkit602BugfixHelper(alpha);\n\t\t\t\t\t\ttimeline.apply(skeleton, animationLast, applyTime, applyEvents, alpha, fromSetup, add, false, false);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (current.reverse) this.eventsReverse(current, animationLast, animationTime);\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 slot attachments to the setup pose if they were set temporarily to apply deform timelines.\n\t\tconst setupState = this.unkeyedState + SETUP;\n\t\tconst slots = skeleton.slots;\n\t\tfor (let i = 0, n = skeleton.slots.length; i < n; i++) {\n\t\t\tconst slot = slots[i];\n\t\t\tif (slot.attachmentState === setupState) {\n\t\t\t\tconst attachmentName = slot.data.attachmentName;\n\t\t\t\tslot.pose.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName));\n\t\t\t}\n\t\t}\n\t\tthis.unkeyedState += 2; // Reset.\n\n\t\tthis.queue.drain();\n\t\treturn applied;\n\t}\n\n\tapplyMixingFrom (to: TrackEntry, skeleton: Skeleton) {\n\t\tconst from = to.mixingFrom!;\n\t\tconst fromMix = from.mixingFrom !== null ? this.applyMixingFrom(from, skeleton) : 1;\n\t\tconst mix = to.mix();\n\n\t\tconst a = from.alpha * fromMix, keep = 1 - mix * to.alpha;\n\t\tconst alphaMix = a * (1 - mix), alphaHold = keep > 0 ? alphaMix / keep : a;\n\n\t\tconst timelines = from.animation!.timelines;\n\t\tconst timelineCount = timelines.length;\n\t\tconst timelineMode = from.timelineMode;\n\t\tconst timelineHoldMix = from.timelineHoldMix;\n\n\t\tconst retainAttachments = mix < from.mixAttachmentThreshold, drawOrder = mix < from.mixDrawOrderThreshold;\n\t\tconst add = from.additive, shortestRotation = add || from.shortestRotation;\n\t\tconst firstFrame = !shortestRotation && from.timelinesRotation.length !== timelineCount << 1;\n\t\tif (firstFrame) from.timelinesRotation.length = timelineCount << 1;\n\t\tconst timelinesRotation = from.timelinesRotation;\n\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\tfrom.totalAlpha = 0;\n\n\t\tfor (let i = 0; i < timelineCount; i++) {\n\t\t\tconst timeline = timelines[i];\n\t\t\tconst mode = timelineMode[i];\n\t\t\tlet alpha = 0;\n\t\t\tif ((mode & HOLD) !== 0) {\n\t\t\t\tconst holdMix = timelineHoldMix[i];\n\t\t\t\talpha = holdMix == null ? alphaHold : alphaHold * (1 - holdMix.mix());\n\t\t\t} else {\n\t\t\t\tif (!drawOrder && timeline instanceof DrawOrderTimeline) continue;\n\t\t\t\talpha = alphaMix;\n\t\t\t}\n\t\t\tfrom.totalAlpha += alpha;\n\t\t\tconst fromSetup = (mode & FIRST) !== 0;\n\t\t\tif (!shortestRotation && timeline instanceof RotateTimeline) {\n\t\t\t\tthis.applyRotateTimeline(timeline, skeleton, applyTime, alpha, fromSetup, timelinesRotation, i << 1, firstFrame);\n\t\t\t} else if (timeline instanceof AttachmentTimeline)\n\t\t\t\tthis.applyAttachmentTimeline(timeline, skeleton, applyTime, fromSetup,\n\t\t\t\t\tretainAttachments && alpha >= from.alphaAttachmentThreshold);\n\t\t\telse {\n\t\t\t\tconst out = !drawOrder || !(timeline instanceof DrawOrderTimeline) || !fromSetup;\n\t\t\t\ttimeline.apply(skeleton, animationLast, applyTime, events, alpha, fromSetup, add, out, false);\n\t\t\t}\n\t\t}\n\n\t\tif (from.reverse && mix < from.eventThreshold) this.eventsReverse(from, animationLast, animationTime);\n\t\tif (to.mixDuration > 0) this.queueEvents(from, animationTime);\n\t\tthis.events.length = 0;\n\n\t\tfrom.nextAnimationLast = animationTime;\n\t\tfrom.nextTrackLast = from.trackTime;\n\t\treturn mix;\n\t}\n\n\t/** Applies the attachment timeline and sets {@link Slot.attachmentState}.\n\t * @param retain True if the attachment remains after apply, false if temporary for deform timelines. */\n\tapplyAttachmentTimeline (timeline: AttachmentTimeline, skeleton: Skeleton, time: number, fromSetup: boolean, retain: boolean) {\n\t\tconst slot = skeleton.slots[timeline.slotIndex];\n\t\tif (!slot.bone.active) return;\n\t\tif (!retain && slot.attachmentState === this.unkeyedState + RETAIN) return;\n\n\t\tlet setup = time < timeline.frames[0];\n\t\tlet name = null;\n\t\tif (!setup) {\n\t\t\tname = timeline.attachmentNames[Timeline.search(timeline.frames, time)];\n\t\t\tsetup = !retain && name == null;\n\t\t}\n\t\tif (setup) {\n\t\t\tif (!fromSetup) return;\n\t\t\tname = slot.data.attachmentName;\n\t\t}\n\t\tslot.pose.setAttachment(name == null ? null : skeleton.getAttachment(slot.data.index, name));\n\t\tif (retain)\n\t\t\tslot.attachmentState = this.unkeyedState + RETAIN;\n\t\telse if (!setup) //\n\t\t\tslot.attachmentState = this.unkeyedState + SETUP;\n\t}\n\n\t/** Applies the rotate timeline, mixing with the current pose while keeping the same rotation direction chosen as the shortest\n\t * the first time the mixing was applied. */\n\tapplyRotateTimeline (timeline: RotateTimeline, skeleton: Skeleton, time: number, alpha: number, fromSetup: boolean,\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, fromSetup, false, false, false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst bone = skeleton.bones[timeline.boneIndex];\n\t\tif (!bone.active) return;\n\t\tconst pose = bone.pose, setup = bone.data.setupPose;\n\t\tconst frames = timeline.frames;\n\t\tif (time < frames[0]) { // Time is before first frame.\n\t\t\tif (fromSetup) pose.rotation = setup.rotation;\n\t\t\treturn;\n\t\t}\n\t\tconst r1 = fromSetup ? setup.rotation : pose.rotation;\n\t\tconst r2 = setup.rotation + timeline.getCurveValue(time);\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 -= Math.ceil(diff / 360 - 0.5) * 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];\n\t\t\t\tlastDiff = timelinesRotation[i + 1];\n\t\t\t}\n\t\t\tconst loops = lastTotal - lastTotal % 360;\n\t\t\ttotal = diff + loops;\n\t\t\tlet current = diff >= 0, dir = lastTotal >= 0;\n\t\t\tif (Math.abs(lastDiff) <= 90 && MathUtils.signum(lastDiff) !== MathUtils.signum(diff)) {\n\t\t\t\tif (Math.abs(lastTotal - loops) > 180) {\n\t\t\t\t\ttotal += 360 * MathUtils.signum(lastTotal);\n\t\t\t\t\tdir = current;\n\t\t\t\t} else if (loops !== 0)\n\t\t\t\t\ttotal -= 360 * MathUtils.signum(lastTotal);\n\t\t\t\telse\n\t\t\t\t\tdir = current;\n\t\t\t}\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\tpose.rotation = r1 + total * alpha;\n\t}\n\n\tqueueEvents (entry: TrackEntry, animationTime: number) {\n\t\tconst animationStart = entry.animationStart, animationEnd = entry.animationEnd, duration = animationEnd - animationStart;\n\t\tconst reverse = entry.reverse;\n\t\tlet split = entry.trackLast % duration;\n\t\tif (reverse) split = duration - split;\n\n\t\t// Queue events before complete.\n\t\tconst events = this.events;\n\t\tlet i = 0, n = events.length;\n\t\tfor (; i < n; i++) {\n\t\t\tconst event = events[i];\n\t\t\tif ((event.time < split) !== reverse) break; // java: if (event.time < split ^ reverse) break;\n\t\t\tif (event.time >= animationStart && event.time <= animationEnd) this.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\tif (duration === 0)\n\t\t\t\tcomplete = true;\n\t\t\telse {\n\t\t\t\tconst cycles = Math.floor(entry.trackTime / duration);\n\t\t\t\tcomplete = cycles > 0 && cycles > Math.floor(entry.trackLast / duration);\n\t\t\t}\n\t\t} else\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\tconst event = events[i];\n\t\t\tif (event.time >= animationStart && event.time <= animationEnd) this.queue.event(entry, event);\n\t\t}\n\t}\n\n\tprivate eventsReverse (entry: TrackEntry, animationLast: number, animationTime: number) {\n\t\tconst duration = entry.animation!.duration, from = duration - animationLast, to = duration - animationTime;\n\t\tconst timelines = entry.animation!.timelines;\n\t\tfor (let i = 0, n = entry.animation!.timelines.length; i < n; i++) {\n\t\t\tconst eventTimeline = timelines[i];\n\t\t\tif (!(eventTimeline instanceof EventTimeline)) continue;\n\t\t\tconst timelineEvents = eventTimeline.events;\n\t\t\tconst frames = eventTimeline.frames;\n\t\t\tconst frameCount = frames.length;\n\t\t\tif (from >= to) { // from -> to\n\t\t\t\tfor (let ii = 0; ii < frameCount; ii++) {\n\t\t\t\t\tif (frames[ii] < to) continue;\n\t\t\t\t\tif (frames[ii] >= from) break;\n\t\t\t\t\tthis.events.push(timelineEvents[ii]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (let ii = 0; ii < frameCount; ii++) { // from -> 0\n\t\t\t\t\tif (frames[ii] >= from) break;\n\t\t\t\t\tthis.events.push(timelineEvents[ii]);\n\t\t\t\t}\n\t\t\t\tlet ii = 0; // end -> to\n\t\t\t\tfor (; ii < frameCount; ii++)\n\t\t\t\t\tif (frames[ii] >= to) break;\n\t\t\t\tfor (; ii < frameCount; ii++)\n\t\t\t\t\tthis.events.push(timelineEvents[ii]);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Removes all animations from all tracks, leaving skeletons in their current pose.\n\t *\n\t * Usually you want to use {@link setEmptyAnimations} to mix the skeletons back to the setup pose, rather than leaving\n\t * them in their current pose. */\n\tclearTracks () {\n\t\tconst 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 * Usually you want to use {@link setEmptyAnimation} to mix the skeletons back to the setup pose, rather than\n\t * leaving them in their current pose. */\n\tclearTrack (trackIndex: number) {\n\t\tif (trackIndex < 0) throw new Error(\"trackIndex must be >= 0.\");\n\t\tif (trackIndex >= this.tracks.length) return;\n\t\tconst 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\tconst 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\tsetTrack (index: number, current: TrackEntry, interrupt: boolean) {\n\t\tconst from = this.expandToIndex(index);\n\t\tthis.tracks[index] = current;\n\t\tcurrent.previous = null;\n\n\t\tif (from) {\n\t\t\tfrom.next = null;\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\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 setAnimation}. */\n\tsetAnimation (trackIndex: number, animationName: string, loop?: boolean): TrackEntry;\n\n\t/** Sets the current animation for a track, discarding any queued animations.\n\t *\n\t * If the formerly current track entry is for the same animation and was never applied to a skeleton, it is replaced (not mixed\n\t * 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 * @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\tsetAnimation (trackIndex: number, animation: Animation, loop?: boolean): TrackEntry;\n\n\tsetAnimation (trackIndex: number, animationNameOrAnimation: string | Animation, loop = false): TrackEntry {\n\t\tif (typeof animationNameOrAnimation === \"string\")\n\t\t\treturn this.setAnimation1(trackIndex, animationNameOrAnimation, loop);\n\t\treturn this.setAnimation2(trackIndex, animationNameOrAnimation, loop);\n\t}\n\n\tprivate setAnimation1 (trackIndex: number, animationName: string, loop: boolean = false) {\n\t\tconst animation = this.data.skeletonData.findAnimation(animationName);\n\t\tif (!animation) throw new Error(`Animation not found: ${animationName}`);\n\t\treturn this.setAnimation2(trackIndex, animation, loop);\n\t}\n\n\t/** Sets the current animation for a track, discarding any queued animations.\n\t *\n\t * If the formerly current track entry is for the same animation and was never applied to a skeleton, it is replaced (not mixed\n\t * 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.getTrackEnd} determines when the track is cleared.\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\tprivate setAnimation2 (trackIndex: number, animation: Animation, loop: boolean = false) {\n\t\tif (trackIndex < 0) throw new Error(\"trackIndex must be >= 0.\");\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 && current.animation === animation) {\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\tconst entry = this.trackEntry(trackIndex, animation, loop, current);\n\t\tthis.setTrack(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 addAnimation}. */\n\taddAnimation (trackIndex: number, animationName: string, loop?: boolean, delay?: number): TrackEntry;\n\n\t/** Adds an animation to be played after the current or last queued animation for a track. If the track has no entries, this is\n\t * equivalent to calling {@link setAnimation}.\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 {@link data}) plus the specified `delay` (ie the mix ends at (when\n\t * `delay` = 0) or before (when `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 * @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\taddAnimation (trackIndex: number, animation: Animation, loop?: boolean, delay?: number): TrackEntry;\n\n\taddAnimation (trackIndex: number, animationNameOrAnimation: string | Animation, loop = false, delay: number = 0): TrackEntry {\n\t\tif (typeof animationNameOrAnimation === \"string\")\n\t\t\treturn this.addAnimation1(trackIndex, animationNameOrAnimation, loop, delay);\n\t\treturn this.addAnimation2(trackIndex, animationNameOrAnimation, loop, delay);\n\t}\n\n\tprivate addAnimation1 (trackIndex: number, animationName: string, loop: boolean = false, delay: number = 0) {\n\t\tconst animation = this.data.skeletonData.findAnimation(animationName);\n\t\tif (!animation) throw new Error(`Animation not found: ${animationName}`);\n\t\treturn this.addAnimation2(trackIndex, animation, loop, delay);\n\t}\n\n\tprivate addAnimation2 (trackIndex: number, animation: Animation, loop: boolean = false, delay: number = 0) {\n\t\tif (trackIndex < 0) throw new Error(\"trackIndex must be >= 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\tconst entry = this.trackEntry(trackIndex, animation, loop, last);\n\n\t\tif (!last) {\n\t\t\tthis.setTrack(trackIndex, entry, true);\n\t\t\tthis.queue.drain();\n\t\t\tif (delay < 0) delay = 0;\n\t\t} else {\n\t\t\tlast.next = entry;\n\t\t\tentry.previous = last;\n\t\t\tif (delay <= 0) delay = Math.max(delay + last.getTrackComplete() - entry.mixDuration, 0);\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 needs to be applied one more time to mix out, so the properties it was animating are reverted.\n\t *\n\t * Mixing in is done by first setting an empty animation, then adding an animation using\n\t * {@link addAnimation} with the desired delay (an empty animation has a duration of 0) and on\n\t * the returned track entry, set the {@link TrackEntry.setMixDuration}. Mixing from an empty animation causes the new\n\t * animation to be applied more and more over the mix duration. Properties keyed in the new animation transition from the value\n\t * from lower tracks or from the setup pose value if no lower tracks key the property to the value keyed in the new animation.\n\t *\n\t * See <a href='https://esotericsoftware.com/spine-applying-animations#Empty-animations'>Empty animations</a> in the Spine\n\t * Runtimes Guide. */\n\tsetEmptyAnimation (trackIndex: number, mixDuration: number = 0) {\n\t\tconst entry = this.setAnimation(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 has no entries, it is equivalent to calling\n\t * {@link setEmptyAnimation}.\n\t *\n\t * See {@link setEmptyAnimation} and\n\t * <a href='https://esotericsoftware.com/spine-applying-animations#Empty-animations'>Empty animations</a> in the Spine Runtimes\n\t * Guide.\n\t * @param delay If > 0, sets {@link TrackEntry.delay}. If <= 0, the delay set is the duration of the previous track entry minus\n\t * any mix duration plus the specified `delay` (ie the mix ends at (when `delay` = 0) or before\n\t * (when `delay` < 0) the previous track entry duration). If the previous entry is looping, its next loop\n\t * 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\tconst entry = this.addAnimation(trackIndex, AnimationState.emptyAnimation, false, delay);\n\t\tif (delay <= 0) entry.delay = Math.max(entry.delay + entry.mixDuration - mixDuration, 0);\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 duration.\n\t *\n\t * See <a href='https://esotericsoftware.com/spine-applying-animations#Empty-animations'>Empty animations</a> in the Spine\n\t * Runtimes Guide. */\n\tsetEmptyAnimations (mixDuration: number = 0) {\n\t\tconst 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\tconst 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\tconst entry = this.trackEntryPool.obtain();\n\t\tentry.reset();\n\t\tentry.trackIndex = trackIndex;\n\t\tentry.animation = animation;\n\t\tentry.loop = loop;\n\n\t\tentry.additive = false;\n\t\tentry.reverse = false;\n\t\tentry.shortestRotation = false;\n\n\t\tentry.eventThreshold = 0;\n\t\tentry.alphaAttachmentThreshold = 0;\n\t\tentry.mixAttachmentThreshold = 0;\n\t\tentry.mixDrawOrderThreshold = 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.totalAlpha = 0;\n\t\tentry.keepHold = false;\n\t\treturn entry;\n\t}\n\n\t/** Removes {@link TrackEntry.next} 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\tconst 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\tthis.computeHold(entry);\n\t\t\t\tentry = entry.mixingTo;\n\t\t\t} while (entry);\n\t\t}\n\t\tthis.propertyIds.clear();\n\t}\n\n\tcomputeHold (entry: TrackEntry) {\n\t\tconst timelines = entry.animation!.timelines;\n\t\tconst timelinesCount = entry.animation!.timelines.length;\n\t\tconst timelineMode = entry.timelineMode;\n\t\ttimelineMode.length = timelinesCount;\n\t\tconst timelineHoldMix = entry.timelineHoldMix;\n\t\ttimelineHoldMix.length = 0;\n\t\tconst propertyIds = this.propertyIds;\n\t\tconst add = entry.additive, keepHold = entry.keepHold;\n\t\tconst to = entry.mixingTo;\n\n\t\touter:\n\t\tfor (let i = 0; i < timelinesCount; i++) {\n\t\t\tconst timeline = timelines[i];\n\t\t\tconst ids = timeline.propertyIds;\n\t\t\tconst first = propertyIds.addAll(ids)\n\t\t\t\t&& !(timeline instanceof DrawOrderFolderTimeline && propertyIds.contains(DrawOrderTimeline.propertyID));\n\n\t\t\tif (add && timeline.additive) {\n\t\t\t\ttimelineMode[i] = first ? FIRST : SUBSEQUENT;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfor (let from = entry.mixingFrom; from != null; from = from.mixingFrom) {\n\t\t\t\tif (from.animation!.hasTimeline(ids)) {\n\t\t\t\t\t// An earlier entry on this track keys this property, isolating it from lower tracks.\n\t\t\t\t\ttimelineMode[i] = SUBSEQUENT;\n\t\t\t\t\tcontinue outer;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Hold if the next entry will overwrite this property.\n\t\t\tlet mode: number;\n\t\t\tif (to === null || timeline.instant || (to.additive && timeline.additive) || !to.animation?.hasTimeline(ids))\n\t\t\t\tmode = first ? FIRST : SUBSEQUENT;\n\t\t\telse {\n\t\t\t\tmode = first ? HOLD_FIRST : HOLD;\n\t\t\t\t// Find next entry that doesn't overwrite this property. Its mix fades out the hold, instead of it ending abruptly.\n\t\t\t\tfor (let next = to.mixingTo; next != null; next = next.mixingTo) {\n\t\t\t\t\tif ((next.additive && timeline.additive) || !next.animation?.hasTimeline(ids)) {\n\t\t\t\t\t\tif (next.mixDuration > 0) timelineHoldMix[i] = next;\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\tif (keepHold) mode = (mode & ~HOLD) | (timelineMode[i] & HOLD);\n\t\t\ttimelineMode[i] = mode;\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\tgetTrack (trackIndex: number) {\n\t\tif (trackIndex < 0) throw new Error(\"trackIndex must be >= 0.\");\n\t\tif (trackIndex >= this.tracks.length) return null;\n\t\treturn this.tracks[trackIndex];\n\t}\n\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\tconst 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 to this animation, or null if no mixing is currently occurring.\n\t * When mixing from multiple animations, `mixingFrom` makes up a doubly linked list. */\n\tmixingFrom: TrackEntry | null = null;\n\n\t/** The track entry for the next animation when mixing from this animation, or null if no mixing is currently occurring.\n\t * When mixing to multiple animations, `mixingTo` makes up a doubly 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 callback for 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.getTrack}. */\n\ttrackIndex = 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 = false;\n\n\t/** When true, timelines in this animation that support additive have their values added to the setup or current pose values\n\t * instead of replacing them. Additive can be set for a new track entry only before {@link AnimationState.apply}\n\t * is next called. */\n\tadditive = false;\n\n\t/** If true, the animation will be applied in reverse. */\n\treverse = false;\n\n\t/** If true, mixing rotation between tracks always uses the shortest rotation direction. If the rotation is animated, the\n\t * shortest rotation direction may change during the mix.\n\t *\n\t * If false, the shortest rotation direction is remembered when the mix starts and the same direction is used for the rest\n\t * of the mix. Defaults to false.\n\t *\n\t * See {@link resetRotationDirections}. */\n\tshortestRotation = false;\n\n\tkeepHold = false;\n\n\t/** When the interpolated mix percentage is less than the `eventThreshold` , event timelines are applied while\n\t * this animation is being mixed out. Defaults to 0, so event timelines are not applied while this animation is being mixed\n\t * out. */\n\teventThreshold = 0;\n\n\t/** When the interpolated mix percentage is less than the `mixAttachmentThreshold`, attachment timelines are\n\t * applied while this animation is being mixed out. Defaults to 0, so attachment timelines are not applied while this\n\t * animation is being mixed out. */\n\tmixAttachmentThreshold = 0;\n\n\t/** When the computed alpha is greater than `alphaAttachmentThreshold`, attachment timelines are applied. The\n\t * computed alpha includes {@link alpha} and the interpolated mix percentage. Defaults to 0, so attachment timelines are\n\t * always applied. */\n\talphaAttachmentThreshold = 0;\n\n\t/** When the interpolated mix percentage is less than the `mixAttachmentThreshold`, attachment timelines are\n\t * applied while this animation is being mixed out. Defaults to 0, so attachment timelines are not applied while this\n\t * animation is being mixed out. */\n\tmixDrawOrderThreshold = 0;\n\n\t/** The time in seconds for the first frame of this animation, both initially and after looping. Defaults to 0.\n\t *\n\t * When setting `animationStart` time, {@link animationLast} can be set to the same value to avoid firing events\n\t * from the start of the animation. */\n\tanimationStart = 0;\n\n\t/** The time in seconds for the last frame of this animation. Past this time, non-looping animations hold the pose at this\n\t * time while looping animations will loop back to {@link animationStart}. Defaults to the {@link Animation.duration}. */\n\tanimationEnd = 0;\n\n\n\t/** The time in seconds this animation was last applied. Some timelines use this for one-time triggers. For example, when\n\t * this animation is applied, event timelines will fire all events between the `animationLast` time (exclusive)\n\t * and `animationTime` (inclusive). Defaults to -1 to ensure triggers on frame 0 happen the first time this\n\t * animation is applied. */\n\tanimationLast = 0;\n\n\tnextAnimationLast = 0;\n\n\t/** Seconds to postpone playing the animation. Must be >= 0. When this track entry is the current track entry,\n\t * `delay` postpones incrementing the {@link trackTime}. When this track entry is queued, `delay` is\n\t * the time from the start of the previous animation to when this track entry will become the current track entry (ie when\n\t * the previous track entry {@link trackTime} >= this track entry's `delay`).\n\t *\n\t * {@link timeScale} affects the delay.\n\t *\n\t * When passing `delay` <= 0 to {@link AnimationState.addAnimation} this\n\t * `delay` is set using a mix duration from {@link AnimationStateData}. To change the {@link mixDuration}\n\t * afterward, use {@link setMixDuration} so this `delay` is adjusted. */\n\tdelay = 0;\n\n\t/** The time in seconds this track entry has been the current track entry, starting at 0 and increasing forever. Compare to\n\t * {@link getAnimationTime}, which is always between {@link animationStart} and {@link animationEnd}.\n\t *\n\t * The track time can be set to start the animation at a time other than 0, without affecting looping. When doing so,\n\t * {@link animationLast} can be set to the same value to avoid firing events from the start of the animation.\n\t *\n\t * To set the time an animation starts and loops, use {@link animationStart} and {@link animationEnd}. */\n\ttrackTime = 0;\n\n\ttrackLast = 0; nextTrackLast = 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 * Usually you want to use {@link AnimationState.addEmptyAnimation} rather than have the animation\n\t * abruptly cease being applied. */\n\ttrackEnd = 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 * Values < 0 are not supported. To play an animation in reverse, use {@link reverse}.\n\t *\n\t * {@link mixTime} is not affected by track entry time scale, so {@link mixDuration} may need to be adjusted to match the\n\t * animation speed.\n\t *\n\t * When using {@link AnimationState.addAnimation} with a `delay` <= 0, the\n\t * {@link delay} is set using the mix duration from {@link AnimationState.data}, assuming time scale to be 1. If the time\n\t * scale is not 1, the delay may need to be adjusted.\n\t *\n\t * See {@link AnimationState.timeScale} to affect all animations. */\n\ttimeScale = 0;\n\n\t/** Values < 1 mix this animation with the skeleton's current pose (either the setup pose or the pose from lower tracks).\n\t * Defaults to 1, which overwrites the skeleton's current pose with this animation.\n\t *\n\t * Alpha should be 1 on track 0.\n\t *\n\t * See {@link getAlphaAttachmentThreshold}. */\n\talpha = 0;\n\n\t/** Seconds elapsed from 0 to the {@link mixDuration} when mixing from the previous animation to this animation. May\n\t * be slightly more than `mixDuration` when the mix is complete. */\n\tmixTime = 0;\n\n\t/** Seconds for mixing from the previous animation to this animation. Defaults to the value provided by\n\t * {@link AnimationStateData.getMix} based on the animation before this animation (if any).\n\t *\n\t * A mix duration of 0 still needs to be applied one more time to mix out, so the the properties it was animating are\n\t * reverted. A mix duration of 0 can be set at any time to end the mix on the next\n\t * {@link AnimationState.update | update}.\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} is next called.\n\t *\n\t * When using {@link AnimationState.addAnimation} with a `delay` <= 0, the\n\t * {@link getDelay} is set using the mix duration from {@link AnimationState.data}. If `mixDuration` is set\n\t * afterward, the delay needs to be adjusted:\n\t *\n\t * <pre>\n\t * entry.mixDuration = 0.25;<br>\n\t * entry.delay = entry.previous.getTrackComplete() - entry.mixDuration + 0;\n\t * </pre>\n\t *\n\t * Alternatively, use {@link setMixDuration} to set both the mix duration and recompute the delay:<br>\n\t *\n\t * <pre>\n\t entry.setMixDuration(0.25f, 0); // mixDuration, delay\n\t * </pre>\n\t */\n\tmixDuration = 0;\n\n\ttotalAlpha = 0;\n\n\tmixInterpolation: Interpolation = Interpolation.linear;\n\n\t/** Sets both {@link getMixDuration} and {@link getDelay}.\n\t * @param delay If > 0, sets {@link getDelay}. If <= 0, the delay set is the duration of the previous track entry minus\n\t * the specified mix duration plus the specified `delay` (ie the mix ends at (when `delay` =\n\t * 0) or before (when `delay` < 0) the previous track entry duration). If the previous entry is\n\t * looping, its next loop completion is used instead of its duration. */\n\tsetMixDuration (mixDuration: number, delay?: number) {\n\t\tthis.mixDuration = mixDuration;\n\t\tif (delay !== undefined) {\n\t\t\tif (delay <= 0) delay = this.previous == null ? 0 : Math.max(delay + this.previous.getTrackComplete() - mixDuration, 0);\n\t\t\tthis.delay = delay;\n\t\t}\n\t}\n\n\t/** The interpolation to apply to the mix percentage ({@link mixTime} / {@link mixDuration}) when mixing from the previous\n\t * animation to this animation. Defaults to linear. */\n\tsetMixInterpolation (mixInterpolation: Interpolation) {\n\t\tif (!mixInterpolation) throw new Error(\"mixInterpolation cannot be null.\");\n\t\tthis.mixInterpolation = mixInterpolation;\n\t}\n\n\tmix (): number {\n\t\tif (this.mixDuration === 0) return 1;\n\t\tlet mix = this.mixTime / this.mixDuration;\n\t\tif (mix >= 1) return 1;\n\t\tif (this.mixInterpolation === Interpolation.linear) return mix;\n\t\tmix = this.mixInterpolation.apply(mix);\n\t\tif (mix < 0) return 0;\n\t\tif (mix > 1) return 1;\n\t\treturn mix;\n\t}\n\n\t/** For each timeline:\n\t * - Bit 0, FIRST: 0 = mix from current pose, 1 = mix from setup pose. Timeline is first to set the property.\n\t * - Bit 1, HOLD: 0 = mix out using alphaMix, 1 = apply full alpha to prevent dipping. Timeline is first on its track to\n\t * set the property and the next entry (mixingTo) also sets it. When held, timelineHoldMix's mix controls how the hold fades\n\t * out (for 3+ entry chains where the chain eventually stops setting the property). */\n\ttimelineMode = [] as number[];\n\ttimelineHoldMix = [] as TrackEntry[];\n\ttimelinesRotation = [] as 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.mixInterpolation = Interpolation.linear;\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 always between {@link animationStart} and\n\t * {@link animationEnd}. When `trackTime` is 0, `animationTime` is equal to the\n\t * `animationStart` time. */\n\tgetAnimationTime () {\n\t\tif (!this.loop) return Math.min(this.trackTime + this.animationStart, this.animationEnd);\n\t\tconst duration = this.animationEnd - this.animationStart;\n\t\tif (duration === 0) return this.animationStart;\n\t\treturn (this.trackTime % duration) + this.animationStart;\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/** When {@link shortestRotation} is false, this clears the directions for mixing this entry's rotation. This can be useful\n\t * to avoid bones rotating the long way around when using {@link getAlpha} and starting animations on other tracks.\n\t *\n\t * Mixing involves finding a rotation between two others. There are two possible solutions: the short or the long way\n\t * around. When the two rotations change over time, which direction is the short or long way can also change. If the short\n\t * way was always chosen, bones flip to the other side when that direction became the long way. TrackEntry chooses the short\n\t * way the first time it is applied and remembers that direction. Resetting that direction makes it choose a new short way\n\t * on the next apply. */\n\tresetRotationDirections () {\n\t\tthis.timelinesRotation.length = 0;\n\t}\n\n\t/** If this track entry is non-looping, this is the track time in seconds when {@link animationEnd} is reached, or the\n\t * current {@link trackTime} if it has already been reached.\n\t *\n\t * If this track entry is looping, this is the track time when this animation will reach its next {@link animationEnd} (the\n\t * next loop completion). */\n\tgetTrackComplete () {\n\t\tconst 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\t/** Returns true if this track entry has been applied at least once.\n\t *\n\t * See {@link AnimationState.apply}. */\n\twasApplied () {\n\t\treturn this.nextTrackLast !== -1;\n\t}\n\n\t/** Returns true if there is a {@link next} track entry and it will become the current track entry during the next\n\t * {@link AnimationState.update}. */\n\tisNextReady () {\n\t\treturn this.next != null && this.nextTrackLast - this.next.delay >= 0;\n\t}\n}\n\nexport class EventQueue {\n\tobjects: Array<EventType | TrackEntry | Event> = [];\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; // Not reentrant.\n\t\tthis.drainDisabled = true;\n\n\t\tfor (let i = 0; i < this.objects.length; i += 2) {\n\t\t\tconst objects = this.objects;\n\t\t\tconst type = objects[i] as EventType;\n\t\t\tconst entry = objects[i + 1] as TrackEntry;\n\t\t\tconst listeners = this.animState.listeners.slice();\n\t\t\tswitch (type) {\n\t\t\t\tcase EventType.start:\n\t\t\t\t\tif (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\tconst 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?.interrupt) entry.listener.interrupt(entry);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tconst 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\t// biome-ignore lint/suspicious/noFallthroughSwitchClause: reference runtime does fall through\n\t\t\t\tcase EventType.end:\n\t\t\t\t\tif (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\tconst 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?.dispose) entry.listener.dispose(entry);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tconst 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?.complete) entry.listener.complete(entry);\n\t\t\t\t\tfor (let ii = 0; ii < listeners.length; ii++) {\n\t\t\t\t\t\tconst 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\tconst event = objects[i++ + 2] as Event;\n\t\t\t\t\tif (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\tconst 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\t}\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 * TrackEntry events are collected during {@link AnimationState.update} and {@link AnimationState.apply} and\n * fired only after those methods are finished.\n *\n * See {@link TrackEntry.listener} and\n * {@link AnimationState.addListener}. */\nexport interface AnimationStateListener {\n\t/** Invoked when this entry has been set as the current entry. {@link end} will occur when this entry will no\n\t * longer be applied.\n\t *\n\t * When this event is triggered by calling {@link AnimationState.setAnimation}, take care not to\n\t * call {@link AnimationState.update} until after the TrackEntry has been configured. */\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 will never be applied again. This only occurs if this entry has previously been set as the\n\t * current entry ({@link start} was invoked). */\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. This may occur during mixing (after\n\t * {@link interrupt}).\n\t *\n\t * If this entry's {@link TrackEntry.mixingTo} is not null, this entry is mixing out (it is not the current entry).\n\t *\n\t * Because this event is triggered at the end of {@link AnimationState.apply}, any animations set in response to\n\t * the event won't be applied until the next time the AnimationState is applied. */\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\nexport const SUBSEQUENT = 0;\nexport const FIRST = 1;\nexport const HOLD = 2;\nexport const HOLD_FIRST = 3;\n\nexport const SETUP = 1;\nexport const RETAIN = 2;\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Animation } from \"./Animation.js\";\nimport type { AnimationState, TrackEntry } from \"./AnimationState.js\";\nimport type { SkeletonData } from \"./SkeletonData.js\";\nimport type { StringMap } from \"./Utils.js\";\n\n\n/** Stores mix (crossfade) durations to be applied when {@link AnimationState} animations are changed on the same track. */\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 setMix}. */\n\tsetMix (fromName: string, to: string, duration: number): void;\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\tsetMix (from: Animation, to: Animation, duration: number): void;\n\n\tsetMix (from: string | Animation, to: string | Animation, duration: number) {\n\t\tif (typeof from === \"string\")\n\t\t\treturn this.setMix1(from, to as string, duration);\n\t\treturn this.setMix2(from, to as Animation, duration);\n\t}\n\n\tprivate setMix1 (fromName: string, toName: string, duration: number) {\n\t\tconst from = this.skeletonData.findAnimation(fromName);\n\t\tif (!from) throw new Error(`Animation not found: ${fromName}`);\n\t\tconst to = this.skeletonData.findAnimation(toName);\n\t\tif (!to) throw new Error(`Animation not found: ${toName}`);\n\t\tthis.setMix2(from, to, duration);\n\t}\n\n\tprivate setMix2 (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\tconst 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 on the same track, or the\n\t * {@link defaultMix} if no mix duration has been set. */\n\tgetMix (from: Animation, to: Animation) {\n\t\tconst key = `${from.name}.${to.name}`;\n\t\tconst value = this.animationToMixTime[key];\n\t\treturn value === undefined ? this.defaultMix : value;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Texture } from \"./Texture.js\";\nimport { TextureAtlas } from \"./TextureAtlas.js\";\nimport type { Disposable, StringMap } from \"./Utils.js\";\n\ntype AssetData = (Uint8Array | string | Texture | TextureAtlas | object) & Partial<Disposable>;\ntype AssetCallback<T extends AssetData> = (path: string, data: T) => void;\ntype ErrorCallback = (path: string, message: string) => void;\n\nexport type TextureLoader = (image: HTMLImageElement | ImageBitmap, pma?: boolean) => Texture;\n\nexport class AssetManagerBase implements Disposable {\n\tprivate errors: StringMap<string> = {};\n\tprivate toLoad = 0;\n\tprivate loaded = 0;\n\tprivate texturePmaInfo: Record<string, boolean> = {};\n\n\tconstructor (\n\t\tprivate textureLoader: TextureLoader,\n\t\tprivate pathPrefix: string = \"\",\n\t\tprivate downloader = new Downloader(),\n\t\tprivate cache = new AssetCache()) {\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<T extends AssetData> (callback: AssetCallback<T>, path: string, asset: T) {\n\t\tthis.toLoad--;\n\t\tthis.loaded++;\n\t\tthis.cache.assets[path] = asset;\n\t\tthis.cache.assetsRefCount[path] = (this.cache.assetsRefCount[path] || 0) + 1;\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\tconst promise = new Promise((resolve: (assetManager: AssetManagerBase) => void, reject: (errors: StringMap<string>) => void) => {\n\t\t\tconst 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\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tthis.cache.assetsLoaded[path] = new Promise<Uint8Array>((resolve, reject) => {\n\t\t\tthis.downloader.downloadBinary(path, (data: Uint8Array): void => {\n\t\t\t\tthis.success(success, path, data);\n\t\t\t\tresolve(data);\n\t\t\t}, (status: number, responseText: string): void => {\n\t\t\t\tconst errorMsg = `Couldn't load binary ${path}: status ${status}, ${responseText}`;\n\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\treject(errorMsg);\n\t\t\t});\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\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tthis.cache.assetsLoaded[path] = new Promise<object>((resolve, reject) => {\n\t\t\tthis.downloader.downloadJson(path, (data: object): void => {\n\t\t\t\tthis.success(success, path, data);\n\t\t\t\tresolve(data);\n\t\t\t}, (status: number, responseText: string): void => {\n\t\t\t\tconst errorMsg = `Couldn't load JSON ${path}: status ${status}, ${responseText}`;\n\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\treject(errorMsg);\n\t\t\t});\n\t\t});\n\t}\n\n\n\treuseAssets<T extends AssetData> (\n\t\tpath: string,\n\t\tsuccess: AssetCallback<T> = () => { },\n\t\terror: ErrorCallback = () => { }\n\t) {\n\t\tconst loadedStatus = this.cache.getAsset(path);\n\t\tconst alreadyExistsOrLoading = loadedStatus !== undefined;\n\t\tif (alreadyExistsOrLoading) {\n\t\t\tthis.cache.assetsLoaded[path] = loadedStatus\n\t\t\t\t.then(data => {\n\t\t\t\t\t// necessary when user preloads an image into the cache.\n\t\t\t\t\t// texture loader is not avaiable in the cache, so we transform in GLTexture at first use\n\t\t\t\t\tdata = (data instanceof Image || data instanceof ImageBitmap) ? this.textureLoader(data) as T : data;\n\t\t\t\t\tthis.success(success, path, data as T);\n\t\t\t\t\treturn data;\n\t\t\t\t})\n\t\t\t\t.catch(errorMsg => {\n\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\treturn undefined;\n\t\t\t\t});\n\t\t}\n\t\treturn alreadyExistsOrLoading;\n\t}\n\n\tloadTexture (\n\t\tpath: string,\n\t\tsuccess: AssetCallback<Texture> = () => { },\n\t\terror: ErrorCallback = () => { }\n\t) {\n\n\t\tpath = this.start(path);\n\n\t\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tconst pma = this.texturePmaInfo[path];\n\t\tthis.cache.assetsLoaded[path] = new Promise<Texture>((resolve, reject) => {\n\t\t\tconst isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document);\n\t\t\tconst isWebWorker = !isBrowser; // && typeof importScripts !== 'undefined';\n\t\t\tif (isWebWorker) {\n\t\t\t\tfetch(path, { mode: <RequestMode>\"cors\" }).then((response) => {\n\t\t\t\t\tif (response.ok) return response.blob();\n\t\t\t\t\tconst errorMsg = `Couldn't load image: ${path}`;\n\t\t\t\t\tthis.error(error, path, `Couldn't load image: ${path}`);\n\t\t\t\t\treject(errorMsg);\n\t\t\t\t}).then((blob) => {\n\t\t\t\t\treturn blob ? createImageBitmap(blob, { premultiplyAlpha: \"none\", colorSpaceConversion: \"none\" }) : null;\n\t\t\t\t}).then((bitmap) => {\n\t\t\t\t\tif (bitmap) {\n\t\t\t\t\t\tconst texture = this.createTexture(path, pma, bitmap);\n\t\t\t\t\t\tthis.success(success, path, texture);\n\t\t\t\t\t\tresolve(texture);\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst image = new Image();\n\t\t\t\timage.crossOrigin = \"anonymous\";\n\t\t\t\timage.onload = () => {\n\t\t\t\t\tconst texture = this.createTexture(path, pma, image);\n\t\t\t\t\tthis.success(success, path, texture);\n\t\t\t\t\tresolve(texture);\n\t\t\t\t};\n\t\t\t\timage.onerror = () => {\n\t\t\t\t\tconst errorMsg = `Couldn't load image: ${path}`;\n\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\treject(errorMsg);\n\t\t\t\t};\n\t\t\t\tif (this.downloader.rawDataUris[path]) path = this.downloader.rawDataUris[path];\n\t\t\t\timage.src = path;\n\t\t\t}\n\t\t});\n\t}\n\n\tloadTextureAtlas (\n\t\tpath: string,\n\t\tsuccess: AssetCallback<TextureAtlas> = () => { },\n\t\terror: ErrorCallback = () => { },\n\t\tfileAlias?: Record<string, string>\n\t) {\n\t\tconst index = path.lastIndexOf(\"/\");\n\t\tconst parent = index >= 0 ? path.substring(0, index + 1) : \"\";\n\t\tpath = this.start(path);\n\n\t\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tthis.cache.assetsLoaded[path] = new Promise<TextureAtlas>((resolve, reject) => {\n\t\t\tthis.downloader.downloadText(path, (atlasText: string): void => {\n\t\t\t\ttry {\n\t\t\t\t\tconst atlas = this.createTextureAtlas(atlasText, parent, path, fileAlias);\n\t\t\t\t\tlet toLoad = atlas.pages.length, abort = false;\n\n\t\t\t\t\tif (toLoad === 0) {\n\t\t\t\t\t\tthis.success(success, path, atlas);\n\t\t\t\t\t\tresolve(atlas);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const page of atlas.pages) {\n\t\t\t\t\t\tthis.loadTexture(\n\t\t\t\t\t\t\tthis.texturePath(parent, page.name, fileAlias),\n\t\t\t\t\t\t\t(imagePath: string, texture: Texture) => {\n\t\t\t\t\t\t\t\tif (!abort) {\n\t\t\t\t\t\t\t\t\tpage.setTexture(texture);\n\t\t\t\t\t\t\t\t\tif (--toLoad === 0) {\n\t\t\t\t\t\t\t\t\t\tthis.success(success, path, atlas);\n\t\t\t\t\t\t\t\t\t\tresolve(atlas);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t(imagePath: string, message: string) => {\n\t\t\t\t\t\t\t\tif (!abort) {\n\t\t\t\t\t\t\t\t\tconst errorMsg = `Couldn't load texture ${path} page image: ${imagePath}`;\n\t\t\t\t\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\t\t\t\t\treject(errorMsg);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tabort = true;\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} catch (e: unknown) {\n\t\t\t\t\tconst errorMsg = `Couldn't parse texture atlas ${path}: ${(e as Error).message}`;\n\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\treject(errorMsg);\n\t\t\t\t}\n\t\t\t}, (status: number, responseText: string): void => {\n\t\t\t\tconst errorMsg = `Couldn't load texture atlas ${path}: status ${status}, ${responseText}`;\n\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\treject(errorMsg);\n\t\t\t});\n\t\t});\n\t}\n\n\tloadTextureAtlasButNoTextures (\n\t\tpath: string,\n\t\tsuccess: AssetCallback<TextureAtlas> = () => { },\n\t\terror: ErrorCallback = () => { },\n\t) {\n\t\tconst index = path.lastIndexOf(\"/\");\n\t\tconst parent = index >= 0 ? path.substring(0, index + 1) : \"\";\n\t\tpath = this.start(path);\n\n\t\tif (this.reuseAssets(path, success, error)) return;\n\n\t\tthis.cache.assetsLoaded[path] = new Promise<TextureAtlas>((resolve, reject) => {\n\t\t\tthis.downloader.downloadText(path, (atlasText: string): void => {\n\t\t\t\ttry {\n\t\t\t\t\tconst atlas = this.createTextureAtlas(atlasText, parent, path);\n\t\t\t\t\tthis.success(success, path, atlas);\n\t\t\t\t\tresolve(atlas);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconst errorMsg = `Couldn't parse texture atlas ${path}: ${(e as Error).message}`;\n\t\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\t\treject(errorMsg);\n\t\t\t\t}\n\t\t\t}, (status: number, responseText: string): void => {\n\t\t\t\tconst errorMsg = `Couldn't load texture atlas ${path}: status ${status}, ${responseText}`;\n\t\t\t\tthis.error(error, path, errorMsg);\n\t\t\t\treject(errorMsg);\n\t\t\t});\n\t\t});\n\t}\n\n\tasync loadBinaryAsync (path: string) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.loadBinary(path,\n\t\t\t\t(_, binary) => resolve(binary),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync loadJsonAsync (path: string) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.loadJson(path,\n\t\t\t\t(_, object) => resolve(object),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync loadTextureAsync (path: string) {\n\t\treturn new Promise<Texture>((resolve, reject) => {\n\t\t\tthis.loadTexture(path,\n\t\t\t\t(_, texture) => resolve(texture),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync loadTextureAtlasAsync (path: string) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.loadTextureAtlas(path,\n\t\t\t\t(_, atlas) => resolve(atlas),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tasync loadTextureAtlasButNoTexturesAsync (path: string) {\n\t\treturn new Promise<TextureAtlas>((resolve, reject) => {\n\t\t\tthis.loadTextureAtlasButNoTextures(path,\n\t\t\t\t(_, atlas) => resolve(atlas),\n\t\t\t\t(_, message) => reject(message),\n\t\t\t);\n\t\t});\n\t}\n\n\tsetCache (cache: AssetCache) {\n\t\tthis.cache = cache;\n\t}\n\n\tget (path: string) {\n\t\treturn this.cache.assets[this.pathPrefix + path];\n\t}\n\n\trequire (path: string) {\n\t\tpath = this.pathPrefix + path;\n\t\tconst asset = this.cache.assets[path];\n\t\tif (asset) return asset;\n\t\tconst 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\tconst asset = this.cache.assets[path];\n\t\tif (asset.dispose) asset.dispose();\n\t\tdelete this.cache.assets[path];\n\t\tdelete this.cache.assetsRefCount[path];\n\t\tdelete this.cache.assetsLoaded[path];\n\t\treturn asset;\n\t}\n\n\tremoveAll () {\n\t\tfor (const path in this.cache.assets) {\n\t\t\tconst asset = this.cache.assets[path];\n\t\t\tif (asset.dispose) asset.dispose();\n\t\t}\n\t\tthis.cache.assets = {};\n\t\tthis.cache.assetsLoaded = {};\n\t\tthis.cache.assetsRefCount = {};\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\t// dispose asset only if it's not used by others\n\tdisposeAsset (path: string) {\n\t\tconst asset = this.cache.assets[path];\n\t\tif (asset instanceof TextureAtlas) {\n\t\t\tasset.dispose();\n\t\t\treturn;\n\t\t}\n\t\tthis.disposeAssetInternal(path);\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\tprivate disposeAssetInternal (path: string) {\n\t\tif (this.cache.assetsRefCount[path] > 0 && --this.cache.assetsRefCount[path] === 0) {\n\t\t\treturn this.remove(path);\n\t\t}\n\t}\n\n\tprivate createTextureAtlas (atlasText: string, parentPath: string, path: string, fileAlias?: Record<string, string>): TextureAtlas {\n\t\tconst atlas = new TextureAtlas(atlasText);\n\t\tatlas.dispose = () => {\n\t\t\tif (this.cache.assetsRefCount[path] <= 0) return;\n\t\t\tthis.disposeAssetInternal(path);\n\t\t\tfor (const page of atlas.pages) {\n\t\t\t\tpage.texture?.dispose();\n\t\t\t}\n\t\t}\n\t\tfor (const page of atlas.pages) {\n\t\t\tconst texturePath = this.texturePath(parentPath, page.name, fileAlias);\n\t\t\tthis.texturePmaInfo[this.pathPrefix + texturePath] = page.pma;\n\t\t}\n\t\treturn atlas;\n\t}\n\n\tprivate createTexture (path: string, pma: boolean, image: HTMLImageElement | ImageBitmap): Texture {\n\t\tconst texture = this.textureLoader(image, pma);\n\t\tconst textureDispose = texture.dispose.bind(texture);\n\t\ttexture.dispose = () => {\n\t\t\tif (this.disposeAssetInternal(path)) textureDispose();\n\t\t}\n\t\treturn texture;\n\t}\n\n\tprivate texturePath (parentPath: string, pageName: string, fileAlias?: Record<string, string>) {\n\t\tif (!fileAlias) return parentPath + pageName;\n\t\treturn fileAlias[pageName];\n\t}\n}\n\nexport class AssetCache {\n\tpublic assets: StringMap<AssetData> = {};\n\tpublic assetsRefCount: StringMap<number> = {};\n\tpublic assetsLoaded: StringMap<Promise<AssetData | undefined>> = {};\n\n\tstatic AVAILABLE_CACHES = new Map<string, AssetCache>();\n\tstatic getCache (id: string) {\n\t\tconst cache = AssetCache.AVAILABLE_CACHES.get(id);\n\t\tif (cache) return cache;\n\n\t\tconst newCache = new AssetCache();\n\t\tAssetCache.AVAILABLE_CACHES.set(id, newCache);\n\t\treturn newCache;\n\t}\n\n\tasync addAsset<T extends AssetData> (path: string, asset: T): Promise<T> {\n\t\tthis.assetsLoaded[path] = Promise.resolve(asset);\n\t\tthis.assets[path] = asset;\n\t\treturn asset;\n\t}\n\n\tgetAsset<T extends AssetData> (path: string): Promise<T> | undefined {\n\t\treturn this.assetsLoaded[path] as Promise<T> | undefined;\n\t}\n}\n\ntype DownloaderSuccessCallback<T extends AssetData = AssetData> = (data: T) => void;\ntype DownloaderErrorCallback = (status: number, responseText: string) => void;\n\nexport class Downloader {\n\tprivate callbacks: StringMap<Array<DownloaderSuccessCallback | DownloaderErrorCallback>> = {};\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): Uint8Array {\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 (let 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): Uint8Array {\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: DownloaderSuccessCallback<string>, error: DownloaderErrorCallback) {\n\t\tif (this.start(url, success, error)) return;\n\n\t\tconst rawDataUri = this.rawDataUris[url];\n\t\t// we assume if a \".\" is included in a raw data uri, it is used to rewrite an asset URL\n\t\tif (rawDataUri && !rawDataUri.includes(\".\")) {\n\t\t\ttry {\n\t\t\t\tthis.finish(url, 200, this.dataUriToString(rawDataUri));\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\n\t\tconst request = new XMLHttpRequest();\n\t\trequest.overrideMimeType(\"text/html\");\n\t\trequest.open(\"GET\", rawDataUri ? rawDataUri : url, true);\n\t\tconst 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: DownloaderSuccessCallback<object>, error: DownloaderErrorCallback) {\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: DownloaderErrorCallback) {\n\t\tif (this.start(url, success, error)) return;\n\n\t\tconst rawDataUri = this.rawDataUris[url];\n\t\t// we assume if a \".\" is included in a raw data uri, it is used to rewrite an asset URL\n\t\tif (rawDataUri && !rawDataUri.includes(\".\")) {\n\t\t\ttry {\n\t\t\t\tthis.finish(url, 200, this.dataUriToUint8Array(rawDataUri));\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\n\t\tconst request = new XMLHttpRequest();\n\t\trequest.open(\"GET\", rawDataUri ? rawDataUri : url, true);\n\t\trequest.responseType = \"arraybuffer\";\n\t\tconst 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<T extends AssetData> (url: string, success: DownloaderSuccessCallback<T>, error: DownloaderErrorCallback) {\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 as DownloaderSuccessCallback<AssetData>, error);\n\t\t}\n\t}\n\n\tprivate finish (url: string, status: number, data: AssetData) {\n\t\tconst callbacks = this.callbacks[url];\n\t\tdelete this.callbacks[url];\n\t\tif (status === 200 || status === 0) {\n\t\t\tfor (let i = 0, n = callbacks.length; i < n; i += 2)\n\t\t\t\t(callbacks[i] as DownloaderSuccessCallback)(data);\n\t\t} else {\n\t\t\tfor (let i = 1, n = callbacks.length; i < n; i += 2)\n\t\t\t\t(callbacks[i] as DownloaderErrorCallback)(status, data as string);\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { SkeletonBounds } from \"../SkeletonBounds.js\";\nimport { Color } from \"../Utils.js\";\nimport { type Attachment, VertexAttachment } from \"./Attachment.js\";\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\tconst 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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { SlotData } from \"../SlotData.js\";\nimport { Color } from \"../Utils.js\";\nimport { type Attachment, VertexAttachment } from \"./Attachment.js\";\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 attachment's slot and the end slot. If null, clipping is done until the end of\n\t * the skeleton's rendering. */\n\tendSlot: SlotData | null = null;\n\n\t/** When true the clipping polygon is treated as convex for more efficient clipping. If the polygon deforms to concave then the\n\t * convex hull is used. When false the clipping polygon can be concave and if so has an additional CPU cost. Inverse clipping\n\t * always uses convex. */\n\tconvex = false;\n\n\t/** When false, everything inside the clipping polygon is visible. When true, everything outside the clipping polygon is\n\t * visible and clipping is convex. */\n\tinverse = false;\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\tconst copy = new ClippingAttachment(this.name);\n\t\tthis.copyTo(copy);\n\t\tcopy.endSlot = this.endSlot;\n\t\tcopy.convex = this.convex;\n\t\tcopy.inverse = this.inverse;\n\t\tcopy.color.setFromColor(this.color);\n\t\treturn copy;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { PathConstraint } from \"../PathConstraint.js\";\nimport { Color, Utils } from \"../Utils.js\";\nimport { type Attachment, VertexAttachment } from \"./Attachment.js\";\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 computing positions along the path more accurate so movement along\n\t * the path has a constant speed. */\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\tconst copy = new PathAttachment(this.name);\n\t\tthis.copyTo(copy);\n\t\tcopy.lengths = [];\n\t\tUtils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length);\n\t\tcopy.closed = this.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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { BonePose } from \"../BonePose.js\";\nimport { Color, MathUtils, type Vector2 } from \"../Utils.js\";\nimport { type Attachment, VertexAttachment } from \"./Attachment.js\";\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](https://esotericsoftware.com/spine-points) in the Spine User Guide. */\nexport class PointAttachment extends VertexAttachment {\n\n\t/** The local x position. */\n\tx: number = 0;\n\n\t/** The local y position. */\n\ty: number = 0;\n\n\t/** The local rotation in degrees, counter clockwise. */\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\t/** Computes the world position from the local position. */\n\tcomputeWorldPosition (bone: BonePose, 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\t/** Computes the world rotation from the local rotation. */\n\tcomputeWorldRotation (bone: BonePose) {\n\t\tconst r = this.rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);\n\t\tconst x = cos * bone.a + sin * bone.b;\n\t\tconst y = cos * bone.c + sin * bone.d;\n\t\treturn MathUtils.atan2Deg(y, x);\n\t}\n\n\tcopy (): Attachment {\n\t\tconst 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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { AttachmentLoader } from \"./attachments/AttachmentLoader.js\";\nimport { BoundingBoxAttachment } from \"./attachments/BoundingBoxAttachment.js\";\nimport { ClippingAttachment } from \"./attachments/ClippingAttachment.js\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { PathAttachment } from \"./attachments/PathAttachment.js\";\nimport { PointAttachment } from \"./attachments/PointAttachment.js\";\nimport { RegionAttachment } from \"./attachments/RegionAttachment.js\";\nimport type { Sequence } from \"./attachments/Sequence.js\"\nimport type { Skin } from \"./Skin.js\";\nimport type { TextureAtlas } from \"./TextureAtlas.js\";\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\tallowMissingRegions: boolean;\n\n\tconstructor (atlas: TextureAtlas, allowMissingRegions = false) {\n\t\tthis.atlas = atlas;\n\t\tthis.allowMissingRegions = allowMissingRegions;\n\t}\n\n\t/** Sets each {@link Sequence.regions} by calling {@link findRegion} for each texture region using\n\t * {@link Sequence.getPath}. */\n\tprotected findRegions (name: string, basePath: string, sequence: Sequence) {\n\t\tconst regions = sequence.regions;\n\t\tfor (let i = 0, n = regions.length; i < n; i++)\n\t\t\tregions[i] = this.findRegion(name, sequence.getPath(basePath, i));\n\t}\n\n\t/** Looks for the region with the specified path. If not found and {@link allowMissingRegions} is false, an error is\n\t * raised. */\n\tprotected findRegion (name: string, path: string) {\n\t\tconst region = this.atlas.findRegion(path);\n\t\tif (!region && !this.allowMissingRegions)\n\t\t\tthrow new Error(`Region not found in atlas: ${path} (attachment: ${name})`);\n\t\treturn region;\n\t}\n\n\tnewRegionAttachment (skin: Skin, placeholder: string, name: string, path: string, sequence: Sequence): RegionAttachment {\n\t\tthis.findRegions(name, path, sequence);\n\t\treturn new RegionAttachment(name, sequence);\n\t}\n\n\tnewMeshAttachment (skin: Skin, placeholder: string, name: string, path: string, sequence: Sequence): MeshAttachment {\n\t\tthis.findRegions(name, path, sequence);\n\t\treturn new MeshAttachment(name, sequence);\n\t}\n\n\tnewBoundingBoxAttachment (skin: Skin, placeholder: string, name: string): BoundingBoxAttachment {\n\t\treturn new BoundingBoxAttachment(name);\n\t}\n\n\tnewPathAttachment (skin: Skin, placeholder: string, name: string): PathAttachment {\n\t\treturn new PathAttachment(name);\n\t}\n\n\tnewPointAttachment (skin: Skin, placeholder: string, name: string): PointAttachment {\n\t\treturn new PointAttachment(name);\n\t}\n\n\tnewClippingAttachment (skin: Skin, placeholder: string, name: string): ClippingAttachment {\n\t\treturn new ClippingAttachment(name);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Pose } from \"./Pose.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Skin } from \"./Skin.js\";\n\n/** The base class for storing setup data for a posed object. May be shared with multiple instances. */\nexport abstract class PosedData<P extends Pose<P>> {\n\treadonly name: string;\n\n\treadonly setupPose: P;\n\n\t/** When true, {@link Skeleton.updateWorldTransform} only updates this constraint if the {@link Skeleton.skin}\n\t * contains this constraint.\n\t *\n\t * See {@link Skin.constraints}. */\n\tskinRequired = false;\n\n\tconstructor (name: string, setupPose: P) {\n\t\tif (name == null) throw new Error(\"name cannot be null.\");\n\t\tthis.name = name;\n\t\tthis.setupPose = setupPose;\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 { BonePose } from \"./BonePose.js\";\nimport { PosedData } from \"./PosedData.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { Color } from \"./Utils.js\";\n\n/** The setup pose for a bone. */\nexport class BoneData extends PosedData<BonePose> {\n\t/** The index of the bone in {@link Skeleton.bones}. */\n\tindex: number = 0;\n\n\t/** The parent bone, or null if this bone is the root. */\n\tparent: BoneData | null = null;\n\n\t/** The bone's length. */\n\tlength: number = 0;\n\n\t// Nonessential.\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\treadonly color = new Color();\n\n\t/** The bone icon name as it was in Spine, or null if nonessential data was not exported. */\n\ticon?: string;\n\n\t/** The bone icon's display size scale, or 1 if nonessential data was not exported. */\n\ticonSize = 1;\n\n\t/** The bone icon's display rotation in degrees, or 0 if nonessential data was not exported. */\n\ticonRotation = 0;\n\n\t/** False if the bone was hidden in Spine and nonessential data was exported. Does not affect runtime rendering. */\n\tvisible = false;\n\n\tconstructor (index: number, name: string, parent: BoneData | null) {\n\t\tsuper(name, new BonePose());\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.parent = parent;\n\t}\n\n\tcopy (parent: BoneData | null): BoneData {\n\t\tconst copy = new BoneData(this.index, this.name, parent);\n\t\tcopy.length = this.length;\n\t\tcopy.setupPose.set(this.setupPose);\n\t\treturn copy;\n\t}\n}\n\n/** Determines how a bone inherits world transforms from parent bones. */\nexport enum Inherit { Normal, OnlyTranslation, NoRotationOrReflection, NoScale, NoScaleOrReflection }\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Bone } from \"./Bone.js\";\nimport { Inherit } from \"./BoneData.js\";\nimport type { Physics } from \"./Physics.js\";\nimport type { Pose } from \"./Pose.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Update } from \"./Update.js\";\nimport { MathUtils, type Vector2 } from \"./Utils.js\";\n\n/** The applied local pose and world transform for a bone. This is the {@link Bone.getPose} with constraints applied and the\n * world transform computed by {@link Skeleton.updateWorldTransform} and {@link updateWorldTransform}.\n *\n * If the world transform is changed, call {@link updateLocalTransform} before using the local transform. The local\n * transform may be needed by other code (eg to apply another constraint).\n *\n * After changing the world transform, call {@link updateWorldTransform} on every descendant bone. It may be more\n * convenient to modify the local transform instead, then call {@link Skeleton.updateWorldTransform} to update the world\n * transforms for all bones and apply constraints. */\nexport class BonePose implements Pose<BonePose>, Update {\n\tbone!: 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\tinherit = Inherit.Normal;\n\n\t/** The world transform `[a b][c d]` x-axis x component. */\n\ta = 0;\n\n\t/** The world transform `[a b][c d]` y-axis x component. */\n\tb = 0;\n\n\t/** The world transform `[a b][c d]` x-axis y component. */\n\tc = 0;\n\n\t/** The world transform `[a b][c d]` y-axis y component. */\n\td = 0;\n\n\t/** The world X position. If changed, {@link updateLocalTransform} should be called. */\n\tworldY = 0;\n\n\t/** The world Y position. If changed, {@link updateLocalTransform} should be called. */\n\tworldX = 0;\n\n\tworld = 0;\n\tlocal = 0;\n\n\tset (pose: BonePose): void {\n\t\tif (pose == null) throw new Error(\"pose cannot be null.\");\n\t\tthis.x = pose.x;\n\t\tthis.y = pose.y;\n\t\tthis.rotation = pose.rotation;\n\t\tthis.scaleX = pose.scaleX;\n\t\tthis.scaleY = pose.scaleY;\n\t\tthis.shearX = pose.shearX;\n\t\tthis.shearY = pose.shearY;\n\t\tthis.inherit = pose.inherit;\n\t}\n\n\tsetPosition (x: number, y: number): void {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t}\n\n\tsetScale (scaleX: number, scaleY: number): void;\n\tsetScale (scale: number): void;\n\tsetScale (scaleOrX: number, scaleY?: number): void {\n\t\tthis.scaleX = scaleOrX;\n\t\tthis.scaleY = scaleY === undefined ? scaleOrX : scaleY;\n\t}\n\n\t/** Determines how parent world transforms affect this bone. */\n\tpublic getInherit (): Inherit {\n\t\treturn this.inherit;\n\t}\n\n\tpublic setInherit (inherit: Inherit): void {\n\t\tif (inherit == null) throw new Error(\"inherit cannot be null.\");\n\t\tthis.inherit = inherit;\n\t}\n\n\t/** Called by {@link Skeleton.updateCache} to compute the world transform, if needed. */\n\tpublic update (skeleton: Skeleton, physics: Physics): void {\n\t\tif (this.world !== skeleton._update) this.updateWorldTransform(skeleton);\n\t}\n\n\t/** Computes the world transform using the parent bone's world transform and this applied local pose. Child bones are not\n\t * updated.\n\t *\n\t * See <a href=\"https://esotericsoftware.com/spine-runtime-skeletons#World-transforms\">World transforms</a> in the Spine\n\t * Runtimes Guide. */\n\tupdateWorldTransform (skeleton: Skeleton): void {\n\t\tif (this.local === skeleton._update)\n\t\t\tthis.updateLocalTransform(skeleton);\n\t\telse\n\t\t\tthis.world = skeleton._update;\n\n\t\tconst rotation = this.rotation;\n\t\tconst scaleX = this.scaleX;\n\t\tconst scaleY = this.scaleY;\n\t\tconst shearX = this.shearX;\n\t\tconst shearY = this.shearY;\n\t\tif (!this.bone.parent) { // Root bone.\n\t\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY;\n\t\t\tconst rx = (rotation + shearX) * MathUtils.degRad;\n\t\t\tconst ry = (rotation + 90 + shearY) * MathUtils.degRad;\n\t\t\tthis.a = Math.cos(rx) * scaleX * sx;\n\t\t\tthis.b = Math.cos(ry) * scaleY * sx;\n\t\t\tthis.c = Math.sin(rx) * scaleX * sy;\n\t\t\tthis.d = Math.sin(ry) * scaleY * sy;\n\t\t\tthis.worldX = this.x * sx + skeleton.x;\n\t\t\tthis.worldY = this.y * sy + skeleton.y;\n\t\t\treturn;\n\t\t}\n\n\t\tconst parent = this.bone.parent.appliedPose;\n\t\tlet pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n\t\tthis.worldX = pa * this.x + pb * this.y + parent.worldX;\n\t\tthis.worldY = pc * this.x + pd * this.y + parent.worldY;\n\n\t\tswitch (this.inherit) {\n\t\t\tcase Inherit.Normal: {\n\t\t\t\tconst rx = (rotation + shearX) * MathUtils.degRad;\n\t\t\t\tconst ry = (rotation + 90 + shearY) * MathUtils.degRad;\n\t\t\t\tconst la = Math.cos(rx) * scaleX;\n\t\t\t\tconst lb = Math.cos(ry) * scaleY;\n\t\t\t\tconst lc = Math.sin(rx) * scaleX;\n\t\t\t\tconst ld = Math.sin(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\treturn;\n\t\t\t}\n\t\t\tcase Inherit.OnlyTranslation: {\n\t\t\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY;\n\t\t\t\tconst rx = (rotation + shearX) * MathUtils.degRad;\n\t\t\t\tconst ry = (rotation + 90 + shearY) * MathUtils.degRad;\n\t\t\t\tthis.a = Math.cos(rx) * scaleX * sx;\n\t\t\t\tthis.b = Math.cos(ry) * scaleY * sx;\n\t\t\t\tthis.c = Math.sin(rx) * scaleX * sy;\n\t\t\t\tthis.d = Math.sin(ry) * scaleY * sy;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Inherit.NoRotationOrReflection: {\n\t\t\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY, sxi = 1 / sx, syi = 1 / sy;\n\t\t\t\tpa *= sxi;\n\t\t\t\tpc *= syi;\n\t\t\t\tlet s = pa * pa + pc * pc;\n\t\t\t\tlet r = 0;\n\t\t\t\tif (s > MathUtils.epsilon2) {\n\t\t\t\t\ts = Math.abs(pa * pd * syi - pb * sxi * pc) / s;\n\t\t\t\t\tpb = pc * s;\n\t\t\t\t\tpd = pa * s;\n\t\t\t\t\tr = rotation - MathUtils.atan2Deg(pc, pa);\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\tr = rotation - 90 + MathUtils.atan2Deg(pd, pb);\n\t\t\t\t}\n\t\t\t\tconst rx = (r + shearX) * MathUtils.degRad;\n\t\t\t\tconst ry = (r + shearY + 90) * MathUtils.degRad;\n\t\t\t\tconst la = Math.cos(rx) * scaleX;\n\t\t\t\tconst lb = Math.cos(ry) * scaleY;\n\t\t\t\tconst lc = Math.sin(rx) * scaleX;\n\t\t\t\tconst ld = Math.sin(ry) * scaleY;\n\t\t\t\tthis.a = (pa * la - pb * lc) * sx;\n\t\t\t\tthis.b = (pa * lb - pb * ld) * sx;\n\t\t\t\tthis.c = (pc * la + pd * lc) * sy;\n\t\t\t\tthis.d = (pc * lb + pd * ld) * sy;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Inherit.NoScale:\n\t\t\tcase Inherit.NoScaleOrReflection: {\n\t\t\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY, sxi = 1 / sx, syi = 1 / sy;\n\t\t\t\tconst r = rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);\n\t\t\t\tlet za = (pa * cos + pb * sin) * sxi;\n\t\t\t\tlet zc = (pc * cos + pd * sin) * syi;\n\t\t\t\tconst s = 1 / Math.sqrt(za * za + zc * zc);\n\t\t\t\tza *= s;\n\t\t\t\tzc *= s;\n\t\t\t\tlet zb = -zc, zd = za;\n\t\t\t\tif (this.inherit === Inherit.NoScale && pa * pd - pb * pc < 0 !== (sx < 0 !== sy < 0)) {\n\t\t\t\t\tzb = -zb;\n\t\t\t\t\tzd = -zd;\n\t\t\t\t}\n\t\t\t\tconst rx = shearX * MathUtils.degRad;\n\t\t\t\tconst ry = (90 + shearY) * MathUtils.degRad;\n\t\t\t\tconst la = Math.cos(rx) * scaleX;\n\t\t\t\tconst lb = Math.cos(ry) * scaleY;\n\t\t\t\tconst lc = Math.sin(rx) * scaleX;\n\t\t\t\tconst ld = Math.sin(ry) * scaleY;\n\t\t\t\tthis.a = (za * la + zb * lc) * sx;\n\t\t\t\tthis.b = (za * lb + zb * ld) * sx;\n\t\t\t\tthis.c = (zc * la + zd * lc) * sy;\n\t\t\t\tthis.d = (zc * lb + zd * ld) * sy;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Computes the local transform values from the world transform.\n\t *\n\t * If the world transform is modified (by a constraint, {@link rotateWorld}, etc) then this method should be called so\n\t * the local transform matches the world transform. The local transform may be needed by other code (eg to apply another\n\t * constraint).\n\t *\n\t * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The local 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\tpublic updateLocalTransform (skeleton: Skeleton): void {\n\t\tthis.local = 0;\n\t\tthis.world = skeleton._update;\n\n\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY;\n\t\tif (!this.bone.parent) {\n\t\t\tconst sxi = 1 / sx, syi = 1 / sy;\n\t\t\tthis.x = (this.worldX - skeleton.x) * sxi;\n\t\t\tthis.y = (this.worldY - skeleton.y) * syi;\n\t\t\tthis.set5(this.a * sxi, this.b * sxi, this.c * syi, this.d * syi, 0);\n\t\t\treturn;\n\t\t}\n\n\t\tconst parent = this.bone.parent.appliedPose;\n\t\tlet pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n\t\tconst pad = pa * pd - pb * pc, pid = 1 / (pa * pd - pb * pc);\n\t\tconst ia = pd * pid, ib = pb * pid, ic = pc * pid, id = pa * pid;\n\t\tconst dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;\n\t\tthis.x = dx * ia - dy * ib;\n\t\tthis.y = dy * id - dx * ic;\n\n\t\tswitch (this.inherit) {\n\t\t\tcase Inherit.Normal: this.set5(ia * this.a - ib * this.c, ia * this.b - ib * this.d, id * this.c - ic * this.a, id * this.d - ic * this.b, 0); break;\n\t\t\tcase Inherit.OnlyTranslation: {\n\t\t\t\tconst sxi = 1 / sx, syi = 1 / sy;\n\t\t\t\tthis.set5(this.a * sxi, this.b * sxi, this.c * syi, this.d * syi, 0);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Inherit.NoRotationOrReflection: {\n\t\t\t\tconst sxi = 1 / sx, syi = 1 / sy;\n\t\t\t\tpa *= sxi;\n\t\t\t\tpc *= syi;\n\t\t\t\tconst wa = this.a * sxi, wb = this.b * sxi, wc = this.c * syi, wd = this.d * syi;\n\t\t\t\tconst s = 1 / (pa * pa + pc * pc), det = 1 / Math.abs(pad * sxi * syi);\n\t\t\t\tthis.set5((pa * wa + pc * wc) * s, (pa * wb + pc * wd) * s, (pa * wc - pc * wa) * det, (pa * wd - pc * wb) * det,\n\t\t\t\t\tMathUtils.atan2Deg(pc, pa));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Inherit.NoScale:\n\t\t\tcase Inherit.NoScaleOrReflection: {\n\t\t\t\tconst sxi = 1 / sx, syi = 1 / sy;\n\t\t\t\tconst wa = this.a * sxi, wb = this.b * sxi, wc = this.c * syi, wd = this.d * syi;\n\t\t\t\tlet tx = pd * this.a - pb * this.c, ty = pa * this.c - pc * this.a;\n\t\t\t\tif (pad < 0) {\n\t\t\t\t\ttx = -tx;\n\t\t\t\t\tty = -ty;\n\t\t\t\t}\n\t\t\t\tlet r = MathUtils.atan2Deg(ty, tx);\n\t\t\t\tthis.rotation = r;\n\t\t\t\tr *= MathUtils.degRad;\n\t\t\t\tconst cos = Math.cos(r), sin = Math.sin(r);\n\t\t\t\tlet za = (pa * cos + pb * sin) * sxi;\n\t\t\t\tlet zc = (pc * cos + pd * sin) * syi;\n\t\t\t\tconst s = 1 / Math.sqrt(za * za + zc * zc);\n\t\t\t\tza *= s;\n\t\t\t\tzc *= s;\n\t\t\t\tconst si = this.inherit === Inherit.NoScale && pad < 0 !== (sx < 0 !== sy < 0) ? -1 : 1;\n\t\t\t\tthis.set4(za * wa + zc * wc, za * wb + zc * wd, (za * wc - zc * wa) * si, (za * wd - zc * wb) * si);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate set4 (ra: number, rb: number, rc: number, rd: number): void {\n\t\tconst x = ra * ra + rc * rc, y = rb * rb + rd * rd;\n\t\tif (x > MathUtils.epsilon2) {\n\t\t\tthis.shearX = MathUtils.atan2Deg(rc, ra);\n\t\t\tthis.scaleX = Math.sqrt(x);\n\t\t} else {\n\t\t\tthis.shearX = 0;\n\t\t\tthis.scaleX = 0;\n\t\t}\n\t\tthis.scaleY = Math.sqrt(y);\n\t\tif (y > MathUtils.epsilon2) {\n\t\t\tthis.shearY = MathUtils.atan2Deg(rd, rb);\n\t\t\tif (ra * rd - rb * rc < 0) {\n\t\t\t\tthis.scaleY = -this.scaleY;\n\t\t\t\tthis.shearY += 90;\n\t\t\t} else\n\t\t\t\tthis.shearY -= 90;\n\t\t\tif (this.shearY > 180)\n\t\t\t\tthis.shearY -= 360;\n\t\t\telse if (this.shearY <= -180) //\n\t\t\t\tthis.shearY += 360;\n\t\t} else\n\t\t\tthis.shearY = 0;\n\t}\n\n\tprivate set5 (ra: number, rb: number, rc: number, rd: number, ro: number): void {\n\t\tthis.shearX = 0;\n\t\tconst x = ra * ra + rc * rc, y = rb * rb + rd * rd;\n\t\tif (x > MathUtils.epsilon2) {\n\t\t\tconst r = MathUtils.atan2Deg(rc, ra);\n\t\t\tthis.rotation = r + ro;\n\t\t\tthis.scaleX = Math.sqrt(x);\n\t\t\tthis.scaleY = Math.sqrt(y);\n\t\t\tif (y > MathUtils.epsilon2) {\n\t\t\t\tthis.shearY = MathUtils.atan2Deg(rd, rb);\n\t\t\t\tif (ra * rd - rb * rc < 0) {\n\t\t\t\t\tthis.scaleY = -this.scaleY;\n\t\t\t\t\tthis.shearY += 90 - r;\n\t\t\t\t} else\n\t\t\t\t\tthis.shearY -= 90 + r;\n\t\t\t\tif (this.shearY > 180)\n\t\t\t\t\tthis.shearY -= 360;\n\t\t\t\telse if (this.shearY <= -180) //\n\t\t\t\t\tthis.shearY += 360;\n\t\t\t} else\n\t\t\t\tthis.shearY = 0;\n\t\t} else {\n\t\t\tthis.scaleX = 0;\n\t\t\tthis.scaleY = Math.sqrt(y);\n\t\t\tthis.shearY = 0;\n\t\t\tthis.rotation = y > MathUtils.epsilon2 ? MathUtils.atan2Deg(rd, rb) - 90 + ro : ro;\n\t\t}\n\t}\n\n\t/** If the world transform has been modified by constraints and the local transform no longer matches,\n\t * {@link updateLocalTransform} is called. Call this after {@link Skeleton.updateWorldTransform} before\n\t * using the applied local transform. */\n\tpublic validateLocalTransform (skeleton: Skeleton): void {\n\t\tif (this.local === skeleton._update) this.updateLocalTransform(skeleton);\n\t}\n\n\tmodifyLocal (skeleton: Skeleton): void {\n\t\tif (this.local === skeleton._update) this.updateLocalTransform(skeleton);\n\t\tthis.world = 0;\n\t\tthis.resetWorld(skeleton._update);\n\t}\n\n\tmodifyWorld (update: number): void {\n\t\tthis.local = update;\n\t\tthis.world = update;\n\t\tthis.resetWorld(update);\n\t}\n\n\tprivate resetWorld (update: number): void {\n\t\tconst children = this.bone.children;\n\t\tfor (let i = 0, n = children.length; i < n; i++) {\n\t\t\tconst child = children[i].appliedPose;\n\t\t\tif (child.world === update) {\n\t\t\t\tchild.world = 0;\n\t\t\t\tchild.local = 0;\n\t\t\t\tchild.resetWorld(update);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** The world rotation for the X axis, calculated using {@link a} and {@link c}. This is the direction the bone is\n\t * pointing. */\n\tpublic getWorldRotationX (): number {\n\t\treturn MathUtils.atan2Deg(this.c, this.a);\n\t}\n\n\t/** The world rotation for the Y axis, calculated using {@link b} and {@link d}. */\n\tpublic getWorldRotationY (): number {\n\t\treturn MathUtils.atan2Deg(this.d, this.b);\n\t}\n\n\t/** The magnitude (always positive) of the world scale X, calculated using {@link a} and {@link c}. */\n\tpublic getWorldScaleX (): number {\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\tpublic getWorldScaleY (): number {\n\t\treturn Math.sqrt(this.b * this.b + this.d * this.d);\n\t}\n\n\t// public Matrix3 getWorldTransform (Matrix3 worldTransform) {\n\t// \tif (worldTransform == null) throw new IllegalArgumentException(\"worldTransform cannot be null.\");\n\t// \tfloat[] val = worldTransform.val;\n\t// \tval[M00] = a;\n\t// \tval[M01] = b;\n\t// \tval[M10] = c;\n\t// \tval[M11] = d;\n\t// \tval[M02] = worldX;\n\t// \tval[M12] = worldY;\n\t// \tval[M20] = 0;\n\t// \tval[M21] = 0;\n\t// \tval[M22] = 1;\n\t// \treturn worldTransform;\n\t// }\n\n\t/** Transforms a point from world coordinates to the bone's local coordinates. */\n\tpublic worldToLocal (world: Vector2): Vector2 {\n\t\tif (world == null) throw new Error(\"world cannot be null.\");\n\t\tconst det = this.a * this.d - this.b * this.c;\n\t\tconst x = world.x - this.worldX, y = world.y - this.worldY;\n\t\tworld.x = (x * this.d - y * this.b) / det;\n\t\tworld.y = (y * this.a - x * this.c) / det;\n\t\treturn world;\n\t}\n\n\t/** Transforms a point from the bone's local coordinates to world coordinates. */\n\tpublic localToWorld (local: Vector2): Vector2 {\n\t\tif (local == null) throw new Error(\"local cannot be null.\");\n\t\tconst 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 point from world coordinates to the parent bone's local coordinates. */\n\tpublic worldToParent (world: Vector2): Vector2 {\n\t\tif (world == null) throw new Error(\"world cannot be null.\");\n\t\treturn this.bone.parent == null ? world : this.bone.parent.appliedPose.worldToLocal(world);\n\t}\n\n\t/** Transforms a point from the parent bone's coordinates to world coordinates. */\n\tpublic parentToWorld (world: Vector2): Vector2 {\n\t\tif (world == null) throw new Error(\"world cannot be null.\");\n\t\treturn this.bone.parent == null ? world : this.bone.parent.appliedPose.localToWorld(world);\n\t}\n\n\t/** Transforms a world rotation to a local rotation. */\n\tpublic worldToLocalRotation (worldRotation: number): number {\n\t\tworldRotation *= MathUtils.degRad;\n\t\tconst sin = Math.sin(worldRotation), cos = Math.cos(worldRotation);\n\t\treturn MathUtils.atan2Deg(this.a * sin - this.c * cos, this.d * cos - this.b * sin) + this.rotation - this.shearX;\n\t}\n\n\t/** Transforms a local rotation to a world rotation. */\n\tlocalToWorldRotation (localRotation: number): number {\n\t\tlocalRotation = (localRotation - this.rotation - this.shearX) * MathUtils.degRad;\n\t\tconst sin = Math.sin(localRotation), cos = Math.cos(localRotation);\n\t\treturn MathUtils.atan2Deg(cos * this.c + sin * this.d, cos * this.a + sin * this.b);\n\t}\n\n\t/** Rotates the world transform the specified amount. */\n\trotateWorld (degrees: number) {\n\t\tdegrees *= MathUtils.degRad;\n\t\tconst sin = Math.sin(degrees), cos = Math.cos(degrees);\n\t\tconst ra = this.a, rb = this.b;\n\t\tthis.a = cos * ra - sin * this.c;\n\t\tthis.b = cos * rb - sin * this.d;\n\t\tthis.c = sin * ra + cos * this.c;\n\t\tthis.d = sin * rb + cos * this.d;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Pose } from \"./Pose.js\";\nimport type { PosedData } from \"./PosedData.js\";\n\n/** The base class for an object with a number of poses:\n * - {@link data}: The setup pose.\n * - {@link pose}: The unconstrained pose. Set by animations and application code.\n * - {@link appliedPose}: The pose to use for rendering. Possibly modified by constraints.\n */\nexport abstract class Posed<\n\tD extends PosedData<P>,\n\tP extends Pose<P>> {\n\n\t/** The constraint's setup pose data. */\n\treadonly data: D;\n\treadonly pose: P;\n\treadonly constrainedPose: P;\n\tappliedPose: P;\n\n\tconstructor (data: D, pose: P, constrainedPose: P) {\n\t\tif (data == null) throw new Error(\"data cannot be null.\");\n\t\tthis.data = data;\n\t\tthis.pose = pose;\n\t\tthis.constrainedPose = constrainedPose;\n\t\tthis.appliedPose = pose;\n\t}\n\n\t/** Sets the unconstrained pose to the setup pose. */\n\tpublic setupPose (): void {\n\t\tthis.pose.set(this.data.setupPose);\n\t}\n\n\t/** The setup pose data. May be shared with multiple instances. */\n\tpublic getData (): D {\n\t\treturn this.data;\n\t}\n\n\t/** The unconstrained pose for this object, set by animations and application code. */\n\tpublic getPose (): P {\n\t\treturn this.pose;\n\t}\n\n\t/** The pose to use for rendering. If no constraints modify this pose, this is the same as {@link pose}. Otherwise it is a\n\t * copy of {@link pose} modified by constraints. */\n\tpublic getAppliedPose (): P {\n\t\treturn this.appliedPose;\n\t}\n\n\t/** Sets the applied pose to the unconstrained pose, for when no constraints will modify the pose. */\n\tunconstrained () {\n\t\tthis.appliedPose = this.pose;\n\t}\n\n\t/** Sets the applied pose to the constrained pose, in anticipation of the applied pose being modified by constraints. */\n\tconstrained () {\n\t\tthis.appliedPose = this.constrainedPose;\n\t}\n\n\t/** Sets the constrained pose to the unconstrained pose, as a starting point for constraints to be applied. */\n\tresetConstrained () { // Port: resetConstrained - reference runtime: reset()\n\t\tthis.constrainedPose.set(this.pose);\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Pose } from \"./Pose.js\";\nimport { Posed } from \"./Posed.js\";\nimport type { PosedData } from \"./PosedData.js\";\n\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Skin } from \"./Skin.js\";\n\n/** A posed object that may be active or inactive. */\nexport abstract class PosedActive<\n\tD extends PosedData<P>,\n\tP extends Pose<P>>\n\textends Posed<D, P> {\n\n\tactive = false;\n\n\tprotected constructor (data: D, pose: P, constrained: P) {\n\t\tsuper(data, pose, constrained);\n\t\tthis.setupPose();\n\t}\n\n\t/** Returns false when this constraint won't be updated by\n\t * {@link Skeleton.updateWorldTransform} because a skin is required and the\n\t * {@link Skeleton.skin active skin} does not contain this item. See {@link Skin.bones}, {@link Skin.constraints},\n\t * {@link PosedData.skinRequired}, and {@link Skeleton.updateCache}. */\n\tpublic isActive (): boolean {\n\t\treturn this.active;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { BoneData } from \"./BoneData.js\";\nimport { BonePose } from \"./BonePose.js\";\nimport { PosedActive } from \"./PosedActive.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\n\n/** A node in a skeleton's hierarchy with a transform that affects its children and their attachments. A bone has a number of\n * poses:\n * - {@link data}: The setup pose.\n * - {@link pose}: The unconstrained local pose. Set by animations and application code.\n * - {@link appliedPose}: The local pose to use for rendering. Possibly modified by constraints.\n * - World transform: the local pose combined with the parent world transform. Computed on a pose by\n * {@link BonePose.updateWorldTransform} and {@link Skeleton.updateWorldTransform}.\n */\nexport class Bone extends PosedActive<BoneData, BonePose> {\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 = [] as Bone[];\n\n\tsorted = false;\n\n\tconstructor (data: BoneData, parent: Bone | null) {\n\t\tsuper(data, new BonePose(), new BonePose());\n\t\tthis.parent = parent;\n\t\tthis.appliedPose.bone = this;\n\t\tthis.constrainedPose.bone = this;\n\t}\n\n\t/** Copy constructor. Does not copy the {@link children} bones. */\n\tcopy (parent: Bone | null): Bone {\n\t\tconst copy = new Bone(this.data, parent);\n\t\tcopy.pose.set(this.pose);\n\t\treturn copy;\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { ConstraintData } from \"./ConstraintData.js\";\nimport type { Physics } from \"./Physics.js\";\nimport type { Pose } from \"./Pose.js\";\nimport { PosedActive } from \"./PosedActive.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Update } from \"./Update.js\";\n\nexport abstract class Constraint<\n\tT extends Constraint<T, D, P>,\n\tD extends ConstraintData<T, P>,\n\tP extends Pose<P>>\n\textends PosedActive<D, P> implements Update {\n\n\tconstructor (data: D, pose: P, constrained: P) {\n\t\tsuper(data, pose, constrained);\n\t}\n\n\tabstract copy (skeleton: Skeleton): T;\n\n\tabstract sort (skeleton: Skeleton): void;\n\n\tabstract update (skeleton: Skeleton, physics: Physics): void;\n\n\tisSourceActive (): boolean {\n\t\treturn true;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Slot } from \"./Slot.js\";\nimport { Utils } from \"./Utils.js\";\n\n/** Stores the skeleton's draw order, which is the order that each slot's attachment is rendered. */\nexport class DrawOrder {\n\treadonly _setupPose: Slot[];\n\n\t/** The unconstrained draw order, set by animations and application code. */\n\treadonly pose: Slot[];\n\treadonly constrainedPose: Slot[];\n\n\t/** The constrained draw order for rendering. If no constraints modify the draw order, this is the same as {@link pose}.\n\t * Otherwise it is a copy of {@link pose} modified by constraints. */\n\tappliedPose: Slot[];\n\n\tconstructor (setupPose: Slot[]) {\n\t\tthis._setupPose = setupPose;\n\t\tthis.pose = [...setupPose];\n\t\tthis.constrainedPose = [];\n\t\tthis.appliedPose = this.pose;\n\t}\n\n\t/** Sets the unconstrained draw order to the setup pose order. */\n\tsetupPose () {\n\t\tthis.pose.length = this._setupPose.length;\n\t\tUtils.arrayCopy(this._setupPose, 0, this.pose, 0, this._setupPose.length);\n\t}\n\n\t/** Sets the applied pose to the unconstrained pose, for when no constraints will modify the draw order. */\n\tunconstrained () {\n\t\tthis.appliedPose = this.pose;\n\t}\n\n\t/** Sets the applied pose to the constrained pose, in anticipation of the applied pose being modified by constraints. */\n\tconstrained () {\n\t\tthis.appliedPose = this.constrainedPose;\n\t}\n\n\t/** Copies the unconstrained pose to the constrained pose, as a starting point for constraints to be applied. */\n\tresetConstrained () {\n\t\tthis.constrainedPose.length = this.pose.length;\n\t\tUtils.arrayCopy(this.pose, 0, this.constrainedPose, 0, this.pose.length);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { BonePose } from \"./BonePose.js\";\nimport type { Constraint } from \"./Constraint.js\";\nimport type { Pose } from \"./Pose.js\";\nimport { PosedData } from \"./PosedData.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\n\n/** The base class for all constraint datas. */\nexport abstract class ConstraintData<\n\tT extends Constraint<T, ConstraintData<T, P>, P>,\n\tP extends Pose<P>>\n\textends PosedData<P> {\n\n\tconstructor (name: string, setup: P) {\n\t\tsuper(name, setup);\n\t}\n\n\tabstract create (skeleton: Skeleton): T;\n}\n\n/** Determines how the {@link BonePose.scaleY} changes when {@link BonePose.scaleX} is set. */\nexport enum ScaleYMode {\n\t/** scaleY is not changed. */\n\tNone,\n\t/** scaleY is multiplied by the scaleX factor, preserving the bone's aspect ratio. */\n\tUniform,\n\t/** scaleY is divided by the scaleX factor, preserving the bone's area. */\n\tVolume\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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\nimport type { EventTimeline, Timeline } from \"./Animation.js\";\nimport type { AnimationStateListener } from \"./AnimationState.js\";\nimport type { EventData } from \"./EventData.js\";\n\n/** Fired by {@link EventTimeline} when specific animation times are reached.\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\n\t/** The animation time this event was keyed, or -1 for the setup pose. */\n\ttime: number = 0;\n\n\treadonly data: EventData;\n\n\t/** The integer payload for this event. */\n\tintValue: number = 0;\n\n\t/** The float payload for this event. */\n\tfloatValue: number = 0;\n\n\tstringValue: string | null = null;\n\n\t/** If an audio path is set, the volume for the audio. */\n\tvolume: number = 0;\n\n\t/** If an audio path is set, the left/right balance for the audio. */\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 { Event } from \"./Event.js\";\nimport type { SkeletonData } from \"./SkeletonData.js\";\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\t/** The name of the event, unique across all events in the skeleton.\n\t *\n\t * See {@link SkeletonData.findEvent}. */\n\tname: string;\n\n\t_audioPath: string | null = null;\n\t/** Path to an audio file relative to the audio folder as defined in Spine. */\n\tget audioPath (): string {\n\t\t// biome-ignore lint/style/noNonNullAssertion: can't be null after initialization\n\t\treturn this._audioPath!;\n\t}\n\n\tset audioPath (audioPath: string | null) {\n\t\tif (audioPath == null) throw new Error(\"audioPath cannot be null.\");\n\t\tthis._audioPath = audioPath;\n\t}\n\n\t/** The setup values that are shared by all events with this data. */\n\treadonly setupPose = new Event(-1, this);\n\n\tconstructor (name: string) {\n\t\tthis.name = name;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Pose } from \"./Pose.js\";\n\n/** Stores a pose for an IK constraint. */\nexport class IkConstraintPose implements Pose<IkConstraintPose> {\n\t/** For two bone IK, controls the bend direction of the IK bones, either 1 or -1. */\n\tbendDirection = 0;\n\n\t/** For one bone IK, when true and the target is too close, the bone is scaled to reach it. */\n\tcompress = false;\n\n\t/** When true and the target is out of range, the parent bone is scaled to reach it.\n\t *\n\t * For two bone IK: 1) the child bone's local Y translation is set to 0, 2) stretch is not applied if {@link softness} is > 0,\n\t * and 3) if 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 rotation.\n\t *\n\t * For two bone IK: if the parent bone has local nonuniform scale, the child bone's local Y translation is set to 0. */\n\tmix = 0;\n\n\t/** For two bone IK, the target bone's distance from the maximum reach of the bones where rotation begins to slow. The bones\n\t * will not straighten completely until the target is this far out of range. */\n\tsoftness = 0;\n\n\tpublic set (pose: IkConstraintPose) {\n\t\tthis.mix = pose.mix;\n\t\tthis.softness = pose.softness;\n\t\tthis.bendDirection = pose.bendDirection;\n\t\tthis.compress = pose.compress;\n\t\tthis.stretch = pose.stretch;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Bone } from \"./Bone.js\";\nimport { Inherit } from \"./BoneData.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport { Constraint } from \"./Constraint.js\";\nimport { ScaleYMode } from \"./ConstraintData.js\";\nimport type { IkConstraintData } from \"./IkConstraintData.js\";\nimport { IkConstraintPose } from \"./IkConstraintPose.js\";\nimport type { Physics } from \"./Physics.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { MathUtils } from \"./Utils.js\";\n\n/** Adjusts the local rotation of 1 or 2 constrained bones so the world position of the tip of the last bone is as close to the\n * target bone as possible.\n *\n * See [IK constraints](http://esotericsoftware.com/spine-ik-constraints) in the Spine User Guide. */\nexport class IkConstraint extends Constraint<IkConstraint, IkConstraintData, IkConstraintPose> {\n\t/** The 1 or 2 bones that will be modified by this IK constraint. */\n\treadonly bones: Array<BonePose>;\n\n\t/** The bone that is the IK target. */\n\ttarget: Bone;\n\n\tconstructor (data: IkConstraintData, skeleton: Skeleton) {\n\t\tsuper(data, new IkConstraintPose(), new IkConstraintPose());\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\n\t\tthis.bones = [] as BonePose[];\n\t\tfor (const boneData of data.bones)\n\t\t\tthis.bones.push(skeleton.bones[boneData.index].constrainedPose);\n\n\t\tthis.target = skeleton.bones[data.target.index];\n\t}\n\n\tcopy (skeleton: Skeleton): IkConstraint {\n\t\tvar copy = new IkConstraint(this.data, skeleton);\n\t\tcopy.pose.set(this.pose);\n\t\treturn copy;\n\t}\n\n\tupdate (skeleton: Skeleton, physics: Physics) {\n\t\tconst p = this.appliedPose;\n\t\tif (p.mix === 0) return;\n\t\tconst target = this.target.appliedPose;\n\t\tconst bones = this.bones;\n\t\tswitch (bones.length) {\n\t\t\tcase 1:\n\t\t\t\tIkConstraint.apply(skeleton, bones[0], target.worldX, target.worldY, p.compress, p.stretch, this.data.scaleYMode, p.mix);\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tIkConstraint.apply(skeleton, bones[0], bones[1], target.worldX, target.worldY, p.bendDirection, p.stretch, this.data.scaleYMode,\n\t\t\t\t\tp.softness, p.mix);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tsort (skeleton: Skeleton) {\n\t\tskeleton.sortBone(this.target);\n\t\tconst parent = this.bones[0].bone;\n\t\tskeleton.sortBone(parent);\n\t\tskeleton._updateCache.push(this);\n\t\tparent.sorted = false;\n\t\tskeleton.sortReset(parent.children);\n\t\tskeleton.constrained(parent);\n\t\tif (this.bones.length > 1) skeleton.constrained(this.bones[1].bone);\n\t}\n\n\tisSourceActive () {\n\t\treturn this.target.active;\n\t}\n\n\t/** Applies 1 bone IK. The target is specified in the world coordinate system. */\n\tpublic static apply (skeleton: Skeleton, bone: BonePose, targetX: number, targetY: number, compress: boolean, stretch: boolean, scaleYMode: ScaleYMode, mix: number): void;\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\tpublic static apply (skeleton: Skeleton, parent: BonePose, child: BonePose, targetX: number, targetY: number, bendDir: number, stretch: boolean, scaleYMode: ScaleYMode, softness: number, mix: number): void;\n\n\tpublic static apply (skeleton: Skeleton, boneOrParent: BonePose, targetXorChild: number | BonePose, targetYOrTargetX: number, compressOrTargetY: boolean | number,\n\t\tstretchOrBendDir: boolean | number, scaleYModeOrStretch: ScaleYMode | boolean, mixOrScaleYMode: number | boolean, softness?: number, mix?: number) {\n\n\t\tif (typeof targetXorChild === \"number\")\n\t\t\tIkConstraint.apply1(skeleton, boneOrParent, targetXorChild, targetYOrTargetX, compressOrTargetY as boolean, stretchOrBendDir as boolean, scaleYModeOrStretch as ScaleYMode, mixOrScaleYMode as number);\n\t\telse\n\t\t\tIkConstraint.apply2(skeleton, boneOrParent, targetXorChild as BonePose, targetYOrTargetX, compressOrTargetY as number, stretchOrBendDir as number,\n\t\t\t\tscaleYModeOrStretch as boolean, mixOrScaleYMode as ScaleYMode, softness as number, mix as number);\n\t}\n\n\tprivate static apply1 (skeleton: Skeleton, bone: BonePose, targetX: number, targetY: number, compress: boolean, stretch: boolean, scaleYMode: ScaleYMode, mix: number) {\n\t\tbone.modifyLocal(skeleton);\n\n\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\tconst p = bone.bone.parent!.appliedPose;\n\n\t\tlet pa = p.a, pb = p.b, pc = p.c, pd = p.d;\n\t\tlet rotationIK = -bone.shearX - bone.rotation, tx = 0, ty = 0;\n\n\t\tswitch (bone.inherit) {\n\t\t\tcase Inherit.OnlyTranslation:\n\t\t\t\ttx = (targetX - bone.worldX) * MathUtils.signum(skeleton.scaleX);\n\t\t\t\tty = (targetY - bone.worldY) * MathUtils.signum(skeleton.scaleY);\n\t\t\t\tbreak;\n\t\t\t// biome-ignore lint/suspicious/noFallthroughSwitchClause: reference runtime\n\t\t\tcase Inherit.NoRotationOrReflection: {\n\t\t\t\tconst s = Math.abs(pa * pd - pb * pc) / Math.max(MathUtils.epsilon, pa * pa + pc * pc);\n\t\t\t\tconst sa = pa / skeleton.scaleX;\n\t\t\t\tconst sc = pc / skeleton.scaleY;\n\t\t\t\tpb = -sc * s * skeleton.scaleX;\n\t\t\t\tpd = sa * s * skeleton.scaleY;\n\t\t\t\trotationIK += MathUtils.atan2Deg(sc, sa);\n\t\t\t}\n\t\t\t// Fall through\n\t\t\tdefault: {\n\t\t\t\tconst x = targetX - p.worldX, y = targetY - p.worldY;\n\t\t\t\tconst d = pa * pd - pb * pc;\n\t\t\t\tif (Math.abs(d) <= MathUtils.epsilon) {\n\t\t\t\t\ttx = 0;\n\t\t\t\t\tty = 0;\n\t\t\t\t} else {\n\t\t\t\t\ttx = (x * pd - y * pb) / d - bone.x;\n\t\t\t\t\tty = (y * pa - x * pc) / d - bone.y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\trotationIK += MathUtils.atan2Deg(ty, tx);\n\t\tif (bone.scaleX < 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\tbone.rotation += rotationIK * mix;\n\t\tif (compress || stretch) {\n\t\t\tswitch (bone.inherit) {\n\t\t\t\tcase Inherit.NoScale:\n\t\t\t\tcase Inherit.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\tconst b = bone.bone.data.length * bone.scaleX;\n\t\t\tif (b > MathUtils.epsilon) {\n\t\t\t\tconst dd = tx * tx + ty * ty;\n\t\t\t\tif ((compress && dd < b * b) || (stretch && dd > b * b)) {\n\t\t\t\t\tconst s = (Math.sqrt(dd) / b - 1) * mix + 1;\n\t\t\t\t\tbone.scaleX *= s;\n\t\t\t\t\tswitch (scaleYMode) {\n\t\t\t\t\t\tcase ScaleYMode.Uniform: bone.scaleY *= s; break;\n\t\t\t\t\t\tcase ScaleYMode.Volume: bone.scaleY /= s < 0.7 ? 0.25 + 0.642857 * s : s;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\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\tprivate static apply2 (skeleton: Skeleton, parent: BonePose, child: BonePose, targetX: number, targetY: number, bendDir: number, stretch: boolean, scaleYMode: ScaleYMode, softness: number, mix: number) {\n\t\tif (parent.inherit !== Inherit.Normal || child.inherit !== Inherit.Normal) return;\n\t\tparent.modifyLocal(skeleton);\n\t\tchild.modifyLocal(skeleton);\n\t\tlet px = parent.x, py = parent.y, psx = parent.scaleX, psy = parent.scaleY, csx = child.scaleX;\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 cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d;\n\t\tconst u = Math.abs(psx - psy) <= MathUtils.epsilon;\n\t\tif (!u || stretch) {\n\t\t\tchild.y = 0;\n\t\t\tcwx = a * child.x + parent.worldX;\n\t\t\tcwy = c * child.x + parent.worldY;\n\t\t} else {\n\t\t\tcwx = a * child.x + b * child.y + parent.worldX;\n\t\t\tcwy = c * child.x + d * child.y + parent.worldY;\n\t\t}\n\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\tconst pp = parent.bone.parent!.appliedPose;\n\t\ta = pp.a;\n\t\tb = pp.b;\n\t\tc = pp.c;\n\t\td = pp.d;\n\t\tlet id = a * d - b * c, x = cwx - pp.worldX, y = cwy - pp.worldY;\n\t\tid = Math.abs(id) <= MathUtils.epsilon ? 0 : 1 / id;\n\t\tconst 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.bone.data.length * csx, a1: number, a2: number;\n\t\tif (l1 < MathUtils.epsilon) {\n\t\t\tIkConstraint.apply(skeleton, parent, targetX, targetY, false, stretch, ScaleYMode.None, mix);\n\t\t\tchild.rotation = 0;\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\tconst 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\t// biome-ignore lint/suspicious/noConfusingLabels: reference runtime\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) * mix + 1;\n\t\t\t\t\tparent.scaleX *= a;\n\t\t\t\t\tswitch (scaleYMode) {\n\t\t\t\t\t\tcase ScaleYMode.Uniform: parent.scaleY *= a; break;\n\t\t\t\t\t\tcase ScaleYMode.Volume: parent.scaleY /= a < 0.7 ? 0.25 + 0.642857 * a : a;\n\t\t\t\t\t}\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\tconst 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\tconst 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\tconst r = Math.abs(r0) < Math.abs(r1) ? r0 : r1;\n\t\t\t\tr0 = dd - r * r;\n\t\t\t\tif (r0 >= 0) {\n\t\t\t\t\ty = Math.sqrt(r0) * 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\tconst os = Math.atan2(child.y, child.x) * s2;\n\t\ta1 = (a1 - os) * MathUtils.radDeg + os1 - parent.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.rotation += a1 * mix;\n\t\ta2 = ((a2 + os) * MathUtils.radDeg - child.shearX) * s2 + os2 - child.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.rotation += a2 * mix;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { BoneData } from \"./BoneData.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport { ConstraintData, ScaleYMode } from \"./ConstraintData.js\";\nimport { IkConstraint } from \"./IkConstraint.js\";\nimport { IkConstraintPose } from \"./IkConstraintPose.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\n\n/** Stores the setup pose for an {@link IkConstraint}.\n *\n * See [IK constraints](http://esotericsoftware.com/spine-ik-constraints) in the Spine User Guide. */\nexport class IkConstraintData extends ConstraintData<IkConstraint, IkConstraintPose> {\n\t/** The bones that are constrained by this IK constraint. */\n\tbones = [] as BoneData[];\n\n\tprivate _target: BoneData | null = null;\n\t/** The bone that is the IK target. */\n\tpublic set target (boneData: BoneData) { this._target = boneData; }\n\tpublic get target () {\n\t\tif (!this._target) throw new Error(\"target cannot be null.\")\n\t\treturn this._target;\n\t}\n\n\t/** Determines how the {@link BonePose.scaleY} changes when {@link IkConstraintPose.compress} or\n\t * {@link IkConstraintPose.stretch} set {@link BonePose.scaleX}. */\n\t_scaleYMode = ScaleYMode.None;\n\tpublic set scaleYMode (scaleYMode: ScaleYMode) { this._scaleYMode = scaleYMode; }\n\tpublic get scaleYMode () {\n\t\tif (this._scaleYMode == null) throw new Error(\"scaleYMode cannot be null.\")\n\t\treturn this._scaleYMode;\n\t}\n\n\tconstructor (name: string) {\n\t\tsuper(name, new IkConstraintPose());\n\t}\n\n\tpublic create (skeleton: Skeleton) {\n\t\treturn new IkConstraint(this, skeleton);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Pose } from \"./Pose.js\"\n\n/** Stores a pose for a path constraint. */\nexport class PathConstraintPose implements Pose<PathConstraintPose> {\n\t/** The position along the path. */\n\tposition: number = 0;\n\n\t/** The spacing between bones. */\n\tspacing: number = 0;\n\n\t/** A percentage (0-1) that controls the mix between the constrained and unconstrained rotation. */\n\tmixRotate = 0;\n\n\t/** A percentage (0-1) that controls the mix between the constrained and unconstrained translation X. */\n\tmixX = 0;\n\n\t/** A percentage (0-1) that controls the mix between the constrained and unconstrained translation Y. */\n\tmixY = 0;\n\n\tpublic set (pose: PathConstraintPose) {\n\t\tthis.position = pose.position;\n\t\tthis.spacing = pose.spacing;\n\t\tthis.mixRotate = pose.mixRotate;\n\t\tthis.mixX = pose.mixX;\n\t\tthis.mixY = pose.mixY;\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { BoneData } from \"./BoneData.js\";\nimport { ConstraintData } from \"./ConstraintData.js\";\nimport { PathConstraint } from \"./PathConstraint.js\";\nimport { PathConstraintPose } from \"./PathConstraintPose.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { SlotData } from \"./SlotData.js\";\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<PathConstraint, PathConstraintPose> {\n\t/** The bones that will be modified by this path constraint. */\n\tbones = [] as BoneData[];\n\n\t/** The slot whose path attachment will be used to constrained the bones. */\n\tpublic set slot (slotData: SlotData) { this._slot = slotData; }\n\tpublic get slot () {\n\t\tif (!this._slot) throw new Error(\"SlotData not set.\")\n\t\telse return this._slot;\n\t}\n\tprivate _slot: SlotData | null = null;\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\tconstructor (name: string) {\n\t\tsuper(name, new PathConstraintPose());\n\t}\n\n\tpublic create (skeleton: Skeleton) {\n\t\treturn new PathConstraint(this, skeleton);\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Attachment } from \"./attachments/Attachment.js\";\nimport { PathAttachment } from \"./attachments/PathAttachment.js\";\nimport type { Bone } from \"./Bone.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport { Constraint } from \"./Constraint.js\";\nimport { type PathConstraintData, PositionMode, RotateMode, SpacingMode } from \"./PathConstraintData.js\";\nimport { PathConstraintPose } from \"./PathConstraintPose.js\";\nimport type { Physics } from \"./Physics.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Skin } from \"./Skin.js\";\nimport type { Slot } from \"./Slot.js\";\nimport { MathUtils, Utils } from \"./Utils.js\";\n\n\n/** Adjusts the rotation, translation, and scale of the 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 extends Constraint<PathConstraint, PathConstraintData, PathConstraintPose> {\n\tstatic NONE = -1; static BEFORE = -2; static AFTER = -3;\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<BonePose>;\n\n\t/** The slot whose path attachment will be used to constrained the bones. */\n\tslot: Slot;\n\n\tspaces = [] as number[]; positions = [] as number[];\n\tworld = [] as number[]; curves = [] as number[]; lengths = [] as number[];\n\tsegments = [] as number[];\n\n\tconstructor (data: PathConstraintData, skeleton: Skeleton) {\n\t\tsuper(data, new PathConstraintPose(), new PathConstraintPose());\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\t\tthis.data = data;\n\n\t\tthis.bones = [] as BonePose[];\n\t\tfor (const boneData of this.data.bones)\n\t\t\tthis.bones.push(skeleton.bones[boneData.index].constrainedPose);\n\n\t\tthis.slot = skeleton.slots[data.slot.index];\n\t}\n\n\tpublic copy (skeleton: Skeleton) {\n\t\tvar copy = new PathConstraint(this.data, skeleton);\n\t\tcopy.pose.set(this.pose);\n\t\treturn copy;\n\t}\n\n\tupdate (skeleton: Skeleton, physics: Physics) {\n\t\tconst attachment = this.slot.appliedPose.attachment;\n\t\tif (!(attachment instanceof PathAttachment)) return;\n\n\t\tconst p = this.appliedPose;\n\t\tconst mixRotate = p.mixRotate, mixX = p.mixX, mixY = p.mixY;\n\t\tif (mixRotate === 0 && mixX === 0 && mixY === 0) return;\n\n\t\tconst data = this.data;\n\t\tconst tangents = data.rotateMode === RotateMode.Tangent, scale = data.rotateMode === RotateMode.ChainScale;\n\n\t\tconst bones = this.bones;\n\t\tconst boneCount = bones.length, spacesCount = tangents ? boneCount : boneCount + 1;\n\t\tconst spaces = Utils.setArraySize(this.spaces, spacesCount), lengths: Array<number> = scale ? this.lengths = Utils.setArraySize(this.lengths, boneCount) : [];\n\t\tconst spacing = p.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\tconst bone = bones[i];\n\t\t\t\t\t\tconst setupLength = bone.bone.data.length;\n\t\t\t\t\t\tconst x = setupLength * bone.a, y = setupLength * bone.c;\n\t\t\t\t\t\tlengths[i] = Math.sqrt(x * x + y * y);\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\tconst bone = bones[i];\n\t\t\t\t\tconst setupLength = bone.bone.data.length;\n\t\t\t\t\tif (setupLength < MathUtils.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\tconst x = setupLength * bone.a, y = setupLength * bone.c;\n\t\t\t\t\t\tconst 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\t}\n\t\t\tdefault: {\n\t\t\t\tconst lengthSpacing = data.spacingMode === SpacingMode.Length;\n\t\t\t\tfor (let i = 0, n = spacesCount - 1; i < n;) {\n\t\t\t\t\tconst bone = bones[i];\n\t\t\t\t\tconst setupLength = bone.bone.data.length;\n\t\t\t\t\tif (setupLength < MathUtils.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\tconst x = setupLength * bone.a, y = setupLength * bone.c;\n\t\t\t\t\t\tconst 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 ? Math.max(0, setupLength + spacing) : spacing) * length / setupLength;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst positions = this.computeWorldPositions(skeleton, 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\tconst bone = this.slot.bone.appliedPose;\n\t\t\toffsetRotation *= bone.a * bone.d - bone.b * bone.c > 0 ? MathUtils.degRad : -MathUtils.degRad;\n\t\t}\n\t\tfor (let i = 0, ip = 3, u = skeleton._update; i < boneCount; i++, ip += 3) {\n\t\t\tconst bone = bones[i];\n\t\t\tbone.worldX += (boneX - bone.worldX) * mixX;\n\t\t\tbone.worldY += (boneY - bone.worldY) * mixY;\n\t\t\tconst x = positions[ip], y = positions[ip + 1], dx = x - boneX, dy = y - boneY;\n\t\t\tif (scale) {\n\t\t\t\tconst length = lengths[i];\n\t\t\t\tif (length !== 0) {\n\t\t\t\t\tconst 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[ip - 1];\n\t\t\t\telse if (spaces[i + 1] === 0)\n\t\t\t\t\tr = positions[ip + 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\tconst length = bone.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.modifyWorld(u);\n\t\t}\n\t}\n\n\tcomputeWorldPositions (skeleton: Skeleton, path: PathAttachment, spacesCount: number, tangents: boolean) {\n\t\tconst slot = this.slot;\n\t\tlet position = this.appliedPose.position;\n\t\tlet spaces = this.spaces, out = Utils.setArraySize(this.positions, spacesCount * 3 + 2), world: Array<number> = this.world;\n\t\tconst closed = path.closed;\n\t\tlet verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE;\n\n\t\tif (!path.constantSpeed) {\n\t\t\tconst lengths = path.lengths;\n\t\t\tcurveCount -= closed ? 1 : 2;\n\t\t\tconst pathLength = lengths[curveCount];\n\t\t\tif (this.data.positionMode === PositionMode.Percent) position *= pathLength;\n\n\t\t\tlet multiplier: number;\n\t\t\tswitch (this.data.spacingMode) {\n\t\t\t\tcase SpacingMode.Percent: multiplier = pathLength; break;\n\t\t\t\tcase SpacingMode.Proportional: multiplier = pathLength / spacesCount; break;\n\t\t\t\tdefault: multiplier = 1;\n\t\t\t}\n\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\tconst 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(skeleton, slot, 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(skeleton, slot, 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\tconst 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\tconst 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(skeleton, slot, verticesLength - 4, 4, world, 0, 2);\n\t\t\t\t\t\tpath.computeWorldVertices(skeleton, slot, 0, 4, world, 4, 2);\n\t\t\t\t\t} else\n\t\t\t\t\t\tpath.computeWorldVertices(skeleton, slot, 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(skeleton, slot, 2, verticesLength - 4, world, 0, 2);\n\t\t\tpath.computeWorldVertices(skeleton, slot, 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(skeleton, slot, 2, verticesLength, world, 0, 2);\n\t\t}\n\n\t\t// Curve lengths.\n\t\tconst 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: number;\n\t\tswitch (this.data.spacingMode) {\n\t\t\tcase SpacingMode.Percent: multiplier = pathLength; break;\n\t\t\tcase SpacingMode.Proportional: multiplier = pathLength / spacesCount; break;\n\t\t\tdefault: multiplier = 1;\n\t\t}\n\n\t\tconst 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\tconst 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\tsegment = 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\tconst 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\tconst 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\tconst 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\tconst 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\tconst 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\tconst 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 || Number.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\tconst tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u;\n\t\tconst ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p;\n\t\tconst 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\tsort (skeleton: Skeleton) {\n\t\tconst slotIndex = this.slot.data.index;\n\t\tconst slotBone = this.slot.bone;\n\t\tif (skeleton.skin != null) this.sortPathSlot(skeleton, skeleton.skin, slotIndex, slotBone);\n\t\tif (skeleton.data.defaultSkin != null && skeleton.data.defaultSkin !== skeleton.skin)\n\t\t\tthis.sortPathSlot(skeleton, skeleton.data.defaultSkin, slotIndex, slotBone);\n\t\tthis.sortPath(skeleton, this.slot.pose.attachment, slotBone);\n\t\tconst bones = this.bones;\n\t\tconst boneCount = this.bones.length;\n\t\tfor (let i = 0; i < boneCount; i++) {\n\t\t\tconst bone = bones[i].bone;\n\t\t\tskeleton.sortBone(bone);\n\t\t\tskeleton.constrained(bone);\n\t\t}\n\t\tskeleton._updateCache.push(this);\n\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\tskeleton.sortReset(bones[i].bone.children);\n\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\tbones[i].bone.sorted = true;\n\t}\n\n\tprivate sortPathSlot (skeleton: Skeleton, skin: Skin, slotIndex: number, slotBone: Bone) {\n\t\tconst entries = skin.getAttachments();\n\t\tfor (let i = 0, n = entries.length; i < n; i++) {\n\t\t\tconst entry = entries[i];\n\t\t\tif (entry.slotIndex === slotIndex) this.sortPath(skeleton, entry.attachment, slotBone);\n\t\t}\n\t}\n\n\tprivate sortPath (skeleton: Skeleton, attachment: Attachment | null, slotBone: Bone) {\n\t\tif (!(attachment instanceof PathAttachment)) return;\n\t\tconst pathBones = attachment.bones;\n\t\tif (pathBones == null)\n\t\t\tskeleton.sortBone(slotBone);\n\t\telse {\n\t\t\tconst bones = skeleton.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\tskeleton.sortBone(bones[pathBones[i++]]);\n\t\t\t}\n\t\t}\n\t}\n\n\tisSourceActive () {\n\t\treturn this.slot.bone.active;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { PhysicsConstraint } from \"./PhysicsConstraint.js\";\n/** Determines how physics and other non-deterministic updates are applied. */\nexport enum Physics {\n\t/** Physics are not updated or applied. */\n\tnone,\n\n\t/** Physics are {@link PhysicsConstraint.reset | reset}. */\n\treset,\n\n\t/** Physics are updated and the pose from physics is applied. */\n\tupdate,\n\n\t/** Physics are not updated but the pose from physics is applied. */\n\tpose\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Pose } from \"./Pose.js\"\nimport type { Skeleton } from \"./Skeleton.js\";\n\n/** Stores a pose for a physics constraint. */\nexport class PhysicsConstraintPose implements Pose<PhysicsConstraintPose> {\n\n\t/** Controls how much bone movement is converted into physics movement. */\n\tinertia = 0;\n\n\t/** The amount of force used to return properties to the unconstrained value. */\n\tstrength = 0;\n\n\t/** Reduces the speed of physics movements, with more of a reduction at higher speeds. */\n\tdamping = 0;\n\n\t/** Determines susceptibility to acceleration. */\n\tmassInverse = 0;\n\n\t/** Applies a constant force along the {@link Skeleton.windX}, {@link Skeleton.windY} vector. */\n\twind = 0;\n\n\t/** Applies a constant force along the {@link Skeleton.gravityX}, {@link Skeleton.gravityY} vector. */\n\tgravity = 0;\n\n\t/** A percentage (0+) that controls the mix between the constrained and unconstrained poses. */\n\tmix = 0;\n\n\tpublic set (pose: PhysicsConstraintPose) {\n\t\tthis.inertia = pose.inertia;\n\t\tthis.strength = pose.strength;\n\t\tthis.damping = pose.damping;\n\t\tthis.massInverse = pose.massInverse;\n\t\tthis.wind = pose.wind;\n\t\tthis.gravity = pose.gravity;\n\t\tthis.mix = pose.mix;\n\t}\n\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { DeformTimeline } from \"./Animation.js\";\nimport type { Attachment } from \"./attachments/Attachment.js\";\nimport { VertexAttachment } from \"./attachments/Attachment.js\";\nimport type { Sequence } from \"./attachments/Sequence.js\";\nimport type { Pose } from \"./Pose.js\";\nimport { Color } from \"./Utils.js\";\n\n/** Stores a slot's pose. */\nexport class SlotPose implements Pose<SlotPose> {\n\t/** The color used to tint the slot's attachment. If {@link darkColor} is set, this is used as the light color for two color\n\t * tinting. */\n\treadonly color = 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 current attachment for the slot, or null if the slot has no attachment. */\n\tattachment: Attachment | null = null; // Not used in setup pose.\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 = 0;\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\n\t * {@link DeformTimeline}. */\n\treadonly deform = [] as number[];\n\n\tSlotPose () {\n\t}\n\n\tpublic set (pose: SlotPose): void {\n\t\tif (pose == null) throw new Error(\"pose cannot be null.\");\n\t\tthis.color.setFromColor(pose.color);\n\t\tif (this.darkColor != null && pose.darkColor != null) this.darkColor.setFromColor(pose.darkColor);\n\t\tthis.attachment = pose.attachment;\n\t\tthis.sequenceIndex = pose.sequenceIndex;\n\t\tthis.deform.length = 0;\n\t\tthis.deform.push(...pose.deform);\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): void {\n\t\tif (this.attachment === attachment) return;\n\t\tif (!(attachment instanceof VertexAttachment) || !(this.attachment instanceof VertexAttachment)\n\t\t\t|| attachment.timelineAttachment !== 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", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Bone } from \"./Bone.js\";\nimport { Posed } from \"./Posed.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { SlotData } from \"./SlotData.js\";\nimport { SlotPose } from \"./SlotPose.js\";\nimport { Color } from \"./Utils.js\";\n\n/** Organizes attachments for {@link Skeleton.drawOrder} purposes and provide a place to store state for an attachment.\n *\n * State cannot be stored in an attachment itself because attachments are stateless and may be shared across multiple\n * skeletons. */\nexport class Slot extends Posed<SlotData, SlotPose> {\n\treadonly skeleton: Skeleton;\n\n\t/** The bone this slot belongs to. */\n\treadonly bone: Bone;\n\n\tattachmentState: number = 0;\n\n\tconstructor (data: SlotData, skeleton: Skeleton) {\n\t\tsuper(data, new SlotPose(), new SlotPose());\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\t\tthis.skeleton = skeleton;\n\t\tthis.bone = skeleton.bones[data.boneData.index];\n\t\tif (data.setupPose.darkColor != null) {\n\t\t\tthis.pose.darkColor = new Color();\n\t\t\tthis.constrainedPose.darkColor = new Color();\n\t\t}\n\t\tthis.setupPose();\n\t}\n\n\t/** Copy constructor. */\n\tpublic copy (slot: Slot, bone: Bone, skeleton: Skeleton) {\n\t\tconst copy = new Slot(slot.data, this.skeleton);\n\t\tif (this.data.setupPose.darkColor != null) {\n\t\t\tcopy.pose.darkColor = new Color();\n\t\t\tcopy.constrainedPose.darkColor = new Color();\n\t\t}\n\t\tcopy.pose.set(slot.pose);\n\t\treturn copy;\n\t}\n\n\tsetupPose () {\n\t\tthis.pose.color.setFromColor(this.data.setupPose.color);\n\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\tif (this.pose.darkColor) this.pose.darkColor.setFromColor(this.data.setupPose.darkColor!);\n\t\tthis.pose.sequenceIndex = this.data.setupPose.sequenceIndex;\n\t\tif (!this.data.attachmentName)\n\t\t\tthis.pose.setAttachment(null);\n\t\telse {\n\t\t\tthis.pose.attachment = null;\n\t\t\tthis.pose.setAttachment(this.skeleton.getAttachment(this.data.index, this.data.attachmentName));\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { AnimationState } from \"./AnimationState.js\";\nimport type { Attachment } from \"./attachments/Attachment.js\";\nimport { ClippingAttachment } from \"./attachments/ClippingAttachment.js\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { RegionAttachment } from \"./attachments/RegionAttachment.js\";\nimport { Bone } from \"./Bone.js\";\nimport type { Constraint } from \"./Constraint.js\";\nimport { DrawOrder } from \"./DrawOrder.js\";\nimport type { Physics } from \"./Physics.js\";\nimport { PhysicsConstraint } from \"./PhysicsConstraint.js\";\nimport type { PhysicsConstraintPose } from \"./PhysicsConstraintPose.js\";\nimport type { Posed } from \"./Posed.js\";\nimport type { SkeletonClipping } from \"./SkeletonClipping.js\";\nimport type { SkeletonData } from \"./SkeletonData.js\";\nimport type { Skin } from \"./Skin.js\";\nimport { Slot } from \"./Slot.js\";\nimport { Color, type NumberArrayLike, Utils, Vector2 } from \"./Utils.js\";\n\n/** Stores bones and slots to be posed by animations and application code. Multiple skeleton instances can share the same\n * {@link SkeletonData}, including animations, attachments, and skins.\n *\n * After posing, call {@link updateWorldTransform} to apply constraints and compute world transforms for rendering.\n *\n * See [Instance objects](http://esotericsoftware.com/spine-runtime-architecture#Instance-objects) in the Spine Runtimes Guide. */\nexport class Skeleton {\n\tprivate static quadTriangles = [0, 1, 2, 2, 3, 0];\n\tstatic yDown = false;\n\tstatic get yDir (): number {\n\t\treturn Skeleton.yDown ? -1 : 1;\n\t}\n\n\t/** The skeleton's setup pose data. */\n\treadonly data: SkeletonData;\n\n\t/** The skeleton's bones, sorted parent first. The root bone is always the first bone. */\n\treadonly bones: Array<Bone>;\n\n\t/** The skeleton's slots. To add a slot, also add it to {@link DrawOrder.pose}. */\n\treadonly slots: Array<Slot>;\n\n\t/** The skeleton's draw order. Use {@link DrawOrder.appliedPose} for rendering and {@link DrawOrder.pose} for changing the draw\n\t * order. */\n\treadonly drawOrder: DrawOrder;\n\n\t/** The skeleton's constraints. */\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\treadonly constraints: Array<Constraint<any, any, any>>;\n\n\t/** The skeleton's physics constraints. */\n\treadonly physics: Array<PhysicsConstraint>;\n\n\t/** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link updateCache}. */\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\treadonly _updateCache = [] as any[];\n\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\treadonly resetCache: Array<Posed<any, any>> = [];\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\treadonly color: Color;\n\n\t/** Scales the entire skeleton on the X axis.\n\t *\n\t * Bones that do not inherit scale are still affected by this property. */\n\tscaleX = 1;\n\n\tprivate _scaleY = 1;\n\n\t/** Scales the entire skeleton on the Y axis.\n\t *\n\t * Bones that do not inherit scale are still affected by this property. */\n\tpublic get scaleY () {\n\t\treturn this._scaleY * Skeleton.yDir;\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\t *\n\t * Bones that do not inherit translation are still affected by this property. */\n\tx = 0;\n\n\t/** Sets the skeleton Y position, which is added to the root bone worldY position.\n\t *\n\t * Bones that do not inherit translation are still affected by this property. */\n\ty = 0;\n\n\t/** Returns the skeleton's time, is used for time-based manipulations, such as {@link PhysicsConstraint}.\n\t *\n\t * See {@link _update}. */\n\ttime = 0;\n\n\t/** The x component of a vector that defines the direction {@link PhysicsConstraintPose.wind} is applied. */\n\twindX = 1;\n\n\t/** The y component of a vector that defines the direction {@link PhysicsConstraintPose.wind} is applied. */\n\twindY = 0;\n\n\t/** The x component of a vector that defines the direction {@link PhysicsConstraintPose.gravity} is applied. */\n\tgravityX = 0;\n\n\t/** The y component of a vector that defines the direction {@link PhysicsConstraintPose.gravity} is applied. */\n\tgravityY = 1;\n\n\t_update = 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 = [] as Bone[];\n\t\tfor (let i = 0; i < data.bones.length; i++) {\n\t\t\tconst boneData = data.bones[i];\n\t\t\tlet bone: Bone;\n\t\t\tif (!boneData.parent)\n\t\t\t\tbone = new Bone(boneData, null);\n\t\t\telse {\n\t\t\t\tconst parent = this.bones[boneData.parent.index];\n\t\t\t\tbone = new Bone(boneData, 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 = [] as Slot[];\n\t\tfor (const slotData of this.data.slots)\n\t\t\tthis.slots.push(new Slot(slotData, this));\n\t\tthis.drawOrder = new DrawOrder(this.slots);\n\n\t\tthis.physics = [] as PhysicsConstraint[];\n\t\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\t\tthis.constraints = [] as Constraint<any, any, any>[];\n\t\tfor (const constraintData of this.data.constraints) {\n\t\t\tconst constraint = constraintData.create(this);\n\t\t\tif (constraint instanceof PhysicsConstraint) this.physics.push(constraint);\n\t\t\tthis.constraints.push(constraint);\n\t\t}\n\n\t\tthis.color = new Color(1, 1, 1, 1);\n\n\t\tthis.updateCache();\n\t}\n\n\t/** Caches information about bones and constraints. Must be called if the {@link skin} is modified or if bones, constraints,\n\t * or weighted path attachments are added or removed. */\n\tupdateCache () {\n\t\tthis._updateCache.length = 0;\n\t\tthis.resetCache.length = 0;\n\n\t\tthis.drawOrder.unconstrained();\n\t\tconst slots = this.slots;\n\t\tfor (let i = 0, n = slots.length; i < n; i++)\n\t\t\tslots[i].unconstrained();\n\n\t\tconst bones = this.bones;\n\t\tconst boneCount = bones.length;\n\t\tfor (let i = 0, n = boneCount; i < n; i++) {\n\t\t\tconst bone = bones[i];\n\t\t\tbone.sorted = bone.data.skinRequired;\n\t\t\tbone.active = !bone.sorted;\n\t\t\tbone.unconstrained();\n\t\t}\n\t\tif (this.skin) {\n\t\t\tconst 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\tconst constraints = this.constraints;\n\t\tlet n = this.constraints.length;\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tconstraints[i].unconstrained();\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst constraint = constraints[i];\n\t\t\tconstraint.active = constraint.isSourceActive()\n\t\t\t\t// biome-ignore lint/complexity/useOptionalChain: changing to this might return undefined\n\t\t\t\t&& (!constraint.data.skinRequired || (this.skin != null && this.skin.constraints.includes(constraint.data)));\n\t\t\tif (constraint.active) constraint.sort(this);\n\t\t}\n\n\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\tthis.sortBone(bones[i]);\n\n\t\tn = this._updateCache.length;\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst updateable = this._updateCache[i];\n\t\t\tif (updateable instanceof Bone) this._updateCache[i] = updateable.appliedPose;\n\t\t}\n\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\tconstrained (object: Posed<any, any>) {\n\t\tif (object.pose === object.appliedPose) {\n\t\t\tobject.constrained();\n\t\t\tthis.resetCache.push(object);\n\t\t}\n\t}\n\n\tsortBone (bone: Bone) {\n\t\tif (bone.sorted || !bone.active) return;\n\t\tconst 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\tconst bone = bones[i];\n\t\t\tif (bone.active) {\n\t\t\t\tif (bone.sorted) this.sortReset(bone.children);\n\t\t\t\tbone.sorted = false;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Updates the world transform for each bone and applies all constraints.\n\t *\n\t * See <a href=\"https://esotericsoftware.com/spine-runtime-skeletons#World-transforms\">World transforms</a> in the Spine\n\t * Runtimes Guide. */\n\tupdateWorldTransform (physics: Physics): void {\n\t\tthis._update++;\n\n\t\tif (this.drawOrder.appliedPose === this.drawOrder.constrainedPose) this.drawOrder.resetConstrained();\n\t\tconst resetCache = this.resetCache;\n\t\tfor (let i = 0, n = this.resetCache.length; i < n; i++)\n\t\t\tresetCache[i].resetConstrained();\n\n\t\tconst updateCache = this._updateCache;\n\t\tfor (let i = 0, n = this._updateCache.length; i < n; i++)\n\t\t\tupdateCache[i].update(this, physics);\n\t}\n\n\t/** Sets the bones, constraints, and slots to their setup pose values. */\n\tsetupPose () {\n\t\tthis.setupPoseBones();\n\t\tthis.setupPoseSlots();\n\t}\n\n\t/** Sets the bones and constraints to their setup pose values. */\n\tsetupPoseBones () {\n\t\tconst bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++)\n\t\t\tbones[i].setupPose();\n\n\t\tconst constraints = this.constraints;\n\t\tfor (let i = 0, n = constraints.length; i < n; i++)\n\t\t\tconstraints[i].setupPose();\n\t}\n\n\t/** Sets the slots and draw order to their setup pose values. */\n\tsetupPoseSlots () {\n\t\tthis.drawOrder.setupPose();\n\t\tconst slots = this.slots;\n\t\tfor (let i = 0, n = slots.length; i < n; i++)\n\t\t\tslots[i].setupPose();\n\t}\n\n\t/** Returns the root bone, or null if the skeleton has no bones. */\n\tgetRootBone () {\n\t\tif (this.bones.length === 0) return null;\n\t\treturn this.bones[0];\n\t}\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 * repeatedly. */\n\tfindBone (boneName: string) {\n\t\tif (!boneName) throw new Error(\"boneName cannot be null.\");\n\t\tconst bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++)\n\t\t\tif (bones[i].data.name === boneName) return bones[i];\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\tfindSlot (slotName: string) {\n\t\tif (!slotName) throw new Error(\"slotName cannot be null.\");\n\t\tconst slots = this.slots;\n\t\tfor (let i = 0, n = slots.length; i < n; i++)\n\t\t\tif (slots[i].data.name === slotName) return slots[i];\n\t\treturn null;\n\t}\n\n\t/** Sets a skin by name.\n\t *\n\t * See {@link setSkin}. */\n\tsetSkin (skinName: string): void;\n\n\t/** Sets the skin used to look up attachments before looking in {@link SkeletonData.defaultSkin}. If the skin is changed,\n\t * {@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 setupPoseSlots}. Also, often {@link AnimationState.apply} is called before the next time the skeleton is\n\t * rendered to allow any attachment keys in the current animation(s) to hide or show attachments from the new skin. */\n\tsetSkin (newSkin: Skin | null): void;\n\n\tsetSkin (newSkin: Skin | null | string): void {\n\t\tif (typeof newSkin === \"string\")\n\t\t\tthis.setSkinByName(newSkin);\n\t\telse\n\t\t\tthis.setSkinBySkin(newSkin);\n\t};\n\n\tprivate setSkinByName (skinName: string) {\n\t\tconst 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\tprivate setSkinBySkin (newSkin: Skin | null) {\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\tconst slots = this.slots;\n\t\t\t\tfor (let i = 0, n = slots.length; i < n; i++) {\n\t\t\t\t\tconst slot = slots[i];\n\t\t\t\t\tconst name = slot.data.attachmentName;\n\t\t\t\t\tif (name) {\n\t\t\t\t\t\tconst attachment = newSkin.getAttachment(i, name);\n\t\t\t\t\t\tif (attachment) slot.pose.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\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\tgetAttachment (slotName: string, placeholder: string): Attachment | null;\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 <a href=\"https://esotericsoftware.com/spine-runtime-skins\">Runtime skins</a> in the Spine Runtimes Guide. */\n\tgetAttachment (slotIndex: number, placeholder: string): Attachment | null;\n\n\tgetAttachment (slotNameOrIndex: string | number, placeholder: string): Attachment | null {\n\t\tif (typeof slotNameOrIndex === 'string')\n\t\t\treturn this.getAttachmentByName(slotNameOrIndex, placeholder);\n\t\treturn this.getAttachmentByIndex(slotNameOrIndex, placeholder);\n\t}\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\tprivate getAttachmentByName (slotName: string, placeholder: string): Attachment | null {\n\t\tconst 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, placeholder);\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\tprivate getAttachmentByIndex (slotIndex: number, placeholder: string): Attachment | null {\n\t\tif (!placeholder) throw new Error(\"placeholder cannot be null.\");\n\t\tif (this.skin) {\n\t\t\tconst attachment = this.skin.getAttachment(slotIndex, placeholder);\n\t\t\tif (attachment) return attachment;\n\t\t}\n\t\tif (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, placeholder);\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 placeholder May be null to clear the slot's attachment. */\n\tsetAttachment (slotName: string, placeholder: string | null) {\n\t\tif (!slotName) throw new Error(\"slotName cannot be null.\");\n\t\tconst slot = this.findSlot(slotName);\n\t\tif (!slot) throw new Error(`Slot not found: ${slotName}`);\n\t\tlet attachment: Attachment | null = null;\n\t\tif (placeholder) {\n\t\t\tattachment = this.getAttachment(slot.data.index, placeholder);\n\t\t\tif (!attachment)\n\t\t\t\tthrow new Error(`Attachment not found: ${placeholder}, for slot: ${slotName}`);\n\t\t}\n\t\tslot.pose.setAttachment(attachment);\n\t}\n\n\t/** Finds a constraint of the specified type by comparing each constraints's name. It is more efficient to cache the results of\n\t * this method than to call it multiple times. */\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\tfindConstraint<T extends Constraint<any, any, any>> (constraintName: string, type: new () => T): T | null {\n\t\tif (constraintName == null) throw new Error(\"constraintName cannot be null.\");\n\t\tif (type == null) throw new Error(\"type cannot be null.\");\n\t\tconst constraints = this.constraints;\n\t\tfor (let i = 0, n = constraints.length; i < n; i++) {\n\t\t\tconst constraint = constraints[i];\n\t\t\tif (constraint instanceof type && constraint.data.name === constraintName) return constraint as T;\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 applied 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\tgetBoundsRect (clipper?: SkeletonClipping) {\n\t\tconst offset = new Vector2();\n\t\tconst size = new Vector2();\n\t\tthis.getBounds(offset, size, undefined, clipper);\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 applied pose. Optionally applies\n\t * clipping.\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\t * @param clipper {@link SkeletonClipping} to use. If `null`, no clipping is applied. */\n\tgetBounds (offset: Vector2, size: Vector2, temp: Array<number> = new Array<number>(2), clipper: SkeletonClipping | null = null) {\n\t\tif (!offset) throw new Error(\"offset cannot be null.\");\n\t\tif (!size) throw new Error(\"size cannot be null.\");\n\t\tconst drawOrder = this.drawOrder.appliedPose;\n\t\tconst slots = 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\tconst slot = slots[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 triangles: NumberArrayLike | null = null;\n\t\t\tconst attachment = slot.appliedPose.attachment;\n\t\t\tif (attachment) {\n\t\t\t\tif (attachment instanceof RegionAttachment) {\n\t\t\t\t\tverticesLength = 8;\n\t\t\t\t\tvertices = Utils.setArraySize(temp, verticesLength, 0);\n\t\t\t\t\tattachment.computeWorldVertices(slot, attachment.getOffsets(slot.appliedPose), vertices, 0, 2);\n\t\t\t\t\ttriangles = Skeleton.quadTriangles;\n\t\t\t\t} else if (attachment instanceof MeshAttachment) {\n\t\t\t\t\tverticesLength = attachment.worldVerticesLength;\n\t\t\t\t\tvertices = Utils.setArraySize(temp, verticesLength, 0);\n\t\t\t\t\tattachment.computeWorldVertices(this, slot, 0, verticesLength, vertices, 0, 2);\n\t\t\t\t\ttriangles = attachment.triangles;\n\t\t\t\t} else if (attachment instanceof ClippingAttachment && clipper) {\n\t\t\t\t\tclipper.clipEnd(slot);\n\t\t\t\t\tclipper.clipStart(this, slot, attachment);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (vertices && triangles) {\n\t\t\t\t\tif (clipper?.isClipping() && clipper.clipTriangles(vertices, triangles, triangles.length)) {\n\t\t\t\t\t\tvertices = clipper.clippedVertices;\n\t\t\t\t\t\tverticesLength = clipper.clippedVertices.length;\n\t\t\t\t\t}\n\t\t\t\t\tfor (let ii = 0, nn = vertices.length; ii < nn; ii += 2) {\n\t\t\t\t\t\tconst x = vertices[ii], y = vertices[ii + 1];\n\t\t\t\t\t\tminX = Math.min(minX, x);\n\t\t\t\t\t\tminY = Math.min(minY, y);\n\t\t\t\t\t\tmaxX = Math.max(maxX, x);\n\t\t\t\t\t\tmaxY = Math.max(maxY, y);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (clipper) clipper.clipEnd(slot);\n\t\t}\n\t\tif (clipper) clipper.clipEnd();\n\t\toffset.set(minX, minY);\n\t\tsize.set(maxX - minX, maxY - minY);\n\t}\n\n\t/** Scales the entire skeleton on the X and Y axes.\n\t *\n\t * Bones that do not inherit scale are still affected by this property. */\n\tpublic setScale (scaleX: number, scaleY: number) {\n\t\tthis.scaleX = scaleX;\n\t\tthis.scaleY = scaleY;\n\t}\n\n\t/** Sets the skeleton X and Y position, which is added to the root bone worldX and worldY position.\n\t *\n\t * Bones that do not inherit translation are still affected by this property. */\n\tpublic setPosition (x: number, y: number) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t}\n\n\t/** Increments the skeleton's {@link time}. */\n\tupdate (delta: number) {\n\t\tthis.time += delta;\n\t}\n\n\t/** Calls {@link PhysicsConstraint.translate} for each physics constraint. */\n\tphysicsTranslate (x: number, y: number) {\n\t\tconst constraints = this.physics;\n\t\tfor (let i = 0, n = constraints.length; i < n; i++)\n\t\t\tconstraints[i].translate(x, y);\n\t}\n\n\t/** Calls {@link PhysicsConstraint.rotate} for each physics constraint. */\n\tphysicsRotate (x: number, y: number, degrees: number) {\n\t\tconst constraints = this.physics;\n\t\tfor (let i = 0, n = constraints.length; i < n; i++)\n\t\t\tconstraints[i].rotate(x, y, degrees);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { BonePose } from \"./BonePose.js\";\nimport { Constraint } from \"./Constraint.js\";\nimport { ScaleYMode } from \"./ConstraintData.js\";\nimport { Physics } from \"./Physics.js\";\nimport type { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\nimport { PhysicsConstraintPose } from \"./PhysicsConstraintPose.js\";\nimport { Skeleton } from \"./Skeleton.js\";\nimport { MathUtils } from \"./Utils.js\";\n\n\n/** Applies physics to a bone.\n *\n * See <a href=\"http://esotericsoftware.com/spine-physics-constraints\">Physics constraints</a> in the Spine User Guide. */\nexport class PhysicsConstraint extends Constraint<PhysicsConstraint, PhysicsConstraintData, PhysicsConstraintPose> {\n\tbone: BonePose;\n\n\t_reset = true;\n\tux = 0;\n\tuy = 0;\n\tcx = 0;\n\tcy = 0;\n\ttx = 0;\n\tty = 0;\n\txOffset = 0;\n\txLag = 0;\n\txVelocity = 0;\n\tyOffset = 0;\n\tyLag = 0;\n\tyVelocity = 0;\n\trotateOffset = 0;\n\trotateLag = 0;\n\trotateVelocity = 0;\n\tscaleOffset = 0\n\tscaleLag = 0\n\tscaleVelocity = 0;\n\tremaining = 0;\n\tlastTime = 0;\n\n\tconstructor (data: PhysicsConstraintData, skeleton: Skeleton) {\n\t\tsuper(data, new PhysicsConstraintPose(), new PhysicsConstraintPose());\n\t\tif (skeleton == null) throw new Error(\"skeleton cannot be null.\");\n\n\t\tthis.bone = skeleton.bones[data.bone.index].constrainedPose;\n\t}\n\n\tpublic copy (skeleton: Skeleton) {\n\t\tvar copy = new PhysicsConstraint(this.data, skeleton);\n\t\tcopy.pose.set(this.pose);\n\t\treturn copy;\n\t}\n\n\t/** Resets all physics state that was the result of previous movement. Use this after moving a bone to prevent physics from\n\t * reacting to the movement. */\n\treset (skeleton: Skeleton) {\n\t\tthis.remaining = 0;\n\t\tthis.lastTime = skeleton.time;\n\t\tthis._reset = true;\n\t\tthis.xOffset = 0;\n\t\tthis.xLag = 0;\n\t\tthis.xVelocity = 0;\n\t\tthis.yOffset = 0;\n\t\tthis.yLag = 0;\n\t\tthis.yVelocity = 0;\n\t\tthis.rotateOffset = 0;\n\t\tthis.rotateLag = 0;\n\t\tthis.rotateVelocity = 0;\n\t\tthis.scaleOffset = 0;\n\t\tthis.scaleLag = 0;\n\t\tthis.scaleVelocity = 0;\n\t}\n\n\t/** Translates the physics constraint so the next {@link update} forces are applied as if the bone moved an\n\t * additional amount in world space. */\n\ttranslate (x: number, y: number) {\n\t\tthis.ux -= x;\n\t\tthis.uy -= y;\n\t\tthis.cx -= x;\n\t\tthis.cy -= y;\n\t}\n\n\t/** Rotates the physics constraint so the next {@link update} forces are applied as if the bone rotated\n\t * around the specified point in world space. */\n\trotate (x: number, y: number, degrees: number) {\n\t\tconst r = degrees * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);\n\t\tconst dx = this.cx - x, dy = this.cy - y;\n\t\tthis.translate(dx * cos - dy * sin - dx, dx * sin + dy * cos - dy);\n\t}\n\n\t/** Applies the constraint to the constrained bones. */\n\tupdate (skeleton: Skeleton, physics: Physics) {\n\t\tconst p = this.appliedPose;\n\t\tconst mix = p.mix;\n\t\tif (mix === 0) return;\n\n\t\tconst x = this.data.x > 0, y = this.data.y > 0, rotateOrShearX = this.data.rotate > 0 || this.data.shearX > 0, scaleX = this.data.scaleX > 0;\n\t\tconst bone = this.bone;\n\t\tlet l = bone.bone.data.length, t = this.data.step, z = 0;\n\n\t\tswitch (physics) {\n\t\t\tcase Physics.none:\n\t\t\t\treturn;\n\t\t\t// biome-ignore lint/suspicious/noFallthroughSwitchClause: fall through expected\n\t\t\tcase Physics.reset:\n\t\t\t\tthis.reset(skeleton); // Fall through.\n\t\t\tcase Physics.update: {\n\t\t\t\tconst delta = Math.max(skeleton.time - this.lastTime, 0), aa = this.remaining;\n\t\t\t\tthis.remaining += delta;\n\t\t\t\tthis.lastTime = skeleton.time;\n\n\t\t\t\tconst bx = bone.worldX, by = bone.worldY;\n\t\t\t\tif (this._reset) {\n\t\t\t\t\tthis._reset = false;\n\t\t\t\t\tthis.ux = bx;\n\t\t\t\t\tthis.uy = by;\n\t\t\t\t} else {\n\t\t\t\t\tlet a = this.remaining, i = p.inertia, f = skeleton.data.referenceScale, d = -1, m = 0, e = 0, qx = this.data.limit * delta,\n\t\t\t\t\t\tqy = qx * Math.abs(skeleton.scaleY);\n\t\t\t\t\tqx *= Math.abs(skeleton.scaleX);\n\t\t\t\t\tif (x || y) {\n\t\t\t\t\t\tif (x) {\n\t\t\t\t\t\t\tconst u = (this.ux - bx) * i;\n\t\t\t\t\t\t\tthis.xOffset += u > qx ? qx : u < -qx ? -qx : u;\n\t\t\t\t\t\t\tthis.ux = bx;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (y) {\n\t\t\t\t\t\t\tconst u = (this.uy - by) * i;\n\t\t\t\t\t\t\tthis.yOffset += u > qy ? qy : u < -qy ? -qy : u;\n\t\t\t\t\t\t\tthis.uy = by;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (a >= t) {\n\t\t\t\t\t\t\tconst xs = this.xOffset, ys = this.yOffset;\n\t\t\t\t\t\t\td = p.damping ** (60 * t);\n\t\t\t\t\t\t\tm = t * p.massInverse;\n\t\t\t\t\t\t\te = p.strength;\n\t\t\t\t\t\t\tconst w = f * p.wind, g = f * p.gravity;\n\t\t\t\t\t\t\tconst ax = (w * skeleton.windX + g * skeleton.gravityX) * skeleton.scaleX;\n\t\t\t\t\t\t\tconst ay = (w * skeleton.windY + g * skeleton.gravityY) * skeleton.scaleY;\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\tif (x) {\n\t\t\t\t\t\t\t\t\tthis.xVelocity += (ax - this.xOffset * e) * m;\n\t\t\t\t\t\t\t\t\tthis.xOffset += this.xVelocity * t;\n\t\t\t\t\t\t\t\t\tthis.xVelocity *= d;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (y) {\n\t\t\t\t\t\t\t\t\tthis.yVelocity -= (ay + this.yOffset * e) * m;\n\t\t\t\t\t\t\t\t\tthis.yOffset += this.yVelocity * t;\n\t\t\t\t\t\t\t\t\tthis.yVelocity *= d;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ta -= t;\n\t\t\t\t\t\t\t} while (a >= t);\n\t\t\t\t\t\t\tthis.xLag = this.xOffset - xs;\n\t\t\t\t\t\t\tthis.yLag = this.yOffset - ys;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tz = Math.max(0, 1 - a / t);\n\t\t\t\t\t\tif (x) bone.worldX += (this.xOffset - this.xLag * z) * mix * this.data.x;\n\t\t\t\t\t\tif (y) bone.worldY += (this.yOffset - this.yLag * z) * mix * this.data.y;\n\t\t\t\t\t}\n\t\t\t\t\tif (rotateOrShearX || scaleX) {\n\t\t\t\t\t\tlet ca = Math.atan2(bone.c, bone.a), c = 0, s = 0, mr = 0, dx = this.cx - bone.worldX, dy = this.cy - bone.worldY;\n\t\t\t\t\t\tif (dx > qx)\n\t\t\t\t\t\t\tdx = qx;\n\t\t\t\t\t\telse if (dx < -qx) //\n\t\t\t\t\t\t\tdx = -qx;\n\t\t\t\t\t\tif (dy > qy)\n\t\t\t\t\t\t\tdy = qy;\n\t\t\t\t\t\telse if (dy < -qy) //\n\t\t\t\t\t\t\tdy = -qy;\n\t\t\t\t\t\ta = this.remaining;\n\t\t\t\t\t\tif (rotateOrShearX) {\n\t\t\t\t\t\t\tmr = (this.data.rotate + this.data.shearX) * mix;\n\t\t\t\t\t\t\tz = this.rotateLag * Math.max(0, 1 - aa / t);\n\t\t\t\t\t\t\tlet r = Math.atan2(dy + this.ty, dx + this.tx) - ca - (this.rotateOffset - z) * mr;\n\t\t\t\t\t\t\tthis.rotateOffset += (r - Math.ceil(r * MathUtils.invPI2 - 0.5) * MathUtils.PI2) * i;\n\t\t\t\t\t\t\tr = (this.rotateOffset - z) * mr + ca;\n\t\t\t\t\t\t\tc = Math.cos(r);\n\t\t\t\t\t\t\ts = Math.sin(r);\n\t\t\t\t\t\t\tif (scaleX) {\n\t\t\t\t\t\t\t\tr = l * bone.getWorldScaleX();\n\t\t\t\t\t\t\t\tif (r > 0) this.scaleOffset += (dx * c + dy * s) * i / r;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tc = Math.cos(ca);\n\t\t\t\t\t\t\ts = Math.sin(ca);\n\t\t\t\t\t\t\tconst r = l * bone.getWorldScaleX() - this.scaleLag * Math.max(0, 1 - aa / t);\n\t\t\t\t\t\t\tif (r > 0) this.scaleOffset += (dx * c + dy * s) * i / r;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (a >= t) {\n\t\t\t\t\t\t\tif (d === -1) {\n\t\t\t\t\t\t\t\td = p.damping ** (60 * t);\n\t\t\t\t\t\t\t\tm = t * p.massInverse;\n\t\t\t\t\t\t\t\te = p.strength;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst ax = p.wind * skeleton.windX + p.gravity * skeleton.gravityX;\n\t\t\t\t\t\t\tconst ay = (p.wind * skeleton.windY + p.gravity * skeleton.gravityY) * Skeleton.yDir;\n\t\t\t\t\t\t\tconst rs = this.rotateOffset, ss = this.scaleOffset, h = l / f;\n\t\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\t\ta -= t;\n\t\t\t\t\t\t\t\tif (scaleX) {\n\t\t\t\t\t\t\t\t\tthis.scaleVelocity += (ax * c - ay * s - this.scaleOffset * e) * m;\n\t\t\t\t\t\t\t\t\tthis.scaleOffset += this.scaleVelocity * t;\n\t\t\t\t\t\t\t\t\tthis.scaleVelocity *= d;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (rotateOrShearX) {\n\t\t\t\t\t\t\t\t\tthis.rotateVelocity -= ((ax * s + ay * c) * h + this.rotateOffset * e) * m;\n\t\t\t\t\t\t\t\t\tthis.rotateOffset += this.rotateVelocity * t;\n\t\t\t\t\t\t\t\t\tthis.rotateVelocity *= d;\n\t\t\t\t\t\t\t\t\tif (a < t) break;\n\t\t\t\t\t\t\t\t\tconst r = this.rotateOffset * mr + ca;\n\t\t\t\t\t\t\t\t\tc = Math.cos(r);\n\t\t\t\t\t\t\t\t\ts = Math.sin(r);\n\t\t\t\t\t\t\t\t} else if (a < t) //\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.rotateLag = this.rotateOffset - rs;\n\t\t\t\t\t\t\tthis.scaleLag = this.scaleOffset - ss;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tz = Math.max(0, 1 - a / t);\n\t\t\t\t\t}\n\t\t\t\t\tthis.remaining = a;\n\t\t\t\t}\n\t\t\t\tthis.cx = bone.worldX;\n\t\t\t\tthis.cy = bone.worldY;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase Physics.pose:\n\t\t\t\tz = Math.max(0, 1 - this.remaining / t);\n\t\t\t\tif (x) bone.worldX += (this.xOffset - this.xLag * z) * mix * this.data.x;\n\t\t\t\tif (y) bone.worldY += (this.yOffset - this.yLag * z) * mix * this.data.y;\n\t\t}\n\n\t\tif (rotateOrShearX) {\n\t\t\tlet o = (this.rotateOffset - this.rotateLag * z) * mix, s = 0, c = 0, a = 0;\n\t\t\tif (this.data.shearX > 0) {\n\t\t\t\tlet r = 0;\n\t\t\t\tif (this.data.rotate > 0) {\n\t\t\t\t\tr = o * this.data.rotate;\n\t\t\t\t\ts = Math.sin(r);\n\t\t\t\t\tc = Math.cos(r);\n\t\t\t\t\ta = bone.b;\n\t\t\t\t\tbone.b = c * a - s * bone.d;\n\t\t\t\t\tbone.d = s * a + c * bone.d;\n\t\t\t\t}\n\t\t\t\tr += o * this.data.shearX;\n\t\t\t\ts = Math.sin(r);\n\t\t\t\tc = Math.cos(r);\n\t\t\t\ta = bone.a;\n\t\t\t\tbone.a = c * a - s * bone.c;\n\t\t\t\tbone.c = s * a + c * bone.c;\n\t\t\t} else {\n\t\t\t\to *= this.data.rotate;\n\t\t\t\ts = Math.sin(o);\n\t\t\t\tc = Math.cos(o);\n\t\t\t\ta = bone.a;\n\t\t\t\tbone.a = c * a - s * bone.c;\n\t\t\t\tbone.c = s * a + c * bone.c;\n\t\t\t\ta = bone.b;\n\t\t\t\tbone.b = c * a - s * bone.d;\n\t\t\t\tbone.d = s * a + c * bone.d;\n\t\t\t}\n\t\t}\n\t\tif (scaleX) {\n\t\t\tlet s = 1 + (this.scaleOffset - this.scaleLag * z) * mix * this.data.scaleX;\n\t\t\tbone.a *= s;\n\t\t\tbone.c *= s;\n\t\t\tswitch (this.data.scaleYMode) {\n\t\t\t\tcase ScaleYMode.Uniform:\n\t\t\t\t\tbone.b *= s;\n\t\t\t\t\tbone.d *= s;\n\t\t\t\t\tbreak;\n\t\t\t\tcase ScaleYMode.Volume:\n\t\t\t\t\ts = Math.abs(s);\n\t\t\t\t\ts = s >= 0.7 ? 1 / s : 4 - 3.67347 * s;\n\t\t\t\t\tbone.b *= s;\n\t\t\t\t\tbone.d *= s;\n\t\t\t}\n\t\t}\n\t\tif (physics !== Physics.pose) {\n\t\t\tthis.tx = l * bone.a;\n\t\t\tthis.ty = l * bone.c;\n\t\t}\n\t\tbone.modifyWorld(skeleton._update);\n\t}\n\n\tsort (skeleton: Skeleton) {\n\t\tconst bone = this.bone.bone;\n\t\tskeleton.sortBone(bone);\n\t\tskeleton._updateCache.push(this);\n\t\tskeleton.sortReset(bone.children);\n\t\tskeleton.constrained(bone);\n\t}\n\n\tisSourceActive () {\n\t\treturn this.bone.bone.active;\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { BoneData } from \"./BoneData.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport { ConstraintData, ScaleYMode } from \"./ConstraintData.js\";\nimport { PhysicsConstraint } from \"./PhysicsConstraint.js\";\nimport { PhysicsConstraintPose } from \"./PhysicsConstraintPose.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\n\n\n/** Stores the setup pose for a {@link PhysicsConstraint}.\n *\n * See <a href=\"http://esotericsoftware.com/spine-physics-constraints\">Physics constraints</a> in the Spine User Guide. */\nexport class PhysicsConstraintData extends ConstraintData<PhysicsConstraint, PhysicsConstraintPose> {\n\t/** The bone constrained by this physics constraint. */\n\tpublic set bone (boneData: BoneData) { this._bone = boneData; }\n\tpublic get bone () {\n\t\tif (!this._bone) throw new Error(\"BoneData not set.\")\n\t\telse return this._bone;\n\t}\n\tprivate _bone: BoneData | null = null;\n\n\t/** Physics influence on x translation, 0-1. */\n\tx = 0;\n\n\t/** Physics influence on y translation, 0-1. */\n\ty = 0;\n\n\t/** Physics influence on rotation, 0-1. */\n\trotate = 0;\n\n\t/** Physics influence on scaleX, 0-1. */\n\tscaleX = 0;\n\n\t/** Physics influence on shearX, 0-1. */\n\tshearX = 0;\n\n\t/** Movement greater than the limit will not have a greater affect on physics. */\n\tlimit = 0;\n\n\t/** The time in milliseconds required to advanced the physics simulation one step. */\n\tstep = 0;\n\n\t/** True when this constraint's inertia is controlled by global slider timelines. */\n\tinertiaGlobal = false;\n\n\t/** True when this constraint's strength is controlled by global slider timelines. */\n\tstrengthGlobal = false;\n\n\t/** True when this constraint's damping is controlled by global slider timelines. */\n\tdampingGlobal = false;\n\n\t/** True when this constraint's mass is controlled by global slider timelines. */\n\tmassGlobal = false;\n\n\t/** True when this constraint's wind is controlled by global slider timelines. */\n\twindGlobal = false;\n\n\t/** True when this constraint's gravity is controlled by global slider timelines. */\n\tgravityGlobal = false;\n\n\t/** True when this constraint's mix is controlled by global slider timelines. */\n\tmixGlobal = false;\n\n\t/** Determines how the {@link BonePose.scaleY} changes when {@link PhysicsConstraintData.scaleX} sets\n\t * {@link BonePose.scaleX}. */\n\tprivate _scaleYMode = ScaleYMode.None;\n\tget scaleYMode (): ScaleYMode {\n\t\treturn this._scaleYMode;\n\t}\n\tset scaleYMode (scaleYMode: ScaleYMode) {\n\t\tif (scaleYMode == null) throw new Error(\"scaleYMode cannot be null.\");\n\t\tthis._scaleYMode = scaleYMode;\n\t}\n\n\tconstructor (name: string) {\n\t\tsuper(name, new PhysicsConstraintPose());\n\t}\n\n\tpublic create (skeleton: Skeleton) {\n\t\treturn new PhysicsConstraint(this, skeleton);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 = ((array) => (x: number) => {\n\t\t\tarray[0] = x;\n\t\t\treturn array[0];\n\t\t})(new Float32Array(1));\n\t}\n})();\n\nexport { }\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Pose } from \"./Pose.js\";\nimport type { SliderData } from \"./SliderData.js\";\n\n/** Stores a pose for a slider. */\nexport class SliderPose implements Pose<SliderPose> {\n\n\t/** The time in the {@link SliderData.animation} to apply the animation. */\n\ttime = 0;\n\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained poses. */\n\tmix = 0;\n\n\tset (pose: SliderPose) {\n\t\tthis.time = pose.time;\n\t\tthis.mix = pose.mix;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 { DrawOrderFolderTimeline, DrawOrderTimeline, isConstraintTimeline, isSlotTimeline, PhysicsConstraintTimeline } from \"./Animation.js\";\nimport type { Bone } from \"./Bone.js\";\nimport { Constraint } from \"./Constraint.js\";\nimport type { Physics } from \"./Physics.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { SliderData } from \"./SliderData.js\";\nimport { SliderPose } from \"./SliderPose.js\";\n\n/** Applies an animation based on either the slider's {@link SliderPose.time} or a bone's transform property.\n *\n * See <a href=\"https://esotericsoftware.com/spine-sliders\">Sliders</a> in the Spine User Guide. */\nexport class Slider extends Constraint<Slider, SliderData, SliderPose> {\n\tprivate static readonly offsets = [0, 0, 0, 0, 0, 0];\n\n\t/** When set, the bone's transform property is used to set the slider's {@link SliderPose.time}. */\n\tbone: Bone | null = null;\n\n\tconstructor (data: SliderData, skeleton: Skeleton) {\n\t\tsuper(data, new SliderPose(), new SliderPose());\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\n\t\tif (data.bone != null) this.bone = skeleton.bones[data.bone.index];\n\t}\n\n\tpublic copy (skeleton: Skeleton) {\n\t\tvar copy = new Slider(this.data, skeleton);\n\t\tcopy.pose.set(this.pose);\n\t\treturn copy;\n\t}\n\n\tpublic update (skeleton: Skeleton, physics: Physics) {\n\t\tconst p = this.appliedPose;\n\t\tif (p.mix === 0) return;\n\n\t\tconst data = this.data, animation = data.animation, bone = this.bone;\n\t\tif (bone !== null) {\n\t\t\tif (!bone.active) return;\n\t\t\tif (data.local) bone.appliedPose.validateLocalTransform(skeleton);\n\t\t\tp.time = data.offset\n\t\t\t\t+ (data.property.value(skeleton, bone.appliedPose, data.local, Slider.offsets) - data.property.offset) * data.scale;\n\t\t\tif (data.loop)\n\t\t\t\tp.time = animation.duration + (p.time % animation.duration);\n\t\t\telse\n\t\t\t\tp.time = Math.max(0, p.time);\n\t\t}\n\n\t\tconst bones = skeleton.bones;\n\t\tconst indices = animation.bones;\n\t\tfor (let i = 0, n = animation.bones.length; i < n; i++)\n\t\t\tbones[indices[i]].appliedPose.modifyLocal(skeleton);\n\n\t\tanimation.apply(skeleton, p.time, p.time, data.loop, null, p.mix, false, data.additive, false, true);\n\t}\n\n\tsort (skeleton: Skeleton) {\n\t\tconst bone = this.bone;\n\t\tconst data = this.data;\n\t\tif (bone && !data.local) skeleton.sortBone(bone);\n\t\tskeleton._updateCache.push(this);\n\n\t\tconst bones = skeleton.bones;\n\t\tconst indices = data.animation.bones;\n\t\tfor (let i = 0, n = data.animation.bones.length; i < n; i++) {\n\t\t\tconst bone = bones[indices[i]];\n\t\t\tbone.sorted = false;\n\t\t\tskeleton.sortReset(bone.children);\n\t\t\tskeleton.constrained(bone);\n\t\t}\n\n\t\tconst timelines = data.animation.timelines;\n\t\tconst slots = skeleton.slots;\n\t\tconst constraints = skeleton.constraints;\n\t\tconst physics = skeleton.physics;\n\t\tconst physicsCount = skeleton.physics.length;\n\t\tfor (let i = 0, n = data.animation.timelines.length; i < n; i++) {\n\t\t\tconst t = timelines[i];\n\t\t\tif (isSlotTimeline(t))\n\t\t\t\tskeleton.constrained(slots[t.slotIndex]);\n\t\t\telse if (t instanceof DrawOrderTimeline || t instanceof DrawOrderFolderTimeline)\n\t\t\t\tskeleton.drawOrder.constrained();\n\t\t\telse if (t instanceof PhysicsConstraintTimeline) {\n\t\t\t\tif (t.constraintIndex === -1) {\n\t\t\t\t\tfor (let ii = 0; ii < physicsCount; ii++)\n\t\t\t\t\t\tskeleton.constrained(physics[ii]);\n\t\t\t\t} else\n\t\t\t\t\tskeleton.constrained(constraints[t.constraintIndex]);\n\t\t\t} else if (isConstraintTimeline(t)) {\n\t\t\t\tconst constraintIndex = t.constraintIndex;\n\t\t\t\tif (constraintIndex !== -1) skeleton.constrained(constraints[constraintIndex]);\n\t\t\t}\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Animation } from \"./Animation.js\";\nimport type { BoneData } from \"./BoneData.js\";\nimport { ConstraintData } from \"./ConstraintData.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { Slider } from \"./Slider.js\";\nimport { SliderPose } from \"./SliderPose.js\";\nimport type { FromProperty } from \"./TransformConstraintData.js\";\n\n/** Stores the setup pose for a {@link Slider}.\n *\n * See <a href=\"https://esotericsoftware.com/spine-slider-constraints\">Slider constraints</a> in the Spine User Guide. */\nexport class SliderData extends ConstraintData<Slider, SliderPose> {\n\n\t/** The animation the slider will apply. */\n\tanimation!: Animation;\n\n\t/** When true, the animation is applied by adding it to the current pose rather than overwriting it. */\n\tadditive = false;\n\n\t/** When true, the animation repeats after its duration, otherwise the last frame is used. */\n\tloop = false;\n\n\t/** When set, the bone's transform property is used to set the slider's {@link SliderPose.time}. */\n\tbone: BoneData | null = null;\n\n\t/** When a bone is set, the specified transform property is used to set the slider's {@link SliderPose.time}. */\n\tproperty!: FromProperty;\n\n\t/** When a bone is set, this is the scale of the {@link property} value in relation to the slider time. */\n\tscale = 0;\n\n\t/** When a bone is set, the offset is added to the property. */\n\toffset = 0;\n\n\t/** When true and a bone is set, the bone's local transform property is read instead of its world transform. */\n\tlocal = false;\n\n\tconstructor (name: string) {\n\t\tsuper(name, new SliderPose());\n\t}\n\n\tpublic create (skeleton: Skeleton) {\n\t\treturn new Slider(this, skeleton);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Animation } from \"./Animation.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { BoneData } from \"./BoneData.js\";\nimport type { ConstraintData } from \"./ConstraintData.js\";\nimport type { EventData } from \"./EventData.js\";\nimport type { Skin } from \"./Skin.js\";\nimport { SliderData } from \"./SliderData.js\";\nimport type { SlotData } from \"./SlotData.js\";\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 = [] as BoneData[]; // Ordered parents first.\n\n\t/** The skeleton's slots in the setup pose draw order. */\n\tslots = [] as SlotData[]; // Setup pose draw order.\n\n\tskins = [] as 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 = [] as EventData[];\n\n\t/** The skeleton's animations. */\n\tanimations = [] as Animation[];\n\n\t/** The skeleton's IK constraints. */\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\tconstraints = [] as ConstraintData<any, any>[];\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/** Baseline scale factor for applying distance-dependent effects on non-scalable properties, such as angle or scale. Default\n\t * is 100. */\n\treferenceScale = 100;\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 = 30;\n\n\t/** The path to the images folder 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 folder 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\tconst bones = this.bones;\n\t\tfor (let i = 0, n = bones.length; i < n; i++)\n\t\t\tif (bones[i].name === boneName) return bones[i];\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\tconst slots = this.slots;\n\t\tfor (let i = 0, n = slots.length; i < n; i++)\n\t\t\tif (slots[i].name === slotName) return slots[i];\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\tconst skins = this.skins;\n\t\tfor (let i = 0, n = skins.length; i < n; i++)\n\t\t\tif (skins[i].name === skinName) return skins[i];\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\tconst events = this.events;\n\t\tfor (let i = 0, n = events.length; i < n; i++)\n\t\t\tif (events[i].name === eventDataName) return events[i];\n\t\treturn null;\n\t}\n\n\t/** Collects animations used by {@link SliderData slider constraints}.\n\t *\n\t * Slider animations are designed to be applied by slider constraints rather than on their own. Applications that have a user\n\t * choose an animation may want to exclude them. */\n\tfindSliderAnimations (animations: Animation[]): Animation[] {\n\t\tconst constraints = this.constraints;\n\t\tfor (let i = 0, n = this.constraints.length; i < n; i++) {\n\t\t\tconst data = constraints[i];\n\t\t\tif (data instanceof SliderData && data.animation != null) animations.push(data.animation);\n\t\t}\n\t\treturn animations;\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\tconst animations = this.animations;\n\t\tfor (let i = 0, n = animations.length; i < n; i++)\n\t\t\tif (animations[i].name === animationName) return animations[i];\n\t\treturn null;\n\t}\n\n\t// --- Constraints.\n\n\t/** Finds a constraint of the specified type by comparing each constraints's name. It is more efficient to cache the results of\n\t * this method than to call it multiple times. */\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\tfindConstraint<T extends ConstraintData<any, any>> (constraintName: string, type: new (name: string) => T): T | null {\n\t\tif (!constraintName) throw new Error(\"constraintName cannot be null.\");\n\t\tif (type == null) throw new Error(\"type cannot be null.\");\n\t\tconst constraints = this.constraints;\n\t\tfor (let i = 0, n = this.constraints.length; i < n; i++) {\n\t\t\tconst constraint = constraints[i];\n\t\t\tif (constraint instanceof type && constraint.name === constraintName) return constraint as T;\n\t\t}\n\t\treturn null;\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Attachment } from \"./attachments/Attachment.js\";\nimport { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport type { BoneData } from \"./BoneData.js\";\nimport type { ConstraintData } from \"./ConstraintData.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { SkeletonData } from \"./SkeletonData.js\";\nimport { Color, type StringMap } from \"./Utils.js\";\n\n/** Stores an entry in the skin consisting of the slot index, name, and attachment **/\nexport class SkinEntry {\n\n\t/** The {@link Skeleton.slots} index. */\n\tslotIndex: number = 0;\n\n\tplaceholder: string;\n\n\t/** The attachment for this skin entry. */\n\tattachment: Attachment\n\n\tconstructor (slotIndex: number = 0, placeholder: string, attachment: Attachment) {\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.placeholder = placeholder;\n\t\tthis.attachment = attachment;\n\t}\n}\n\n/** Stores attachments by slot index and placeholder name. Multiple {@link Skeleton} instances can use the same skins.\n *\n * See {@link SkeletonData.defaultSkin}, {@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, unique across all skins in the skeleton.\n\t *\n\t * See {@link SkeletonData.findSkin}. */\n\tname: string;\n\n\tattachments = [] as StringMap<Attachment>[];\n\tbones = [] as BoneData[];\n\t// biome-ignore lint/suspicious/noExplicitAny: reference runtime does not restrict to specific types\n\tconstraints = [] as ConstraintData<any, any>[];\n\n\t/** The color of the skin as it was in Spine, or a default color if nonessential data was not exported. */\n\tcolor = new Color(0.99607843, 0.61960787, 0.30980393, 1); // fe9e4fff\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, placeholder: string, attachment: Attachment) {\n\t\tif (!attachment) throw new Error(\"attachment cannot be null.\");\n\t\tconst attachments = this.attachments;\n\t\tif (slotIndex >= attachments.length) attachments.length = slotIndex + 1;\n\t\tif (!attachments[slotIndex]) attachments[slotIndex] = {};\n\t\tattachments[slotIndex][placeholder] = 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\tconst 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\tconst 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\tconst attachments = skin.getAttachments();\n\t\tfor (let i = 0; i < attachments.length; i++) {\n\t\t\tconst attachment = attachments[i];\n\t\t\tthis.setAttachment(attachment.slotIndex, attachment.placeholder, 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\tconst 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\tconst 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\tconst attachments = skin.getAttachments();\n\t\tfor (let i = 0; i < attachments.length; i++) {\n\t\t\tconst 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.placeholder, 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.placeholder, attachment.attachment);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** Returns the attachment for the specified slot index and placeholder, or null. */\n\tgetAttachment (slotIndex: number, placeholder: string): Attachment | null {\n\t\tconst dictionary = this.attachments[slotIndex];\n\t\treturn dictionary ? dictionary[placeholder] : null;\n\t}\n\n\t/** Removes the attachment in the skin for the specified slot index and placeholder, if any. */\n\tremoveAttachment (slotIndex: number, placeholder: string) {\n\t\tconst dictionary = this.attachments[slotIndex];\n\t\tif (dictionary) delete dictionary[placeholder];\n\t}\n\n\t/** Returns all attachments in this skin. */\n\tgetAttachments (): Array<SkinEntry> {\n\t\tconst entries: SkinEntry[] = [];\n\t\tfor (let i = 0; i < this.attachments.length; i++) {\n\t\t\tconst slotAttachments = this.attachments[i];\n\t\t\tif (slotAttachments) {\n\t\t\t\tfor (const name in slotAttachments) {\n\t\t\t\t\tconst 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\tconst slotAttachments = this.attachments[slotIndex];\n\t\tif (slotAttachments) {\n\t\t\tfor (const name in slotAttachments) {\n\t\t\t\tconst 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\tconst slot = skeleton.slots[i];\n\t\t\tconst slotAttachment = slot.pose.getAttachment();\n\t\t\tif (slotAttachment && slotIndex < oldSkin.attachments.length) {\n\t\t\t\tconst dictionary = oldSkin.attachments[slotIndex];\n\t\t\t\tfor (const placeholder in dictionary) {\n\t\t\t\t\tconst skinAttachment: Attachment = dictionary[placeholder];\n\t\t\t\t\tif (slotAttachment === skinAttachment) {\n\t\t\t\t\t\tconst attachment = this.getAttachment(slotIndex, placeholder);\n\t\t\t\t\t\tif (attachment) slot.pose.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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { BoneData } from \"./BoneData.js\";\nimport type { Slot } from \"./Slot.js\";\nimport { PosedData } from \"./PosedData.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { SlotPose } from \"./SlotPose.js\";\n\n/** Stores the setup pose for a {@link Slot}. */\nexport class SlotData extends PosedData<SlotPose> {\n\t/** The index of the slot in {@link Skeleton.slots}. */\n\tindex: number = 0;\n\n\t/** The bone this slot belongs to. */\n\tboneData: BoneData;\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\t// Nonessential.\n\t/** False if the slot was hidden in Spine and nonessential data was exported. Does not affect runtime rendering. */\n\tvisible = true;\n\n\tconstructor (index: number, name: string, boneData: BoneData) {\n\t\tsuper(name, new SlotPose());\n\t\tif (index < 0) throw new Error(\"index must be >= 0.\");\n\t\tif (!boneData) throw new Error(\"boneData cannot be null.\");\n\t\tthis.index = index;\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Pose } from \"./Pose.js\"\n\n/** Stores a pose for a transform constraint. */\nexport class TransformConstraintPose implements Pose<TransformConstraintPose> {\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained rotation. */\n\tmixRotate = 0;\n\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained translation X. */\n\tmixX = 0;\n\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained translation Y. */\n\tmixY = 0;\n\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained scale X. */\n\tmixScaleX = 0;\n\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained scale Y. */\n\tmixScaleY = 0;\n\n\t/** A percentage (unbounded) that controls the mix between the constrained and unconstrained shear Y. */\n\tmixShearY = 0;\n\n\tpublic set (pose: TransformConstraintPose) {\n\t\tthis.mixRotate = pose.mixRotate;\n\t\tthis.mixX = pose.mixX;\n\t\tthis.mixY = pose.mixY;\n\t\tthis.mixScaleX = pose.mixScaleX;\n\t\tthis.mixScaleY = pose.mixScaleY;\n\t\tthis.mixShearY = pose.mixShearY;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { Bone } from \"./Bone.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport { Constraint } from \"./Constraint.js\";\nimport type { Physics } from \"./Physics.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { TransformConstraintData } from \"./TransformConstraintData.js\";\nimport { TransformConstraintPose } from \"./TransformConstraintPose.js\";\nimport { MathUtils } from \"./Utils.js\";\n\n\n/** Adjusts the world transform of the constrained bones to match that of the source bone.\n *\n * See [Transform constraints](http://esotericsoftware.com/spine-transform-constraints) in the Spine User Guide. */\nexport class TransformConstraint extends Constraint<TransformConstraint, TransformConstraintData, TransformConstraintPose> {\n\n\t/** The bones that will be modified by this transform constraint. */\n\tbones: Array<BonePose>;\n\n\t/** The bone whose world transform will be copied to the constrained bones. */\n\tsource: Bone;\n\n\tconstructor (data: TransformConstraintData, skeleton: Skeleton) {\n\t\tsuper(data, new TransformConstraintPose(), new TransformConstraintPose());\n\t\tif (!skeleton) throw new Error(\"skeleton cannot be null.\");\n\n\t\tthis.bones = [] as BonePose[];\n\t\tfor (const boneData of data.bones)\n\t\t\tthis.bones.push(skeleton.bones[boneData.index].constrainedPose);\n\n\t\tconst source = skeleton.bones[data.source.index];\n\t\tif (source == null) throw new Error(\"source cannot be null.\");\n\t\tthis.source = source;\n\t}\n\n\tpublic copy (skeleton: Skeleton) {\n\t\tvar copy = new TransformConstraint(this.data, skeleton);\n\t\tcopy.pose.set(this.pose);\n\t\treturn copy;\n\t}\n\n\tupdate (skeleton: Skeleton, physics: Physics) {\n\t\tconst p = this.appliedPose;\n\t\tif (p.mixRotate === 0 && p.mixX === 0 && p.mixY === 0 && p.mixScaleX === 0 && p.mixScaleY === 0 && p.mixShearY === 0) return;\n\n\t\tconst data = this.data;\n\t\tconst localSource = data.localSource, localTarget = data.localTarget, additive = data.additive, clamp = data.clamp;\n\t\tconst offsets = data.offsets;\n\t\tconst source = this.source.appliedPose;\n\t\tif (localSource) source.validateLocalTransform(skeleton);\n\t\tconst fromItems = data.properties;\n\t\tconst fn = data.properties.length, update = skeleton._update;\n\t\tconst bones = this.bones;\n\t\tfor (let i = 0, n = this.bones.length; i < n; i++) {\n\t\t\tconst bone = bones[i];\n\t\t\tif (localTarget)\n\t\t\t\tbone.modifyLocal(skeleton);\n\t\t\telse\n\t\t\t\tbone.modifyWorld(update);\n\t\t\tfor (let f = 0; f < fn; f++) {\n\t\t\t\tconst from = fromItems[f];\n\t\t\t\tconst value = from.value(skeleton, source, localSource, offsets) - from.offset;\n\t\t\t\tconst toItems = from.to;\n\t\t\t\tfor (let t = 0, tn = from.to.length; t < tn; t++) {\n\t\t\t\t\tconst to = toItems[t];\n\t\t\t\t\tif (to.mix(p) !== 0) {\n\t\t\t\t\t\tlet clamped = to.offset + value * to.scale;\n\t\t\t\t\t\tif (clamp) {\n\t\t\t\t\t\t\tif (to.offset < to.max)\n\t\t\t\t\t\t\t\tclamped = MathUtils.clamp(clamped, to.offset, to.max);\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tclamped = MathUtils.clamp(clamped, to.max, to.offset);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tto.apply(skeleton, p, bone, clamped, localTarget, additive);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tsort (skeleton: Skeleton) {\n\t\tif (!this.data.localSource) skeleton.sortBone(this.source);\n\t\tconst bones = this.bones;\n\t\tconst boneCount = this.bones.length;\n\t\tconst worldTarget = !this.data.localTarget;\n\t\tif (worldTarget) {\n\t\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\t\tskeleton.sortBone(bones[i].bone);\n\t\t}\n\t\tskeleton._updateCache.push(this);\n\t\tfor (let i = 0; i < boneCount; i++) {\n\t\t\tconst bone = bones[i].bone;\n\t\t\tskeleton.sortReset(bone.children);\n\t\t\tskeleton.constrained(bone);\n\t\t}\n\t\tfor (let i = 0; i < boneCount; i++)\n\t\t\tbones[i].bone.sorted = worldTarget;\n\t}\n\n\tisSourceActive () {\n\t\treturn this.source.active;\n\t}\n\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { BoneData } from \"./BoneData.js\";\nimport type { BonePose } from \"./BonePose.js\";\nimport { ConstraintData } from \"./ConstraintData.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { TransformConstraint } from \"./TransformConstraint.js\";\nimport { TransformConstraintPose } from \"./TransformConstraintPose.js\";\nimport { MathUtils } from \"./Utils.js\";\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<TransformConstraint, TransformConstraintPose> {\n\tpublic static readonly ROTATION = 0;\n\tpublic static readonly X = 1;\n\tpublic static readonly Y = 2;\n\tpublic static readonly SCALEX = 3;\n\tpublic static readonly SCALEY = 4;\n\tpublic static readonly SHEARY = 5;\n\n\t/** The bones that will be modified by this transform constraint. */\n\tbones = [] as BoneData[];\n\n\t/** The bone whose world transform will be copied to the constrained bones. */\n\tpublic set source (source: BoneData) { this._source = source; }\n\tpublic get source () {\n\t\tif (!this._source) throw new Error(\"BoneData not set.\")\n\t\telse return this._source;\n\t}\n\tprivate _source: BoneData | null = null;\n\n\toffsets = [0, 0, 0, 0, 0, 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/** Reads the source bone's local transform instead of its world transform. */\n\tlocalSource = false;\n\n\t/** Sets the constrained bones' local transforms instead of their world transforms. */\n\tlocalTarget = false;\n\n\t/** Adds the source bone transform to the constrained bones instead of setting it absolutely. */\n\tadditive = false;\n\n\t/** Prevents constrained bones from exceeding the ranged defined by {@link ToProperty.offset} and {@link ToProperty.max}. */\n\tclamp = false;\n\n\t/** The mapping of transform properties to other transform properties. */\n\treadonly properties: Array<FromProperty> = [];\n\n\tconstructor (name: string) {\n\t\tsuper(name, new TransformConstraintPose());\n\t}\n\n\tpublic create (skeleton: Skeleton) {\n\t\treturn new TransformConstraint(this, skeleton);\n\t}\n\n\t/** An offset added to the constrained bone rotation. */\n\tgetOffsetRotation () {\n\t\treturn this.offsets[TransformConstraintData.ROTATION];\n\t}\n\n\tsetOffsetRotation (offsetRotation: number) {\n\t\tthis.offsets[TransformConstraintData.ROTATION] = offsetRotation;\n\t}\n\n\t/** An offset added to the constrained bone X translation. */\n\tgetOffsetX () {\n\t\treturn this.offsets[TransformConstraintData.X];\n\t}\n\n\tsetOffsetX (offsetX: number) {\n\t\tthis.offsets[TransformConstraintData.X] = offsetX;\n\t}\n\n\t/** An offset added to the constrained bone Y translation. */\n\tgetOffsetY () {\n\t\treturn this.offsets[TransformConstraintData.Y];\n\t}\n\n\tsetOffsetY (offsetY: number) {\n\t\tthis.offsets[TransformConstraintData.Y] = offsetY;\n\t}\n\n\t/** An offset added to the constrained bone scaleX. */\n\tgetOffsetScaleX () {\n\t\treturn this.offsets[TransformConstraintData.SCALEX];\n\t}\n\n\tsetOffsetScaleX (offsetScaleX: number) {\n\t\tthis.offsets[TransformConstraintData.SCALEX] = offsetScaleX;\n\t}\n\n\t/** An offset added to the constrained bone scaleY. */\n\tgetOffsetScaleY () {\n\t\treturn this.offsets[TransformConstraintData.SCALEY];\n\t}\n\n\tsetOffsetScaleY (offsetScaleY: number) {\n\t\tthis.offsets[TransformConstraintData.SCALEY] = offsetScaleY;\n\t}\n\n\t/** An offset added to the constrained bone shearY. */\n\tgetOffsetShearY () {\n\t\treturn this.offsets[TransformConstraintData.SHEARY];\n\t}\n\n\tsetOffsetShearY (offsetShearY: number) {\n\t\tthis.offsets[TransformConstraintData.SHEARY] = offsetShearY;\n\t}\n\n}\n\n/** Source property for a {@link TransformConstraint}. */\nexport abstract class FromProperty {\n\t/** The value of this property that corresponds to {@link ToProperty.offset}. */\n\toffset = 0;\n\n\t/** Constrained properties. */\n\treadonly to: Array<ToProperty> = [];\n\n\t/** Reads this property from the specified bone. */\n\tabstract value (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number;\n}\n\n/** Constrained property for a {@link TransformConstraint}. */\nexport abstract class ToProperty {\n\t/** The value of this property that corresponds to {@link FromProperty.offset}. */\n\toffset = 0;\n\n\t/** The maximum value of this property when {@link TransformConstraintData.clamp clamped}. */\n\tmax = 0;\n\n\t/** The scale of the {@link FromProperty} value in relation to this property. */\n\tscale = 0;\n\n\t/** Reads the mix for this property from the specified constraint. */\n\tabstract mix (pose: TransformConstraintPose): number;\n\n\t/** Applies the value to this property. */\n\tabstract apply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void;\n}\n\nexport class FromRotate extends FromProperty {\n\tvalue (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number {\n\t\tif (local) return source.rotation + offsets[TransformConstraintData.ROTATION];\n\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY;\n\t\tlet value = Math.atan2(source.c / sy, source.a / sx) * MathUtils.radDeg\n\t\t\t+ ((source.a * source.d - source.b * source.c) * sx * sy > 0 ? offsets[TransformConstraintData.ROTATION] : -offsets[TransformConstraintData.ROTATION]);\n\t\tif (value < 0) value += 360;\n\t\treturn value;\n\t}\n}\n\nexport class ToRotate extends ToProperty {\n\tmix (pose: TransformConstraintPose): number {\n\t\treturn pose.mixRotate;\n\t}\n\n\tapply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void {\n\t\tif (local)\n\t\t\tbone.rotation += (additive ? value : value - bone.rotation) * pose.mixRotate;\n\t\telse {\n\t\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY, ix = 1 / sx, iy = 1 / sy;\n\t\t\tconst a = bone.a * ix, b = bone.b * ix, c = bone.c * iy, d = bone.d * iy;\n\t\t\tvalue *= MathUtils.degRad;\n\t\t\tif (!additive) value -= Math.atan2(c, a);\n\t\t\tif (value > MathUtils.PI)\n\t\t\t\tvalue -= MathUtils.PI2;\n\t\t\telse if (value < -MathUtils.PI) //\n\t\t\t\tvalue += MathUtils.PI2;\n\t\t\tvalue *= pose.mixRotate;\n\t\t\tconst cos = Math.cos(value), sin = Math.sin(value);\n\t\t\tbone.a = (cos * a - sin * c) * sx;\n\t\t\tbone.b = (cos * b - sin * d) * sx;\n\t\t\tbone.c = (sin * a + cos * c) * sy;\n\t\t\tbone.d = (sin * b + cos * d) * sy;\n\t\t}\n\t}\n}\n\nexport class FromX extends FromProperty {\n\tvalue (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number {\n\t\treturn local\n\t\t\t? source.x + offsets[TransformConstraintData.X]\n\t\t\t: (offsets[TransformConstraintData.X] * source.a + offsets[TransformConstraintData.Y] * source.b + source.worldX) / skeleton.scaleX;\n\t}\n}\n\nexport class ToX extends ToProperty {\n\tmix (pose: TransformConstraintPose): number {\n\t\treturn pose.mixX;\n\t}\n\n\tapply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void {\n\t\tif (local)\n\t\t\tbone.x += (additive ? value : value - bone.x) * pose.mixX;\n\t\telse {\n\t\t\tif (!additive) value -= bone.worldX / skeleton.scaleX;\n\t\t\tbone.worldX += value * pose.mixX * skeleton.scaleX;\n\t\t}\n\t}\n}\n\nexport class FromY extends FromProperty {\n\tvalue (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number {\n\t\treturn local\n\t\t\t? source.y + offsets[TransformConstraintData.Y]\n\t\t\t: (offsets[TransformConstraintData.X] * source.c + offsets[TransformConstraintData.Y] * source.d + source.worldY) / skeleton.scaleY;\n\t}\n}\n\nexport class ToY extends ToProperty {\n\tmix (pose: TransformConstraintPose): number {\n\t\treturn pose.mixY;\n\t}\n\n\tapply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void {\n\t\tif (local)\n\t\t\tbone.y += (additive ? value : value - bone.y) * pose.mixY;\n\t\telse {\n\t\t\tif (!additive) value -= bone.worldY / skeleton.scaleY;\n\t\t\tbone.worldY += value * pose.mixY * skeleton.scaleY;\n\t\t}\n\t}\n}\n\nexport class FromScaleX extends FromProperty {\n\tvalue (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number {\n\t\tif (local) return source.scaleX + offsets[TransformConstraintData.SCALEX];\n\t\tconst a = source.a / skeleton.scaleX, c = source.c / skeleton.scaleY;\n\t\treturn Math.sqrt(a * a + c * c) + offsets[TransformConstraintData.SCALEX];\n\t}\n}\n\nexport class ToScaleX extends ToProperty {\n\tmix (pose: TransformConstraintPose): number {\n\t\treturn pose.mixScaleX;\n\t}\n\n\tapply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void {\n\t\tif (local) {\n\t\t\tif (additive)\n\t\t\t\tbone.scaleX *= 1 + (value - 1) * pose.mixScaleX;\n\t\t\telse if (bone.scaleX !== 0) //\n\t\t\t\tbone.scaleX += (value - bone.scaleX) * pose.mixScaleX;\n\t\t} else if (additive) {\n\t\t\tconst s = 1 + (value - 1) * pose.mixScaleX;\n\t\t\tbone.a *= s;\n\t\t\tbone.c *= s;\n\t\t} else {\n\t\t\tlet a = bone.a / skeleton.scaleX, c = bone.c / skeleton.scaleY, s = Math.sqrt(a * a + c * c);\n\t\t\tif (s !== 0) {\n\t\t\t\ts = 1 + (value - s) * pose.mixScaleX / s;\n\t\t\t\tbone.a *= s;\n\t\t\t\tbone.c *= s;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class FromScaleY extends FromProperty {\n\tvalue (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number {\n\t\tif (local) return source.scaleY + offsets[TransformConstraintData.SCALEY];\n\t\tconst b = source.b / skeleton.scaleX, d = source.d / skeleton.scaleY;\n\t\treturn Math.sqrt(b * b + d * d) + offsets[TransformConstraintData.SCALEY];\n\t}\n}\n\nexport class ToScaleY extends ToProperty {\n\tmix (pose: TransformConstraintPose): number {\n\t\treturn pose.mixScaleY;\n\t}\n\n\tapply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void {\n\t\tif (local) {\n\t\t\tif (additive)\n\t\t\t\tbone.scaleY *= 1 + (value - 1) * pose.mixScaleY;\n\t\t\telse if (bone.scaleY !== 0) //\n\t\t\t\tbone.scaleY += (value - bone.scaleY) * pose.mixScaleY;\n\t\t} else if (additive) {\n\t\t\tconst s = 1 + (value - 1) * pose.mixScaleY;\n\t\t\tbone.b *= s;\n\t\t\tbone.d *= s;\n\t\t} else {\n\t\t\tlet b = bone.b / skeleton.scaleX, d = bone.d / skeleton.scaleY, s = Math.sqrt(b * b + d * d);\n\t\t\tif (s !== 0) {\n\t\t\t\ts = 1 + (value - s) * pose.mixScaleY / s;\n\t\t\t\tbone.b *= s;\n\t\t\t\tbone.d *= s;\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport class FromShearY extends FromProperty {\n\tvalue (skeleton: Skeleton, source: BonePose, local: boolean, offsets: Array<number>): number {\n\t\tif (local) return source.shearY + offsets[TransformConstraintData.SHEARY];\n\t\tconst ix = 1 / skeleton.scaleX, iy = 1 / skeleton.scaleY;\n\t\treturn (Math.atan2(source.d * iy, source.b * ix) - Math.atan2(source.c * iy, source.a * ix)) * MathUtils.radDeg - 90 + offsets[TransformConstraintData.SHEARY];\n\t}\n}\n\nexport class ToShearY extends ToProperty {\n\tmix (pose: TransformConstraintPose): number {\n\t\treturn pose.mixShearY;\n\t}\n\n\tapply (skeleton: Skeleton, pose: TransformConstraintPose, bone: BonePose, value: number, local: boolean, additive: boolean): void {\n\t\tif (local) {\n\t\t\tif (!additive) value -= bone.shearY;\n\t\t\tbone.shearY += value * pose.mixShearY;\n\t\t} else {\n\t\t\tconst sx = skeleton.scaleX, sy = skeleton.scaleY, b = bone.b / sx, d = bone.d / sy, by = Math.atan2(d, b);\n\t\t\tvalue = (value + 90) * MathUtils.degRad;\n\t\t\tif (additive)\n\t\t\t\tvalue -= MathUtils.PI / 2;\n\t\t\telse {\n\t\t\t\tvalue -= by - Math.atan2(bone.c / sx, bone.a / sy);\n\t\t\t\tif (value > MathUtils.PI)\n\t\t\t\t\tvalue -= MathUtils.PI2;\n\t\t\t\telse if (value < -MathUtils.PI)\n\t\t\t\t\tvalue += MathUtils.PI2;\n\t\t\t}\n\t\t\tvalue = by + value * pose.mixShearY;\n\t\t\tconst s = Math.sqrt(b * b + d * d);\n\t\t\tbone.b = Math.cos(value) * s * sy;\n\t\t\tbone.d = Math.sin(value) * s * sx;\n\t\t}\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 { AlphaTimeline, Animation, AttachmentTimeline, type BoneTimeline2, type CurveTimeline, CurveTimeline1, DeformTimeline, DrawOrderFolderTimeline, DrawOrderTimeline, EventTimeline, IkConstraintTimeline, InheritTimeline, PathConstraintMixTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PhysicsConstraintDampingTimeline, PhysicsConstraintGravityTimeline, PhysicsConstraintInertiaTimeline, PhysicsConstraintMassTimeline, PhysicsConstraintMixTimeline, PhysicsConstraintResetTimeline, PhysicsConstraintStrengthTimeline, PhysicsConstraintWindTimeline, RGB2Timeline, RGBA2Timeline, RGBATimeline, RGBTimeline, RotateTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, SequenceTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, SliderMixTimeline, SliderTimeline, type Timeline, TransformConstraintTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline } from \"./Animation.js\";\nimport type { Attachment, VertexAttachment } from \"./attachments/Attachment.js\";\nimport type { AttachmentLoader } from \"./attachments/AttachmentLoader.js\";\nimport type { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { Sequence, SequenceModeValues } from \"./attachments/Sequence.js\";\nimport { BoneData } from \"./BoneData.js\";\nimport { ScaleYMode } from \"./ConstraintData.js\";\nimport { Event } from \"./Event.js\";\nimport { EventData } from \"./EventData.js\";\nimport { IkConstraintData } from \"./IkConstraintData.js\";\nimport { PathConstraintData, PositionMode, SpacingMode } from \"./PathConstraintData.js\";\nimport { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\nimport { SkeletonData } from \"./SkeletonData.js\";\nimport { Skin } from \"./Skin.js\";\nimport { SliderData } from \"./SliderData.js\";\nimport { SlotData } from \"./SlotData.js\";\nimport { type FromProperty, FromRotate, FromScaleX, FromScaleY, FromShearY, FromX, FromY, type ToProperty, ToRotate, ToScaleX, ToScaleY, ToShearY, ToX, ToY, TransformConstraintData } from \"./TransformConstraintData.js\";\nimport { Color, type NumberArrayLike, Utils } from \"./Utils.js\";\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 = [] as LinkedMesh[];\n\n\tconstructor (attachmentLoader: AttachmentLoader) {\n\t\tthis.attachmentLoader = attachmentLoader;\n\t}\n\n\treadSkeletonData (binary: Uint8Array | ArrayBuffer): SkeletonData {\n\t\tconst scale = this.scale;\n\n\t\tconst skeletonData = new SkeletonData();\n\t\tskeletonData.name = \"\"; // BOZO\n\n\t\tconst input = new BinaryInput(binary);\n\n\t\tconst lowHash = input.readInt32();\n\t\tconst 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\t\tskeletonData.referenceScale = input.readFloat() * scale;\n\n\t\tconst nonessential = input.readBoolean();\n\t\tif (nonessential) {\n\t\t\tskeletonData.fps = input.readFloat();\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\tconst 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\tconst bones = skeletonData.bones;\n\t\tn = input.readInt(true)\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst name = input.readString();\n\t\t\tif (!name) throw new Error(\"Bone name must not be null.\");\n\t\t\tconst parent = i === 0 ? null : bones[input.readInt(true)];\n\t\t\tconst data = new BoneData(i, name, parent);\n\t\t\tconst setup = data.setupPose;\n\t\t\tsetup.rotation = input.readFloat();\n\t\t\tsetup.x = input.readFloat() * scale;\n\t\t\tsetup.y = input.readFloat() * scale;\n\t\t\tsetup.scaleX = input.readFloat();\n\t\t\tsetup.scaleY = input.readFloat();\n\t\t\tsetup.shearX = input.readFloat();\n\t\t\tsetup.shearY = input.readFloat();\n\t\t\tsetup.inherit = input.readByte();\n\t\t\tdata.length = input.readFloat() * scale;\n\t\t\tdata.skinRequired = input.readBoolean();\n\t\t\tif (nonessential) {\n\t\t\t\tColor.rgba8888ToColor(data.color, input.readInt32());\n\t\t\t\tdata.icon = input.readString() ?? undefined;\n\t\t\t\tdata.iconSize = input.readFloat();\n\t\t\t\tdata.iconRotation = input.readFloat();\n\t\t\t\tdata.visible = input.readBoolean();\n\t\t\t}\n\t\t\tbones.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\tconst slotName = input.readString();\n\t\t\tif (!slotName) throw new Error(\"Slot name must not be null.\");\n\t\t\tconst boneData = bones[input.readInt(true)];\n\t\t\tconst data = new SlotData(i, slotName, boneData);\n\t\t\tColor.rgba8888ToColor(data.setupPose.color, input.readInt32());\n\n\t\t\tconst darkColor = input.readInt32();\n\t\t\tif (darkColor !== -1) Color.rgb888ToColor(data.setupPose.darkColor = new Color(), darkColor);\n\n\t\t\tdata.attachmentName = input.readStringRef();\n\t\t\tdata.blendMode = input.readInt(true);\n\t\t\tif (nonessential) data.visible = input.readBoolean();\n\t\t\tskeletonData.slots.push(data);\n\t\t}\n\n\t\t// Constraints.\n\t\tconst constraints = skeletonData.constraints;\n\t\tconst constraintCount = input.readInt(true);\n\t\tfor (let i = 0; i < constraintCount; i++) {\n\t\t\tconst name = input.readString();\n\t\t\tif (!name) throw new Error(\"Constraint data name must not be null.\");\n\t\t\tlet nn: number;\n\t\t\tswitch (input.readByte()) {\n\t\t\t\tcase CONSTRAINT_IK: {\n\t\t\t\t\tconst data = new IkConstraintData(name);\n\t\t\t\t\tnn = input.readInt(true);\n\t\t\t\t\tfor (let ii = 0; ii < nn; ii++)\n\t\t\t\t\t\tdata.bones.push(bones[input.readInt(true)]);\n\t\t\t\t\tdata.target = bones[input.readInt(true)];\n\t\t\t\t\tconst flags = input.readByte();\n\t\t\t\t\tdata.skinRequired = (flags & 1) !== 0;\n\t\t\t\t\tif ((flags & 2) !== 0) data.scaleYMode = input.readUnsignedByte();\n\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\tsetup.bendDirection = (flags & 4) !== 0 ? -1 : 1;\n\t\t\t\t\tsetup.compress = (flags & 8) !== 0;\n\t\t\t\t\tsetup.stretch = (flags & 16) !== 0;\n\t\t\t\t\tif ((flags & 32) !== 0) setup.mix = (flags & 64) !== 0 ? input.readFloat() : 1;\n\t\t\t\t\tif ((flags & 128) !== 0) setup.softness = input.readFloat() * scale;\n\t\t\t\t\tconstraints.push(data);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase CONSTRAINT_TRANSFORM: {\n\t\t\t\t\tconst data = new TransformConstraintData(name);\n\t\t\t\t\tnn = input.readInt(true);\n\t\t\t\t\tfor (let ii = 0; ii < nn; ii++)\n\t\t\t\t\t\tdata.bones.push(bones[input.readInt(true)]);\n\t\t\t\t\tdata.source = bones[input.readInt(true)];\n\t\t\t\t\tlet flags = input.readUnsignedByte();\n\t\t\t\t\tdata.skinRequired = (flags & 1) !== 0;\n\t\t\t\t\tdata.localSource = (flags & 2) !== 0;\n\t\t\t\t\tdata.localTarget = (flags & 4) !== 0;\n\t\t\t\t\tdata.additive = (flags & 8) !== 0;\n\t\t\t\t\tdata.clamp = (flags & 16) !== 0;\n\n\t\t\t\t\tnn = flags >> 5;\n\t\t\t\t\tfor (let ii = 0, tn: number; ii < nn; ii++) {\n\t\t\t\t\t\tlet fromScale = 1;\n\t\t\t\t\t\tlet from: FromProperty | null;\n\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\tcase 0: from = new FromRotate(); break;\n\t\t\t\t\t\t\tcase 1: {\n\t\t\t\t\t\t\t\tfromScale = scale;\n\t\t\t\t\t\t\t\tfrom = new FromX();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 2: {\n\t\t\t\t\t\t\t\tfromScale = scale;\n\t\t\t\t\t\t\t\tfrom = new FromY();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 3: from = new FromScaleX(); break;\n\t\t\t\t\t\t\tcase 4: from = new FromScaleY(); break;\n\t\t\t\t\t\t\tcase 5: from = new FromShearY(); break;\n\t\t\t\t\t\t\tdefault: from = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!from) continue;\n\t\t\t\t\t\tfrom.offset = input.readFloat() * fromScale;\n\t\t\t\t\t\ttn = input.readByte();\n\t\t\t\t\t\tfor (let t = 0; t < tn; t++) {\n\t\t\t\t\t\t\tlet toScale = 1;\n\t\t\t\t\t\t\tlet to: ToProperty | null;\n\t\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\t\tcase 0: to = new ToRotate(); break;\n\t\t\t\t\t\t\t\tcase 1: {\n\t\t\t\t\t\t\t\t\ttoScale = scale;\n\t\t\t\t\t\t\t\t\tto = new ToX();\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase 2: {\n\t\t\t\t\t\t\t\t\ttoScale = scale;\n\t\t\t\t\t\t\t\t\tto = new ToY();\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcase 3: to = new ToScaleX(); break;\n\t\t\t\t\t\t\t\tcase 4: to = new ToScaleY(); break;\n\t\t\t\t\t\t\t\tcase 5: to = new ToShearY(); break;\n\t\t\t\t\t\t\t\tdefault: to = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!to) continue;\n\t\t\t\t\t\t\tto.offset = input.readFloat() * toScale;\n\t\t\t\t\t\t\tto.max = input.readFloat() * toScale;\n\t\t\t\t\t\t\tto.scale = input.readFloat() * toScale / fromScale;\n\t\t\t\t\t\t\tfrom.to[t] = to;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.properties[ii] = from;\n\t\t\t\t\t}\n\t\t\t\t\tflags = input.readByte();\n\t\t\t\t\tif ((flags & 1) !== 0) data.offsets[TransformConstraintData.ROTATION] = input.readFloat();\n\t\t\t\t\tif ((flags & 2) !== 0) data.offsets[TransformConstraintData.X] = input.readFloat() * scale;\n\t\t\t\t\tif ((flags & 4) !== 0) data.offsets[TransformConstraintData.Y] = input.readFloat() * scale;\n\t\t\t\t\tif ((flags & 8) !== 0) data.offsets[TransformConstraintData.SCALEX] = input.readFloat();\n\t\t\t\t\tif ((flags & 16) !== 0) data.offsets[TransformConstraintData.SCALEY] = input.readFloat();\n\t\t\t\t\tif ((flags & 32) !== 0) data.offsets[TransformConstraintData.SHEARY] = input.readFloat();\n\t\t\t\t\tflags = input.readByte();\n\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\tif ((flags & 1) !== 0) setup.mixRotate = input.readFloat();\n\t\t\t\t\tif ((flags & 2) !== 0) setup.mixX = input.readFloat();\n\t\t\t\t\tif ((flags & 4) !== 0) setup.mixY = input.readFloat();\n\t\t\t\t\tif ((flags & 8) !== 0) setup.mixScaleX = input.readFloat();\n\t\t\t\t\tif ((flags & 16) !== 0) setup.mixScaleY = input.readFloat();\n\t\t\t\t\tif ((flags & 32) !== 0) setup.mixShearY = input.readFloat();\n\t\t\t\t\tconstraints.push(data);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase CONSTRAINT_PATH: {\n\t\t\t\t\tconst data = new PathConstraintData(name);\n\t\t\t\t\tnn = input.readInt(true);\n\t\t\t\t\tfor (let ii = 0; ii < nn; ii++)\n\t\t\t\t\t\tdata.bones.push(bones[input.readInt(true)]);\n\t\t\t\t\tdata.slot = skeletonData.slots[input.readInt(true)];\n\t\t\t\t\tconst flags = input.readByte();\n\t\t\t\t\tdata.skinRequired = (flags & 1) !== 0;\n\t\t\t\t\tdata.positionMode = (flags >> 1) & 0b1;\n\t\t\t\t\tdata.spacingMode = (flags >> 2) & 0b11;\n\t\t\t\t\tdata.rotateMode = (flags >> 4) & 0b11;\n\t\t\t\t\tif ((flags & 128) !== 0) data.offsetRotation = input.readFloat();\n\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\tsetup.position = input.readFloat();\n\t\t\t\t\tif (data.positionMode === PositionMode.Fixed) setup.position *= scale;\n\t\t\t\t\tsetup.spacing = input.readFloat();\n\t\t\t\t\tif (data.spacingMode === SpacingMode.Length || data.spacingMode === SpacingMode.Fixed) setup.spacing *= scale;\n\t\t\t\t\tsetup.mixRotate = input.readFloat();\n\t\t\t\t\tsetup.mixX = input.readFloat();\n\t\t\t\t\tsetup.mixY = input.readFloat();\n\t\t\t\t\tconstraints.push(data);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase CONSTRAINT_PHYSICS: {\n\t\t\t\t\tconst data = new PhysicsConstraintData(name);\n\t\t\t\t\tdata.bone = bones[input.readInt(true)];\n\t\t\t\t\tlet flags = input.readByte();\n\t\t\t\t\tdata.skinRequired = (flags & 1) !== 0;\n\t\t\t\t\tif ((flags & 2) !== 0) data.x = input.readFloat();\n\t\t\t\t\tif ((flags & 4) !== 0) data.y = input.readFloat();\n\t\t\t\t\tif ((flags & 8) !== 0) data.rotate = input.readFloat();\n\t\t\t\t\tif ((flags & 16) !== 0) {\n\t\t\t\t\t\tlet scaleX = input.readFloat();\n\t\t\t\t\t\tif (scaleX < -2) {\n\t\t\t\t\t\t\tdata.scaleYMode = ScaleYMode.Volume;\n\t\t\t\t\t\t\tscaleX = -2 - scaleX;\n\t\t\t\t\t\t} else if (scaleX < 0) {\n\t\t\t\t\t\t\tdata.scaleYMode = ScaleYMode.Uniform;\n\t\t\t\t\t\t\tscaleX = -1 - scaleX;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.scaleX = scaleX;\n\t\t\t\t\t}\n\t\t\t\t\tif ((flags & 32) !== 0) data.shearX = input.readFloat();\n\t\t\t\t\tdata.limit = ((flags & 64) !== 0 ? input.readFloat() : 5000) * scale;\n\t\t\t\t\tdata.step = 1 / input.readUnsignedByte();\n\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\tsetup.inertia = input.readFloat();\n\t\t\t\t\tsetup.strength = input.readFloat();\n\t\t\t\t\tsetup.damping = input.readFloat();\n\t\t\t\t\tsetup.massInverse = (flags & 128) !== 0 ? input.readFloat() : 1;\n\t\t\t\t\tsetup.wind = input.readFloat();\n\t\t\t\t\tsetup.gravity = input.readFloat();\n\t\t\t\t\tflags = input.readByte();\n\t\t\t\t\tif ((flags & 1) !== 0) data.inertiaGlobal = true;\n\t\t\t\t\tif ((flags & 2) !== 0) data.strengthGlobal = true;\n\t\t\t\t\tif ((flags & 4) !== 0) data.dampingGlobal = true;\n\t\t\t\t\tif ((flags & 8) !== 0) data.massGlobal = true;\n\t\t\t\t\tif ((flags & 16) !== 0) data.windGlobal = true;\n\t\t\t\t\tif ((flags & 32) !== 0) data.gravityGlobal = true;\n\t\t\t\t\tif ((flags & 64) !== 0) data.mixGlobal = true;\n\t\t\t\t\tsetup.mix = (flags & 128) !== 0 ? input.readFloat() : 1;\n\t\t\t\t\tconstraints.push(data);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase CONSTRAINT_SLIDER: {\n\t\t\t\t\tconst data = new SliderData(name);\n\t\t\t\t\tconst flags = input.readByte();\n\t\t\t\t\tdata.skinRequired = (flags & 1) !== 0;\n\t\t\t\t\tdata.loop = (flags & 2) !== 0;\n\t\t\t\t\tdata.additive = (flags & 4) !== 0;\n\t\t\t\t\tif ((flags & 8) !== 0) data.setupPose.time = input.readFloat();\n\t\t\t\t\tif ((flags & 16) !== 0) data.setupPose.mix = (flags & 32) !== 0 ? input.readFloat() : 1;\n\t\t\t\t\tif ((flags & 64) !== 0) {\n\t\t\t\t\t\tdata.local = (flags & 128) !== 0;\n\t\t\t\t\t\tdata.bone = bones[input.readInt(true)];\n\t\t\t\t\t\tconst offset = input.readFloat();\n\t\t\t\t\t\tlet propertyScale = 1;\n\t\t\t\t\t\tswitch (input.readByte()) {\n\t\t\t\t\t\t\tcase 0: data.property = new FromRotate(); break;\n\t\t\t\t\t\t\tcase 1: {\n\t\t\t\t\t\t\t\tpropertyScale = scale;\n\t\t\t\t\t\t\t\tdata.property = new FromX();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 2: {\n\t\t\t\t\t\t\t\tpropertyScale = scale;\n\t\t\t\t\t\t\t\tdata.property = new FromY();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase 3: data.property = new FromScaleX(); break;\n\t\t\t\t\t\t\tcase 4: data.property = new FromScaleY(); break;\n\t\t\t\t\t\t\tcase 5: data.property = new FromShearY(); break;\n\t\t\t\t\t\t\tdefault: continue;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tdata.property.offset = offset * propertyScale;\n\t\t\t\t\t\tdata.offset = input.readFloat();\n\t\t\t\t\t\tdata.scale = input.readFloat() / propertyScale;\n\t\t\t\t\t}\n\t\t\t\t\tconstraints.push(data);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Default skin.\n\t\tconst 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\tconst 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\tconst linkedMesh = this.linkedMeshes[i];\n\t\t\tconst skin = skeletonData.skins[linkedMesh.skinIndex];\n\t\t\tif (!linkedMesh.source) throw new Error(\"Linked mesh parent must not be null\");\n\t\t\tconst source = skin.getAttachment(linkedMesh.sourceIndex, linkedMesh.source);\n\t\t\tif (!source) throw new Error(`Source mesh not found: ${linkedMesh.source}`);\n\t\t\tlinkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimelines ? source : linkedMesh.mesh;\n\t\t\tlinkedMesh.mesh.setSourceMesh(source as MeshAttachment);\n\t\t\tlinkedMesh.mesh.updateSequence();\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\tconst eventName = input.readString();\n\t\t\tif (!eventName) throw new Error(\"Event data name must not be null\");\n\t\t\tconst data = new EventData(eventName);\n\t\t\tconst setup = data.setupPose;\n\t\t\tsetup.intValue = input.readInt(false);\n\t\t\tsetup.floatValue = input.readFloat();\n\t\t\tsetup.stringValue = input.readString();\n\t\t\tdata._audioPath = input.readString();\n\t\t\tif (data.audioPath) {\n\t\t\t\tsetup.volume = input.readFloat();\n\t\t\t\tsetup.balance = input.readFloat();\n\t\t\t}\n\t\t\tskeletonData.events.push(data);\n\t\t}\n\n\t\t// Animations.\n\t\tconst animations = skeletonData.animations;\n\t\tn = input.readInt(true);\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tconst animationName = input.readString();\n\t\t\tif (!animationName) throw new Error(\"Animation name must not be null.\");\n\t\t\tanimations.push(this.readAnimation(input, animationName, skeletonData, nonessential));\n\t\t}\n\n\t\tfor (let i = 0; i < constraintCount; i++) {\n\t\t\tconst constraint = constraints[i];\n\t\t\tif (constraint instanceof SliderData) constraint.animation = animations[input.readInt(true)];\n\t\t}\n\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\tconst skinName = input.readString();\n\t\t\tif (!skinName) throw new Error(\"Skin name must not be null.\");\n\t\t\tskin = new Skin(skinName);\n\n\t\t\tif (nonessential) Color.rgba8888ToColor(skin.color, input.readInt32());\n\n\t\t\tlet n = input.readInt(true);\n\t\t\tlet from: object[] = skeletonData.bones, to: object[] = skin.bones;\n\t\t\tfor (let i = 0; i < n; i++)\n\t\t\t\tto[i] = from[input.readInt(true)];\n\n\t\t\tn = input.readInt(true);\n\t\t\tfrom = skeletonData.constraints;\n\t\t\tto = skin.constraints;\n\t\t\tfor (let i = 0; i < n; i++)\n\t\t\t\tto[i] = from[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\tconst slotIndex = input.readInt(true);\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst placeholder = input.readStringRef();\n\t\t\t\tif (!placeholder)\n\t\t\t\t\tthrow new Error(\"Attachment name must not be null\");\n\t\t\t\tconst attachment = this.readAttachment(input, skeletonData, skin, slotIndex, placeholder, nonessential);\n\t\t\t\tif (attachment) skin.setAttachment(slotIndex, placeholder, 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, placeholder: string, nonessential: boolean): Attachment | null {\n\t\tconst scale = this.scale;\n\n\t\tconst flags = input.readByte();\n\t\tconst name = (flags & 8) !== 0 ? input.readStringRef() : placeholder;\n\t\tif (!name) throw new Error(\"Attachment name must not be null\");\n\t\tswitch ((flags & 0b111) as AttachmentType) { // BUG?\n\t\t\tcase AttachmentType.Region: {\n\t\t\t\tlet path = (flags & 16) !== 0 ? input.readStringRef() : null;\n\t\t\t\tconst color = (flags & 32) !== 0 ? input.readInt32() : 0xffffffff;\n\t\t\t\tconst sequence = this.readSequence(input, (flags & 64) !== 0);\n\t\t\t\tconst rotation = (flags & 128) !== 0 ? input.readFloat() : 0;\n\t\t\t\tconst x = input.readFloat();\n\t\t\t\tconst y = input.readFloat();\n\t\t\t\tconst scaleX = input.readFloat();\n\t\t\t\tconst scaleY = input.readFloat();\n\t\t\t\tconst width = input.readFloat();\n\t\t\t\tconst height = input.readFloat();\n\n\t\t\t\tif (!path) path = name;\n\t\t\t\tconst region = this.attachmentLoader.newRegionAttachment(skin, placeholder, 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.updateSequence();\n\t\t\t\treturn region;\n\t\t\t}\n\t\t\tcase AttachmentType.BoundingBox: {\n\t\t\t\tconst vertices = this.readVertices(input, (flags & 16) !== 0);\n\t\t\t\tconst color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tconst box = this.attachmentLoader.newBoundingBoxAttachment(skin, placeholder, name);\n\t\t\t\tif (!box) return null;\n\t\t\t\tbox.worldVerticesLength = vertices.length;\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 = (flags & 16) !== 0 ? input.readStringRef() : name;\n\t\t\t\tconst color = (flags & 32) !== 0 ? input.readInt32() : 0xffffffff;\n\t\t\t\tconst sequence = this.readSequence(input, (flags & 64) !== 0);\n\t\t\t\tconst hullLength = input.readInt(true);\n\t\t\t\tconst vertices = this.readVertices(input, (flags & 128) !== 0);\n\t\t\t\tconst uvs = this.readFloatArray(input, vertices.length, 1);\n\t\t\t\tconst triangles = this.readShortArray(input, (vertices.length - hullLength - 2) * 3);\n\n\t\t\t\tconst slotCount = input.readInt(true);\n\t\t\t\tlet timelineSlots = null;\n\t\t\t\tif (slotCount > 0) {\n\t\t\t\t\ttimelineSlots = [];\n\t\t\t\t\tfor (let i = 0; i < slotCount; i++)\n\t\t\t\t\t\ttimelineSlots[i] = input.readInt(true);\n\t\t\t\t}\n\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, input.readInt(true));\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\tconst mesh = this.attachmentLoader.newMeshAttachment(skin, placeholder, 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.hullLength = hullLength << 1;\n\t\t\t\tmesh.bones = vertices.bones;\n\t\t\t\tmesh.vertices = vertices.vertices;\n\t\t\t\tmesh.worldVerticesLength = vertices.length;\n\t\t\t\tmesh.regionUVs = uvs;\n\t\t\t\tmesh.triangles = triangles;\n\t\t\t\tif (timelineSlots) mesh.timelineSlots = timelineSlots;\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\tmesh.updateSequence();\n\t\t\t\treturn mesh;\n\t\t\t}\n\t\t\tcase AttachmentType.LinkedMesh: {\n\t\t\t\tconst path = (flags & 16) !== 0 ? input.readStringRef() : name;\n\t\t\t\tif (path == null) throw new Error(\"Path of linked mesh must not be null\");\n\t\t\t\tconst color = (flags & 32) !== 0 ? input.readInt32() : 0xffffffff;\n\t\t\t\tconst sequence = this.readSequence(input, (flags & 64) !== 0);\n\t\t\t\tconst inheritTimelines = (flags & 128) !== 0;\n\t\t\t\tconst sourceIndex = input.readInt(true);\n\t\t\t\tconst skinIndex = input.readInt(true);\n\t\t\t\tconst source = input.readStringRef();\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\tconst mesh = this.attachmentLoader.newMeshAttachment(skin, placeholder, 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\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, skinIndex, slotIndex, sourceIndex, source, inheritTimelines));\n\t\t\t\treturn mesh;\n\t\t\t}\n\t\t\tcase AttachmentType.Path: {\n\t\t\t\tconst closed = (flags & 16) !== 0;\n\t\t\t\tconst constantSpeed = (flags & 32) !== 0;\n\t\t\t\tconst vertices = this.readVertices(input, (flags & 64) !== 0);\n\n\t\t\t\tconst lengths = this.readFloatArray(input, vertices.length / 6, scale);\n\t\t\t\tconst color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tconst path = this.attachmentLoader.newPathAttachment(skin, placeholder, 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 = vertices.length;\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\tconst rotation = input.readFloat();\n\t\t\t\tconst x = input.readFloat();\n\t\t\t\tconst y = input.readFloat();\n\t\t\t\tconst color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tconst point = this.attachmentLoader.newPointAttachment(skin, placeholder, 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\tconst endSlotIndex = input.readInt(true);\n\t\t\t\tconst vertices = this.readVertices(input, (flags & 16) !== 0);\n\t\t\t\tconst color = nonessential ? input.readInt32() : 0;\n\n\t\t\t\tconst clip = this.attachmentLoader.newClippingAttachment(skin, placeholder, name);\n\t\t\t\tif (!clip) return null;\n\t\t\t\tclip.endSlot = skeletonData.slots[endSlotIndex];\n\t\t\t\tclip.convex = (flags & 32) !== 0;\n\t\t\t\tclip.inverse = (flags & 64) !== 0;\n\t\t\t\tclip.worldVerticesLength = vertices.length;\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}\n\n\tprivate readSequence (input: BinaryInput, hasPathSuffix: boolean) {\n\t\tif (!hasPathSuffix) return new Sequence(1, false);\n\t\tconst sequence = new Sequence(input.readInt(true), 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, weighted: boolean): Vertices {\n\t\tconst scale = this.scale;\n\t\tconst vertexCount = input.readInt(true);\n\t\tconst length = vertexCount << 1;\n\n\t\tif (!weighted)\n\t\t\treturn new Vertices(null, this.readFloatArray(input, length, scale), length);\n\n\t\tconst n = input.readInt(true);\n\t\tconst bones: number[] = [];\n\t\tconst weights: number[] = [];\n\t\tfor (let b = 0, w = 0; b < n;) {\n\t\t\tconst boneCount = input.readInt(true);\n\t\t\tbones[b++] = boneCount;\n\t\t\tfor (let ii = 0; ii < boneCount; ii++, w += 3) {\n\t\t\t\tbones[b++] = input.readInt(true);\n\t\t\t\tweights[w] = input.readFloat() * scale;\n\t\t\t\tweights[w + 1] = input.readFloat() * scale;\n\t\t\t\tweights[w + 2] = input.readFloat();\n\t\t\t}\n\t\t}\n\t\treturn new Vertices(bones, Utils.toFloatArray(weights), length);\n\t}\n\n\tprivate readFloatArray (input: BinaryInput, n: number, scale: number): number[] {\n\t\tconst array: number[] = [];\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, n: number): number[] {\n\t\tconst array: number[] = [];\n\t\tfor (let i = 0; i < n; i++)\n\t\t\tarray[i] = input.readInt(true);\n\t\treturn array;\n\t}\n\n\tprivate readAnimation (input: BinaryInput, name: string, skeletonData: SkeletonData, nonessential: boolean): Animation {\n\t\tinput.readInt(true); // Number of timelines.\n\t\tconst timelines: Timeline[] = [];\n\t\tconst scale = this.scale;\n\n\t\t// Slot timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tconst slotIndex = input.readInt(true);\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst timelineType = input.readByte();\n\t\t\t\tconst frameCount = input.readInt(true);\n\t\t\t\tconst frameLast = frameCount - 1;\n\t\t\t\tswitch (timelineType) {\n\t\t\t\t\tcase SLOT_ATTACHMENT: {\n\t\t\t\t\t\tconst 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\tconst bezierCount = input.readInt(true);\n\t\t\t\t\t\tconst 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\tconst time2 = input.readFloat();\n\t\t\t\t\t\t\tconst r2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst g2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst b2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst 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\tconst bezierCount = input.readInt(true);\n\t\t\t\t\t\tconst 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\tconst time2 = input.readFloat();\n\t\t\t\t\t\t\tconst r2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst g2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst 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\tconst bezierCount = input.readInt(true);\n\t\t\t\t\t\tconst 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\tconst time2 = input.readFloat();\n\t\t\t\t\t\t\tconst nr = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst ng = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst nb = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst na = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst nr2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst ng2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst 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\tconst bezierCount = input.readInt(true);\n\t\t\t\t\t\tconst 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\tconst time2 = input.readFloat();\n\t\t\t\t\t\t\tconst nr = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst ng = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst nb = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst nr2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst ng2 = input.readUnsignedByte() / 255.0;\n\t\t\t\t\t\t\tconst 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\tconst 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\tconst time2 = input.readFloat();\n\t\t\t\t\t\t\tconst 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\tconst boneIndex = input.readInt(true);\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst type = input.readByte(), frameCount = input.readInt(true);\n\t\t\t\tif (type === BONE_INHERIT) {\n\t\t\t\t\tconst timeline = new InheritTimeline(frameCount, boneIndex);\n\t\t\t\t\tfor (let frame = 0; frame < frameCount; frame++) {\n\t\t\t\t\t\ttimeline.setFrame(frame, input.readFloat(), input.readByte());\n\t\t\t\t\t}\n\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst bezierCount = input.readInt(true);\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase BONE_ROTATE: readTimeline(input, timelines, new RotateTimeline(frameCount, bezierCount, boneIndex), 1); break;\n\t\t\t\t\tcase BONE_TRANSLATE: readTimeline(input, timelines, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale); break;\n\t\t\t\t\tcase BONE_TRANSLATEX: readTimeline(input, timelines, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale); break;\n\t\t\t\t\tcase BONE_TRANSLATEY: readTimeline(input, timelines, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale); break;\n\t\t\t\t\tcase BONE_SCALE: readTimeline(input, timelines, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1); break;\n\t\t\t\t\tcase BONE_SCALEX: readTimeline(input, timelines, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1); break;\n\t\t\t\t\tcase BONE_SCALEY: readTimeline(input, timelines, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1); break;\n\t\t\t\t\tcase BONE_SHEAR: readTimeline(input, timelines, new ShearTimeline(frameCount, bezierCount, boneIndex), 1); break;\n\t\t\t\t\tcase BONE_SHEARX: readTimeline(input, timelines, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1); break;\n\t\t\t\t\tcase BONE_SHEARY: readTimeline(input, timelines, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1); break;\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\tconst index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;\n\t\t\tconst timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index);\n\t\t\tlet flags = input.readByte();\n\t\t\tlet time = input.readFloat(), mix = (flags & 1) !== 0 ? ((flags & 2) !== 0 ? input.readFloat() : 1) : 0;\n\t\t\tlet softness = (flags & 4) !== 0 ? input.readFloat() * scale : 0;\n\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\ttimeline.setFrame(frame, time, mix, softness, (flags & 8) !== 0 ? 1 : -1, (flags & 16) !== 0, (flags & 32) !== 0);\n\t\t\t\tif (frame === frameLast) break;\n\t\t\t\tflags = input.readByte();\n\t\t\t\tconst time2 = input.readFloat(), mix2 = (flags & 1) !== 0 ? ((flags & 2) !== 0 ? input.readFloat() : 1) : 0;\n\t\t\t\tconst softness2 = (flags & 4) !== 0 ? input.readFloat() * scale : 0;\n\t\t\t\tif ((flags & 64) !== 0) {\n\t\t\t\t\ttimeline.setStepped(frame);\n\t\t\t\t} else if ((flags & 128) !== 0) {\n\t\t\t\t\tsetBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);\n\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\tconst index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;\n\t\t\tconst 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\tconst 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\tconst index = input.readInt(true);\n\t\t\tconst data = skeletonData.constraints[index] as PathConstraintData;\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase PATH_POSITION:\n\t\t\t\t\t\treadTimeline(input, timelines, new PathConstraintPositionTimeline(frameCount, bezierCount, index),\n\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\treadTimeline(input, timelines, new PathConstraintSpacingTimeline(frameCount, bezierCount, index),\n\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\tconst timeline = new PathConstraintMixTimeline(frameCount, bezierCount, 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\tconst 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\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Physics timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tconst index = input.readInt(true) - 1;\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst type = input.readByte(), frameCount = input.readInt(true);\n\t\t\t\tif (type === PHYSICS_RESET) {\n\t\t\t\t\tconst timeline = new PhysicsConstraintResetTimeline(frameCount, index);\n\t\t\t\t\tfor (let frame = 0; frame < frameCount; frame++)\n\t\t\t\t\t\ttimeline.setFrame(frame, input.readFloat());\n\t\t\t\t\ttimelines.push(timeline);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst bezierCount = input.readInt(true);\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase PHYSICS_INERTIA: readTimeline(input, timelines, new PhysicsConstraintInertiaTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase PHYSICS_STRENGTH: readTimeline(input, timelines, new PhysicsConstraintStrengthTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase PHYSICS_DAMPING: readTimeline(input, timelines, new PhysicsConstraintDampingTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase PHYSICS_MASS: readTimeline(input, timelines, new PhysicsConstraintMassTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase PHYSICS_WIND: readTimeline(input, timelines, new PhysicsConstraintWindTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase PHYSICS_GRAVITY: readTimeline(input, timelines, new PhysicsConstraintGravityTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase PHYSICS_MIX: readTimeline(input, timelines, new PhysicsConstraintMixTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tdefault: throw new Error(\"Unknown physics timeline type.\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Slider timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tconst index = input.readInt(true);\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase SLIDER_TIME: readTimeline(input, timelines, new SliderTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tcase SLIDER_MIX: readTimeline(input, timelines, new SliderMixTimeline(frameCount, bezierCount, index), 1); break;\n\t\t\t\t\tdefault: throw new Error(`Uknown slider type: ${type}`);\n\t\t\t\t}\n\n\t\t\t}\n\t\t}\n\n\t\t// Attachment timelines.\n\t\tfor (let i = 0, n = input.readInt(true); i < n; i++) {\n\t\t\tconst skin = skeletonData.skins[input.readInt(true)];\n\t\t\tfor (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n\t\t\t\tconst slotIndex = input.readInt(true);\n\t\t\t\tfor (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {\n\t\t\t\t\tconst attachmentName = input.readStringRef();\n\t\t\t\t\tif (!attachmentName) throw new Error(\"attachmentName must not be null.\");\n\t\t\t\t\tconst attachment = skin.getAttachment(slotIndex, attachmentName);\n\t\t\t\t\tconst timelineType = input.readByte();\n\t\t\t\t\tconst frameCount = input.readInt(true);\n\t\t\t\t\tconst 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\tconst vertexAttachment = attachment as VertexAttachment;\n\t\t\t\t\t\t\tconst weighted = vertexAttachment.bones;\n\t\t\t\t\t\t\tconst vertices = vertexAttachment.vertices;\n\t\t\t\t\t\t\tconst deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n\n\n\t\t\t\t\t\t\tconst bezierCount = input.readInt(true);\n\t\t\t\t\t\t\tconst 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: NumberArrayLike;\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\tconst 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\tconst 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\tconst timeline = new SequenceTimeline(frameCount, slotIndex, attachment as Attachment);\n\t\t\t\t\t\t\tfor (let frame = 0; frame < frameCount; frame++) {\n\t\t\t\t\t\t\t\tconst time = input.readFloat();\n\t\t\t\t\t\t\t\tconst 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\tconst slotCount = skeletonData.slots.length;\n\t\tconst drawOrderCount = input.readInt(true);\n\t\tif (drawOrderCount > 0) {\n\t\t\tconst timeline = new DrawOrderTimeline(drawOrderCount);\n\t\t\tfor (let i = 0; i < drawOrderCount; i++)\n\t\t\t\ttimeline.setFrame(i, input.readFloat(), readDrawOrder(input, slotCount));\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\t// Draw order folder timelines.\n\t\tconst folderCount = input.readInt(true);\n\t\tfor (let i = 0; i < folderCount; i++) {\n\t\t\tconst folderSlotCount = input.readInt(true);\n\t\t\tconst folderSlots = new Array<number>(folderSlotCount);\n\t\t\tfor (let ii = 0; ii < folderSlotCount; ii++)\n\t\t\t\tfolderSlots[ii] = input.readInt(true);\n\t\t\tconst keyCount = input.readInt(true);\n\t\t\tconst timeline = new DrawOrderFolderTimeline(keyCount, folderSlots, slotCount);\n\t\t\tfor (let ii = 0; ii < keyCount; ii++)\n\t\t\t\ttimeline.setFrame(ii, input.readFloat(), readDrawOrder(input, folderSlotCount));\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\t// Event timeline.\n\t\tconst eventCount = input.readInt(true);\n\t\tif (eventCount > 0) {\n\t\t\tconst timeline = new EventTimeline(eventCount);\n\t\t\tfor (let i = 0; i < eventCount; i++) {\n\t\t\t\tconst time = input.readFloat();\n\t\t\t\tconst eventData = skeletonData.events[input.readInt(true)];\n\t\t\t\tconst 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.readString();\n\t\t\t\tif (event.stringValue == null) event.stringValue = eventData.setupPose.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\tconst animation = new Animation(name, timelines, duration);\n\t\tif (nonessential) Color.rgba8888ToColor(animation.color, input.readInt32());\n\t\treturn animation;\n\t}\n}\n\nexport class BinaryInput {\n\tconstructor (data: Uint8Array | ArrayBuffer, public strings = [] as string[], private index: number = 0, private buffer: DataView = new DataView(data instanceof ArrayBuffer ? data : 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\tconst value = this.buffer.getInt16(this.index);\n\t\tthis.index += 2;\n\t\treturn value;\n\t}\n\n\treadInt32 (): number {\n\t\tconst 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\tconst 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\tfor (let i = 0; i < byteCount;) {\n\t\t\tconst 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\tconst 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\tsource: string | null;\n\tskinIndex: number; slotIndex: number; sourceIndex: number\n\tmesh: MeshAttachment;\n\tinheritTimelines: boolean;\n\n\tconstructor (mesh: MeshAttachment, skinIndex: number, slotIndex: number, sourceIndex: number, source: string | null,\n\t\tinheritTimelines: boolean) {\n\t\tthis.mesh = mesh;\n\t\tthis.skinIndex = skinIndex;\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.sourceIndex = sourceIndex;\n\t\tthis.source = source;\n\t\tthis.inheritTimelines = inheritTimelines;\n\t}\n}\n\nclass Vertices {\n\tconstructor (public bones: Array<number> | null = null, public vertices: Array<number> | Float32Array, public length: number = 0) { }\n}\n\nenum AttachmentType { Region, BoundingBox, Mesh, LinkedMesh, Path, Point, Clipping }\n\nfunction readTimeline (input: BinaryInput, timelines: Array<Timeline>, timeline: CurveTimeline1, scale: number): void;\nfunction readTimeline (input: BinaryInput, timelines: Array<Timeline>, timeline: BoneTimeline2, scale: number): void;\nfunction readTimeline (input: BinaryInput, timelines: Array<Timeline>, timeline: CurveTimeline1 | BoneTimeline2, scale: number): void {\n\tif (timeline instanceof CurveTimeline1)\n\t\treadTimeline1(input, timelines, timeline, scale);\n\telse\n\t\treadTimeline2(input, timelines, timeline, scale);\n}\n\nfunction readTimeline1 (input: BinaryInput, timelines: Array<Timeline>, timeline: CurveTimeline1, scale: number): void {\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\tconst 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\ttimelines.push(timeline);\n}\n\nfunction readTimeline2 (input: BinaryInput, timelines: Array<Timeline>, timeline: BoneTimeline2, scale: number): void {\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\tconst 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\ttimelines.push(timeline);\n}\n\nfunction readDrawOrder (input: BinaryInput, slotCount: number): number[] | null {\n\tconst changeCount = input.readInt(true);\n\tif (changeCount === 0) return null;\n\tconst drawOrder = new Array<number>(slotCount).fill(-1);\n\tconst unchanged = new Array<number>(slotCount - changeCount);\n\tlet originalIndex = 0, unchangedIndex = 0;\n\tfor (let i = 0; i < changeCount; i++) {\n\t\tconst slotIndex = input.readInt(true);\n\t\t// Collect unchanged items.\n\t\twhile (originalIndex !== slotIndex)\n\t\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t\t// Set changed items.\n\t\tdrawOrder[originalIndex + input.readInt(true)] = originalIndex++;\n\t}\n\t// Collect remaining unchanged items.\n\twhile (originalIndex < slotCount)\n\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t// Fill in unchanged items.\n\tfor (let i = slotCount - 1; i >= 0; i--)\n\t\tif (drawOrder[i] === -1) drawOrder[i] = unchanged[--unchangedIndex];\n\treturn drawOrder;\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;\nconst BONE_INHERIT = 10;\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 CONSTRAINT_IK = 0;\nconst CONSTRAINT_PATH = 1;\nconst CONSTRAINT_TRANSFORM = 2;\nconst CONSTRAINT_PHYSICS = 3;\nconst CONSTRAINT_SLIDER = 4;\n\nconst ATTACHMENT_DEFORM = 0;\nconst ATTACHMENT_SEQUENCE = 1;\n\nconst PATH_POSITION = 0;\nconst PATH_SPACING = 1;\nconst PATH_MIX = 2;\n\nconst PHYSICS_INERTIA = 0;\nconst PHYSICS_STRENGTH = 1;\nconst PHYSICS_DAMPING = 2;\nconst PHYSICS_MASS = 4;\nconst PHYSICS_WIND = 5;\nconst PHYSICS_GRAVITY = 6;\nconst PHYSICS_MIX = 7;\nconst PHYSICS_RESET = 8;\n\nconst SLIDER_TIME = 0;\nconst SLIDER_MIX = 1;\n\n// biome-ignore lint/correctness/noUnusedVariables: intentional\nconst CURVE_LINEAR = 0;\nconst CURVE_STEPPED = 1;\nconst CURVE_BEZIER = 2;\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { type NumberArrayLike, Pool, Utils } from \"./Utils.js\";\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 = [] as BoundingBoxAttachment[];\n\n\t/** The world vertices for the bounding box polygons. */\n\tpolygons = [] as 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\tconst boundingBoxes = this.boundingBoxes;\n\t\tconst polygons = this.polygons;\n\t\tconst polygonPool = this.polygonPool;\n\t\tconst slots = skeleton.slots;\n\t\tconst 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\tconst slot = slots[i];\n\t\t\tif (!slot.bone.active) continue;\n\t\t\tconst attachment = slot.appliedPose.attachment;\n\t\t\tif (attachment instanceof BoundingBoxAttachment) {\n\t\t\t\tboundingBoxes.push(attachment);\n\n\t\t\t\tlet polygon = polygonPool.obtain();\n\t\t\t\tif (polygon.length !== attachment.worldVerticesLength) {\n\t\t\t\t\tpolygon = Utils.newFloatArray(attachment.worldVerticesLength);\n\t\t\t\t}\n\t\t\t\tpolygons.push(polygon);\n\t\t\t\tattachment.computeWorldVertices(skeleton, slot, 0, attachment.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\tconst polygons = this.polygons;\n\t\tfor (let i = 0, n = polygons.length; i < n; i++) {\n\t\t\tconst polygon = polygons[i];\n\t\t\tconst vertices = polygon;\n\t\t\tfor (let ii = 0, nn = polygon.length; ii < nn; ii += 2) {\n\t\t\t\tconst x = vertices[ii];\n\t\t\t\tconst 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\tconst minX = this.minX;\n\t\tconst minY = this.minY;\n\t\tconst maxX = this.maxX;\n\t\tconst 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\tconst 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} returns true. */\n\tcontainsPoint (x: number, y: number): BoundingBoxAttachment | null {\n\t\tconst 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\tconst vertices = polygon;\n\t\tconst 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\tconst vertexY = vertices[ii + 1];\n\t\t\tconst prevY = vertices[prevIndex + 1];\n\t\t\tif ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) {\n\t\t\t\tconst 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\tconst 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\tconst vertices = polygon;\n\t\tconst nn = polygon.length;\n\n\t\tconst width12 = x1 - x2, height12 = y1 - y2;\n\t\tconst 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\tconst x4 = vertices[ii], y4 = vertices[ii + 1];\n\t\t\tconst det2 = x3 * y4 - y3 * x4;\n\t\t\tconst width34 = x3 - x4, height34 = y3 - y4;\n\t\t\tconst det3 = width12 * height34 - height12 * width34;\n\t\t\tconst 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\tconst 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\tconst 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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 { type NumberArrayLike, Pool } from \"./Utils.js\";\n\nexport class Triangulator {\n\tprivate convexPolygons = [] as Array<number>[];\n\tprivate convexPolygonsIndices = [] as Array<number>[];\n\n\tprivate indicesArray = [] as number[];\n\tprivate isConcaveArray = [] as boolean[];\n\tprivate triangles = [] as number[];\n\n\tprivate polygonPool = new Pool<Array<number>>(() => {\n\t\treturn [] as number[];\n\t});\n\n\tprivate polygonIndicesPool = new Pool<Array<number>>(() => {\n\t\treturn [] as number[];\n\t});\n\n\tpublic triangulate (verticesArray: NumberArrayLike): Array<number> {\n\t\tconst vertices = verticesArray;\n\t\tlet vertexCount = verticesArray.length >> 1;\n\n\t\tconst 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\tconst isConcave = this.isConcaveArray;\n\t\tisConcave.length = 0;\n\t\tfor (let i = 0; i < vertexCount; i++)\n\t\t\tisConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices);\n\n\t\tconst 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\t// biome-ignore lint/suspicious/noConfusingLabels: reference runtime\n\t\t\t\touter:\n\t\t\t\tif (!isConcave[i]) {\n\t\t\t\t\tconst p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1;\n\t\t\t\t\tconst p1x = vertices[p1], p1y = vertices[p1 + 1];\n\t\t\t\t\tconst p2x = vertices[p2], p2y = vertices[p2 + 1];\n\t\t\t\t\tconst p3x = vertices[p3], p3y = vertices[p3 + 1];\n\t\t\t\t\tfor (let ii = next + 1 < vertexCount ? next + 1 : 0; ii !== previous;) {\n\t\t\t\t\t\tif (isConcave[ii]) {\n\t\t\t\t\t\t\tconst v = indices[ii] << 1;\n\t\t\t\t\t\t\tconst vx = vertices[v], vy = vertices[v + 1];\n\t\t\t\t\t\t\tif (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy) //\n\t\t\t\t\t\t\t\t&& Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy) //\n\t\t\t\t\t\t\t\t&& Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy)) break outer;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (++ii === vertexCount) ii = 0;\n\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\tprevious = i > 0 ? i - 1 : vertexCount - 1;\n\t\t\t\t\tnext = i + 1 < vertexCount ? i + 1 : 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\tif (++next === vertexCount) next = 0;\n\t\t\t}\n\n\t\t\t// Cut ear tip.\n\t\t\ttriangles.push(indices[previous], indices[i], indices[next]);\n\t\t\tindices.splice(i, 1);\n\t\t\tisConcave.splice(i, 1);\n\t\t\tvertexCount--;\n\n\t\t\tconst previousIndex = i > 0 ? i - 1 : vertexCount - 1;\n\t\t\tconst nextIndex = i < vertexCount ? i : 0;\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\t\tif (vertexCount === 3) triangles.push(indices[2], indices[0], indices[1]);\n\t\treturn triangles;\n\t}\n\n\tdecompose (verticesArray: Array<number>, triangles: Array<number>): Array<Array<number>> {\n\t\tconst vertices = verticesArray;\n\t\tconst convexPolygons = this.convexPolygons;\n\t\tthis.polygonPool.freeAll(convexPolygons);\n\t\tconvexPolygons.length = 0;\n\n\t\tconst 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\tconst t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1;\n\t\t\tconst x1 = vertices[t1], y1 = vertices[t1 + 1];\n\t\t\tconst x2 = vertices[t2], y2 = vertices[t2 + 1];\n\t\t\tconst 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\tif (fanBaseIndex === t1) {\n\t\t\t\tconst o = polygon.length - 4;\n\t\t\t\tif (Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3) === lastWinding\n\t\t\t\t\t&& Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]) === lastWinding) {\n\t\t\t\t\tpolygon.push(x3, y3);\n\t\t\t\t\tpolygonIndices.push(t3);\n\t\t\t\t\tcontinue;\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 (polygon.length > 0) {\n\t\t\t\tconvexPolygons.push(polygon);\n\t\t\t\tconvexPolygonsIndices.push(polygonIndices);\n\t\t\t\tpolygon = this.polygonPool.obtain();\n\t\t\t\tpolygonIndices = this.polygonIndicesPool.obtain();\n\t\t\t}\n\t\t\tpolygon.length = 0;\n\t\t\tpolygon.push(x1, y1, x2, y2);\n\t\t\tpolygon.push(x3, y3);\n\t\t\tpolygonIndices.length = 0;\n\t\t\tpolygonIndices.push(t1, t2, t3);\n\t\t\tlastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3);\n\t\t\tfanBaseIndex = t1;\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// Merge 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\tconst firstIndex = polygonIndices[0];\n\t\t\tlet lastIndex = polygonIndices[polygonIndices.length - 1];\n\n\t\t\tpolygon = convexPolygons[i];\n\t\t\tconst 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\tconst firstX = polygon[0], firstY = polygon[1];\n\t\t\tconst secondX = polygon[2], secondY = polygon[3];\n\t\t\tconst 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\tconst otherIndices = convexPolygonsIndices[ii];\n\t\t\t\tif (otherIndices.length !== 3) continue;\n\t\t\t\tconst otherFirstIndex = otherIndices[0];\n\t\t\t\tconst otherSecondIndex = otherIndices[1];\n\t\t\t\tconst otherLastIndex = otherIndices[2];\n\n\t\t\t\tconst otherPoly = convexPolygons[ii];\n\t\t\t\tconst 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\tif (Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3) === winding\n\t\t\t\t\t&& Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY) === 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, y3);\n\t\t\t\t\tpolygonIndices.push(otherLastIndex);\n\t\t\t\t\tlastIndex = 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 = -1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Remove empty polygons 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} else\n\t\t\t\tpolygon.push(polygon[0], polygon[1]);\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\tconst previous = indices[index > 0 ? index - 1 : vertexCount - 1] << 1;\n\t\tconst current = indices[index] << 1;\n\t\tconst next = indices[index + 1 < vertexCount ? index + 1 : 0] << 1;\n\t\treturn !Triangulator.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\treturn p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0 ? 1 : -1;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 type { ClippingAttachment } from \"./attachments/ClippingAttachment.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport type { Slot } from \"./Slot.js\";\nimport { Triangulator } from \"./Triangulator.js\";\nimport { type Color, type NumberArrayLike, Utils } from \"./Utils.js\";\n\nexport class SkeletonClipping {\n\tprivate triangulator: Triangulator | null = null;\n\tprivate clippingPolygon = [] as number[];\n\tprivate clippingPolygons: number[][] = [];\n\tprivate clipOutput = [] as number[];\n\tclippedVertices = [] as number[];\n\n\t/** An empty array unless {@link clipTrianglesUnpacked} was used. **/\n\tclippedUVs = [] as number[];\n\n\tclippedTriangles = [] as number[];\n\tinverseVertices = [] as number[];\n\n\t_clippedVerticesTyped: Float32Array = new Float32Array(1024);\n\t_clippedUVsTyped: Float32Array = new Float32Array(1024);\n\t_clippedTrianglesTyped: Uint16Array = new Uint16Array(1024);\n\tclippedVerticesTyped: Float32Array = new Float32Array(0);\n\tclippedUVsTyped: Float32Array = new Float32Array(0);\n\tclippedTrianglesTyped: Uint16Array = new Uint16Array(0);\n\tclippedVerticesLength = 0;\n\tclippedUVsLength = 0;\n\tclippedTrianglesLength = 0;\n\n\tprivate scratch = [] as number[];\n\tprivate inverse = false;\n\n\tprivate clipAttachment: ClippingAttachment | null = null;\n\n\tclipStart (skeleton: Skeleton, slot: Slot, clip: ClippingAttachment): void {\n\t\tif (this.clipAttachment) return;\n\t\tconst n = clip.worldVerticesLength;\n\t\tthis.clipAttachment = clip;\n\t\tthis.inverse = clip.inverse;\n\n\t\tconst vertices = Utils.setArraySize(this.clippingPolygon, n);\n\t\tclip.computeWorldVertices(skeleton, slot, 0, n, vertices, 0, 2);\n\t\tconst clippingPolygon = this.clippingPolygon;\n\t\tconst convex = this.makeClockwise(clippingPolygon);\n\n\t\tif (convex || this.inverse || clip.convex) {\n\t\t\tif (!convex) this.makeConvex(clippingPolygon);\n\t\t\tthis.clippingPolygon.push(clippingPolygon[0], clippingPolygon[1]);\n\t\t\tthis.clippingPolygons.push(clippingPolygon);\n\t\t} else {\n\t\t\tif (this.triangulator === null) this.triangulator = new Triangulator();\n\t\t\tthis.clippingPolygons.push(...this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon)));\n\t\t}\n\t}\n\n\tclipEnd (slot?: Slot) {\n\t\tif (!this.clipAttachment) return;\n\t\tif (slot && this.clipAttachment.endSlot !== slot.data) return;\n\t\tthis.clipAttachment = null;\n\t\tthis.clippingPolygons.length = 0;\n\t}\n\n\tisClipping (): boolean {\n\t\treturn this.clipAttachment != null;\n\t}\n\n\tclipTriangles (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number): boolean;\n\tclipTriangles (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number,\n\t\tuvs: NumberArrayLike, light: Color, dark: Color, twoColor: boolean, stride: number): boolean;\n\tclipTriangles (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number,\n\t\tuvs?: NumberArrayLike, light?: Color, dark?: Color, twoColor?: boolean, stride?: number): boolean {\n\n\t\treturn (uvs && light && dark && typeof twoColor === 'boolean' && typeof stride === 'number')\n\t\t\t? this.clipTrianglesRender(vertices, triangles, trianglesLength, uvs, light, dark, twoColor, stride)\n\t\t\t: this.clipTrianglesNoRender(vertices, triangles, trianglesLength);\n\t}\n\n\tprivate clipTrianglesNoRender (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number): boolean {\n\t\tconst clippedVertices = this.clippedVertices;\n\t\tclippedVertices.length = 0;\n\t\tconst clippedTriangles = this.clippedTriangles;\n\t\tclippedTriangles.length = 0;\n\t\tlet index = 0;\n\n\t\tif (this.inverse) {\n\t\t\tconst polygon = this.clippingPolygons[0];\n\t\t\tfor (let i = 0; i < trianglesLength; i += 3) {\n\t\t\t\tlet t = triangles[i] << 1;\n\t\t\t\tconst x1 = vertices[t], y1 = vertices[t + 1];\n\t\t\t\tt = triangles[i + 1] << 1;\n\t\t\t\tconst x2 = vertices[t], y2 = vertices[t + 1];\n\t\t\t\tt = triangles[i + 2] << 1;\n\t\t\t\tconst x3 = vertices[t], y3 = vertices[t + 1];\n\t\t\t\tthis.clipInverse(x1, y1, x2, y2, x3, y3, polygon);\n\n\t\t\t\tconst iv = this.inverseVertices;\n\t\t\t\tfor (let offset = 0, nn = this.inverseVertices.length; offset < nn;) {\n\t\t\t\t\tconst polygonSize = iv[offset++];\n\t\t\t\t\tlet vertexCount = polygonSize >> 1, s = clippedVertices.length;\n\n\t\t\t\t\tconst cv = Utils.setArraySize(clippedVertices, s + polygonSize);\n\t\t\t\t\tUtils.arrayCopy(iv, offset, cv, s, polygonSize);\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tconst ct = Utils.setArraySize(clippedTriangles, s + 3 * (vertexCount - 2));\n\t\t\t\t\tfor (let ii = 1; ii < vertexCount - 1; ii++, s += 3) {\n\t\t\t\t\t\tct[s] = index;\n\t\t\t\t\t\tct[s + 1] = index + ii;\n\t\t\t\t\t\tct[s + 2] = index + ii + 1;\n\t\t\t\t\t}\n\t\t\t\t\tindex += vertexCount;\n\t\t\t\t\toffset += polygonSize;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tconst clipOutput = this.clipOutput;\n\t\tconst polygons = this.clippingPolygons;\n\t\tconst polygonsCount = polygons.length;\n\t\tlet clipOutputItems = null;\n\t\tfor (let i = 0; i < trianglesLength; i += 3) {\n\t\t\tlet t = triangles[i] << 1;\n\t\t\tconst x1 = vertices[t], y1 = vertices[t + 1];\n\t\t\tt = triangles[i + 1] << 1;\n\t\t\tconst x2 = vertices[t], y2 = vertices[t + 1];\n\t\t\tt = triangles[i + 2] << 1;\n\t\t\tconst x3 = vertices[t], y3 = vertices[t + 1];\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])) {\n\t\t\t\t\tclipOutputItems = this.clipOutput;\n\t\t\t\t\tconst clipOutputLength = clipOutput.length;\n\t\t\t\t\tif (clipOutputLength === 0) continue;\n\t\t\t\t\tlet clipOutputCount = clipOutputLength >> 1;\n\n\t\t\t\t\tconst cv = Utils.setArraySize(clippedVertices, s + clipOutputLength);\n\t\t\t\t\tUtils.arrayCopy(clipOutputItems, 0, cv, s, clipOutputLength);\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tconst ct = 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++, s += 3) {\n\t\t\t\t\t\tct[s] = index;\n\t\t\t\t\t\tct[s + 1] = (index + ii);\n\t\t\t\t\t\tct[s + 2] = (index + ii + 1);\n\t\t\t\t\t}\n\t\t\t\t\tindex += clipOutputCount;\n\t\t\t\t} else {\n\t\t\t\t\tconst cv = Utils.setArraySize(clippedVertices, s + 3 * 2);\n\t\t\t\t\tcv[s] = x1;\n\t\t\t\t\tcv[s + 1] = y1;\n\t\t\t\t\tcv[s + 2] = x2;\n\t\t\t\t\tcv[s + 3] = y2;\n\t\t\t\t\tcv[s + 4] = x3;\n\t\t\t\t\tcv[s + 5] = y3;\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tconst ct = Utils.setArraySize(clippedTriangles, s + 3);\n\t\t\t\t\tct[s] = index;\n\t\t\t\t\tct[s + 1] = (index + 1);\n\t\t\t\t\tct[s + 2] = (index + 2);\n\t\t\t\t\tindex += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn clipOutputItems != null;\n\t}\n\n\tprivate clipTrianglesRender (vertices: NumberArrayLike, triangles: NumberArrayLike, trianglesLength: number, uvs: NumberArrayLike, light: Color, dark: Color,\n\t\ttwoColor: boolean, stride: number): boolean {\n\t\tconst clippedVertices = this.clippedVertices;\n\t\tclippedVertices.length = 0;\n\t\tconst clippedTriangles = this.clippedTriangles;\n\t\tclippedTriangles.length = 0;\n\t\tlet index = 0;\n\n\t\tif (this.inverse) {\n\t\t\tconst polygon = this.clippingPolygons[0];\n\t\t\tfor (let i = 0; i < trianglesLength; i += 3) {\n\t\t\t\tlet t0 = triangles[i], t1 = triangles[i + 1], t2 = triangles[i + 2];\n\t\t\t\tconst x1 = vertices[t0 * stride], y1 = vertices[t0 * stride + 1];\n\t\t\t\tconst x2 = vertices[t1 * stride], y2 = vertices[t1 * stride + 1];\n\t\t\t\tconst x3 = vertices[t2 * stride], y3 = vertices[t2 * stride + 1];\n\t\t\t\tthis.clipInverse(x1, y1, x2, y2, x3, y3, polygon);\n\t\t\t\tconst nn = this.inverseVertices.length;\n\t\t\t\tif (nn === 0) continue;\n\n\t\t\t\tconst u1 = uvs[t0 <<= 1], v1 = uvs[t0 + 1];\n\t\t\t\tconst u2 = uvs[t1 <<= 1], v2 = uvs[t1 + 1];\n\t\t\t\tconst u3 = uvs[t2 <<= 1], v3 = uvs[t2 + 1];\n\t\t\t\tconst d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1, d = 1 / (d0 * d2 + d1 * (y1 - y3));\n\t\t\t\tconst iv = this.inverseVertices;\n\t\t\t\tfor (let offset = 0; offset < nn;) {\n\t\t\t\t\tconst polygonSize = iv[offset++];\n\t\t\t\t\tconst vertexCount = polygonSize >> 1;\n\n\t\t\t\t\tlet s = clippedVertices.length;\n\t\t\t\t\tconst cv = Utils.setArraySize(clippedVertices, s + vertexCount * stride);\n\t\t\t\t\tfor (let ii = 0; ii < polygonSize; ii += 2, s += stride) {\n\t\t\t\t\t\tconst x = iv[offset + ii], y = iv[offset + ii + 1];\n\t\t\t\t\t\tcv[s] = x;\n\t\t\t\t\t\tcv[s + 1] = y;\n\t\t\t\t\t\tcv[s + 2] = light.r;\n\t\t\t\t\t\tcv[s + 3] = light.g;\n\t\t\t\t\t\tcv[s + 4] = light.b;\n\t\t\t\t\t\tcv[s + 5] = light.a;\n\t\t\t\t\t\tconst c0 = x - x3, c1 = y - y3, a = (d0 * c0 + d1 * c1) * d, b = (d4 * c0 + d2 * c1) * d, c = 1 - a - b;\n\t\t\t\t\t\tcv[s + 6] = u1 * a + u2 * b + u3 * c;\n\t\t\t\t\t\tcv[s + 7] = v1 * a + v2 * b + v3 * c;\n\t\t\t\t\t\tif (twoColor) {\n\t\t\t\t\t\t\tcv[s + 8] = dark.r;\n\t\t\t\t\t\t\tcv[s + 9] = dark.g;\n\t\t\t\t\t\t\tcv[s + 10] = dark.b;\n\t\t\t\t\t\t\tcv[s + 11] = dark.a;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tconst ct = Utils.setArraySize(clippedTriangles, s + 3 * (vertexCount - 2));\n\t\t\t\t\tfor (let ii = 1; ii < vertexCount - 1; ii++, s += 3) {\n\t\t\t\t\t\tct[s] = index;\n\t\t\t\t\t\tct[s + 1] = index + ii;\n\t\t\t\t\t\tct[s + 2] = index + ii + 1;\n\t\t\t\t\t}\n\t\t\t\t\tindex += vertexCount;\n\t\t\t\t\toffset += polygonSize;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\n\t\tconst clipOutput = this.clipOutput;\n\t\tconst polygons = this.clippingPolygons;\n\t\tconst polygonsCount = this.clippingPolygons.length;\n\t\tlet clipOutputItems = null;\n\t\tfor (let i = 0; i < trianglesLength; i += 3) {\n\t\t\tlet t = triangles[i];\n\t\t\tconst x1 = vertices[t * stride], y1 = vertices[t * stride + 1];\n\t\t\tconst u1 = uvs[t << 1], v1 = uvs[(t << 1) + 1];\n\t\t\tt = triangles[i + 1];\n\t\t\tconst x2 = vertices[t * stride], y2 = vertices[t * stride + 1];\n\t\t\tconst u2 = uvs[t << 1], v2 = uvs[(t << 1) + 1];\n\t\t\tt = triangles[i + 2];\n\t\t\tconst x3 = vertices[t * stride], y3 = vertices[t * stride + 1];\n\t\t\tconst u3 = uvs[t << 1], v3 = uvs[(t << 1) + 1];\n\t\t\tconst d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1, d = 1 / (d0 * d2 + d1 * (y1 - y3));\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])) {\n\t\t\t\t\tclipOutputItems = this.clipOutput;\n\t\t\t\t\tconst clipOutputLength = clipOutput.length;\n\t\t\t\t\tif (clipOutputLength === 0) continue;\n\t\t\t\t\tlet clipOutputCount = clipOutputLength >> 1;\n\n\t\t\t\t\tconst cv = Utils.setArraySize(clippedVertices, s + clipOutputCount * stride);\n\t\t\t\t\tfor (let ii = 0; ii < clipOutputLength; ii += 2, s += stride) {\n\t\t\t\t\t\tconst x = clipOutputItems[ii], y = clipOutputItems[ii + 1];\n\t\t\t\t\t\tcv[s] = x;\n\t\t\t\t\t\tcv[s + 1] = y;\n\t\t\t\t\t\tcv[s + 2] = light.r;\n\t\t\t\t\t\tcv[s + 3] = light.g;\n\t\t\t\t\t\tcv[s + 4] = light.b;\n\t\t\t\t\t\tcv[s + 5] = light.a;\n\t\t\t\t\t\tconst c0 = x - x3, c1 = y - y3, a = (d0 * c0 + d1 * c1) * d, b = (d4 * c0 + d2 * c1) * d, c = 1 - a - b;\n\t\t\t\t\t\tcv[s + 6] = u1 * a + u2 * b + u3 * c;\n\t\t\t\t\t\tcv[s + 7] = v1 * a + v2 * b + v3 * c;\n\t\t\t\t\t\tif (twoColor) {\n\t\t\t\t\t\t\tcv[s + 8] = dark.r;\n\t\t\t\t\t\t\tcv[s + 9] = dark.g;\n\t\t\t\t\t\t\tcv[s + 10] = dark.b;\n\t\t\t\t\t\t\tcv[s + 11] = dark.a;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tconst ct = 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++, s += 3) {\n\t\t\t\t\t\tct[s] = index;\n\t\t\t\t\t\tct[s + 1] = (index + ii);\n\t\t\t\t\t\tct[s + 2] = (index + ii + 1);\n\t\t\t\t\t}\n\t\t\t\t\tindex += clipOutputCount + 1;\n\t\t\t\t} else {\n\t\t\t\t\tconst cv = Utils.setArraySize(clippedVertices, s + 3 * stride);\n\t\t\t\t\tcv[s] = x1;\n\t\t\t\t\tcv[s + 1] = y1;\n\t\t\t\t\tcv[s + 2] = light.r;\n\t\t\t\t\tcv[s + 3] = light.g;\n\t\t\t\t\tcv[s + 4] = light.b;\n\t\t\t\t\tcv[s + 5] = light.a;\n\t\t\t\t\tif (!twoColor) {\n\t\t\t\t\t\tcv[s + 6] = u1;\n\t\t\t\t\t\tcv[s + 7] = v1;\n\n\t\t\t\t\t\tcv[s + 8] = x2;\n\t\t\t\t\t\tcv[s + 9] = y2;\n\t\t\t\t\t\tcv[s + 10] = light.r;\n\t\t\t\t\t\tcv[s + 11] = light.g;\n\t\t\t\t\t\tcv[s + 12] = light.b;\n\t\t\t\t\t\tcv[s + 13] = light.a;\n\t\t\t\t\t\tcv[s + 14] = u2;\n\t\t\t\t\t\tcv[s + 15] = v2;\n\n\t\t\t\t\t\tcv[s + 16] = x3;\n\t\t\t\t\t\tcv[s + 17] = y3;\n\t\t\t\t\t\tcv[s + 18] = light.r;\n\t\t\t\t\t\tcv[s + 19] = light.g;\n\t\t\t\t\t\tcv[s + 20] = light.b;\n\t\t\t\t\t\tcv[s + 21] = light.a;\n\t\t\t\t\t\tcv[s + 22] = u3;\n\t\t\t\t\t\tcv[s + 23] = v3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcv[s + 6] = u1;\n\t\t\t\t\t\tcv[s + 7] = v1;\n\t\t\t\t\t\tcv[s + 8] = dark.r;\n\t\t\t\t\t\tcv[s + 9] = dark.g;\n\t\t\t\t\t\tcv[s + 10] = dark.b;\n\t\t\t\t\t\tcv[s + 11] = dark.a;\n\n\t\t\t\t\t\tcv[s + 12] = x2;\n\t\t\t\t\t\tcv[s + 13] = y2;\n\t\t\t\t\t\tcv[s + 14] = light.r;\n\t\t\t\t\t\tcv[s + 15] = light.g;\n\t\t\t\t\t\tcv[s + 16] = light.b;\n\t\t\t\t\t\tcv[s + 17] = light.a;\n\t\t\t\t\t\tcv[s + 18] = u2;\n\t\t\t\t\t\tcv[s + 19] = v2;\n\t\t\t\t\t\tcv[s + 20] = dark.r;\n\t\t\t\t\t\tcv[s + 21] = dark.g;\n\t\t\t\t\t\tcv[s + 22] = dark.b;\n\t\t\t\t\t\tcv[s + 23] = dark.a;\n\n\t\t\t\t\t\tcv[s + 24] = x3;\n\t\t\t\t\t\tcv[s + 25] = y3;\n\t\t\t\t\t\tcv[s + 26] = light.r;\n\t\t\t\t\t\tcv[s + 27] = light.g;\n\t\t\t\t\t\tcv[s + 28] = light.b;\n\t\t\t\t\t\tcv[s + 29] = light.a;\n\t\t\t\t\t\tcv[s + 30] = u3;\n\t\t\t\t\t\tcv[s + 31] = v3;\n\t\t\t\t\t\tcv[s + 32] = dark.r;\n\t\t\t\t\t\tcv[s + 33] = dark.g;\n\t\t\t\t\t\tcv[s + 34] = dark.b;\n\t\t\t\t\t\tcv[s + 35] = dark.a;\n\t\t\t\t\t}\n\n\t\t\t\t\ts = clippedTriangles.length;\n\t\t\t\t\tconst ct = Utils.setArraySize(clippedTriangles, s + 3);\n\t\t\t\t\tct[s] = index;\n\t\t\t\t\tct[s + 1] = (index + 1);\n\t\t\t\t\tct[s + 2] = (index + 2);\n\t\t\t\t\tindex += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn clipOutputItems != null;\n\t}\n\n\tpublic clipTrianglesUnpacked (vertices: NumberArrayLike, vertexStart: number, triangles: NumberArrayLike | Uint16Array, trianglesLength: number, uvs: NumberArrayLike, stride = 2): boolean {\n\t\tlet clippedVertices = this._clippedVerticesTyped;\n\t\tlet clippedUVs = this._clippedUVsTyped;\n\t\tlet clippedTriangles = this._clippedTrianglesTyped;\n\t\tlet index = 0;\n\t\tthis.clippedVerticesLength = 0;\n\t\tthis.clippedUVsLength = 0;\n\t\tthis.clippedTrianglesLength = 0;\n\n\t\tif (this.inverse) {\n\t\t\tconst polygon = this.clippingPolygons[0];\n\t\t\tfor (let i = 0; i < trianglesLength; i += 3) {\n\t\t\t\tlet v = triangles[i] * stride;\n\t\t\t\tconst x1 = vertices[vertexStart + v], y1 = vertices[vertexStart + v + 1];\n\t\t\t\tlet uv = triangles[i] << 1;\n\t\t\t\tconst u1 = uvs[uv], v1 = uvs[uv + 1];\n\t\t\t\tv = triangles[i + 1] * stride;\n\t\t\t\tconst x2 = vertices[vertexStart + v], y2 = vertices[vertexStart + v + 1];\n\t\t\t\tuv = triangles[i + 1] << 1;\n\t\t\t\tconst u2 = uvs[uv], v2 = uvs[uv + 1];\n\t\t\t\tv = triangles[i + 2] * stride;\n\t\t\t\tconst x3 = vertices[vertexStart + v], y3 = vertices[vertexStart + v + 1];\n\t\t\t\tuv = triangles[i + 2] << 1;\n\t\t\t\tconst u3 = uvs[uv], v3 = uvs[uv + 1];\n\t\t\t\tthis.clipInverse(x1, y1, x2, y2, x3, y3, polygon);\n\t\t\t\tconst nn = this.inverseVertices.length;\n\t\t\t\tif (nn === 0) continue;\n\n\t\t\t\tconst d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1, d = 1 / (d0 * d2 + d1 * (y1 - y3));\n\t\t\t\tconst iv = this.inverseVertices;\n\t\t\t\tfor (let offset = 0; offset < nn;) {\n\t\t\t\t\tconst polygonSize = iv[offset++];\n\t\t\t\t\tconst vertexCount = polygonSize >> 1;\n\n\t\t\t\t\tlet s = this.clippedVerticesLength;\n\t\t\t\t\tconst newLength = s + vertexCount * stride;\n\t\t\t\t\tconst newUVLength = this.clippedUVsLength + vertexCount * 2;\n\t\t\t\t\tif (clippedVertices.length < newLength) {\n\t\t\t\t\t\tthis._clippedVerticesTyped = new Float32Array(newLength * 2);\n\t\t\t\t\t\tthis._clippedVerticesTyped.set(clippedVertices.subarray(0, s));\n\t\t\t\t\t\tclippedVertices = this._clippedVerticesTyped;\n\t\t\t\t\t}\n\t\t\t\t\tif (clippedUVs.length < newUVLength) {\n\t\t\t\t\t\tthis._clippedUVsTyped = new Float32Array(newUVLength * 2);\n\t\t\t\t\t\tthis._clippedUVsTyped.set(clippedUVs.subarray(0, this.clippedUVsLength));\n\t\t\t\t\t\tclippedUVs = this._clippedUVsTyped;\n\t\t\t\t\t}\n\t\t\t\t\tthis.clippedVerticesLength = newLength;\n\t\t\t\t\tthis.clippedUVsLength = newUVLength;\n\n\t\t\t\t\tconst cv = this._clippedVerticesTyped;\n\t\t\t\t\tconst cu = this._clippedUVsTyped;\n\t\t\t\t\tlet uvIndex = newUVLength - vertexCount * 2;\n\t\t\t\t\tfor (let ii = 0; ii < polygonSize; ii += 2, s += stride, uvIndex += 2) {\n\t\t\t\t\t\tconst x = iv[offset + ii], y = iv[offset + ii + 1];\n\t\t\t\t\t\tcv[s] = x;\n\t\t\t\t\t\tcv[s + 1] = y;\n\t\t\t\t\t\tconst c0 = x - x3, c1 = y - y3, a = (d0 * c0 + d1 * c1) * d, b = (d4 * c0 + d2 * c1) * d, c = 1 - a - b;\n\t\t\t\t\t\tcu[uvIndex] = u1 * a + u2 * b + u3 * c;\n\t\t\t\t\t\tcu[uvIndex + 1] = v1 * a + v2 * b + v3 * c;\n\t\t\t\t\t}\n\n\t\t\t\t\ts = this.clippedTrianglesLength;\n\t\t\t\t\tconst newLengthTriangles = s + 3 * (vertexCount - 2);\n\t\t\t\t\tif (clippedTriangles.length < newLengthTriangles) {\n\t\t\t\t\t\tthis._clippedTrianglesTyped = new Uint16Array(newLengthTriangles * 2);\n\t\t\t\t\t\tthis._clippedTrianglesTyped.set(clippedTriangles.subarray(0, s));\n\t\t\t\t\t\tclippedTriangles = this._clippedTrianglesTyped;\n\t\t\t\t\t}\n\t\t\t\t\tthis.clippedTrianglesLength = newLengthTriangles;\n\t\t\t\t\tconst ct = clippedTriangles;\n\t\t\t\t\tfor (let ii = 1; ii < vertexCount - 1; ii++, s += 3) {\n\t\t\t\t\t\tct[s] = index;\n\t\t\t\t\t\tct[s + 1] = index + ii;\n\t\t\t\t\t\tct[s + 2] = index + ii + 1;\n\t\t\t\t\t}\n\t\t\t\t\tindex += vertexCount;\n\t\t\t\t\toffset += polygonSize;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tconst clipOutput = this.clipOutput;\n\t\tconst polygons = this.clippingPolygons;\n\t\tconst polygonsCount = this.clippingPolygons.length;\n\t\tlet clipOutputItems = null;\n\t\tfor (let i = 0; i < trianglesLength; i += 3) {\n\t\t\tlet t = triangles[i];\n\t\t\tlet v = t * stride;\n\t\t\tconst x1 = vertices[vertexStart + v], y1 = vertices[vertexStart + v + 1];\n\t\t\tlet uv = t << 1;\n\t\t\tconst u1 = uvs[uv], v1 = uvs[uv + 1];\n\t\t\tt = triangles[i + 1];\n\t\t\tv = t * stride;\n\t\t\tconst x2 = vertices[vertexStart + v], y2 = vertices[vertexStart + v + 1];\n\t\t\tuv = t << 1;\n\t\t\tconst u2 = uvs[uv], v2 = uvs[uv + 1];\n\t\t\tt = triangles[i + 2];\n\t\t\tv = t * stride;\n\t\t\tconst x3 = vertices[vertexStart + v], y3 = vertices[vertexStart + v + 1];\n\t\t\tuv = t << 1;\n\t\t\tconst u3 = uvs[uv], v3 = uvs[uv + 1];\n\t\t\tconst d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1, d = 1 / (d0 * d2 + d1 * (y1 - y3));\n\n\t\t\tfor (let p = 0; p < polygonsCount; p++) {\n\t\t\t\tlet s = this.clippedVerticesLength;\n\t\t\t\tif (this.clip(x1, y1, x2, y2, x3, y3, polygons[p])) {\n\t\t\t\t\tclipOutputItems = clipOutput;\n\t\t\t\t\tconst clipOutputLength = clipOutput.length;\n\t\t\t\t\tif (clipOutputLength === 0) continue;\n\t\t\t\t\tlet clipOutputCount = clipOutputLength >> 1;\n\n\t\t\t\t\tconst newLength = s + clipOutputCount * stride;\n\t\t\t\t\tif (clippedVertices.length < newLength) {\n\t\t\t\t\t\tthis._clippedVerticesTyped = new Float32Array(newLength * 2);\n\t\t\t\t\t\tthis._clippedVerticesTyped.set(clippedVertices.subarray(0, s));\n\t\t\t\t\t\tthis._clippedUVsTyped = new Float32Array((this.clippedUVsLength + clipOutputCount * 2) * 2);\n\t\t\t\t\t\tthis._clippedUVsTyped.set(clippedUVs.subarray(0, this.clippedUVsLength));\n\t\t\t\t\t\tclippedVertices = this._clippedVerticesTyped;\n\t\t\t\t\t\tclippedUVs = this._clippedUVsTyped;\n\t\t\t\t\t}\n\t\t\t\t\tconst cv = clippedVertices;\n\t\t\t\t\tconst cu = clippedUVs;\n\t\t\t\t\tthis.clippedVerticesLength = newLength;\n\n\t\t\t\t\tlet uvIndex = this.clippedUVsLength;\n\t\t\t\t\tthis.clippedUVsLength = uvIndex + clipOutputCount * 2;\n\t\t\t\t\tfor (let ii = 0; ii < clipOutputLength; ii += 2, s += stride, uvIndex += 2) {\n\t\t\t\t\t\tconst x = clipOutputItems[ii], y = clipOutputItems[ii + 1];\n\t\t\t\t\t\tcv[s] = x;\n\t\t\t\t\t\tcv[s + 1] = y;\n\n\t\t\t\t\t\tconst c0 = x - x3, c1 = y - y3, a = (d0 * c0 + d1 * c1) * d, b = (d4 * c0 + d2 * c1) * d, c = 1 - a - b;\n\t\t\t\t\t\tcu[uvIndex] = u1 * a + u2 * b + u3 * c;\n\t\t\t\t\t\tcu[uvIndex + 1] = v1 * a + v2 * b + v3 * c;\n\t\t\t\t\t}\n\n\t\t\t\t\ts = this.clippedTrianglesLength;\n\t\t\t\t\tconst newLengthTriangles = s + 3 * (clipOutputCount - 2)\n\t\t\t\t\tif (clippedTriangles.length < newLengthTriangles) {\n\t\t\t\t\t\tthis._clippedTrianglesTyped = new Uint16Array(newLengthTriangles * 2);\n\t\t\t\t\t\tthis._clippedTrianglesTyped.set(clippedTriangles.subarray(0, s));\n\t\t\t\t\t\tclippedTriangles = this._clippedTrianglesTyped;\n\t\t\t\t\t}\n\t\t\t\t\tthis.clippedTrianglesLength = newLengthTriangles;\n\t\t\t\t\tconst ct = clippedTriangles;\n\t\t\t\t\tclipOutputCount--;\n\t\t\t\t\tfor (let ii = 1; ii < clipOutputCount; ii++, s += 3) {\n\t\t\t\t\t\tct[s] = index;\n\t\t\t\t\t\tct[s + 1] = (index + ii);\n\t\t\t\t\t\tct[s + 2] = (index + ii + 1);\n\t\t\t\t\t}\n\t\t\t\t\tindex += clipOutputCount + 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlet newLength = s + 3 * stride;\n\t\t\t\t\tif (clippedVertices.length < newLength) {\n\t\t\t\t\t\tthis._clippedVerticesTyped = new Float32Array(newLength * 2);\n\t\t\t\t\t\tthis._clippedVerticesTyped.set(clippedVertices.subarray(0, s));\n\t\t\t\t\t\tclippedVertices = this._clippedVerticesTyped;\n\t\t\t\t\t}\n\t\t\t\t\tclippedVertices[s] = x1;\n\t\t\t\t\tclippedVertices[s + 1] = y1;\n\t\t\t\t\tclippedVertices[s + stride] = x2;\n\t\t\t\t\tclippedVertices[s + stride + 1] = y2;\n\t\t\t\t\tclippedVertices[s + stride * 2] = x3;\n\t\t\t\t\tclippedVertices[s + stride * 2 + 1] = y3;\n\n\t\t\t\t\tconst uvLength = this.clippedUVsLength + 3 * 2;\n\t\t\t\t\tif (clippedUVs.length < uvLength) {\n\t\t\t\t\t\tthis._clippedUVsTyped = new Float32Array(uvLength * 2);\n\t\t\t\t\t\tthis._clippedUVsTyped.set(clippedUVs.subarray(0, this.clippedUVsLength));\n\t\t\t\t\t\tclippedUVs = this._clippedUVsTyped;\n\t\t\t\t\t}\n\t\t\t\t\tconst uvIndex = this.clippedUVsLength;\n\t\t\t\t\tclippedUVs[uvIndex] = u1;\n\t\t\t\t\tclippedUVs[uvIndex + 1] = v1;\n\t\t\t\t\tclippedUVs[uvIndex + 2] = u2;\n\t\t\t\t\tclippedUVs[uvIndex + 3] = v2;\n\t\t\t\t\tclippedUVs[uvIndex + 4] = u3;\n\t\t\t\t\tclippedUVs[uvIndex + 5] = v3;\n\n\t\t\t\t\tthis.clippedVerticesLength = newLength;\n\t\t\t\t\tthis.clippedUVsLength = uvLength;\n\n\t\t\t\t\ts = this.clippedTrianglesLength;\n\t\t\t\t\tnewLength = s + 3;\n\t\t\t\t\tif (clippedTriangles.length < newLength) {\n\t\t\t\t\t\tthis._clippedTrianglesTyped = new Uint16Array(newLength * 2);\n\t\t\t\t\t\tthis._clippedTrianglesTyped.set(clippedTriangles.subarray(0, s));\n\t\t\t\t\t\tclippedTriangles = this._clippedTrianglesTyped;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst ct = clippedTriangles;\n\t\t\t\t\tct[s] = index;\n\t\t\t\t\tct[s + 1] = (index + 1);\n\t\t\t\t\tct[s + 2] = (index + 2);\n\t\t\t\t\tindex += 3;\n\n\t\t\t\t\tthis.clippedTrianglesLength = newLength;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.clippedVerticesTyped = this._clippedVerticesTyped.subarray(0, this.clippedVerticesLength)\n\t\tthis.clippedUVsTyped = this._clippedUVsTyped.subarray(0, this.clippedUVsLength)\n\t\tthis.clippedTrianglesTyped = this._clippedTrianglesTyped.subarray(0, this.clippedTrianglesLength)\n\t\treturn clipOutputItems !== null;\n\t}\n\n\tprivate clip (x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, polygon: number[]) {\n\t\tconst originalOutput = this.clipOutput;\n\t\tlet clipped = false;\n\n\t\t// Avoid copy at the end.\n\t\tlet input: number[], output: number[];\n\t\tif (polygon.length % 4 >= 2) {\n\t\t\tinput = this.clipOutput;\n\t\t\toutput = this.scratch;\n\t\t} else {\n\t\t\tinput = this.scratch;\n\t\t\toutput = this.clipOutput;\n\t\t}\n\n\t\tconst v = polygon;\n\t\tinput.length = 8;\n\t\tconst iv = input;\n\t\tiv[0] = x1;\n\t\tiv[1] = y1;\n\t\tiv[2] = x2;\n\t\tiv[3] = y2;\n\t\tiv[4] = x3;\n\t\tiv[5] = y3;\n\t\tiv[6] = x1;\n\t\tiv[7] = y1;\n\t\toutput.length = 0;\n\n\t\tconst last = polygon.length - 4;\n\t\tfor (let i = 0; ; i += 2) {\n\t\t\tconst edgeX = v[i], edgeY = v[i + 1], ex = edgeX - v[i + 2], ey = edgeY - v[i + 3];\n\t\t\tconst outputStart = output.length;\n\t\t\tconst iv = input;\n\t\t\tfor (let ii = 0, nn = input.length - 2; ii < nn;) {\n\t\t\t\tx1 = iv[ii];\n\t\t\t\ty1 = iv[ii + 1];\n\t\t\t\tii += 2;\n\t\t\t\tx2 = iv[ii];\n\t\t\t\ty2 = iv[ii + 1];\n\t\t\t\tconst s2 = ey * (edgeX - x2) > ex * (edgeY - y2);\n\t\t\t\tconst s1 = ey * (edgeX - x1) - ex * (edgeY - y1);\n\t\t\t\tif (s1 > 0) {\n\t\t\t\t\tif (s2) // v1 in, v2 in\n\t\t\t\t\t\toutput.push(x2, y2);\n\t\t\t\t\telse { // v1 in, v2 out\n\t\t\t\t\t\tconst ix = x2 - x1, iy = y2 - y1, t = s1 / (ix * ey - iy * ex);\n\t\t\t\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\t\t\t\toutput.push(x1 + ix * t, y1 + iy * t);\n\t\t\t\t\t\t\tclipped = true;\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\toutput.push(x2, y2);\n\t\t\t\t\t}\n\t\t\t\t} else if (s2) { // v1 out, v2 in\n\t\t\t\t\tconst ix = x2 - x1, iy = y2 - y1, t = s1 / (ix * ey - iy * ex);\n\t\t\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\t\t\toutput.push(x1 + ix * t, y1 + iy * t, x2, y2);\n\t\t\t\t\t\tclipped = true;\n\t\t\t\t\t} else\n\t\t\t\t\t\toutput.push(x2, y2);\n\t\t\t\t} else // v1 out, v2 out\n\t\t\t\t\tclipped = true;\n\t\t\t}\n\n\t\t\tif (outputStart === output.length) { // All 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], output[1]);\n\n\t\t\tif (i === last) break;\n\t\t\tconst 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\tprivate clipInverse (x1: number, y1: number, x2: number, y2: number, x3: number, y3: number, polygon: number[]): void {\n\t\tthis.inverseVertices.length = 0;\n\t\tconst vLast = polygon.length - 4;\n\n\t\tlet input: number[], output: number[]; // Avoid copy at the end.\n\t\tif (polygon.length % 4 >= 2) {\n\t\t\tinput = this.clipOutput;\n\t\t\toutput = this.scratch;\n\t\t} else {\n\t\t\tinput = this.scratch;\n\t\t\toutput = this.clipOutput;\n\t\t}\n\n\t\tinput.length = 8;\n\t\tlet v = polygon, iv = input;\n\t\tiv[0] = x1;\n\t\tiv[1] = y1;\n\t\tiv[2] = x2;\n\t\tiv[3] = y2;\n\t\tiv[4] = x3;\n\t\tiv[5] = y3;\n\t\tiv[6] = x1;\n\t\tiv[7] = y1;\n\t\toutput.length = 0;\n\n\t\tfor (let i = 0; ; i += 2) {\n\t\t\tconst edgeX = v[i], edgeY = v[i + 1], ex = edgeX - v[i + 2], ey = edgeY - v[i + 3];\n\t\t\tconst outputStart = output.length, fragmentStart = this.inverseVertices.length;\n\t\t\tthis.inverseVertices.push(0);\n\t\t\tiv = input;\n\t\t\tfor (let ii = 0, nn = input.length - 2; ii < nn;) {\n\t\t\t\tx1 = iv[ii];\n\t\t\t\ty1 = iv[ii + 1];\n\t\t\t\tii += 2;\n\t\t\t\tx2 = iv[ii];\n\t\t\t\ty2 = iv[ii + 1];\n\t\t\t\tconst s2 = ey * (edgeX - x2) > ex * (edgeY - y2);\n\t\t\t\tconst s1 = ey * (edgeX - x1) - ex * (edgeY - y1);\n\t\t\t\tif (s1 > 0) {\n\t\t\t\t\tif (s2) // v1 in, v2 in\n\t\t\t\t\t\toutput.push(x2, y2);\n\t\t\t\t\telse {\n\t\t\t\t\t\t// v1 in, v2 out\n\t\t\t\t\t\tconst ix = x2 - x1, iy = y2 - y1, t = s1 / (ix * ey - iy * ex);\n\t\t\t\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\t\t\t\tconst cx = x1 + ix * t, cy = y1 + iy * t;\n\t\t\t\t\t\t\toutput.push(cx, cy);\n\t\t\t\t\t\t\tthis.inverseVertices.push(cx, cy, x2, y2);\n\t\t\t\t\t\t} else\n\t\t\t\t\t\t\toutput.push(x2, y2);\n\t\t\t\t\t}\n\t\t\t\t} else if (s2) { // v1 out, v2 in\n\t\t\t\t\tconst dx = x2 - x1, dy = y2 - y1, t = s1 / (dx * ey - dy * ex);\n\t\t\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\t\t\tconst cx = x1 + dx * t, cy = y1 + dy * t;\n\t\t\t\t\t\tthis.inverseVertices.push(cx, cy);\n\t\t\t\t\t\toutput.push(cx, cy, x2, y2);\n\t\t\t\t\t} else\n\t\t\t\t\t\toutput.push(x2, y2);\n\t\t\t\t} else // v1 out, v2 out\n\t\t\t\t\tthis.inverseVertices.push(x2, y2);\n\t\t\t}\n\n\t\t\tconst fragmentSize = this.inverseVertices.length - fragmentStart - 1;\n\t\t\tif (fragmentSize >= 6)\n\t\t\t\tthis.inverseVertices[fragmentStart] = fragmentSize;\n\t\t\telse\n\t\t\t\tthis.inverseVertices.length = fragmentStart; // Degenerate.\n\n\t\t\tif (outputStart === output.length) break; // All outside.\n\n\t\t\toutput.push(output[0], output[1]);\n\n\t\t\tif (i === vLast) break;\n\t\t\tconst temp = output;\n\t\t\toutput = input;\n\t\t\toutput.length = 0;\n\t\t\tinput = temp;\n\t\t}\n\t}\n\n\tprivate makeClockwise (polygon: number[]): boolean {\n\t\tconst v = polygon;\n\t\tconst n = polygon.length;\n\t\tlet noCW = true, noCCW = true;\n\t\tlet area = 0, prevX = v[n - 2], prevY = v[n - 1], currX = v[0], currY = v[1];\n\t\tfor (let i = 2; i < n; i += 2) {\n\t\t\tconst nextX = v[i], nextY = v[i + 1];\n\t\t\tarea += currX * nextY - nextX * currY;\n\t\t\tconst cross = (currX - prevX) * (nextY - currY) - (currY - prevY) * (nextX - currX);\n\t\t\tnoCCW = noCCW && cross <= 0;\n\t\t\tnoCW = noCW && cross >= 0;\n\t\t\tprevX = currX;\n\t\t\tprevY = currY;\n\t\t\tcurrX = nextX;\n\t\t\tcurrY = nextY;\n\t\t}\n\t\tarea += currX * v[1] - v[0] * currY;\n\t\tconst cross = (currX - prevX) * (v[1] - currY) - (currY - prevY) * (v[0] - currX);\n\t\tnoCCW = noCCW && cross <= 0;\n\t\tnoCW = noCW && cross >= 0;\n\t\tif (area >= 0) {\n\t\t\tfor (let i = 0, lastX = n - 2, half = n >> 1; i < half; i += 2) {\n\t\t\t\tconst x = v[i], y = v[i + 1];\n\t\t\t\tconst other = lastX - i;\n\t\t\t\tv[i] = v[other];\n\t\t\t\tv[i + 1] = v[other + 1];\n\t\t\t\tv[other] = x;\n\t\t\t\tv[other + 1] = y;\n\t\t\t}\n\t\t\treturn noCW;\n\t\t}\n\t\treturn noCCW;\n\t}\n\n\tprivate makeConvex (polygon: number[]): void {\n\t\tconst n = polygon.length;\n\t\tconst v = polygon;\n\t\tthis.clipOutput.length = n;\n\t\tconst sorted = this.clipOutput;\n\t\tsorted[0] = v[0];\n\t\tsorted[1] = v[1];\n\t\tfor (let i = 2; i < n; i += 2) {\n\t\t\tconst x = v[i], y = v[i + 1];\n\t\t\tlet p = i - 2;\n\t\t\tfor (; p >= 0 && (sorted[p] > x || (sorted[p] === x && sorted[p + 1] > y)); p -= 2) {\n\t\t\t\tsorted[p + 2] = sorted[p];\n\t\t\t\tsorted[p + 3] = sorted[p + 1];\n\t\t\t}\n\t\t\tsorted[p + 2] = x;\n\t\t\tsorted[p + 3] = y;\n\t\t}\n\t\tv[0] = sorted[0];\n\t\tv[1] = sorted[1];\n\t\tv[2] = sorted[2];\n\t\tv[3] = sorted[3];\n\t\tlet s = 4;\n\t\tfor (let i = 4; i < n; i += 2, s += 2) {\n\t\t\tconst x = sorted[i], y = sorted[i + 1];\n\t\t\twhile ((v[s - 2] - v[s - 4]) * (y - v[s - 3]) - (v[s - 1] - v[s - 3]) * (x - v[s - 4]) >= 0) {\n\t\t\t\ts -= 2;\n\t\t\t\tif (s === 2) break;\n\t\t\t}\n\t\t\tv[s] = x;\n\t\t\tv[s + 1] = y;\n\t\t}\n\t\tv[s] = sorted[n - 4];\n\t\tv[s + 1] = sorted[n - 3];\n\t\tconst t = s;\n\t\ts += 2;\n\t\tfor (let i = n - 6; i >= 0; i -= 2, s += 2) {\n\t\t\tconst x = sorted[i], y = sorted[i + 1];\n\t\t\twhile ((v[s - 2] - v[s - 4]) * (y - v[s - 3]) - (v[s - 1] - v[s - 3]) * (x - v[s - 4]) >= 0) {\n\t\t\t\ts -= 2;\n\t\t\t\tif (s === t) break;\n\t\t\t}\n\t\t\tv[s] = x;\n\t\t\tv[s + 1] = y;\n\t\t}\n\t\tpolygon.length = s - 2;\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 { AlphaTimeline, Animation, AttachmentTimeline, type BoneTimeline2, type CurveTimeline, type CurveTimeline1, DeformTimeline, DrawOrderFolderTimeline, DrawOrderTimeline, EventTimeline, IkConstraintTimeline, InheritTimeline, PathConstraintMixTimeline, PathConstraintPositionTimeline, PathConstraintSpacingTimeline, PhysicsConstraintDampingTimeline, PhysicsConstraintGravityTimeline, PhysicsConstraintInertiaTimeline, PhysicsConstraintMassTimeline, PhysicsConstraintMixTimeline, PhysicsConstraintResetTimeline, PhysicsConstraintStrengthTimeline, PhysicsConstraintWindTimeline, RGB2Timeline, RGBA2Timeline, RGBATimeline, RGBTimeline, RotateTimeline, ScaleTimeline, ScaleXTimeline, ScaleYTimeline, SequenceTimeline, ShearTimeline, ShearXTimeline, ShearYTimeline, SliderMixTimeline, SliderTimeline, type Timeline, TransformConstraintTimeline, TranslateTimeline, TranslateXTimeline, TranslateYTimeline } from \"./Animation.js\";\nimport type { Attachment, VertexAttachment } from \"./attachments/Attachment.js\";\nimport type { AttachmentLoader } from \"./attachments/AttachmentLoader.js\";\nimport type { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { Sequence, SequenceMode } from \"./attachments/Sequence.js\";\nimport { BoneData, Inherit } from \"./BoneData.js\";\nimport { ScaleYMode } from \"./ConstraintData.js\";\nimport { Event } from \"./Event.js\";\nimport { EventData } from \"./EventData.js\";\nimport { IkConstraintData } from \"./IkConstraintData.js\";\nimport { PathConstraintData, PositionMode, RotateMode, SpacingMode } from \"./PathConstraintData.js\";\nimport { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\nimport { SkeletonData } from \"./SkeletonData.js\";\nimport { Skin } from \"./Skin.js\";\nimport { SliderData } from \"./SliderData.js\";\nimport { BlendMode, SlotData } from \"./SlotData.js\";\nimport { type FromProperty, FromRotate, FromScaleX, FromScaleY, FromShearY, FromX, FromY, type ToProperty, ToRotate, ToScaleX, ToScaleY, ToShearY, ToX, ToY, TransformConstraintData } from \"./TransformConstraintData.js\";\nimport { Color, type NumberArrayLike, Utils } from \"./Utils.js\";\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 readonly linkedMeshes = [] as LinkedMesh[];\n\n\tconstructor (attachmentLoader: AttachmentLoader) {\n\t\tthis.attachmentLoader = attachmentLoader;\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: it is any until we define a schema\n\treadSkeletonData (json: string | any): SkeletonData {\n\t\tconst scale = this.scale;\n\t\tconst skeletonData = new SkeletonData();\n\t\tconst root = typeof (json) === \"string\" ? JSON.parse(json) : json;\n\n\t\t// Skeleton\n\t\tconst 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.referenceScale = getValue(skeletonMap, \"referenceScale\", 100) * scale;\n\t\t\tskeletonData.fps = skeletonMap.fps;\n\t\t\tskeletonData.imagesPath = skeletonMap.images ?? null;\n\t\t\tskeletonData.audioPath = skeletonMap.audio ?? null;\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\tconst boneMap = root.bones[i];\n\n\t\t\t\tlet parent: BoneData | null = null;\n\t\t\t\tconst parentName: string = getValue(boneMap, \"parent\", null);\n\t\t\t\tif (parentName) parent = skeletonData.findBone(parentName);\n\t\t\t\tconst data = new BoneData(skeletonData.bones.length, boneMap.name, parent);\n\t\t\t\tdata.length = getValue(boneMap, \"length\", 0) * scale;\n\t\t\t\tconst setup = data.setupPose;\n\t\t\t\tsetup.x = getValue(boneMap, \"x\", 0) * scale;\n\t\t\t\tsetup.y = getValue(boneMap, \"y\", 0) * scale;\n\t\t\t\tsetup.rotation = getValue(boneMap, \"rotation\", 0);\n\t\t\t\tsetup.scaleX = getValue(boneMap, \"scaleX\", 1);\n\t\t\t\tsetup.scaleY = getValue(boneMap, \"scaleY\", 1);\n\t\t\t\tsetup.shearX = getValue(boneMap, \"shearX\", 0);\n\t\t\t\tsetup.shearY = getValue(boneMap, \"shearY\", 0);\n\t\t\t\tsetup.inherit = Utils.enumValue(Inherit, getValue(boneMap, \"inherit\", \"Normal\"));\n\t\t\t\tdata.skinRequired = getValue(boneMap, \"skin\", false);\n\n\t\t\t\tconst color = getValue(boneMap, \"color\", null);\n\t\t\t\tif (color) data.color.setFromString(color);\n\t\t\t\tdata.icon = getValue(boneMap, \"icon\", undefined);\n\t\t\t\tdata.iconSize = getValue(boneMap, \"iconSize\", 1);\n\t\t\t\tdata.iconRotation = getValue(boneMap, \"iconRotation\", 0);\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\tconst slotMap = root.slots[i];\n\t\t\t\tconst slotName = slotMap.name;\n\n\t\t\t\tconst boneData = skeletonData.findBone(slotMap.bone);\n\t\t\t\tif (!boneData) throw new Error(`Couldn't find bone ${slotMap.bone} for slot ${slotName}`);\n\t\t\t\tconst data = new SlotData(skeletonData.slots.length, slotName, boneData);\n\n\t\t\t\tconst color: string = getValue(slotMap, \"color\", null);\n\t\t\t\tif (color) data.setupPose.color.setFromString(color);\n\n\t\t\t\tconst dark: string = getValue(slotMap, \"dark\", null);\n\t\t\t\tif (dark) data.setupPose.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\tdata.visible = getValue(slotMap, \"visible\", true);\n\t\t\t\tskeletonData.slots.push(data);\n\t\t\t}\n\t\t}\n\n\t\t// Constraints.\n\t\tif (root.constraints) {\n\t\t\tfor (const constraintMap of root.constraints) {\n\t\t\t\tconst name = constraintMap.name;\n\t\t\t\tconst skinRequired = getValue(constraintMap, \"skin\", false);\n\t\t\t\tswitch (getValue(constraintMap, \"type\", false)) {\n\t\t\t\t\tcase \"ik\": {\n\t\t\t\t\t\tconst data = new IkConstraintData(name);\n\t\t\t\t\t\tdata.skinRequired = skinRequired;\n\n\t\t\t\t\t\tfor (let ii = 0; ii < constraintMap.bones.length; ii++) {\n\t\t\t\t\t\t\tconst bone = skeletonData.findBone(constraintMap.bones[ii]);\n\t\t\t\t\t\t\tif (!bone) throw new Error(`Couldn't find bone ${constraintMap.bones[ii]} for IK constraint ${name}.`);\n\t\t\t\t\t\t\tdata.bones.push(bone);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst targetName = constraintMap.target;\n\t\t\t\t\t\tconst target = skeletonData.findBone(targetName);\n\t\t\t\t\t\tif (!target) throw new Error(`Couldn't find target bone ${targetName} for IK constraint ${name}.`);\n\t\t\t\t\t\tdata.target = target;\n\n\t\t\t\t\t\tconst scaleY = getValue(constraintMap, \"scaleY\", null);\n\t\t\t\t\t\tif (scaleY != null) data.scaleYMode = Utils.enumValue(ScaleYMode, scaleY);\n\n\t\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\t\tsetup.mix = getValue(constraintMap, \"mix\", 1);\n\t\t\t\t\t\tsetup.softness = getValue(constraintMap, \"softness\", 0) * scale;\n\t\t\t\t\t\tsetup.bendDirection = getValue(constraintMap, \"bendPositive\", true) ? 1 : -1;\n\t\t\t\t\t\tsetup.compress = getValue(constraintMap, \"compress\", false);\n\t\t\t\t\t\tsetup.stretch = getValue(constraintMap, \"stretch\", false);\n\n\t\t\t\t\t\tskeletonData.constraints.push(data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"transform\": {\n\t\t\t\t\t\tconst data = new TransformConstraintData(name);\n\t\t\t\t\t\tdata.skinRequired = skinRequired;\n\n\t\t\t\t\t\tfor (let ii = 0; ii < constraintMap.bones.length; ii++) {\n\t\t\t\t\t\t\tconst boneName = constraintMap.bones[ii];\n\t\t\t\t\t\t\tconst bone = skeletonData.findBone(boneName);\n\t\t\t\t\t\t\tif (!bone) throw new Error(`Couldn't find bone ${boneName} for transform constraint ${constraintMap.name}.`);\n\t\t\t\t\t\t\tdata.bones.push(bone);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst sourceName: string = constraintMap.source;\n\t\t\t\t\t\tconst source = skeletonData.findBone(sourceName);\n\t\t\t\t\t\tif (!source) throw new Error(`Couldn't find source bone ${sourceName} for transform constraint ${constraintMap.name}.`);\n\t\t\t\t\t\tdata.source = source;\n\n\t\t\t\t\t\tdata.localSource = getValue(constraintMap, \"localSource\", false);\n\t\t\t\t\t\tdata.localTarget = getValue(constraintMap, \"localTarget\", false);\n\t\t\t\t\t\tdata.additive = getValue(constraintMap, \"additive\", false);\n\t\t\t\t\t\tdata.clamp = getValue(constraintMap, \"clamp\", false);\n\n\t\t\t\t\t\tlet rotate = false, x = false, y = false, scaleX = false, scaleY = false, shearY = false;\n\t\t\t\t\t\tconst fromEntries = Object.entries(getValue(constraintMap, \"properties\", {})) as [string, object][];\n\t\t\t\t\t\tfor (const [name, fromEntry] of fromEntries) {\n\t\t\t\t\t\t\tconst from = this.fromProperty(name);\n\t\t\t\t\t\t\tconst fromScale = this.propertyScale(name, scale);\n\t\t\t\t\t\t\tfrom.offset = getValue(fromEntry, \"offset\", 0) * fromScale;\n\t\t\t\t\t\t\tconst toEntries = Object.entries(getValue(fromEntry, \"to\", {})) as [string, object][];\n\t\t\t\t\t\t\tfor (const [name, toEntry] of toEntries) {\n\t\t\t\t\t\t\t\tlet toScale = 1;\n\t\t\t\t\t\t\t\tlet to: ToProperty;\n\t\t\t\t\t\t\t\tswitch (name) {\n\t\t\t\t\t\t\t\t\tcase \"rotate\": {\n\t\t\t\t\t\t\t\t\t\trotate = true;\n\t\t\t\t\t\t\t\t\t\tto = new ToRotate();\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\tcase \"x\": {\n\t\t\t\t\t\t\t\t\t\tx = true;\n\t\t\t\t\t\t\t\t\t\tto = new ToX();\n\t\t\t\t\t\t\t\t\t\ttoScale = scale;\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\tcase \"y\": {\n\t\t\t\t\t\t\t\t\t\ty = true;\n\t\t\t\t\t\t\t\t\t\tto = new ToY();\n\t\t\t\t\t\t\t\t\t\ttoScale = scale;\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\tcase \"scaleX\": {\n\t\t\t\t\t\t\t\t\t\tscaleX = true;\n\t\t\t\t\t\t\t\t\t\tto = new ToScaleX();\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\tcase \"scaleY\": {\n\t\t\t\t\t\t\t\t\t\tscaleY = true;\n\t\t\t\t\t\t\t\t\t\tto = new ToScaleY();\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\tcase \"shearY\": {\n\t\t\t\t\t\t\t\t\t\tshearY = true;\n\t\t\t\t\t\t\t\t\t\tto = new ToShearY();\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\tdefault: throw new Error(`Invalid transform constraint to property: ${name}`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tto.offset = getValue(toEntry, \"offset\", 0) * toScale;\n\t\t\t\t\t\t\t\tto.max = getValue(toEntry, \"max\", 1) * toScale;\n\t\t\t\t\t\t\t\tto.scale = getValue(toEntry, \"scale\", 1) * toScale / fromScale;\n\t\t\t\t\t\t\t\tfrom.to.push(to);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (from.to.length > 0) data.properties.push(from);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdata.offsets[TransformConstraintData.ROTATION] = getValue(constraintMap, \"rotation\", 0);\n\t\t\t\t\t\tdata.offsets[TransformConstraintData.X] = getValue(constraintMap, \"x\", 0) * scale;\n\t\t\t\t\t\tdata.offsets[TransformConstraintData.Y] = getValue(constraintMap, \"y\", 0) * scale;\n\t\t\t\t\t\tdata.offsets[TransformConstraintData.SCALEX] = getValue(constraintMap, \"scaleX\", 0);\n\t\t\t\t\t\tdata.offsets[TransformConstraintData.SCALEY] = getValue(constraintMap, \"scaleY\", 0);\n\t\t\t\t\t\tdata.offsets[TransformConstraintData.SHEARY] = getValue(constraintMap, \"shearY\", 0);\n\n\t\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\t\tif (rotate) setup.mixRotate = getValue(constraintMap, \"mixRotate\", 1);\n\t\t\t\t\t\tif (x) setup.mixX = getValue(constraintMap, \"mixX\", 1);\n\t\t\t\t\t\tif (y) setup.mixY = getValue(constraintMap, \"mixY\", setup.mixX);\n\t\t\t\t\t\tif (scaleX) setup.mixScaleX = getValue(constraintMap, \"mixScaleX\", 1);\n\t\t\t\t\t\tif (scaleY) setup.mixScaleY = getValue(constraintMap, \"mixScaleY\", setup.mixScaleX);\n\t\t\t\t\t\tif (shearY) setup.mixShearY = getValue(constraintMap, \"mixShearY\", 1);\n\n\t\t\t\t\t\tskeletonData.constraints.push(data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"path\": {\n\t\t\t\t\t\tconst data = new PathConstraintData(name);\n\t\t\t\t\t\tdata.skinRequired = skinRequired;\n\n\t\t\t\t\t\tfor (let ii = 0; ii < constraintMap.bones.length; ii++) {\n\t\t\t\t\t\t\tconst boneName = constraintMap.bones[ii];\n\t\t\t\t\t\t\tconst bone = skeletonData.findBone(boneName);\n\t\t\t\t\t\t\tif (!bone) throw new Error(`Couldn't find bone ${boneName} for path constraint ${constraintMap.name}.`);\n\t\t\t\t\t\t\tdata.bones.push(bone);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst slotName: string = constraintMap.slot;\n\t\t\t\t\t\tconst slot = skeletonData.findSlot(slotName);\n\t\t\t\t\t\tif (!slot) throw new Error(`Couldn't find slot ${slotName} for path constraint ${constraintMap.name}.`);\n\t\t\t\t\t\tdata.slot = slot;\n\n\t\t\t\t\t\tdata.positionMode = Utils.enumValue(PositionMode, getValue(constraintMap, \"positionMode\", \"Percent\"));\n\t\t\t\t\t\tdata.spacingMode = Utils.enumValue(SpacingMode, getValue(constraintMap, \"spacingMode\", \"Length\"));\n\t\t\t\t\t\tdata.rotateMode = Utils.enumValue(RotateMode, getValue(constraintMap, \"rotateMode\", \"Tangent\"));\n\t\t\t\t\t\tdata.offsetRotation = getValue(constraintMap, \"rotation\", 0);\n\t\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\t\tsetup.position = getValue(constraintMap, \"position\", 0);\n\t\t\t\t\t\tif (data.positionMode === PositionMode.Fixed) setup.position *= scale;\n\t\t\t\t\t\tsetup.spacing = getValue(constraintMap, \"spacing\", 0);\n\t\t\t\t\t\tif (data.spacingMode === SpacingMode.Length || data.spacingMode === SpacingMode.Fixed) setup.spacing *= scale;\n\t\t\t\t\t\tsetup.mixRotate = getValue(constraintMap, \"mixRotate\", 1);\n\t\t\t\t\t\tsetup.mixX = getValue(constraintMap, \"mixX\", 1);\n\t\t\t\t\t\tsetup.mixY = getValue(constraintMap, \"mixY\", setup.mixX);\n\n\t\t\t\t\t\tskeletonData.constraints.push(data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"physics\": {\n\t\t\t\t\t\tconst data = new PhysicsConstraintData(name);\n\t\t\t\t\t\tdata.skinRequired = skinRequired;\n\n\t\t\t\t\t\tconst boneName: string = constraintMap.bone;\n\t\t\t\t\t\tconst bone = skeletonData.findBone(boneName);\n\t\t\t\t\t\tif (bone == null) throw new Error(`Physics bone not found: ${boneName}`);\n\t\t\t\t\t\tdata.bone = bone;\n\n\t\t\t\t\t\tdata.x = getValue(constraintMap, \"x\", 0);\n\t\t\t\t\t\tdata.y = getValue(constraintMap, \"y\", 0);\n\t\t\t\t\t\tdata.rotate = getValue(constraintMap, \"rotate\", 0);\n\t\t\t\t\t\tdata.scaleX = getValue(constraintMap, \"scaleX\", 0);\n\n\t\t\t\t\t\tconst scaleY = getValue(constraintMap, \"scaleY\", null);\n\t\t\t\t\t\tif (scaleY != null) data.scaleYMode = Utils.enumValue(ScaleYMode, scaleY);\n\n\t\t\t\t\t\tdata.shearX = getValue(constraintMap, \"shearX\", 0);\n\t\t\t\t\t\tdata.limit = getValue(constraintMap, \"limit\", 5000) * scale;\n\t\t\t\t\t\tdata.step = 1 / getValue(constraintMap, \"fps\", 60);\n\t\t\t\t\t\tconst setup = data.setupPose;\n\t\t\t\t\t\tsetup.inertia = getValue(constraintMap, \"inertia\", 0.5);\n\t\t\t\t\t\tsetup.strength = getValue(constraintMap, \"strength\", 100);\n\t\t\t\t\t\tsetup.damping = getValue(constraintMap, \"damping\", 0.85);\n\t\t\t\t\t\tsetup.massInverse = 1 / getValue(constraintMap, \"mass\", 1);\n\t\t\t\t\t\tsetup.wind = getValue(constraintMap, \"wind\", 0);\n\t\t\t\t\t\tsetup.gravity = getValue(constraintMap, \"gravity\", 0);\n\t\t\t\t\t\tsetup.mix = getValue(constraintMap, \"mix\", 1);\n\t\t\t\t\t\tdata.inertiaGlobal = getValue(constraintMap, \"inertiaGlobal\", false);\n\t\t\t\t\t\tdata.strengthGlobal = getValue(constraintMap, \"strengthGlobal\", false);\n\t\t\t\t\t\tdata.dampingGlobal = getValue(constraintMap, \"dampingGlobal\", false);\n\t\t\t\t\t\tdata.massGlobal = getValue(constraintMap, \"massGlobal\", false);\n\t\t\t\t\t\tdata.windGlobal = getValue(constraintMap, \"windGlobal\", false);\n\t\t\t\t\t\tdata.gravityGlobal = getValue(constraintMap, \"gravityGlobal\", false);\n\t\t\t\t\t\tdata.mixGlobal = getValue(constraintMap, \"mixGlobal\", false);\n\n\t\t\t\t\t\tskeletonData.constraints.push(data);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"slider\": {\n\t\t\t\t\t\tconst data = new SliderData(name);\n\t\t\t\t\t\tdata.skinRequired = skinRequired;\n\n\t\t\t\t\t\tdata.additive = getValue(constraintMap, \"additive\", false);\n\t\t\t\t\t\tdata.loop = getValue(constraintMap, \"loop\", false);\n\t\t\t\t\t\tdata.setupPose.time = getValue(constraintMap, \"time\", 0);\n\t\t\t\t\t\tdata.setupPose.mix = getValue(constraintMap, \"mix\", 1);\n\n\t\t\t\t\t\tconst boneName: string = constraintMap.bone;\n\t\t\t\t\t\tif (boneName) {\n\t\t\t\t\t\t\tdata.bone = skeletonData.findBone(boneName);\n\t\t\t\t\t\t\tif (!data.bone) throw new Error(`Slider bone not found: ${boneName}`);\n\t\t\t\t\t\t\tconst property = constraintMap.property;\n\t\t\t\t\t\t\tdata.property = this.fromProperty(property);\n\t\t\t\t\t\t\tconst propertyScale = this.propertyScale(property, scale);\n\t\t\t\t\t\t\tdata.property.offset = getValue(constraintMap, \"from\", 0) * propertyScale;\n\t\t\t\t\t\t\tdata.offset = getValue(constraintMap, \"to\", 0);\n\t\t\t\t\t\t\tdata.scale = getValue(constraintMap, \"scale\", 1) / propertyScale;\n\t\t\t\t\t\t\tdata.local = getValue(constraintMap, \"local\", false);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tskeletonData.constraints.push(data);\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}\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\tconst skinMap = root.skins[i]\n\t\t\t\tconst 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\tconst boneName = skinMap.bones[ii];\n\t\t\t\t\t\tconst 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\tconst constraintName = skinMap.ik[ii];\n\t\t\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, IkConstraintData);\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\tconst constraintName = skinMap.transform[ii];\n\t\t\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, TransformConstraintData);\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\tconst constraintName = skinMap.path[ii];\n\t\t\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, PathConstraintData);\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\tif (skinMap.physics) {\n\t\t\t\t\tfor (let ii = 0; ii < skinMap.physics.length; ii++) {\n\t\t\t\t\t\tconst constraintName = skinMap.physics[ii];\n\t\t\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, PhysicsConstraintData);\n\t\t\t\t\t\tif (!constraint) throw new Error(`Couldn't find physics 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.slider) {\n\t\t\t\t\tfor (let ii = 0; ii < skinMap.slider.length; ii++) {\n\t\t\t\t\t\tconst constraintName = skinMap.slider[ii];\n\t\t\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, SliderData);\n\t\t\t\t\t\tif (!constraint) throw new Error(`Couldn't find slider 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 (const slotName in skinMap.attachments) {\n\t\t\t\t\tconst slot = skeletonData.findSlot(slotName);\n\t\t\t\t\tif (!slot) throw new Error(`Couldn't find skin slot ${slotName} for skin ${skinMap.name}.`);\n\t\t\t\t\tconst slotMap = skinMap.attachments[slotName];\n\t\t\t\t\tfor (const entryName in slotMap) {\n\t\t\t\t\t\tconst 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\tconst linkedMesh = this.linkedMeshes[i];\n\t\t\tconst 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\tconst source = skin.getAttachment(linkedMesh.sourceIndex, linkedMesh.source);\n\t\t\tif (!source) throw new Error(`Source mesh not found: ${linkedMesh.source}`);\n\t\t\tlinkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimelines ? source : linkedMesh.mesh;\n\t\t\tlinkedMesh.mesh.setSourceMesh(source as MeshAttachment);\n\t\t\tlinkedMesh.mesh.updateSequence();\n\t\t\t// biome-ignore lint/suspicious/noConfusingLabels: reference runtime\n\t\t\touter:\n\t\t\tif (linkedMesh.inheritTimelines && linkedMesh.slotIndex !== linkedMesh.sourceIndex) {\n\t\t\t\tconst slots = source.timelineSlots;\n\t\t\t\tfor (const existing of slots)\n\t\t\t\t\tif (existing === linkedMesh.slotIndex) break outer;\n\t\t\t\tconst newSlots = [...slots];\n\t\t\t\tnewSlots[slots.length] = linkedMesh.slotIndex;\n\t\t\t\tsource.timelineSlots = newSlots;\n\t\t\t}\n\t\t}\n\t\tthis.linkedMeshes.length = 0;\n\n\t\t// Events.\n\t\tif (root.events) {\n\t\t\tfor (const eventName in root.events) {\n\t\t\t\tconst eventMap = root.events[eventName];\n\t\t\t\tconst data = new EventData(eventName);\n\t\t\t\tconst setup = data.setupPose;\n\t\t\t\tsetup.intValue = getValue(eventMap, \"int\", 0);\n\t\t\t\tsetup.floatValue = getValue(eventMap, \"float\", 0);\n\t\t\t\tsetup.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\tsetup.volume = getValue(eventMap, \"volume\", setup.volume);\n\t\t\t\t\tsetup.balance = getValue(eventMap, \"balance\", setup.balance);\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 (const animationName in root.animations) {\n\t\t\t\tconst animationMap = root.animations[animationName];\n\t\t\t\tthis.readAnimation(animationMap, animationName, skeletonData);\n\t\t\t}\n\t\t}\n\n\t\t// Slider animations.\n\t\tif (root.constraints) {\n\t\t\tfor (const animationName in root.constraints) {\n\t\t\t\tconst animationMap = root.constraints[animationName];\n\t\t\t\tif (animationMap.type === \"slider\") {\n\t\t\t\t\tconst data = skeletonData.findConstraint(animationMap.name, SliderData)\n\t\t\t\t\tconst animationName = animationMap.animation;\n\t\t\t\t\tconst animation = skeletonData.findAnimation(animationName);\n\t\t\t\t\tif (!animation) throw new Error(`Slider animation not found: ${animationName}`);\n\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: reference runtime\n\t\t\t\t\tdata!.animation = animation;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn skeletonData;\n\t}\n\n\tprivate fromProperty (type: string): FromProperty {\n\t\tlet from: FromProperty;\n\t\tswitch (type) {\n\t\t\tcase \"rotate\": from = new FromRotate(); break;\n\t\t\tcase \"x\": from = new FromX(); break;\n\t\t\tcase \"y\": from = new FromY(); break;\n\t\t\tcase \"scaleX\": from = new FromScaleX(); break;\n\t\t\tcase \"scaleY\": from = new FromScaleY(); break;\n\t\t\tcase \"shearY\": from = new FromShearY(); break;\n\t\t\tdefault: throw new Error(`Invalid transform constraint from property: ${type}`);\n\t\t}\n\t\treturn from;\n\t}\n\n\tprivate propertyScale (type: string, scale: number) {\n\t\tswitch (type) {\n\t\t\tcase \"x\":\n\t\t\tcase \"y\": return scale;\n\t\t\tdefault: return 1;\n\t\t}\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: it is any until we define a schema\n\treadAttachment (map: any, skin: Skin, slotIndex: number, placeholder: string, skeletonData: SkeletonData): Attachment | null {\n\t\tconst scale = this.scale;\n\t\tconst name = getValue(map, \"name\", placeholder);\n\n\t\tswitch (getValue(map, \"type\", \"region\")) {\n\t\t\tcase \"region\": {\n\t\t\t\tconst path = getValue(map, \"path\", name);\n\t\t\t\tconst sequence = this.readSequence(getValue(map, \"sequence\", null));\n\t\t\t\tconst region = this.attachmentLoader.newRegionAttachment(skin, placeholder, 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\n\t\t\t\tconst color: string = getValue(map, \"color\", null);\n\t\t\t\tif (color) region.color.setFromString(color);\n\n\t\t\t\tregion.updateSequence();\n\t\t\t\treturn region;\n\t\t\t}\n\t\t\tcase \"boundingbox\": {\n\t\t\t\tconst box = this.attachmentLoader.newBoundingBoxAttachment(skin, placeholder, name);\n\t\t\t\tif (!box) return null;\n\t\t\t\tthis.readVertices(map, box, map.vertexCount << 1);\n\t\t\t\tconst 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\tconst path = getValue(map, \"path\", name);\n\t\t\t\tconst sequence = this.readSequence(getValue(map, \"sequence\", null));\n\t\t\t\tconst mesh = this.attachmentLoader.newMeshAttachment(skin, placeholder, name, path, sequence);\n\t\t\t\tif (!mesh) return null;\n\t\t\t\tmesh.path = path;\n\n\t\t\t\tconst 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\n\t\t\t\tconst source: string = getValue(map, \"source\", null);\n\t\t\t\tif (source) {\n\t\t\t\t\tlet sourceIndex = slotIndex;\n\t\t\t\t\tconst slot = getValue(map, \"slot\", null);\n\t\t\t\t\tif (slot) {\n\t\t\t\t\t\tconst sourceSlot = skeletonData.findSlot(slot);\n\t\t\t\t\t\tif (!sourceSlot) throw new Error(`Source mesh slot not found: ${slot}`);\n\t\t\t\t\t\tsourceIndex = sourceSlot.index;\n\t\t\t\t\t}\n\t\t\t\t\tthis.linkedMeshes.push(new LinkedMesh(mesh, getValue(map, \"skin\", null), slotIndex, sourceIndex, source,\n\t\t\t\t\t\tgetValue(map, \"timelines\", true)));\n\t\t\t\t\treturn mesh;\n\t\t\t\t}\n\n\t\t\t\tconst 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\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\tmesh.updateSequence();\n\t\t\t\treturn mesh;\n\t\t\t}\n\t\t\tcase \"path\": {\n\t\t\t\tconst path = this.attachmentLoader.newPathAttachment(skin, placeholder, 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\tconst vertexCount = map.vertexCount;\n\t\t\t\tthis.readVertices(map, path, vertexCount << 1);\n\n\t\t\t\tconst 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\tconst 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\tconst point = this.attachmentLoader.newPointAttachment(skin, placeholder, 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\tconst 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\tconst clip = this.attachmentLoader.newClippingAttachment(skin, placeholder, name);\n\t\t\t\tif (!clip) return null;\n\n\t\t\t\tconst end = getValue(map, \"end\", null);\n\t\t\t\tif (end) clip.endSlot = skeletonData.findSlot(end);\n\n\t\t\t\tclip.convex = getValue(map, \"convex\", false);\n\t\t\t\tclip.inverse = getValue(map, \"inverse\", false);\n\n\t\t\t\tconst vertexCount = map.vertexCount;\n\t\t\t\tthis.readVertices(map, clip, vertexCount << 1);\n\n\t\t\t\tconst 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: object) {\n\t\tif (map == null) return new Sequence(1, false);\n\t\tconst sequence = new Sequence(getValue(map, \"count\", 0), true);\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\t// biome-ignore lint/suspicious/noExplicitAny: it is any until we define a schema\n\treadVertices (map: any, attachment: VertexAttachment, verticesLength: number) {\n\t\tconst scale = this.scale;\n\t\tattachment.worldVerticesLength = verticesLength;\n\t\tconst vertices: Array<number> = map.vertices;\n\t\tif (verticesLength === vertices.length) {\n\t\t\tconst 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\tconst weights: number[] = [];\n\t\tconst bones: number[] = [];\n\t\tfor (let i = 0, n = vertices.length; i < n;) {\n\t\t\tconst 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\t// biome-ignore lint/suspicious/noExplicitAny: it is any untile we define a schema\n\treadAnimation (map: any, name: string, skeletonData: SkeletonData) {\n\t\tconst scale = this.scale;\n\t\tconst timelines: Timeline[] = [];\n\n\t\t// Slot timelines.\n\t\tif (map.slots) {\n\t\t\tfor (const slotName in map.slots) {\n\t\t\t\tconst slotMap = map.slots[slotName];\n\t\t\t\tconst slot = skeletonData.findSlot(slotName);\n\t\t\t\tif (!slot) throw new Error(`Slot not found: ${slotName}`);\n\t\t\t\tconst slotIndex = slot.index;\n\t\t\t\tfor (const timelineName in slotMap) {\n\t\t\t\t\tconst timelineMap = slotMap[timelineName];\n\t\t\t\t\tif (!timelineMap) continue;\n\t\t\t\t\tconst frames = timelineMap.length;\n\n\t\t\t\t\tswitch (timelineName) {\n\t\t\t\t\t\tcase \"attachment\": {\n\t\t\t\t\t\t\tconst timeline = new AttachmentTimeline(frames, slotIndex);\n\t\t\t\t\t\t\tfor (let frame = 0; frame < frames; frame++) {\n\t\t\t\t\t\t\t\tconst keyMap = timelineMap[frame];\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, getValue(keyMap, \"time\", 0), getValue(keyMap, \"name\", null));\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 \"rgba\": {\n\t\t\t\t\t\t\tconst timeline = new RGBATimeline(frames, frames << 2, slotIndex);\n\t\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\tlet color = Color.fromString(keyMap.color);\n\n\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\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\t\tconst nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\t\tconst newColor = Color.fromString(nextMap.color);\n\t\t\t\t\t\t\t\tconst curve = keyMap.curve;\n\t\t\t\t\t\t\t\tif (curve) {\n\t\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\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n\t\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\t\tbezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 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\tcolor = newColor;\n\t\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t\t}\n\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 \"rgb\": {\n\t\t\t\t\t\t\tconst timeline = new RGBTimeline(frames, frames * 3, slotIndex);\n\t\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\tlet color = Color.fromString(keyMap.color);\n\n\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, color.r, color.g, color.b);\n\t\t\t\t\t\t\t\tconst nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\t\tconst newColor = Color.fromString(nextMap.color);\n\t\t\t\t\t\t\t\tconst curve = keyMap.curve;\n\t\t\t\t\t\t\t\tif (curve) {\n\t\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\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n\t\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\t}\n\t\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\t\tcolor = newColor;\n\t\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t\t}\n\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 \"alpha\": {\n\t\t\t\t\t\t\treadTimeline1(timelines, timelineMap, new AlphaTimeline(frames, frames, slotIndex), 0, 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"rgba2\": {\n\t\t\t\t\t\t\tconst timeline = new RGBA2Timeline(frames, frames * 7, slotIndex);\n\n\t\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\tlet color = Color.fromString(keyMap.light);\n\t\t\t\t\t\t\tlet color2 = Color.fromString(keyMap.dark);\n\n\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\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\t\tconst nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\t\tconst newColor = Color.fromString(nextMap.light);\n\t\t\t\t\t\t\t\tconst newColor2 = Color.fromString(nextMap.dark);\n\t\t\t\t\t\t\t\tconst curve = keyMap.curve;\n\t\t\t\t\t\t\t\tif (curve) {\n\t\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\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n\t\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\t\tbezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);\n\t\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\t\tbezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.g, newColor2.g, 1);\n\t\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\t}\n\t\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\t\tcolor = newColor;\n\t\t\t\t\t\t\t\tcolor2 = newColor2;\n\t\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t\t}\n\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 \"rgb2\": {\n\t\t\t\t\t\t\tconst timeline = new RGB2Timeline(frames, frames * 6, slotIndex);\n\n\t\t\t\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\tlet color = Color.fromString(keyMap.light);\n\t\t\t\t\t\t\tlet color2 = Color.fromString(keyMap.dark);\n\n\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\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\t\tconst nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\t\tconst newColor = Color.fromString(nextMap.light);\n\t\t\t\t\t\t\t\tconst newColor2 = Color.fromString(nextMap.dark);\n\t\t\t\t\t\t\t\tconst curve = keyMap.curve;\n\t\t\t\t\t\t\t\tif (curve) {\n\t\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\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n\t\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\t\tbezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.r, newColor2.r, 1);\n\t\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\t\tbezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.b, newColor2.b, 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\tcolor = newColor;\n\t\t\t\t\t\t\t\tcolor2 = newColor2;\n\t\t\t\t\t\t\t\tkeyMap = nextMap;\n\t\t\t\t\t\t\t}\n\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\tdefault:\n\t\t\t\t\t\t\tthrow new Error(`Invalid timeline type for a slot: ${timelineMap.name} (${slotMap.name})`);\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 (const boneName in map.bones) {\n\t\t\t\tconst boneMap = map.bones[boneName];\n\t\t\t\tconst bone = skeletonData.findBone(boneName);\n\t\t\t\tif (!bone) throw new Error(`Bone not found: ${boneName}`);\n\t\t\t\tconst boneIndex = bone.index;\n\t\t\t\tfor (const timelineName in boneMap) {\n\t\t\t\t\tconst timelineMap = boneMap[timelineName];\n\t\t\t\t\tconst frames = timelineMap.length;\n\t\t\t\t\tif (frames === 0) continue;\n\n\t\t\t\t\tswitch (timelineName) {\n\t\t\t\t\t\tcase \"rotate\": readTimeline1(timelines, timelineMap, new RotateTimeline(frames, frames, boneIndex), 0, 1); break;\n\t\t\t\t\t\tcase \"translate\": readTimeline2(timelines, timelineMap, new TranslateTimeline(frames, frames << 1, boneIndex), \"x\", \"y\", 0, scale); break;\n\t\t\t\t\t\tcase \"translatex\": readTimeline1(timelines, timelineMap, new TranslateXTimeline(frames, frames, boneIndex), 0, scale); break;\n\t\t\t\t\t\tcase \"translatey\": readTimeline1(timelines, timelineMap, new TranslateYTimeline(frames, frames, boneIndex), 0, scale); break;\n\t\t\t\t\t\tcase \"scale\": readTimeline2(timelines, timelineMap, new ScaleTimeline(frames, frames << 1, boneIndex), \"x\", \"y\", 1, 1); break;\n\t\t\t\t\t\tcase \"scalex\": readTimeline1(timelines, timelineMap, new ScaleXTimeline(frames, frames, boneIndex), 1, 1); break;\n\t\t\t\t\t\tcase \"scaley\": readTimeline1(timelines, timelineMap, new ScaleYTimeline(frames, frames, boneIndex), 1, 1); break;\n\t\t\t\t\t\tcase \"shear\": readTimeline2(timelines, timelineMap, new ShearTimeline(frames, frames << 1, boneIndex), \"x\", \"y\", 0, 1); break;\n\t\t\t\t\t\tcase \"shearx\": readTimeline1(timelines, timelineMap, new ShearXTimeline(frames, frames, boneIndex), 0, 1); break;\n\t\t\t\t\t\tcase \"sheary\": readTimeline1(timelines, timelineMap, new ShearYTimeline(frames, frames, boneIndex), 0, 1); break;\n\t\t\t\t\t\tcase \"inherit\": {\n\t\t\t\t\t\t\tconst timeline = new InheritTimeline(frames, bone.index);\n\t\t\t\t\t\t\tfor (let frame = 0; frame < timelineMap.length; frame++) {\n\t\t\t\t\t\t\t\tconst aFrame = timelineMap[frame];\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, getValue(aFrame, \"time\", 0), Utils.enumValue(Inherit, getValue(aFrame, \"inherit\", \"Normal\")));\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\tdefault:\n\t\t\t\t\t\t\tthrow new Error(`Invalid timeline type for a bone: ${timelineMap.name} (${boneMap.name})`);\n\t\t\t\t\t}\n\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 (const constraintName in map.ik) {\n\t\t\t\tconst constraintMap = map.ik[constraintName];\n\t\t\t\tlet keyMap = constraintMap[0];\n\t\t\t\tif (!keyMap) continue;\n\n\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, IkConstraintData);\n\t\t\t\tif (!constraint) throw new Error(`IK Constraint not found: ${constraintName}`);\n\t\t\t\tconst timeline = new IkConstraintTimeline(constraintMap.length, constraintMap.length << 1,\n\t\t\t\t\tskeletonData.constraints.indexOf(constraint));\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\tconst 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\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\tconst mix2 = getValue(nextMap, \"mix\", 1);\n\t\t\t\t\tconst softness2 = getValue(nextMap, \"softness\", 0) * scale;\n\t\t\t\t\tconst 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 (const constraintName in map.transform) {\n\t\t\t\tconst timelineMap = map.transform[constraintName];\n\t\t\t\tlet keyMap = timelineMap[0];\n\t\t\t\tif (!keyMap) continue;\n\n\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, TransformConstraintData);\n\t\t\t\tif (!constraint) throw new Error(`Transform constraint not found: ${constraintName}`);\n\t\t\t\tconst timeline = new TransformConstraintTimeline(timelineMap.length, timelineMap.length * 6,\n\t\t\t\t\tskeletonData.constraints.indexOf(constraint));\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), mixY = getValue(keyMap, \"mixY\", mixX);\n\t\t\t\tlet mixScaleX = getValue(keyMap, \"mixScaleX\", 1), mixScaleY = getValue(keyMap, \"mixScaleY\", 1);\n\t\t\t\tconst 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\tconst 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\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\tconst mixRotate2 = getValue(nextMap, \"mixRotate\", 1);\n\t\t\t\t\tconst mixX2 = getValue(nextMap, \"mixX\", 1), mixY2 = getValue(nextMap, \"mixY\", mixX2);\n\t\t\t\t\tconst mixScaleX2 = getValue(nextMap, \"mixScaleX\", 1), mixScaleY2 = getValue(nextMap, \"mixScaleY\", 1);\n\t\t\t\t\tconst mixShearY2 = getValue(nextMap, \"mixShearY\", 1);\n\t\t\t\t\tconst 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 (const constraintName in map.path) {\n\t\t\t\tconst constraintMap = map.path[constraintName];\n\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, PathConstraintData);\n\t\t\t\tif (!constraint) throw new Error(`Path constraint not found: ${constraintName}`);\n\t\t\t\tconst index = skeletonData.constraints.indexOf(constraint);\n\t\t\t\tfor (const timelineName in constraintMap) {\n\t\t\t\t\tconst 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\tconst frames = timelineMap.length;\n\t\t\t\t\tswitch (timelineName) {\n\t\t\t\t\t\tcase \"position\": {\n\t\t\t\t\t\t\tconst timeline = new PathConstraintPositionTimeline(frames, frames, index);\n\t\t\t\t\t\t\treadTimeline1(timelines, timelineMap, timeline, 0, constraint.positionMode === PositionMode.Fixed ? scale : 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"spacing\": {\n\t\t\t\t\t\t\tconst timeline = new PathConstraintSpacingTimeline(frames, frames, index);\n\t\t\t\t\t\t\treadTimeline1(timelines, timelineMap, timeline, 0, constraint.spacingMode === SpacingMode.Length || constraint.spacingMode === SpacingMode.Fixed ? scale : 1);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"mix\": {\n\t\t\t\t\t\t\tconst timeline = new PathConstraintMixTimeline(frames, frames * 3, index);\n\t\t\t\t\t\t\tlet time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\tlet mixRotate = getValue(keyMap, \"mixRotate\", 1);\n\t\t\t\t\t\t\tlet mixX = getValue(keyMap, \"mixX\", 1);\n\t\t\t\t\t\t\tlet mixY = getValue(keyMap, \"mixY\", mixX);\n\t\t\t\t\t\t\tfor (let frame = 0, bezier = 0; ; frame++) {\n\t\t\t\t\t\t\t\ttimeline.setFrame(frame, time, mixRotate, mixX, mixY);\n\t\t\t\t\t\t\t\tconst nextMap = timelineMap[frame + 1];\n\t\t\t\t\t\t\t\tif (!nextMap) {\n\t\t\t\t\t\t\t\t\ttimeline.shrink(bezier);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\t\tconst mixRotate2 = getValue(nextMap, \"mixRotate\", 1);\n\t\t\t\t\t\t\t\tconst mixX2 = getValue(nextMap, \"mixX\", 1);\n\t\t\t\t\t\t\t\tconst mixY2 = getValue(nextMap, \"mixY\", mixX2);\n\t\t\t\t\t\t\t\tconst curve = keyMap.curve;\n\t\t\t\t\t\t\t\tif (curve) {\n\t\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\t\tbezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);\n\t\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\t}\n\t\t\t\t\t\t\t\ttime = time2;\n\t\t\t\t\t\t\t\tmixRotate = mixRotate2;\n\t\t\t\t\t\t\t\tmixX = mixX2;\n\t\t\t\t\t\t\t\tmixY = mixY2;\n\t\t\t\t\t\t\t\tkeyMap = nextMap;\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// Physics constraint timelines.\n\t\tif (map.physics) {\n\t\t\tfor (const constraintName in map.physics) {\n\t\t\t\tconst constraintMap = map.physics[constraintName];\n\t\t\t\tlet index = -1;\n\t\t\t\tif (constraintName.length > 0) {\n\t\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, PhysicsConstraintData);\n\t\t\t\t\tif (!constraint) throw new Error(`Physics constraint not found: ${constraintName}`);\n\t\t\t\t\tindex = skeletonData.constraints.indexOf(constraint);\n\t\t\t\t}\n\t\t\t\tfor (const timelineName in constraintMap) {\n\t\t\t\t\tconst 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\tconst frames = timelineMap.length;\n\t\t\t\t\tlet timeline: CurveTimeline1;\n\t\t\t\t\tlet defaultValue = 0;\n\t\t\t\t\tif (timelineName === \"reset\") {\n\t\t\t\t\t\tconst resetTimeline = new PhysicsConstraintResetTimeline(frames, index);\n\t\t\t\t\t\tfor (let frame = 0; keyMap != null; keyMap = timelineMap[frame + 1], frame++)\n\t\t\t\t\t\t\tresetTimeline.setFrame(frame, getValue(keyMap, \"time\", 0));\n\t\t\t\t\t\ttimelines.push(resetTimeline);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tswitch (timelineName) {\n\t\t\t\t\t\tcase \"inertia\": timeline = new PhysicsConstraintInertiaTimeline(frames, frames, index); break;\n\t\t\t\t\t\tcase \"strength\": timeline = new PhysicsConstraintStrengthTimeline(frames, frames, index); break;\n\t\t\t\t\t\tcase \"damping\": timeline = new PhysicsConstraintDampingTimeline(frames, frames, index); break;\n\t\t\t\t\t\tcase \"mass\": timeline = new PhysicsConstraintMassTimeline(frames, frames, index); break;\n\t\t\t\t\t\tcase \"wind\": timeline = new PhysicsConstraintWindTimeline(frames, frames, index); break;\n\t\t\t\t\t\tcase \"gravity\": timeline = new PhysicsConstraintGravityTimeline(frames, frames, index); break;\n\t\t\t\t\t\tcase \"mix\": {\n\t\t\t\t\t\t\tdefaultValue = 1;\n\t\t\t\t\t\t\ttimeline = new PhysicsConstraintMixTimeline(frames, frames, index);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault: continue;\n\t\t\t\t\t}\n\t\t\t\t\treadTimeline1(timelines, timelineMap, timeline, defaultValue, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Slider timelines.\n\t\tif (map.slider) {\n\t\t\tfor (const constraintName in map.slider) {\n\t\t\t\tconst constraintMap = map.slider[constraintName];\n\t\t\t\tconst constraint = skeletonData.findConstraint(constraintName, SliderData);\n\t\t\t\tif (!constraint) throw new Error(`Slider not found: ${constraintName}`);\n\t\t\t\tconst index = skeletonData.constraints.indexOf(constraint);\n\n\t\t\t\tfor (const timelineName in constraintMap) {\n\t\t\t\t\tconst timelineMap = constraintMap[timelineName];\n\t\t\t\t\tconst keyMap = timelineMap[0];\n\t\t\t\t\tif (!keyMap) continue;\n\n\t\t\t\t\tconst frames = timelineMap.length;\n\t\t\t\t\tswitch (timelineName) {\n\t\t\t\t\t\tcase \"time\": readTimeline1(timelines, timelineMap, new SliderTimeline(frames, frames, index), 1, 1); break;\n\t\t\t\t\t\tcase \"mix\": readTimeline1(timelines, timelineMap, new SliderMixTimeline(frames, frames, index), 1, 1); break;\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 (const attachmentsName in map.attachments) {\n\t\t\t\tconst attachmentsMap = map.attachments[attachmentsName];\n\t\t\t\tconst skin = skeletonData.findSkin(attachmentsName);\n\t\t\t\tif (!skin) throw new Error(`Skin not found: ${attachmentsName}`);\n\t\t\t\tfor (const slotMapName in attachmentsMap) {\n\t\t\t\t\tconst slotMap = attachmentsMap[slotMapName];\n\t\t\t\t\tconst slot = skeletonData.findSlot(slotMapName);\n\t\t\t\t\tif (!slot) throw new Error(`Attachment slot not found: ${slotMapName}`);\n\t\t\t\t\tconst slotIndex = slot.index;\n\t\t\t\t\tfor (const attachmentMapName in slotMap) {\n\t\t\t\t\t\tconst attachmentMap = slotMap[attachmentMapName];\n\t\t\t\t\t\tconst attachment = <VertexAttachment>skin.getAttachment(slotIndex, attachmentMapName);\n\t\t\t\t\t\tif (!attachment) throw new Error(`Timeline attachment not found: ${attachmentMapName}`);\n\n\t\t\t\t\t\tfor (const timelineMapName in attachmentMap) {\n\t\t\t\t\t\t\tconst 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\tconst weighted = attachment.bones;\n\t\t\t\t\t\t\t\tconst vertices = attachment.vertices;\n\t\t\t\t\t\t\t\tconst deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n\n\t\t\t\t\t\t\t\tconst 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\tconst 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\tconst 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\tconst 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\tconst time2 = getValue(nextMap, \"time\", 0);\n\t\t\t\t\t\t\t\t\tconst 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\tconst timeline = new SequenceTimeline(timelineMap.length, slotIndex, attachment as Attachment);\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\tconst delay = getValue(keyMap, \"delay\", lastDelay);\n\t\t\t\t\t\t\t\t\tconst time = getValue(keyMap, \"time\", 0);\n\t\t\t\t\t\t\t\t\tconst mode = SequenceMode[getValue(keyMap, \"mode\", \"hold\")] as unknown as number;\n\t\t\t\t\t\t\t\t\tconst 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 timeline.\n\t\tif (map.drawOrder) {\n\t\t\tconst timeline = new DrawOrderTimeline(map.drawOrder.length);\n\t\t\tconst slotCount = skeletonData.slots.length;\n\t\t\tlet frame = 0\n\t\t\tfor (const drawOrderMap of (map.drawOrder as DrawOrderKeysType[])) {\n\t\t\t\ttimeline.setFrame(frame++, getValue(drawOrderMap, \"time\", 0), readDrawOrder(skeletonData, drawOrderMap, slotCount, null));\n\t\t\t}\n\t\t\ttimelines.push(timeline);\n\t\t}\n\n\t\t// Draw order folder timelines.\n\t\tif (map.drawOrderFolder) {\n\t\t\tfor (const timelineMap of map.drawOrderFolder) {\n\t\t\t\tconst slotEntries = getValue(timelineMap, \"slots\", []) as string[];\n\t\t\t\tconst folderSlots = new Array<number>(slotEntries.length);\n\t\t\t\tlet ii = 0;\n\t\t\t\tfor (const slotEntry of slotEntries) {\n\t\t\t\t\tconst slot = skeletonData.findSlot(slotEntry);\n\t\t\t\t\tif (!slot) throw new Error(`Draw order folder slot not found: ${slotEntry}`);\n\t\t\t\t\tfolderSlots[ii++] = slot.index;\n\t\t\t\t}\n\n\t\t\t\tconst drawOrderFolderEntries = getValue(timelineMap, \"keys\", []) as DrawOrderKeysType[];\n\t\t\t\tconst timeline = new DrawOrderFolderTimeline(drawOrderFolderEntries.length, folderSlots, skeletonData.slots.length);\n\t\t\t\tlet frame = 0;\n\t\t\t\tfor (const drawOrderFolderMap of drawOrderFolderEntries) {\n\t\t\t\t\ttimeline.setFrame(frame++, getValue(drawOrderFolderMap, \"time\", 0), readDrawOrder(skeletonData, drawOrderFolderMap, folderSlots.length, folderSlots));\n\t\t\t\t}\n\t\t\t\ttimelines.push(timeline);\n\t\t\t}\n\t\t}\n\n\t\t// Event timeline.\n\t\tif (map.events) {\n\t\t\tconst 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\tconst eventMap = map.events[i];\n\t\t\t\tconst data = skeletonData.findEvent(eventMap.name);\n\t\t\t\tif (!data) throw new Error(`Event not found: ${eventMap.name}`);\n\t\t\t\tconst setup = data.setupPose;\n\t\t\t\tconst event = new Event(Utils.toSinglePrecision(getValue(eventMap, \"time\", 0)), data);\n\t\t\t\tevent.intValue = getValue(eventMap, \"int\", setup.intValue);\n\t\t\t\tevent.floatValue = getValue(eventMap, \"float\", setup.floatValue);\n\t\t\t\tevent.stringValue = getValue(eventMap, \"string\", setup.stringValue);\n\t\t\t\tif (event.data.audioPath) {\n\t\t\t\t\tevent.volume = getValue(eventMap, \"volume\", setup.volume);\n\t\t\t\t\tevent.balance = getValue(eventMap, \"balance\", setup.volume);\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\n\t\tconst animation = new Animation(name, timelines, duration);\n\t\tconst color = getValue(map, \"color\", null);\n\t\tif (color !== null) animation.color.setFromString(color);\n\n\t\tskeletonData.animations.push(animation);\n\t}\n}\n\nclass LinkedMesh {\n\tsource: string; skin: string;\n\tslotIndex: number; sourceIndex: number;\n\tmesh: MeshAttachment;\n\tinheritTimelines: boolean;\n\n\tconstructor (mesh: MeshAttachment, skin: string, slotIndex: number, sourceIndex: number, source: string,\n\t\tinheritTimelines: boolean) {\n\t\tthis.mesh = mesh;\n\t\tthis.skin = skin;\n\t\tthis.slotIndex = slotIndex;\n\t\tthis.sourceIndex = sourceIndex;\n\t\tthis.source = source;\n\t\tthis.inheritTimelines = inheritTimelines;\n\t}\n}\n\ntype CurveType = [number, number, number, number] | \"stepped\";\ntype Timeline1KeysType = { value: number, time?: number, curve?: CurveType };\ntype Timeline2KeysType = Timeline1KeysType & { x?: number, y?: number };\n\nfunction readTimeline1 (timelines: Array<Timeline>, keys: Timeline1KeysType[], timeline: CurveTimeline1, defaultValue: number, scale: number) {\n\tlet keyMap = keys[0];\n\tlet time = keyMap.time ?? 0;\n\tlet value = (keyMap.value ?? defaultValue) * scale;\n\tlet bezier = 0;\n\n\tfor (let frame = 0; ; frame++) {\n\t\ttimeline.setFrame(frame, time, value);\n\t\tconst nextMap = keys[frame + 1];\n\t\tif (!nextMap) {\n\t\t\ttimeline.shrink(bezier);\n\t\t\ttimelines.push(timeline);\n\t\t\treturn;\n\t\t}\n\t\tconst time2 = nextMap.time ?? 0;\n\t\tconst value2 = (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 (timelines: Array<Timeline>, keys: Timeline2KeysType[], timeline: BoneTimeline2, name1: \"x\", name2: \"y\", defaultValue: number, scale: number) {\n\tlet keyMap = keys[0];\n\tlet time = keyMap.time ?? 0;\n\tlet value1 = (keyMap[name1] ?? defaultValue) * scale;\n\tlet value2 = (keyMap[name2] ?? defaultValue) * scale;\n\tlet bezier = 0;\n\tfor (let frame = 0; ; frame++) {\n\t\ttimeline.setFrame(frame, time, value1, value2);\n\t\tconst nextMap = keys[frame + 1];\n\t\tif (!nextMap) {\n\t\t\ttimeline.shrink(bezier);\n\t\t\ttimelines.push(timeline);\n\t\t\treturn;\n\t\t}\n\t\tconst time2 = nextMap.time ?? 0;\n\t\tconst nvalue1 = (nextMap[name1] ?? defaultValue) * scale;\n\t\tconst nvalue2 = (nextMap[name2] ?? defaultValue) * scale;\n\t\tconst 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\ntype DrawOrderKeysType = { offsets?: { slot: string, offset: number }[] };\n\n/** @param folderSlots Slot names are resolved to positions within this array. If null, slot indices are used as positions. */\nfunction readDrawOrder (skeletonData: SkeletonData, keys: DrawOrderKeysType, slotCount: number, folderSlots: number[] | null): number[] | null {\n\tconst changes = keys.offsets;\n\tif (!changes) return null; // Setup draw order.\n\tconst drawOrder = new Array<number>(slotCount).fill(-1);\n\tconst unchanged = new Array<number>(slotCount - changes.length);\n\tlet originalIndex = 0, unchangedIndex = 0;\n\tfor (const offsetMap of changes) {\n\t\tconst slot = skeletonData.findSlot(offsetMap.slot);\n\t\tif (slot == null) throw new Error(`Draw order slot not found: ${offsetMap.slot}`);\n\t\tlet index = 0;\n\t\tif (!folderSlots)\n\t\t\tindex = slot.index;\n\t\telse {\n\t\t\tindex = -1;\n\t\t\tfor (let i = 0; i < slotCount; i++) {\n\t\t\t\tif (folderSlots[i] === slot.index) {\n\t\t\t\t\tindex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (index === -1) throw new Error(`Slot not in folder: ${offsetMap.slot}`);\n\t\t}\n\t\t// Collect unchanged items.\n\t\twhile (originalIndex !== index)\n\t\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t\t// Set changed items.\n\t\tdrawOrder[originalIndex + offsetMap.offset] = originalIndex++;\n\t}\n\t// Collect remaining unchanged items.\n\twhile (originalIndex < slotCount)\n\t\tunchanged[unchangedIndex++] = originalIndex++;\n\t// Fill in unchanged items.\n\tfor (let i = slotCount - 1; i >= 0; i--)\n\t\tif (drawOrder[i] === -1) drawOrder[i] = unchanged[--unchangedIndex];\n\treturn drawOrder;\n}\n\nfunction readCurve (curve: [number, number, number, number] | \"stepped\", 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\tconst i = value << 2;\n\tconst cx1 = curve[i];\n\tconst cy1 = curve[i + 1] * scale;\n\tconst cx2 = curve[i + 2];\n\tconst 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\n// biome-ignore lint/suspicious/noExplicitAny: it is any until we define a schema\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 April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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, MeshAttachment, RegionAttachment } from \"./attachments/index.js\";\nimport type { Skeleton } from \"./Skeleton.js\";\nimport { SkeletonClipping } from \"./SkeletonClipping.js\";\nimport { BlendMode } from \"./SlotData.js\";\nimport type { Color, NumberArrayLike } from \"./Utils.js\";\n\nexport class SkeletonRendererCore {\n\tprivate commandPool = new CommandPool();\n\tprivate worldVertices = new Float32Array(12 * 1024);\n\tprivate quadIndices = new Uint16Array([0, 1, 2, 2, 3, 0]);\n\tprivate clipping = new SkeletonClipping();\n\tprivate renderCommands: RenderCommand[] = [];\n\n\trender (skeleton: Skeleton, pma = false, inColor?: [number, number, number, number], stride = 2): RenderCommand | undefined {\n\t\tthis.commandPool.reset();\n\t\tthis.renderCommands.length = 0;\n\n\t\tconst clipper = this.clipping;\n\n\t\tconst drawOrder = skeleton.drawOrder.appliedPose;\n\t\tfor (let i = 0; i < skeleton.slots.length; i++) {\n\t\t\tconst slot = drawOrder[i];\n\t\t\tconst attachment = slot.appliedPose.attachment;\n\n\t\t\tif (!attachment) {\n\t\t\t\tclipper.clipEnd(slot);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst pose = slot.appliedPose;\n\t\t\tconst slotColor = pose.color;\n\t\t\tconst alpha = slotColor.a;\n\t\t\tif ((alpha === 0 || !slot.bone.active) && !(attachment instanceof ClippingAttachment)) {\n\t\t\t\tclipper.clipEnd(slot);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet vertices: NumberArrayLike;\n\t\t\tlet verticesCount: number;\n\t\t\tlet uvs: NumberArrayLike;\n\t\t\tlet indices: number[] | Uint16Array;\n\t\t\tlet indicesCount: number;\n\t\t\tlet attachmentColor: Color;\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: texture depends on the runtime\n\t\t\tlet texture: any;\n\n\t\t\tif (attachment instanceof RegionAttachment) {\n\t\t\t\tattachmentColor = attachment.color;\n\n\t\t\t\tif (attachmentColor.a === 0) {\n\t\t\t\t\tclipper.clipEnd(slot);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst sequence = attachment.sequence;\n\t\t\t\tconst sequenceIndex = sequence.resolveIndex(pose);\n\t\t\t\tattachment.computeWorldVertices(slot, attachment.getOffsets(pose), this.worldVertices, 0, stride);\n\n\t\t\t\tvertices = this.worldVertices;\n\t\t\t\tverticesCount = 4;\n\t\t\t\tuvs = sequence.getUVs(sequenceIndex);\n\t\t\t\tindices = this.quadIndices;\n\t\t\t\tindicesCount = 6;\n\t\t\t\ttexture = sequence.regions[sequenceIndex]?.texture;\n\n\t\t\t} else if (attachment instanceof MeshAttachment) {\n\t\t\t\tattachmentColor = attachment.color;\n\n\t\t\t\tif (attachmentColor.a === 0) {\n\t\t\t\t\tclipper.clipEnd(slot);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (this.worldVertices.length < attachment.worldVerticesLength)\n\t\t\t\t\tthis.worldVertices = new Float32Array(attachment.worldVerticesLength);\n\n\t\t\t\tattachment.computeWorldVertices(skeleton, slot, 0, attachment.worldVerticesLength, this.worldVertices, 0, stride);\n\t\t\t\tvertices = this.worldVertices;\n\t\t\t\tverticesCount = attachment.worldVerticesLength >> 1;\n\n\t\t\t\tconst sequence = attachment.sequence;\n\t\t\t\tconst sequenceIndex = sequence.resolveIndex(pose);\n\n\t\t\t\tuvs = sequence.getUVs(sequenceIndex);\n\t\t\t\tindices = attachment.triangles;\n\t\t\t\tindicesCount = indices.length;\n\t\t\t\ttexture = sequence.regions[sequenceIndex]?.texture;\n\n\t\t\t} else if (attachment instanceof ClippingAttachment) {\n\t\t\t\tclipper.clipStart(skeleton, slot, attachment);\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst skelColor = skeleton.color;\n\t\t\tlet color: number, darkColor: number;\n\t\t\tif (pma) {\n\t\t\t\tlet a: number;\n\t\t\t\tif (inColor) {\n\t\t\t\t\ta = Math.floor(inColor[3] * skelColor.a * slotColor.a * attachmentColor.a * 255);\n\t\t\t\t\tconst r = Math.floor(a * inColor[0] * skelColor.r * slotColor.r * attachmentColor.r);\n\t\t\t\t\tconst g = Math.floor(a * inColor[1] * skelColor.g * slotColor.g * attachmentColor.g);\n\t\t\t\t\tconst b = Math.floor(a * inColor[2] * skelColor.b * slotColor.b * attachmentColor.b);\n\t\t\t\t\tcolor = (a << 24) | (r << 16) | (g << 8) | b;\n\t\t\t\t} else {\n\t\t\t\t\ta = Math.floor(skelColor.a * slotColor.a * attachmentColor.a * 255);\n\t\t\t\t\tconst r = Math.floor(a * skelColor.r * slotColor.r * attachmentColor.r);\n\t\t\t\t\tconst g = Math.floor(a * skelColor.g * slotColor.g * attachmentColor.g);\n\t\t\t\t\tconst b = Math.floor(a * skelColor.b * slotColor.b * attachmentColor.b);\n\t\t\t\t\tcolor = (a << 24) | (r << 16) | (g << 8) | b;\n\t\t\t\t}\n\n\t\t\t\tdarkColor = 0xff000000;\n\t\t\t\tif (pose.darkColor) {\n\t\t\t\t\tconst { r, g, b } = pose.darkColor;\n\t\t\t\t\tdarkColor = 0xff000000 |\n\t\t\t\t\t\t(Math.floor(r * a) << 16) |\n\t\t\t\t\t\t(Math.floor(g * a) << 8) |\n\t\t\t\t\t\tMath.floor(b * a);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (inColor) {\n\t\t\t\t\tconst a = Math.floor(inColor[3] * skelColor.a * slotColor.a * attachmentColor.a * 255);\n\t\t\t\t\tconst r = Math.floor(inColor[0] * skelColor.r * slotColor.r * attachmentColor.r * 255);\n\t\t\t\t\tconst g = Math.floor(inColor[1] * skelColor.g * slotColor.g * attachmentColor.g * 255);\n\t\t\t\t\tconst b = Math.floor(inColor[2] * skelColor.b * slotColor.b * attachmentColor.b * 255);\n\t\t\t\t\tcolor = (a << 24) | (r << 16) | (g << 8) | b;\n\t\t\t\t} else {\n\t\t\t\t\tconst a = Math.floor(skelColor.a * slotColor.a * attachmentColor.a * 255);\n\t\t\t\t\tconst r = Math.floor(skelColor.r * slotColor.r * attachmentColor.r * 255);\n\t\t\t\t\tconst g = Math.floor(skelColor.g * slotColor.g * attachmentColor.g * 255);\n\t\t\t\t\tconst b = Math.floor(skelColor.b * slotColor.b * attachmentColor.b * 255);\n\t\t\t\t\tcolor = (a << 24) | (r << 16) | (g << 8) | b;\n\t\t\t\t}\n\n\t\t\t\tdarkColor = 0;\n\t\t\t\tif (pose.darkColor) {\n\t\t\t\t\tconst { r, g, b } = pose.darkColor;\n\t\t\t\t\tdarkColor = (Math.floor(r * 255) << 16) | (Math.floor(g * 255) << 8) | Math.floor(b * 255);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (clipper.isClipping()) {\n\t\t\t\tclipper.clipTrianglesUnpacked(vertices, 0, indices, indicesCount, uvs, stride);\n\t\t\t\tvertices = clipper.clippedVerticesTyped;\n\t\t\t\tverticesCount = clipper.clippedVerticesLength / stride;\n\t\t\t\tuvs = clipper.clippedUVsTyped;\n\t\t\t\tindices = clipper.clippedTrianglesTyped;\n\t\t\t\tindicesCount = clipper.clippedTrianglesLength;\n\t\t\t}\n\n\t\t\tconst cmd = this.commandPool.getCommand(verticesCount, indicesCount, stride);\n\t\t\tcmd.blendMode = slot.data.blendMode;\n\t\t\tcmd.texture = texture;\n\n\t\t\tcmd.positions.set(vertices.subarray(0, verticesCount * stride));\n\t\t\tcmd.uvs.set(uvs.subarray(0, verticesCount << 1));\n\n\t\t\tfor (let j = 0; j < verticesCount; j++) {\n\t\t\t\tcmd.colors[j] = color;\n\t\t\t\tcmd.darkColors[j] = darkColor;\n\t\t\t}\n\n\t\t\tif (indices instanceof Uint16Array) {\n\t\t\t\tcmd.indices.set(indices.subarray(0, indicesCount));\n\t\t\t} else {\n\t\t\t\tcmd.indices.set(indices.slice(0, indicesCount));\n\t\t\t}\n\n\t\t\tthis.renderCommands.push(cmd);\n\t\t\tclipper.clipEnd(slot);\n\t\t}\n\n\t\tclipper.clipEnd();\n\t\treturn this.batchCommands(stride);\n\t}\n\n\tprivate batchSubCommands (commands: RenderCommand[], first: number, last: number,\n\t\tnumVertices: number, numIndices: number, stride: number): RenderCommand {\n\n\t\tconst firstCmd = commands[first];\n\t\tconst batched = this.commandPool.getCommand(numVertices, numIndices, stride);\n\n\t\tbatched.blendMode = firstCmd.blendMode;\n\t\tbatched.texture = firstCmd.texture;\n\n\t\tlet positionsOffset = 0;\n\t\tlet uvsOffset = 0;\n\t\tlet colorsOffset = 0;\n\t\tlet indicesOffset = 0;\n\t\tlet vertexOffset = 0;\n\n\t\tfor (let i = first; i <= last; i++) {\n\t\t\tconst cmd = commands[i];\n\n\t\t\tbatched.positions.set(cmd.positions, positionsOffset);\n\t\t\tpositionsOffset += cmd.numVertices * stride;\n\n\t\t\tbatched.uvs.set(cmd.uvs, uvsOffset);\n\t\t\tuvsOffset += cmd.numVertices << 1;\n\n\t\t\tbatched.colors.set(cmd.colors, colorsOffset);\n\t\t\tbatched.darkColors.set(cmd.darkColors, colorsOffset);\n\t\t\tcolorsOffset += cmd.numVertices;\n\n\t\t\t// cannot fast copy - indices need vertex offset adjustment\n\t\t\tfor (let j = 0; j < cmd.numIndices; j++)\n\t\t\t\tbatched.indices[indicesOffset + j] = cmd.indices[j] + vertexOffset;\n\n\t\t\tindicesOffset += cmd.numIndices;\n\t\t\tvertexOffset += cmd.numVertices;\n\t\t}\n\n\t\treturn batched;\n\t}\n\n\tprivate batchCommands (stride: number): RenderCommand | undefined {\n\t\tif (this.renderCommands.length === 0) return undefined;\n\n\t\tlet root: RenderCommand | undefined;\n\t\tlet last: RenderCommand | undefined;\n\n\t\tlet first = this.renderCommands[0];\n\t\tlet startIndex = 0;\n\t\tlet i = 1;\n\t\tlet numVertices = first.numVertices;\n\t\tlet numIndices = first.numIndices;\n\n\t\twhile (i <= this.renderCommands.length) {\n\t\t\tconst cmd = i < this.renderCommands.length ? this.renderCommands[i] : null;\n\n\t\t\tif (cmd && cmd.numVertices === 0 && cmd.numIndices === 0) {\n\t\t\t\ti++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst canBatch = cmd !== null &&\n\t\t\t\tcmd.texture === first.texture &&\n\t\t\t\tcmd.blendMode === first.blendMode &&\n\t\t\t\tcmd.colors[0] === first.colors[0] &&\n\t\t\t\tcmd.darkColors[0] === first.darkColors[0] &&\n\t\t\t\tnumIndices + cmd.numIndices < 0xffff;\n\t\t\tif (canBatch) {\n\t\t\t\tnumVertices += cmd.numVertices;\n\t\t\t\tnumIndices += cmd.numIndices;\n\t\t\t} else {\n\t\t\t\tconst batched = this.batchSubCommands(this.renderCommands, startIndex, i - 1,\n\t\t\t\t\tnumVertices, numIndices, stride);\n\n\t\t\t\tif (!last) {\n\t\t\t\t\troot = last = batched;\n\t\t\t\t} else {\n\t\t\t\t\tlast.next = batched;\n\t\t\t\t\tlast = batched;\n\t\t\t\t}\n\n\t\t\t\tif (i === this.renderCommands.length) break;\n\n\t\t\t\tfirst = this.renderCommands[i];\n\t\t\t\tstartIndex = i;\n\t\t\t\tnumVertices = first.numVertices;\n\t\t\t\tnumIndices = first.numIndices;\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\n\t\treturn root;\n\t}\n}\n\n// values with under score is the original sized array, bigger than necessary\n// values without under score is a view of the orignal array, sized as needed\ninterface RenderCommand {\n\tpositions: Float32Array;\n\tuvs: Float32Array;\n\tcolors: Uint32Array;\n\tdarkColors: Uint32Array;\n\tindices: Uint16Array;\n\t_positions: Float32Array;\n\t_uvs: Float32Array;\n\t_colors: Uint32Array;\n\t_darkColors: Uint32Array;\n\t_indices: Uint16Array;\n\tnumVertices: number;\n\tnumIndices: number;\n\tblendMode: BlendMode;\n\t// biome-ignore lint/suspicious/noExplicitAny: texture depends on the runtime\n\ttexture: any;\n\tnext?: RenderCommand;\n}\n\nclass CommandPool {\n\tprivate pool: RenderCommand[] = [];\n\tprivate inUse: RenderCommand[] = [];\n\n\tgetCommand (numVertices: number, numIndices: number, stride: number): RenderCommand {\n\t\tlet cmd: RenderCommand | undefined;\n\t\tfor (const c of this.pool) {\n\t\t\tif (c._positions.length >= numVertices * stride && c._indices.length >= numIndices) {\n\t\t\t\tcmd = c;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tif (!cmd) {\n\t\t\tconst _positions = new Float32Array(numVertices * stride);\n\t\t\tconst _uvs = new Float32Array(numVertices << 1);\n\t\t\tconst _colors = new Uint32Array(numVertices);\n\t\t\tconst _darkColors = new Uint32Array(numVertices);\n\t\t\tconst _indices = new Uint16Array(numIndices);\n\t\t\tcmd = {\n\t\t\t\tpositions: _positions,\n\t\t\t\tuvs: _uvs,\n\t\t\t\tcolors: _colors,\n\t\t\t\tdarkColors: _darkColors,\n\t\t\t\tindices: _indices,\n\t\t\t\t_positions,\n\t\t\t\t_uvs,\n\t\t\t\t_colors,\n\t\t\t\t_darkColors,\n\t\t\t\t_indices,\n\t\t\t\tnumVertices,\n\t\t\t\tnumIndices,\n\t\t\t\tblendMode: BlendMode.Normal,\n\t\t\t\ttexture: null\n\t\t\t};\n\t\t} else {\n\t\t\tthis.pool.splice(this.pool.indexOf(cmd), 1);\n\t\t\tcmd.next = undefined;\n\t\t\tcmd.numVertices = numVertices;\n\t\t\tcmd.numIndices = numIndices;\n\n\t\t\tcmd.positions = cmd._positions.subarray(0, numVertices * stride);\n\t\t\tcmd.uvs = cmd._uvs.subarray(0, numVertices << 1);\n\t\t\tcmd.colors = cmd._colors.subarray(0, numVertices);\n\t\t\tcmd.darkColors = cmd._darkColors.subarray(0, numVertices);\n\t\t\tcmd.indices = cmd._indices.subarray(0, numIndices);\n\t\t}\n\n\t\tthis.inUse.push(cmd);\n\t\treturn cmd;\n\t}\n\n\treset (): void {\n\t\tthis.pool.push(...this.inUse);\n\t\tthis.inUse.length = 0;\n\t}\n}", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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, type TextureFilter, type TextureWrap } from \"@esotericsoftware/spine-core\";\n\nexport class CanvasTexture extends Texture {\n\tconstructor (image: HTMLImageElement | ImageBitmap) {\n\t\tsuper(image);\n\t}\n\n\tsetFilters (minFilter: TextureFilter, magFilter: TextureFilter) { }\n\tsetWraps (uWrap: TextureWrap, vWrap: TextureWrap) { }\n\tdispose () { }\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 { CanvasTexture } from \"./CanvasTexture.js\";\n\nexport class AssetManager extends AssetManagerBase {\n\tconstructor (pathPrefix: string = \"\", downloader: Downloader = new Downloader()) {\n\t\tsuper((image: HTMLImageElement | ImageBitmap) => { return new CanvasTexture(image); }, pathPrefix, downloader);\n\t}\n}\n", "/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated April 5, 2025. Replaces all prior versions.\n *\n * Copyright (c) 2013-2025, 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 { type BlendMode, Color, MeshAttachment, type NumberArrayLike, RegionAttachment, type Skeleton, type Slot, type TextureRegion, Utils } from \"@esotericsoftware/spine-core\";\nimport type { CanvasTexture } from \"./CanvasTexture.js\";\n\nconst worldVertices = Utils.newFloatArray(8);\n\nexport class SkeletonRenderer {\n\tstatic QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];\n\tstatic VERTEX_SIZE = 2 + 2 + 4;\n\n\tprivate ctx: CanvasRenderingContext2D;\n\n\tpublic triangleRendering = false;\n\tpublic debugRendering = false;\n\tprivate vertices = Utils.newFloatArray(8 * 1024);\n\tprivate tempColor = new Color();\n\n\tconstructor (context: CanvasRenderingContext2D) {\n\t\tthis.ctx = context;\n\t}\n\n\tdraw (skeleton: Skeleton) {\n\t\tif (this.triangleRendering) this.drawTriangles(skeleton);\n\t\telse this.drawImages(skeleton);\n\t}\n\n\tprivate drawImages (skeleton: Skeleton) {\n\t\tconst ctx = this.ctx;\n\t\tconst color = this.tempColor;\n\t\tconst skeletonColor = skeleton.color;\n\t\tconst drawOrder = skeleton.drawOrder.appliedPose;\n\n\t\tif (this.debugRendering) ctx.strokeStyle = \"green\";\n\n\t\tfor (let i = 0, n = drawOrder.length; i < n; i++) {\n\t\t\tconst slot = drawOrder[i];\n\t\t\tconst bone = slot.bone;\n\t\t\tif (!bone.active) continue;\n\n\t\t\tconst pose = slot.appliedPose;\n\t\t\tconst attachment = pose.attachment;\n\t\t\tif (!(attachment instanceof RegionAttachment)) continue;\n\n\t\t\tconst sequence = attachment.sequence;\n\t\t\tconst sequenceIndex = sequence.resolveIndex(pose);\n\t\t\tattachment.computeWorldVertices(slot, attachment.getOffsets(pose), worldVertices, 0, 2);\n\n\t\t\tconst region = sequence.regions[sequenceIndex] as TextureRegion;\n\n\t\t\tconst image: HTMLImageElement = region.texture.getImage() as HTMLImageElement;\n\n\t\t\tconst slotColor = pose.color;\n\t\t\tconst regionColor = attachment.color;\n\t\t\tcolor.set(skeletonColor.r * slotColor.r * regionColor.r,\n\t\t\t\tskeletonColor.g * slotColor.g * regionColor.g,\n\t\t\t\tskeletonColor.b * slotColor.b * regionColor.b,\n\t\t\t\tskeletonColor.a * slotColor.a * regionColor.a);\n\n\t\t\tctx.save();\n\t\t\tconst boneApplied = bone.appliedPose;\n\t\t\tctx.transform(boneApplied.a, boneApplied.c, boneApplied.b, boneApplied.d, boneApplied.worldX, boneApplied.worldY);\n\t\t\tconst offsets = attachment.getOffsets(pose);\n\t\t\tctx.translate(offsets[0], offsets[1]);\n\t\t\tctx.rotate(attachment.rotation * Math.PI / 180);\n\n\t\t\tconst atlasScale = attachment.width / region.originalWidth;\n\t\t\tctx.scale(atlasScale * attachment.scaleX, atlasScale * attachment.scaleY);\n\n\t\t\tlet w = region.width, h = region.height;\n\t\t\tctx.translate(w / 2, h / 2);\n\t\t\tif (region.degrees === 90) {\n\t\t\t\tconst t = w;\n\t\t\t\tw = h;\n\t\t\t\th = t;\n\t\t\t\tctx.rotate(-Math.PI / 2);\n\t\t\t}\n\t\t\tctx.scale(1, -1);\n\t\t\tctx.translate(-w / 2, -h / 2);\n\n\t\t\tctx.globalAlpha = color.a;\n\t\t\tctx.drawImage(image, image.width * region.u, image.height * region.v, w, h, 0, 0, w, h);\n\t\t\tif (this.debugRendering) ctx.strokeRect(0, 0, w, h);\n\t\t\tctx.restore();\n\t\t}\n\t}\n\n\tprivate drawTriangles (skeleton: Skeleton) {\n\t\tconst ctx = this.ctx;\n\t\tconst color = this.tempColor;\n\t\tconst skeletonColor = skeleton.color;\n\t\tconst drawOrder = skeleton.drawOrder.appliedPose;\n\n\t\tlet blendMode: BlendMode | null = null;\n\t\tlet vertices: ArrayLike<number> = this.vertices;\n\t\tlet triangles: Array<number> | null = null;\n\n\t\tfor (let i = 0, n = drawOrder.length; i < n; i++) {\n\t\t\tconst slot = drawOrder[i];\n\t\t\tconst pose = slot.appliedPose;\n\t\t\tconst attachment = pose.attachment;\n\n\t\t\tlet texture: HTMLImageElement;\n\t\t\tif (attachment instanceof RegionAttachment) {\n\t\t\t\tconst sequence = attachment.sequence;\n\t\t\t\tconst sequenceIndex = sequence.resolveIndex(pose);\n\n\t\t\t\tconst uvs = sequence.getUVs(sequenceIndex);\n\t\t\t\tconst offsets = attachment.getOffsets(pose);\n\n\t\t\t\tvertices = this.computeRegionVertices(slot, attachment, offsets, uvs, false);\n\t\t\t\ttriangles = SkeletonRenderer.QUAD_TRIANGLES;\n\n\t\t\t\ttexture = (sequence.regions[sequenceIndex]?.texture as CanvasTexture).getImage();\n\t\t\t} else if (attachment instanceof MeshAttachment) {\n\t\t\t\tconst sequence = attachment.sequence;\n\t\t\t\tconst sequenceIndex = sequence.resolveIndex(pose);\n\n\t\t\t\tconst uvs = sequence.getUVs(sequenceIndex);\n\t\t\t\tvertices = this.computeMeshVertices(slot, attachment, uvs, false);\n\t\t\t\ttriangles = attachment.triangles;\n\n\t\t\t\ttexture = (sequence.regions[sequenceIndex]?.texture as CanvasTexture).getImage();\n\t\t\t} else\n\t\t\t\tcontinue;\n\n\t\t\tif (texture) {\n\t\t\t\tif (slot.data.blendMode !== blendMode) blendMode = slot.data.blendMode;\n\n\t\t\t\tconst slotColor = pose.color;\n\t\t\t\tconst attachmentColor = attachment.color;\n\t\t\t\tcolor.set(skeletonColor.r * slotColor.r * attachmentColor.r,\n\t\t\t\t\tskeletonColor.g * slotColor.g * attachmentColor.g,\n\t\t\t\t\tskeletonColor.b * slotColor.b * attachmentColor.b,\n\t\t\t\t\tskeletonColor.a * slotColor.a * attachmentColor.a);\n\n\t\t\t\tctx.globalAlpha = color.a;\n\n\t\t\t\tfor (let j = 0; j < triangles.length; j += 3) {\n\t\t\t\t\tconst t1 = triangles[j] * 8, t2 = triangles[j + 1] * 8, t3 = triangles[j + 2] * 8;\n\n\t\t\t\t\tconst x0 = vertices[t1], y0 = vertices[t1 + 1], u0 = vertices[t1 + 6], v0 = vertices[t1 + 7];\n\t\t\t\t\tconst x1 = vertices[t2], y1 = vertices[t2 + 1], u1 = vertices[t2 + 6], v1 = vertices[t2 + 7];\n\t\t\t\t\tconst x2 = vertices[t3], y2 = vertices[t3 + 1], u2 = vertices[t3 + 6], v2 = vertices[t3 + 7];\n\n\t\t\t\t\tthis.drawTriangle(texture, x0, y0, u0, v0, x1, y1, u1, v1, x2, y2, u2, v2);\n\n\t\t\t\t\tif (this.debugRendering) {\n\t\t\t\t\t\tctx.strokeStyle = \"green\";\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tctx.moveTo(x0, y0);\n\t\t\t\t\t\tctx.lineTo(x1, y1);\n\t\t\t\t\t\tctx.lineTo(x2, y2);\n\t\t\t\t\t\tctx.lineTo(x0, y0);\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.ctx.globalAlpha = 1;\n\t}\n\n\t// Adapted from http://extremelysatisfactorytotalitarianism.com/blog/?p=2120\n\t// Apache 2 licensed\n\tprivate drawTriangle (img: HTMLImageElement, x0: number, y0: number, u0: number, v0: number,\n\t\tx1: number, y1: number, u1: number, v1: number,\n\t\tx2: number, y2: number, u2: number, v2: number) {\n\t\tconst ctx = this.ctx;\n\n\t\tconst width = img.width - 1;\n\t\tconst height = img.height - 1;\n\t\tu0 *= width;\n\t\tv0 *= height;\n\t\tu1 *= width;\n\t\tv1 *= height;\n\t\tu2 *= width;\n\t\tv2 *= height;\n\n\t\tctx.beginPath();\n\t\tctx.moveTo(x0, y0);\n\t\tctx.lineTo(x1, y1);\n\t\tctx.lineTo(x2, y2);\n\t\tctx.closePath();\n\n\t\tx1 -= x0;\n\t\ty1 -= y0;\n\t\tx2 -= x0;\n\t\ty2 -= y0;\n\n\t\tu1 -= u0;\n\t\tv1 -= v0;\n\t\tu2 -= u0;\n\t\tv2 -= v0;\n\n\t\tlet det = u1 * v2 - u2 * v1;\n\t\tif (det === 0) return;\n\t\tdet = 1 / det;\n\n\t\t// linear transformation\n\t\tconst a = (v2 * x1 - v1 * x2) * det;\n\t\tconst b = (v2 * y1 - v1 * y2) * det;\n\t\tconst c = (u1 * x2 - u2 * x1) * det;\n\t\tconst d = (u1 * y2 - u2 * y1) * det;\n\n\t\t// translation\n\t\tconst e = x0 - a * u0 - c * v0;\n\t\tconst f = y0 - b * u0 - d * v0;\n\n\t\tctx.save();\n\t\tctx.transform(a, b, c, d, e, f);\n\t\tctx.clip();\n\t\tctx.drawImage(img, 0, 0);\n\t\tctx.restore();\n\t}\n\n\tprivate computeRegionVertices (slot: Slot, region: RegionAttachment, offsets: NumberArrayLike, uvs: NumberArrayLike, pma: boolean) {\n\t\tconst skeletonColor = slot.skeleton.color;\n\t\tconst slotColor = slot.appliedPose.color;\n\t\tconst regionColor = region.color;\n\t\tconst alpha = skeletonColor.a * slotColor.a * regionColor.a;\n\t\tconst multiplier = pma ? alpha : 1;\n\t\tconst color = this.tempColor;\n\t\tcolor.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier,\n\t\t\tskeletonColor.g * slotColor.g * regionColor.g * multiplier,\n\t\t\tskeletonColor.b * slotColor.b * regionColor.b * multiplier,\n\t\t\talpha);\n\n\t\tregion.computeWorldVertices(slot, offsets, this.vertices, 0, SkeletonRenderer.VERTEX_SIZE);\n\n\t\tconst vertices = this.vertices;\n\n\t\tvertices[RegionAttachment.C1R] = color.r;\n\t\tvertices[RegionAttachment.C1G] = color.g;\n\t\tvertices[RegionAttachment.C1B] = color.b;\n\t\tvertices[RegionAttachment.C1A] = color.a;\n\t\tvertices[RegionAttachment.U1] = uvs[0];\n\t\tvertices[RegionAttachment.V1] = uvs[1];\n\n\t\tvertices[RegionAttachment.C2R] = color.r;\n\t\tvertices[RegionAttachment.C2G] = color.g;\n\t\tvertices[RegionAttachment.C2B] = color.b;\n\t\tvertices[RegionAttachment.C2A] = color.a;\n\t\tvertices[RegionAttachment.U2] = uvs[2];\n\t\tvertices[RegionAttachment.V2] = uvs[3];\n\n\t\tvertices[RegionAttachment.C3R] = color.r;\n\t\tvertices[RegionAttachment.C3G] = color.g;\n\t\tvertices[RegionAttachment.C3B] = color.b;\n\t\tvertices[RegionAttachment.C3A] = color.a;\n\t\tvertices[RegionAttachment.U3] = uvs[4];\n\t\tvertices[RegionAttachment.V3] = uvs[5];\n\n\t\tvertices[RegionAttachment.C4R] = color.r;\n\t\tvertices[RegionAttachment.C4G] = color.g;\n\t\tvertices[RegionAttachment.C4B] = color.b;\n\t\tvertices[RegionAttachment.C4A] = color.a;\n\t\tvertices[RegionAttachment.U4] = uvs[6];\n\t\tvertices[RegionAttachment.V4] = uvs[7];\n\n\t\treturn vertices;\n\t}\n\n\tprivate computeMeshVertices (slot: Slot, mesh: MeshAttachment, uvs: NumberArrayLike, pma: boolean) {\n\t\tconst skeleton = slot.skeleton;\n\t\tconst skeletonColor = skeleton.color;\n\t\tconst slotColor = slot.appliedPose.color;\n\t\tconst regionColor = mesh.color;\n\t\tconst alpha = skeletonColor.a * slotColor.a * regionColor.a;\n\t\tconst multiplier = pma ? alpha : 1;\n\t\tconst color = this.tempColor;\n\t\tcolor.set(skeletonColor.r * slotColor.r * regionColor.r * multiplier,\n\t\t\tskeletonColor.g * slotColor.g * regionColor.g * multiplier,\n\t\t\tskeletonColor.b * slotColor.b * regionColor.b * multiplier,\n\t\t\talpha);\n\n\t\tconst vertexCount = mesh.worldVerticesLength / 2;\n\t\tlet vertices = this.vertices;\n\t\tif (vertices.length < mesh.worldVerticesLength) this.vertices = vertices = Utils.newFloatArray(mesh.worldVerticesLength);\n\t\tmesh.computeWorldVertices(skeleton, slot, 0, mesh.worldVerticesLength, vertices, 0, SkeletonRenderer.VERTEX_SIZE);\n\n\n\t\tfor (let i = 0, u = 0, v = 2; i < vertexCount; i++) {\n\t\t\tvertices[v++] = color.r;\n\t\t\tvertices[v++] = color.g;\n\t\t\tvertices[v++] = color.b;\n\t\t\tvertices[v++] = color.a;\n\t\t\tvertices[v++] = uvs[u++];\n\t\t\tvertices[v++] = uvs[u++];\n\t\t\tv += 2;\n\t\t}\n\n\t\treturn vertices;\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["TextureFilter", "TextureWrap", "page", "worldVertices", "v", "worldVertices", "SequenceMode", "Property", "x", "y", "constraint", "ii", "EventType", "Inherit", "ScaleYMode", "PositionMode", "SpacingMode", "RotateMode", "pathLength", "multiplier", "Physics", "n", "bone", "BlendMode", "iv", "cross", "name", "animationName", "LinkedMesh", "color", "readTimeline1", "color2", "readTimeline2", "readDrawOrder"]
|
|
7
7
|
}
|