@galacean/engine-spine 0.0.0-experimental-6d3110b4d9-20240531
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/LICENSE +21 -0
- package/README.md +79 -0
- package/dist/browser.js +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Animation.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Animation.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/AnimationState.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/AnimationState.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/AnimationStateData.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/AnimationStateData.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/AssetManagerBase.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/AssetManagerBase.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/AtlasAttachmentLoader.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/AtlasAttachmentLoader.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Bone.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Bone.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/BoneData.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/BoneData.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/ConstraintData.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/ConstraintData.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Event.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Event.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/EventData.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/EventData.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/IkConstraint.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/IkConstraint.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/IkConstraintData.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/IkConstraintData.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/PathConstraint.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/PathConstraint.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/PathConstraintData.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/PathConstraintData.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/PhysicsConstraint.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/PhysicsConstraint.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/PhysicsConstraintData.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/PhysicsConstraintData.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Skeleton.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Skeleton.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/SkeletonBinary.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/SkeletonBinary.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/SkeletonBounds.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/SkeletonBounds.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/SkeletonClipping.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/SkeletonClipping.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/SkeletonData.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/SkeletonData.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/SkeletonJson.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/SkeletonJson.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Skin.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Skin.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Slot.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Slot.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/SlotData.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/SlotData.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Texture.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Texture.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/TextureAtlas.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/TextureAtlas.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/TransformConstraint.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/TransformConstraint.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/TransformConstraintData.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/TransformConstraintData.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Triangulator.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Triangulator.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Utils.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/Utils.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/Attachment.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/Attachment.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/BoundingBoxAttachment.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/BoundingBoxAttachment.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/ClippingAttachment.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/ClippingAttachment.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/MeshAttachment.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/MeshAttachment.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/PathAttachment.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/PathAttachment.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/PointAttachment.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/PointAttachment.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/RegionAttachment.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/RegionAttachment.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/Sequence.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/attachments/Sequence.js.map +1 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/polyfills.js +2 -0
- package/dist/esm/node_modules/@esotericsoftware/spine-core/dist/polyfills.js.map +1 -0
- package/dist/esm/node_modules/tslib/tslib.es6.js +2 -0
- package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
- package/dist/esm/src/SpineAnimation.js +2 -0
- package/dist/esm/src/SpineAnimation.js.map +1 -0
- package/dist/esm/src/SpineMaterial.js +2 -0
- package/dist/esm/src/SpineMaterial.js.map +1 -0
- package/dist/esm/src/core/SpineGenerator.js +2 -0
- package/dist/esm/src/core/SpineGenerator.js.map +1 -0
- package/dist/esm/src/core/SpinePrimitive.js +2 -0
- package/dist/esm/src/core/SpinePrimitive.js.map +1 -0
- package/dist/esm/src/index.js +2 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/loader/EditorSkeletonDataLoader.js +2 -0
- package/dist/esm/src/loader/EditorSkeletonDataLoader.js.map +1 -0
- package/dist/esm/src/loader/EditorSpineAtlasLoader.js +2 -0
- package/dist/esm/src/loader/EditorSpineAtlasLoader.js.map +1 -0
- package/dist/esm/src/loader/LoaderUtils.js +2 -0
- package/dist/esm/src/loader/LoaderUtils.js.map +1 -0
- package/dist/esm/src/loader/SpineLoader.js +2 -0
- package/dist/esm/src/loader/SpineLoader.js.map +1 -0
- package/dist/main.js +2 -0
- package/dist/main.js.map +1 -0
- package/dist/module.js +2 -0
- package/dist/module.js.map +1 -0
- package/package.json +67 -0
- package/types/SpineAnimation.d.ts +64 -0
- package/types/SpineMaterial.d.ts +6 -0
- package/types/core/MeshGenerator.d.ts +43 -0
- package/types/core/SpineGenerator.d.ts +43 -0
- package/types/core/SpineMesh.d.ts +11 -0
- package/types/core/SpinePrimitive.d.ts +23 -0
- package/types/index.d.ts +7 -0
- package/types/loader/BufferReader.d.ts +9 -0
- package/types/loader/EditorSkeletonDataLoader.d.ts +6 -0
- package/types/loader/EditorSpineAtlasLoader.d.ts +6 -0
- package/types/loader/LoaderUtils.d.ts +16 -0
- package/types/loader/SpineLoader.d.ts +21 -0
- package/types/types.d.ts +4 -0
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sources":["../node_modules/@esotericsoftware/spine-core/dist/attachments/Sequence.js","../node_modules/tslib/tslib.es6.js","../node_modules/@esotericsoftware/spine-core/dist/Utils.js","../node_modules/@esotericsoftware/spine-core/dist/attachments/Attachment.js","../node_modules/@esotericsoftware/spine-core/dist/Animation.js","../node_modules/@esotericsoftware/spine-core/dist/AnimationState.js","../node_modules/@esotericsoftware/spine-core/dist/AnimationStateData.js","../node_modules/@esotericsoftware/spine-core/dist/attachments/BoundingBoxAttachment.js","../node_modules/@esotericsoftware/spine-core/dist/attachments/ClippingAttachment.js","../node_modules/@esotericsoftware/spine-core/dist/Texture.js","../node_modules/@esotericsoftware/spine-core/dist/BoneData.js","../node_modules/@esotericsoftware/spine-core/dist/PathConstraintData.js","../node_modules/@esotericsoftware/spine-core/dist/Skeleton.js","../node_modules/@esotericsoftware/spine-core/dist/SlotData.js","../node_modules/@esotericsoftware/spine-core/dist/SkeletonBinary.js","../node_modules/@esotericsoftware/spine-core/dist/TextureAtlas.js","../node_modules/@esotericsoftware/spine-core/dist/attachments/MeshAttachment.js","../node_modules/@esotericsoftware/spine-core/dist/attachments/PathAttachment.js","../node_modules/@esotericsoftware/spine-core/dist/attachments/PointAttachment.js","../node_modules/@esotericsoftware/spine-core/dist/attachments/RegionAttachment.js","../node_modules/@esotericsoftware/spine-core/dist/AtlasAttachmentLoader.js","../node_modules/@esotericsoftware/spine-core/dist/Bone.js","../node_modules/@esotericsoftware/spine-core/dist/ConstraintData.js","../node_modules/@esotericsoftware/spine-core/dist/AssetManagerBase.js","../node_modules/@esotericsoftware/spine-core/dist/Event.js","../node_modules/@esotericsoftware/spine-core/dist/EventData.js","../node_modules/@esotericsoftware/spine-core/dist/IkConstraint.js","../node_modules/@esotericsoftware/spine-core/dist/IkConstraintData.js","../node_modules/@esotericsoftware/spine-core/dist/PathConstraint.js","../node_modules/@esotericsoftware/spine-core/dist/PhysicsConstraint.js","../node_modules/@esotericsoftware/spine-core/dist/Slot.js","../node_modules/@esotericsoftware/spine-core/dist/TransformConstraint.js","../node_modules/@esotericsoftware/spine-core/dist/PhysicsConstraintData.js","../node_modules/@esotericsoftware/spine-core/dist/SkeletonData.js","../node_modules/@esotericsoftware/spine-core/dist/Skin.js","../node_modules/@esotericsoftware/spine-core/dist/TransformConstraintData.js","../node_modules/@esotericsoftware/spine-core/dist/Triangulator.js","../node_modules/@esotericsoftware/spine-core/dist/SkeletonClipping.js","../node_modules/@esotericsoftware/spine-core/dist/SkeletonJson.js","../node_modules/@esotericsoftware/spine-core/dist/polyfills.js","../src/loader/LoaderUtils.ts","../src/loader/SpineLoader.ts","../src/loader/BufferReader.ts","../src/loader/EditorSkeletonDataLoader.ts","../src/loader/EditorSpineAtlasLoader.ts","../src/core/SpinePrimitive.ts","../src/core/SpineGenerator.ts","../src/SpineMaterial.ts","../src/SpineAnimation.ts","../src/index.ts","../node_modules/@esotericsoftware/spine-core/dist/SkeletonBounds.js"],"sourcesContent":["/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Utils } from \"../Utils.js\";\nexport class Sequence {\n static _nextID = 0;\n id = Sequence.nextID();\n regions;\n start = 0;\n digits = 0;\n /** The index of the region to show for the setup pose. */\n setupIndex = 0;\n constructor(count) {\n this.regions = new Array(count);\n }\n copy() {\n let copy = new Sequence(this.regions.length);\n Utils.arrayCopy(this.regions, 0, copy.regions, 0, this.regions.length);\n copy.start = this.start;\n copy.digits = this.digits;\n copy.setupIndex = this.setupIndex;\n return copy;\n }\n apply(slot, attachment) {\n let index = slot.sequenceIndex;\n if (index == -1)\n index = this.setupIndex;\n if (index >= this.regions.length)\n index = this.regions.length - 1;\n let region = this.regions[index];\n if (attachment.region != region) {\n attachment.region = region;\n attachment.updateRegion();\n }\n }\n getPath(basePath, index) {\n let result = basePath;\n let frame = (this.start + index).toString();\n for (let i = this.digits - frame.length; i > 0; i--)\n result += \"0\";\n result += frame;\n return result;\n }\n static nextID() {\n return Sequence._nextID++;\n }\n}\nexport var SequenceMode;\n(function (SequenceMode) {\n SequenceMode[SequenceMode[\"hold\"] = 0] = \"hold\";\n SequenceMode[SequenceMode[\"once\"] = 1] = \"once\";\n SequenceMode[SequenceMode[\"loop\"] = 2] = \"loop\";\n SequenceMode[SequenceMode[\"pingpong\"] = 3] = \"pingpong\";\n SequenceMode[SequenceMode[\"onceReverse\"] = 4] = \"onceReverse\";\n SequenceMode[SequenceMode[\"loopReverse\"] = 5] = \"loopReverse\";\n SequenceMode[SequenceMode[\"pingpongReverse\"] = 6] = \"pingpongReverse\";\n})(SequenceMode || (SequenceMode = {}));\nexport const SequenceModeValues = [\n SequenceMode.hold,\n SequenceMode.once,\n SequenceMode.loop,\n SequenceMode.pingpong,\n SequenceMode.onceReverse,\n SequenceMode.loopReverse,\n SequenceMode.pingpongReverse\n];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXR0YWNobWVudHMvU2VxdWVuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBSy9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHcEMsTUFBTSxPQUFPLFFBQVE7SUFDWixNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUUzQixFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sQ0FBa0I7SUFDekIsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNWLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDWCwwREFBMEQ7SUFDMUQsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUVmLFlBQWEsS0FBYTtRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksS0FBSyxDQUFnQixLQUFLLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBSTtRQUNILElBQUksSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0MsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVELEtBQUssQ0FBRSxJQUFVLEVBQUUsVUFBNEI7UUFDOUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUMvQixJQUFJLEtBQUssSUFBSSxDQUFDLENBQUM7WUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2xFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLE1BQU0sRUFBRTtZQUNoQyxVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUMzQixVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDMUI7SUFDRixDQUFDO0lBRUQsT0FBTyxDQUFFLFFBQWdCLEVBQUUsS0FBYTtRQUN2QyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUM7UUFDdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2xELE1BQU0sSUFBSSxHQUFHLENBQUM7UUFDZixNQUFNLElBQUksS0FBSyxDQUFDO1FBQ2hCLE9BQU8sTUFBTSxDQUFDO0lBQ2YsQ0FBQztJQUVPLE1BQU0sQ0FBQyxNQUFNO1FBQ3BCLE9BQU8sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUM7O0FBR0YsTUFBTSxDQUFOLElBQVksWUFRWDtBQVJELFdBQVksWUFBWTtJQUN2QiwrQ0FBUSxDQUFBO0lBQ1IsK0NBQVEsQ0FBQTtJQUNSLCtDQUFRLENBQUE7SUFDUix1REFBWSxDQUFBO0lBQ1osNkRBQWUsQ0FBQTtJQUNmLDZEQUFlLENBQUE7SUFDZixxRUFBbUIsQ0FBQTtBQUNwQixDQUFDLEVBUlcsWUFBWSxLQUFaLFlBQVksUUFRdkI7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUNqQyxZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsSUFBSTtJQUNqQixZQUFZLENBQUMsUUFBUTtJQUNyQixZQUFZLENBQUMsV0FBVztJQUN4QixZQUFZLENBQUMsV0FBVztJQUN4QixZQUFZLENBQUMsZUFBZTtDQUM1QixDQUFDIn0=","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n};\r\n","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nexport class IntSet {\n array = new Array();\n add(value) {\n let contains = this.contains(value);\n this.array[value | 0] = value | 0;\n return !contains;\n }\n contains(value) {\n return this.array[value | 0] != undefined;\n }\n remove(value) {\n this.array[value | 0] = undefined;\n }\n clear() {\n this.array.length = 0;\n }\n}\nexport class StringSet {\n entries = {};\n size = 0;\n add(value) {\n let contains = this.entries[value];\n this.entries[value] = true;\n if (!contains) {\n this.size++;\n return true;\n }\n return false;\n }\n addAll(values) {\n let oldSize = this.size;\n for (var i = 0, n = values.length; i < n; i++)\n this.add(values[i]);\n return oldSize != this.size;\n }\n contains(value) {\n return this.entries[value];\n }\n clear() {\n this.entries = {};\n this.size = 0;\n }\n}\nexport class Color {\n r;\n g;\n b;\n a;\n static WHITE = new Color(1, 1, 1, 1);\n static RED = new Color(1, 0, 0, 1);\n static GREEN = new Color(0, 1, 0, 1);\n static BLUE = new Color(0, 0, 1, 1);\n static MAGENTA = new Color(1, 0, 1, 1);\n constructor(r = 0, g = 0, b = 0, a = 0) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n set(r, g, b, a) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n return this.clamp();\n }\n setFromColor(c) {\n this.r = c.r;\n this.g = c.g;\n this.b = c.b;\n this.a = c.a;\n return this;\n }\n setFromString(hex) {\n hex = hex.charAt(0) == '#' ? hex.substr(1) : hex;\n this.r = parseInt(hex.substr(0, 2), 16) / 255;\n this.g = parseInt(hex.substr(2, 2), 16) / 255;\n this.b = parseInt(hex.substr(4, 2), 16) / 255;\n this.a = hex.length != 8 ? 1 : parseInt(hex.substr(6, 2), 16) / 255;\n return this;\n }\n add(r, g, b, a) {\n this.r += r;\n this.g += g;\n this.b += b;\n this.a += a;\n return this.clamp();\n }\n clamp() {\n if (this.r < 0)\n this.r = 0;\n else if (this.r > 1)\n this.r = 1;\n if (this.g < 0)\n this.g = 0;\n else if (this.g > 1)\n this.g = 1;\n if (this.b < 0)\n this.b = 0;\n else if (this.b > 1)\n this.b = 1;\n if (this.a < 0)\n this.a = 0;\n else if (this.a > 1)\n this.a = 1;\n return this;\n }\n static rgba8888ToColor(color, value) {\n color.r = ((value & 0xff000000) >>> 24) / 255;\n color.g = ((value & 0x00ff0000) >>> 16) / 255;\n color.b = ((value & 0x0000ff00) >>> 8) / 255;\n color.a = ((value & 0x000000ff)) / 255;\n }\n static rgb888ToColor(color, value) {\n color.r = ((value & 0x00ff0000) >>> 16) / 255;\n color.g = ((value & 0x0000ff00) >>> 8) / 255;\n color.b = ((value & 0x000000ff)) / 255;\n }\n toRgb888() {\n const hex = (x) => (\"0\" + (x * 255).toString(16)).slice(-2);\n return Number(\"0x\" + hex(this.r) + hex(this.g) + hex(this.b));\n }\n static fromString(hex) {\n return new Color().setFromString(hex);\n }\n}\nexport class MathUtils {\n static PI = 3.1415927;\n static PI2 = MathUtils.PI * 2;\n static invPI2 = 1 / MathUtils.PI2;\n static radiansToDegrees = 180 / MathUtils.PI;\n static radDeg = MathUtils.radiansToDegrees;\n static degreesToRadians = MathUtils.PI / 180;\n static degRad = MathUtils.degreesToRadians;\n static clamp(value, min, max) {\n if (value < min)\n return min;\n if (value > max)\n return max;\n return value;\n }\n static cosDeg(degrees) {\n return Math.cos(degrees * MathUtils.degRad);\n }\n static sinDeg(degrees) {\n return Math.sin(degrees * MathUtils.degRad);\n }\n static atan2Deg(y, x) {\n return Math.atan2(y, x) * MathUtils.degRad;\n }\n static signum(value) {\n return value > 0 ? 1 : value < 0 ? -1 : 0;\n }\n static toInt(x) {\n return x > 0 ? Math.floor(x) : Math.ceil(x);\n }\n static cbrt(x) {\n let y = Math.pow(Math.abs(x), 1 / 3);\n return x < 0 ? -y : y;\n }\n static randomTriangular(min, max) {\n return MathUtils.randomTriangularWith(min, max, (min + max) * 0.5);\n }\n static randomTriangularWith(min, max, mode) {\n let u = Math.random();\n let d = max - min;\n if (u <= (mode - min) / d)\n return min + Math.sqrt(u * d * (mode - min));\n return max - Math.sqrt((1 - u) * d * (max - mode));\n }\n static isPowerOfTwo(value) {\n return value && (value & (value - 1)) === 0;\n }\n}\nexport class Interpolation {\n apply(start, end, a) {\n return start + (end - start) * this.applyInternal(a);\n }\n}\nexport class Pow extends Interpolation {\n power = 2;\n constructor(power) {\n super();\n this.power = power;\n }\n applyInternal(a) {\n if (a <= 0.5)\n return Math.pow(a * 2, this.power) / 2;\n return Math.pow((a - 1) * 2, this.power) / (this.power % 2 == 0 ? -2 : 2) + 1;\n }\n}\nexport class PowOut extends Pow {\n constructor(power) {\n super(power);\n }\n applyInternal(a) {\n return Math.pow(a - 1, this.power) * (this.power % 2 == 0 ? -1 : 1) + 1;\n }\n}\nexport class Utils {\n static SUPPORTS_TYPED_ARRAYS = typeof (Float32Array) !== \"undefined\";\n static arrayCopy(source, sourceStart, dest, destStart, numElements) {\n for (let i = sourceStart, j = destStart; i < sourceStart + numElements; i++, j++) {\n dest[j] = source[i];\n }\n }\n static arrayFill(array, fromIndex, toIndex, value) {\n for (let i = fromIndex; i < toIndex; i++)\n array[i] = value;\n }\n static setArraySize(array, size, value = 0) {\n let oldSize = array.length;\n if (oldSize == size)\n return array;\n array.length = size;\n if (oldSize < size) {\n for (let i = oldSize; i < size; i++)\n array[i] = value;\n }\n return array;\n }\n static ensureArrayCapacity(array, size, value = 0) {\n if (array.length >= size)\n return array;\n return Utils.setArraySize(array, size, value);\n }\n static newArray(size, defaultValue) {\n let array = new Array(size);\n for (let i = 0; i < size; i++)\n array[i] = defaultValue;\n return array;\n }\n static newFloatArray(size) {\n if (Utils.SUPPORTS_TYPED_ARRAYS)\n return new Float32Array(size);\n else {\n let array = new Array(size);\n for (let i = 0; i < array.length; i++)\n array[i] = 0;\n return array;\n }\n }\n static newShortArray(size) {\n if (Utils.SUPPORTS_TYPED_ARRAYS)\n return new Int16Array(size);\n else {\n let array = new Array(size);\n for (let i = 0; i < array.length; i++)\n array[i] = 0;\n return array;\n }\n }\n static toFloatArray(array) {\n return Utils.SUPPORTS_TYPED_ARRAYS ? new Float32Array(array) : array;\n }\n static toSinglePrecision(value) {\n return Utils.SUPPORTS_TYPED_ARRAYS ? Math.fround(value) : value;\n }\n // This function is used to fix WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109\n static webkit602BugfixHelper(alpha, blend) {\n }\n static contains(array, element, identity = true) {\n for (var i = 0; i < array.length; i++)\n if (array[i] == element)\n return true;\n return false;\n }\n static enumValue(type, name) {\n return type[name[0].toUpperCase() + name.slice(1)];\n }\n}\nexport class DebugUtils {\n static logBones(skeleton) {\n for (let i = 0; i < skeleton.bones.length; i++) {\n let bone = skeleton.bones[i];\n console.log(bone.data.name + \", \" + bone.a + \", \" + bone.b + \", \" + bone.c + \", \" + bone.d + \", \" + bone.worldX + \", \" + bone.worldY);\n }\n }\n}\nexport class Pool {\n items = new Array();\n instantiator;\n constructor(instantiator) {\n this.instantiator = instantiator;\n }\n obtain() {\n return this.items.length > 0 ? this.items.pop() : this.instantiator();\n }\n free(item) {\n if (item.reset)\n item.reset();\n this.items.push(item);\n }\n freeAll(items) {\n for (let i = 0; i < items.length; i++)\n this.free(items[i]);\n }\n clear() {\n this.items.length = 0;\n }\n}\nexport class Vector2 {\n x;\n y;\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n set(x, y) {\n this.x = x;\n this.y = y;\n return this;\n }\n length() {\n let x = this.x;\n let y = this.y;\n return Math.sqrt(x * x + y * y);\n }\n normalize() {\n let len = this.length();\n if (len != 0) {\n this.x /= len;\n this.y /= len;\n }\n return this;\n }\n}\nexport class TimeKeeper {\n maxDelta = 0.064;\n framesPerSecond = 0;\n delta = 0;\n totalTime = 0;\n lastTime = Date.now() / 1000;\n frameCount = 0;\n frameTime = 0;\n update() {\n let now = Date.now() / 1000;\n this.delta = now - this.lastTime;\n this.frameTime += this.delta;\n this.totalTime += this.delta;\n if (this.delta > this.maxDelta)\n this.delta = this.maxDelta;\n this.lastTime = now;\n this.frameCount++;\n if (this.frameTime > 1) {\n this.framesPerSecond = this.frameCount / this.frameTime;\n this.frameTime = 0;\n this.frameCount = 0;\n }\n }\n}\nexport class WindowedMean {\n values;\n addedValues = 0;\n lastValue = 0;\n mean = 0;\n dirty = true;\n constructor(windowSize = 32) {\n this.values = new Array(windowSize);\n }\n hasEnoughData() {\n return this.addedValues >= this.values.length;\n }\n addValue(value) {\n if (this.addedValues < this.values.length)\n this.addedValues++;\n this.values[this.lastValue++] = value;\n if (this.lastValue > this.values.length - 1)\n this.lastValue = 0;\n this.dirty = true;\n }\n getMean() {\n if (this.hasEnoughData()) {\n if (this.dirty) {\n let mean = 0;\n for (let i = 0; i < this.values.length; i++)\n mean += this.values[i];\n this.mean = mean / this.values.length;\n this.dirty = false;\n }\n return this.mean;\n }\n return 0;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBUy9FLE1BQU0sT0FBTyxNQUFNO0lBQ2xCLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBc0IsQ0FBQztJQUV4QyxHQUFHLENBQUUsS0FBYTtRQUNqQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDbEMsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsUUFBUSxDQUFFLEtBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUM7SUFDM0MsQ0FBQztJQUVELE1BQU0sQ0FBRSxLQUFhO1FBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsS0FBSztRQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDO0NBQ0Q7QUFFRCxNQUFNLE9BQU8sU0FBUztJQUNyQixPQUFPLEdBQXVCLEVBQUUsQ0FBQztJQUNqQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRVQsR0FBRyxDQUFFLEtBQWE7UUFDakIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lB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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Utils } from \"../Utils.js\";\n/** The base class for all attachments. */\nexport class Attachment {\n name;\n constructor(name) {\n if (!name)\n throw new Error(\"name cannot be null.\");\n this.name = name;\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 class VertexAttachment extends Attachment {\n static nextID = 0;\n /** The unique ID for this attachment. */\n id = VertexAttachment.nextID++;\n /** The bones which affect the {@link #getVertices()}. The array entries are, for each vertex, the number of bones affecting\n * the vertex followed by that many bone indices, which is the index of the bone in {@link Skeleton#bones}. Will be null\n * if this attachment has no weights. */\n bones = null;\n /** The vertex positions in the bone's coordinate system. For a non-weighted attachment, the values are `x,y`\n * entries for each vertex. For a weighted attachment, the values are `x,y,weight` entries for each bone affecting\n * each vertex. */\n vertices = [];\n /** The maximum number of world vertex values that can be output by\n * {@link #computeWorldVertices()} using the `count` parameter. */\n worldVerticesLength = 0;\n /** Timelines for the timeline attachment are also applied to this attachment.\n * May be null if no attachment-specific timelines should be applied. */\n timelineAttachment = this;\n constructor(name) {\n super(name);\n }\n /** Transforms the attachment's local {@link #vertices} to world coordinates. If the slot's {@link Slot#deform} is\n * not empty, it is used to deform the vertices.\n *\n * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine\n * Runtimes Guide.\n * @param start The index of the first {@link #vertices} value to transform. Each vertex has 2 values, x and y.\n * @param count The number of world vertex values to output. Must be <= {@link #worldVerticesLength} - `start`.\n * @param worldVertices The output world vertices. Must have a length >= `offset` + `count` *\n * `stride` / 2.\n * @param offset The `worldVertices` index to begin writing values.\n * @param stride The number of `worldVertices` entries between the value pairs written. */\n computeWorldVertices(slot, start, count, worldVertices, offset, stride) {\n count = offset + (count >> 1) * stride;\n let skeleton = slot.bone.skeleton;\n let deformArray = slot.deform;\n let vertices = this.vertices;\n let bones = this.bones;\n if (!bones) {\n if (deformArray.length > 0)\n vertices = deformArray;\n let bone = slot.bone;\n let x = bone.worldX;\n let y = bone.worldY;\n let a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n for (let v = start, w = offset; w < count; v += 2, w += stride) {\n let vx = vertices[v], vy = vertices[v + 1];\n worldVertices[w] = vx * a + vy * b + x;\n worldVertices[w + 1] = vx * c + vy * d + y;\n }\n return;\n }\n let v = 0, skip = 0;\n for (let i = 0; i < start; i += 2) {\n let n = bones[v];\n v += n + 1;\n skip += n;\n }\n let skeletonBones = skeleton.bones;\n if (deformArray.length == 0) {\n for (let w = offset, b = skip * 3; w < count; w += stride) {\n let wx = 0, wy = 0;\n let n = bones[v++];\n n += v;\n for (; v < n; v++, b += 3) {\n let bone = skeletonBones[bones[v]];\n let vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2];\n wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n }\n worldVertices[w] = wx;\n worldVertices[w + 1] = wy;\n }\n }\n else {\n let deform = deformArray;\n for (let w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) {\n let wx = 0, wy = 0;\n let n = bones[v++];\n n += v;\n for (; v < n; v++, b += 3, f += 2) {\n let bone = skeletonBones[bones[v]];\n let vx = vertices[b] + deform[f], vy = vertices[b + 1] + deform[f + 1], weight = vertices[b + 2];\n wx += (vx * bone.a + vy * bone.b + bone.worldX) * weight;\n wy += (vx * bone.c + vy * bone.d + bone.worldY) * weight;\n }\n worldVertices[w] = wx;\n worldVertices[w + 1] = wy;\n }\n }\n }\n /** Does not copy id (generated) or name (set on construction). **/\n copyTo(attachment) {\n if (this.bones) {\n attachment.bones = new Array(this.bones.length);\n Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length);\n }\n else\n attachment.bones = null;\n if (this.vertices) {\n attachment.vertices = Utils.newFloatArray(this.vertices.length);\n Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length);\n }\n attachment.worldVerticesLength = this.worldVerticesLength;\n attachment.timelineAttachment = this.timelineAttachment;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXR0YWNobWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdHRhY2htZW50cy9BdHRhY2htZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUcvRSxPQUFPLEVBQW1CLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVyRCwwQ0FBMEM7QUFDMUMsTUFBTSxPQUFnQixVQUFVO0lBQy9CLElBQUksQ0FBUztJQUViLFlBQWEsSUFBWTtRQUN4QixJQUFJLENBQUMsSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0NBR0Q7QUFFRDswQkFDMEI7QUFDMUIsTUFBTSxPQUFnQixnQkFBaUIsU0FBUSxVQUFVO0lBQ2hELE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRTFCLHlDQUF5QztJQUN6QyxFQUFFLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFL0I7OzRDQUV3QztJQUN4QyxLQUFLLEdBQXlCLElBQUksQ0FBQztJQUVuQzs7c0JBRWtCO0lBQ2xCLFFBQVEsR0FBb0IsRUFBRSxDQUFDO0lBRS9CO3NFQUNrRTtJQUNsRSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFFeEI7NEVBQ3dFO0lBQ3hFLGtCQUFrQixHQUFlLElBQUksQ0FBQztJQUV0QyxZQUFhLElBQVk7UUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7Ozs7Ozs7OzhGQVUwRjtJQUMxRixvQkFBb0IsQ0FBRSxJQUFVLEVBQUUsS0FBYSxFQUFFLEtBQWEsRUFBRSxhQUE4QixFQUFFLE1BQWMsRUFBRSxNQUFjO1FBQzdILEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFB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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { VertexAttachment } from \"./attachments/Attachment.js\";\nimport { StringSet, Utils, MathUtils } from \"./Utils.js\";\nimport { SequenceMode, SequenceModeValues } from \"./attachments/Sequence.js\";\n/** A simple container for a list of timelines and a name. */\nexport class Animation {\n /** The animation's name, which is unique across all animations in the skeleton. */\n name;\n timelines = [];\n timelineIds = new StringSet();\n /** The duration of the animation in seconds, which is the highest time of all keys in the timeline. */\n duration;\n constructor(name, timelines, duration) {\n if (!name)\n throw new Error(\"name cannot be null.\");\n this.name = name;\n this.setTimelines(timelines);\n this.duration = duration;\n }\n setTimelines(timelines) {\n if (!timelines)\n throw new Error(\"timelines cannot be null.\");\n this.timelines = timelines;\n this.timelineIds.clear();\n for (var i = 0; i < timelines.length; i++)\n this.timelineIds.addAll(timelines[i].getPropertyIds());\n }\n hasTimeline(ids) {\n for (let i = 0; i < ids.length; i++)\n if (this.timelineIds.contains(ids[i]))\n return true;\n return false;\n }\n /** Applies all the animation's timelines to the specified skeleton.\n *\n * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}.\n * @param loop If true, the animation repeats after {@link #getDuration()}.\n * @param events May be null to ignore fired events. */\n apply(skeleton, lastTime, time, loop, events, alpha, blend, direction) {\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n if (loop && this.duration != 0) {\n time %= this.duration;\n if (lastTime > 0)\n lastTime %= this.duration;\n }\n let timelines = this.timelines;\n for (let i = 0, n = timelines.length; i < n; i++)\n timelines[i].apply(skeleton, lastTime, time, events, alpha, blend, direction);\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 var MixBlend;\n(function (MixBlend) {\n /** Transitions from the setup value to the timeline value (the current value is not used). Before the first key, the setup\n * value is set. */\n MixBlend[MixBlend[\"setup\"] = 0] = \"setup\";\n /** Transitions from the current value to the timeline value. Before the first key, transitions from the current value to\n * the setup value. Timelines which perform instant transitions, such as {@link DrawOrderTimeline} or\n * {@link AttachmentTimeline}, use the setup value before the first key.\n *\n * `first` is intended for the first animations applied, not for animations layered on top of those. */\n MixBlend[MixBlend[\"first\"] = 1] = \"first\";\n /** Transitions from the current value to the timeline value. No change is made before the first key (the current value is\n * kept until the first key).\n *\n * `replace` is intended for animations layered on top of others, not for the first animations applied. */\n MixBlend[MixBlend[\"replace\"] = 2] = \"replace\";\n /** Transitions from the current value to the current value plus the timeline value. No change is made before the first key\n * (the current value is kept until the first key).\n *\n * `add` is intended for animations layered on top of others, not for the first animations applied. Properties\n * keyed by additive animations must be set manually or by another animation before applying the additive animations, else\n * the property values will increase continually. */\n MixBlend[MixBlend[\"add\"] = 3] = \"add\";\n})(MixBlend || (MixBlend = {}));\n/** Indicates whether a timeline's `alpha` is mixing out over time toward 0 (the setup or current pose value) or\n * mixing in toward 1 (the timeline's value).\n *\n * See Timeline {@link Timeline#apply(Skeleton, float, float, Array, float, MixBlend, MixDirection)}. */\nexport var MixDirection;\n(function (MixDirection) {\n MixDirection[MixDirection[\"mixIn\"] = 0] = \"mixIn\";\n MixDirection[MixDirection[\"mixOut\"] = 1] = \"mixOut\";\n})(MixDirection || (MixDirection = {}));\nconst Property = {\n rotate: 0,\n x: 1,\n y: 2,\n scaleX: 3,\n scaleY: 4,\n shearX: 5,\n shearY: 6,\n inherit: 7,\n rgb: 8,\n alpha: 9,\n rgb2: 10,\n attachment: 11,\n deform: 12,\n event: 13,\n drawOrder: 14,\n ikConstraint: 15,\n transformConstraint: 16,\n pathConstraintPosition: 17,\n pathConstraintSpacing: 18,\n pathConstraintMix: 19,\n physicsConstraintInertia: 20,\n physicsConstraintStrength: 21,\n physicsConstraintDamping: 22,\n physicsConstraintMass: 23,\n physicsConstraintWind: 24,\n physicsConstraintGravity: 25,\n physicsConstraintMix: 26,\n physicsConstraintReset: 27,\n sequence: 28,\n};\n/** The interface for all timelines. */\nexport class Timeline {\n propertyIds;\n frames;\n constructor(frameCount, propertyIds) {\n this.propertyIds = propertyIds;\n this.frames = Utils.newFloatArray(frameCount * this.getFrameEntries());\n }\n getPropertyIds() {\n return this.propertyIds;\n }\n getFrameEntries() {\n return 1;\n }\n getFrameCount() {\n return this.frames.length / this.getFrameEntries();\n }\n getDuration() {\n return this.frames[this.frames.length - this.getFrameEntries()];\n }\n static search1(frames, time) {\n let n = frames.length;\n for (let i = 1; i < n; i++)\n if (frames[i] > time)\n return i - 1;\n return n - 1;\n }\n static search(frames, time, step) {\n let n = frames.length;\n for (let i = step; i < n; i += step)\n if (frames[i] > time)\n return i - step;\n return n - step;\n }\n}\n/** The base class for timelines that use interpolation between key frame values. */\nexport class CurveTimeline extends Timeline {\n curves; // type, x, y, ...\n constructor(frameCount, bezierCount, propertyIds) {\n super(frameCount, propertyIds);\n this.curves = Utils.newFloatArray(frameCount + bezierCount * 18 /*BEZIER_SIZE*/);\n this.curves[frameCount - 1] = 1 /*STEPPED*/;\n }\n /** Sets the specified key frame to linear interpolation. */\n setLinear(frame) {\n this.curves[frame] = 0 /*LINEAR*/;\n }\n /** Sets the specified key frame to stepped interpolation. */\n setStepped(frame) {\n this.curves[frame] = 1 /*STEPPED*/;\n }\n /** Shrinks the storage for Bezier curves, for use when <code>bezierCount</code> (specified in the constructor) was larger\n * than the actual number of Bezier curves. */\n shrink(bezierCount) {\n let size = this.getFrameCount() + bezierCount * 18 /*BEZIER_SIZE*/;\n if (this.curves.length > size) {\n let newCurves = Utils.newFloatArray(size);\n Utils.arrayCopy(this.curves, 0, newCurves, 0, size);\n this.curves = newCurves;\n }\n }\n /** Stores the segments for the specified Bezier curve. For timelines that modify multiple values, there may be more than\n * one curve per frame.\n * @param bezier The ordinal of this Bezier curve for this timeline, between 0 and <code>bezierCount - 1</code> (specified\n * in the constructor), inclusive.\n * @param frame Between 0 and <code>frameCount - 1</code>, inclusive.\n * @param value The index of the value for this frame that this curve is used for.\n * @param time1 The time for the first key.\n * @param value1 The value for the first key.\n * @param cx1 The time for the first Bezier handle.\n * @param cy1 The value for the first Bezier handle.\n * @param cx2 The time of the second Bezier handle.\n * @param cy2 The value for the second Bezier handle.\n * @param time2 The time for the second key.\n * @param value2 The value for the second key. */\n setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) {\n let curves = this.curves;\n let i = this.getFrameCount() + bezier * 18 /*BEZIER_SIZE*/;\n if (value == 0)\n curves[frame] = 2 /*BEZIER*/ + i;\n let tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = (value1 - cy1 * 2 + cy2) * 0.03;\n let dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006, dddy = ((cy1 - cy2) * 3 - value1 + value2) * 0.006;\n let ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy;\n let dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = (cy1 - value1) * 0.3 + tmpy + dddy * 0.16666667;\n let x = time1 + dx, y = value1 + dy;\n for (let n = i + 18 /*BEZIER_SIZE*/; i < n; i += 2) {\n curves[i] = x;\n curves[i + 1] = y;\n dx += ddx;\n dy += ddy;\n ddx += dddx;\n ddy += dddy;\n x += dx;\n y += dy;\n }\n }\n /** Returns the Bezier interpolated value for the specified time.\n * @param frameIndex The index into {@link #getFrames()} for the values of the frame before <code>time</code>.\n * @param valueOffset The offset from <code>frameIndex</code> to the value this curve is used for.\n * @param i The index of the Bezier segments. See {@link #getCurveType(int)}. */\n getBezierValue(time, frameIndex, valueOffset, i) {\n let curves = this.curves;\n if (curves[i] > time) {\n let x = this.frames[frameIndex], y = this.frames[frameIndex + valueOffset];\n return y + (time - x) / (curves[i] - x) * (curves[i + 1] - y);\n }\n let n = i + 18 /*BEZIER_SIZE*/;\n for (i += 2; i < n; i += 2) {\n if (curves[i] >= time) {\n let x = curves[i - 2], y = curves[i - 1];\n return y + (time - x) / (curves[i] - x) * (curves[i + 1] - y);\n }\n }\n frameIndex += this.getFrameEntries();\n let x = curves[n - 2], y = curves[n - 1];\n return y + (time - x) / (this.frames[frameIndex] - x) * (this.frames[frameIndex + valueOffset] - y);\n }\n}\nexport class CurveTimeline1 extends CurveTimeline {\n constructor(frameCount, bezierCount, propertyId) {\n super(frameCount, bezierCount, [propertyId]);\n }\n getFrameEntries() {\n return 2 /*ENTRIES*/;\n }\n /** Sets the time and value for the specified frame.\n * @param frame Between 0 and <code>frameCount</code>, inclusive.\n * @param time The frame time in seconds. */\n setFrame(frame, time, value) {\n frame <<= 1;\n this.frames[frame] = time;\n this.frames[frame + 1 /*VALUE*/] = value;\n }\n /** Returns the interpolated value for the specified time. */\n getCurveValue(time) {\n let frames = this.frames;\n let i = frames.length - 2;\n for (let ii = 2; ii <= i; ii += 2) {\n if (frames[ii] > time) {\n i = ii - 2;\n break;\n }\n }\n let curveType = this.curves[i >> 1];\n switch (curveType) {\n case 0 /*LINEAR*/:\n let before = frames[i], value = frames[i + 1 /*VALUE*/];\n return value + (time - before) / (frames[i + 2 /*ENTRIES*/] - before) * (frames[i + 2 /*ENTRIES*/ + 1 /*VALUE*/] - value);\n case 1 /*STEPPED*/:\n return frames[i + 1 /*VALUE*/];\n }\n return this.getBezierValue(time, i, 1 /*VALUE*/, curveType - 2 /*BEZIER*/);\n }\n getRelativeValue(time, alpha, blend, current, setup) {\n if (time < this.frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n return setup;\n case MixBlend.first:\n return current + (setup - current) * alpha;\n }\n return current;\n }\n let value = this.getCurveValue(time);\n switch (blend) {\n case MixBlend.setup:\n return setup + value * alpha;\n case MixBlend.first:\n case MixBlend.replace:\n value += setup - current;\n }\n return current + value * alpha;\n }\n getAbsoluteValue(time, alpha, blend, current, setup) {\n if (time < this.frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n return setup;\n case MixBlend.first:\n return current + (setup - current) * alpha;\n }\n return current;\n }\n let value = this.getCurveValue(time);\n if (blend == MixBlend.setup)\n return setup + (value - setup) * alpha;\n return current + (value - current) * alpha;\n }\n getAbsoluteValue2(time, alpha, blend, current, setup, value) {\n if (time < this.frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n return setup;\n case MixBlend.first:\n return current + (setup - current) * alpha;\n }\n return current;\n }\n if (blend == MixBlend.setup)\n return setup + (value - setup) * alpha;\n return current + (value - current) * alpha;\n }\n getScaleValue(time, alpha, blend, direction, current, setup) {\n const frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n return setup;\n case MixBlend.first:\n return current + (setup - current) * alpha;\n }\n return current;\n }\n let value = this.getCurveValue(time) * setup;\n if (alpha == 1) {\n if (blend == MixBlend.add)\n return current + value - setup;\n return value;\n }\n // Mixing out uses sign of setup or current pose, else use sign of key.\n if (direction == MixDirection.mixOut) {\n switch (blend) {\n case MixBlend.setup:\n return setup + (Math.abs(value) * MathUtils.signum(setup) - setup) * alpha;\n case MixBlend.first:\n case MixBlend.replace:\n return current + (Math.abs(value) * MathUtils.signum(current) - current) * alpha;\n }\n }\n else {\n let s = 0;\n switch (blend) {\n case MixBlend.setup:\n s = Math.abs(setup) * MathUtils.signum(value);\n return s + (value - s) * alpha;\n case MixBlend.first:\n case MixBlend.replace:\n s = Math.abs(current) * MathUtils.signum(value);\n return s + (value - s) * alpha;\n }\n }\n return current + (value - setup) * alpha;\n }\n}\n/** The base class for a {@link CurveTimeline} which sets two properties. */\nexport class CurveTimeline2 extends CurveTimeline {\n /** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(int)}.\n * @param propertyIds Unique identifiers for the properties the timeline modifies. */\n constructor(frameCount, bezierCount, propertyId1, propertyId2) {\n super(frameCount, bezierCount, [propertyId1, propertyId2]);\n }\n getFrameEntries() {\n return 3 /*ENTRIES*/;\n }\n /** Sets the time and values for the specified frame.\n * @param frame Between 0 and <code>frameCount</code>, inclusive.\n * @param time The frame time in seconds. */\n setFrame(frame, time, value1, value2) {\n frame *= 3 /*ENTRIES*/;\n this.frames[frame] = time;\n this.frames[frame + 1 /*VALUE1*/] = value1;\n this.frames[frame + 2 /*VALUE2*/] = value2;\n }\n}\n/** Changes a bone's local {@link Bone#rotation}. */\nexport class RotateTimeline extends CurveTimeline1 {\n boneIndex = 0;\n constructor(frameCount, bezierCount, boneIndex) {\n super(frameCount, bezierCount, Property.rotate + \"|\" + boneIndex);\n this.boneIndex = boneIndex;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let bone = skeleton.bones[this.boneIndex];\n if (bone.active)\n bone.rotation = this.getRelativeValue(time, alpha, blend, bone.rotation, bone.data.rotation);\n }\n}\n/** Changes a bone's local {@link Bone#x} and {@link Bone#y}. */\nexport class TranslateTimeline extends CurveTimeline2 {\n boneIndex = 0;\n constructor(frameCount, bezierCount, boneIndex) {\n super(frameCount, bezierCount, Property.x + \"|\" + boneIndex, Property.y + \"|\" + boneIndex);\n this.boneIndex = boneIndex;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n let frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.x = bone.data.x;\n bone.y = bone.data.y;\n return;\n case MixBlend.first:\n bone.x += (bone.data.x - bone.x) * alpha;\n bone.y += (bone.data.y - bone.y) * alpha;\n }\n return;\n }\n let x = 0, y = 0;\n let i = Timeline.search(frames, time, 3 /*ENTRIES*/);\n let curveType = this.curves[i / 3 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n let before = frames[i];\n x = frames[i + 1 /*VALUE1*/];\n y = frames[i + 2 /*VALUE2*/];\n let t = (time - before) / (frames[i + 3 /*ENTRIES*/] - before);\n x += (frames[i + 3 /*ENTRIES*/ + 1 /*VALUE1*/] - x) * t;\n y += (frames[i + 3 /*ENTRIES*/ + 2 /*VALUE2*/] - y) * t;\n break;\n case 1 /*STEPPED*/:\n x = frames[i + 1 /*VALUE1*/];\n y = frames[i + 2 /*VALUE2*/];\n break;\n default:\n x = this.getBezierValue(time, i, 1 /*VALUE1*/, curveType - 2 /*BEZIER*/);\n y = this.getBezierValue(time, i, 2 /*VALUE2*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n }\n switch (blend) {\n case MixBlend.setup:\n bone.x = bone.data.x + x * alpha;\n bone.y = bone.data.y + y * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bone.x += (bone.data.x + x - bone.x) * alpha;\n bone.y += (bone.data.y + y - bone.y) * alpha;\n break;\n case MixBlend.add:\n bone.x += x * alpha;\n bone.y += y * alpha;\n }\n }\n}\n/** Changes a bone's local {@link Bone#x}. */\nexport class TranslateXTimeline extends CurveTimeline1 {\n boneIndex = 0;\n constructor(frameCount, bezierCount, boneIndex) {\n super(frameCount, bezierCount, Property.x + \"|\" + boneIndex);\n this.boneIndex = boneIndex;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let bone = skeleton.bones[this.boneIndex];\n if (bone.active)\n bone.x = this.getRelativeValue(time, alpha, blend, bone.x, bone.data.x);\n }\n}\n/** Changes a bone's local {@link Bone#x}. */\nexport class TranslateYTimeline extends CurveTimeline1 {\n boneIndex = 0;\n constructor(frameCount, bezierCount, boneIndex) {\n super(frameCount, bezierCount, Property.y + \"|\" + boneIndex);\n this.boneIndex = boneIndex;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let bone = skeleton.bones[this.boneIndex];\n if (bone.active)\n bone.y = this.getRelativeValue(time, alpha, blend, bone.y, bone.data.y);\n }\n}\n/** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}. */\nexport class ScaleTimeline extends CurveTimeline2 {\n boneIndex = 0;\n constructor(frameCount, bezierCount, boneIndex) {\n super(frameCount, bezierCount, Property.scaleX + \"|\" + boneIndex, Property.scaleY + \"|\" + boneIndex);\n this.boneIndex = boneIndex;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n let frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.scaleX = bone.data.scaleX;\n bone.scaleY = bone.data.scaleY;\n return;\n case MixBlend.first:\n bone.scaleX += (bone.data.scaleX - bone.scaleX) * alpha;\n bone.scaleY += (bone.data.scaleY - bone.scaleY) * alpha;\n }\n return;\n }\n let x, y;\n let i = Timeline.search(frames, time, 3 /*ENTRIES*/);\n let curveType = this.curves[i / 3 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n let before = frames[i];\n x = frames[i + 1 /*VALUE1*/];\n y = frames[i + 2 /*VALUE2*/];\n let t = (time - before) / (frames[i + 3 /*ENTRIES*/] - before);\n x += (frames[i + 3 /*ENTRIES*/ + 1 /*VALUE1*/] - x) * t;\n y += (frames[i + 3 /*ENTRIES*/ + 2 /*VALUE2*/] - y) * t;\n break;\n case 1 /*STEPPED*/:\n x = frames[i + 1 /*VALUE1*/];\n y = frames[i + 2 /*VALUE2*/];\n break;\n default:\n x = this.getBezierValue(time, i, 1 /*VALUE1*/, curveType - 2 /*BEZIER*/);\n y = this.getBezierValue(time, i, 2 /*VALUE2*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n }\n x *= bone.data.scaleX;\n y *= bone.data.scaleY;\n if (alpha == 1) {\n if (blend == MixBlend.add) {\n bone.scaleX += x - bone.data.scaleX;\n bone.scaleY += y - bone.data.scaleY;\n }\n else {\n bone.scaleX = x;\n bone.scaleY = y;\n }\n }\n else {\n let bx = 0, by = 0;\n if (direction == MixDirection.mixOut) {\n switch (blend) {\n case MixBlend.setup:\n bx = bone.data.scaleX;\n by = bone.data.scaleY;\n bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bx = bone.scaleX;\n by = bone.scaleY;\n bone.scaleX = bx + (Math.abs(x) * MathUtils.signum(bx) - bx) * alpha;\n bone.scaleY = by + (Math.abs(y) * MathUtils.signum(by) - by) * alpha;\n break;\n case MixBlend.add:\n bone.scaleX += (x - bone.data.scaleX) * alpha;\n bone.scaleY += (y - bone.data.scaleY) * alpha;\n }\n }\n else {\n switch (blend) {\n case MixBlend.setup:\n bx = Math.abs(bone.data.scaleX) * MathUtils.signum(x);\n by = Math.abs(bone.data.scaleY) * MathUtils.signum(y);\n bone.scaleX = bx + (x - bx) * alpha;\n bone.scaleY = by + (y - by) * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bx = Math.abs(bone.scaleX) * MathUtils.signum(x);\n by = Math.abs(bone.scaleY) * MathUtils.signum(y);\n bone.scaleX = bx + (x - bx) * alpha;\n bone.scaleY = by + (y - by) * alpha;\n break;\n case MixBlend.add:\n bone.scaleX += (x - bone.data.scaleX) * alpha;\n bone.scaleY += (y - bone.data.scaleY) * alpha;\n }\n }\n }\n }\n}\n/** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}. */\nexport class ScaleXTimeline extends CurveTimeline1 {\n boneIndex = 0;\n constructor(frameCount, bezierCount, boneIndex) {\n super(frameCount, bezierCount, Property.scaleX + \"|\" + boneIndex);\n this.boneIndex = boneIndex;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let bone = skeleton.bones[this.boneIndex];\n if (bone.active)\n bone.scaleX = this.getScaleValue(time, alpha, blend, direction, bone.scaleX, bone.data.scaleX);\n }\n}\n/** Changes a bone's local {@link Bone#scaleX)} and {@link Bone#scaleY}. */\nexport class ScaleYTimeline extends CurveTimeline1 {\n boneIndex = 0;\n constructor(frameCount, bezierCount, boneIndex) {\n super(frameCount, bezierCount, Property.scaleY + \"|\" + boneIndex);\n this.boneIndex = boneIndex;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let bone = skeleton.bones[this.boneIndex];\n if (bone.active)\n bone.scaleY = this.getScaleValue(time, alpha, blend, direction, bone.scaleY, bone.data.scaleY);\n }\n}\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */\nexport class ShearTimeline extends CurveTimeline2 {\n boneIndex = 0;\n constructor(frameCount, bezierCount, boneIndex) {\n super(frameCount, bezierCount, Property.shearX + \"|\" + boneIndex, Property.shearY + \"|\" + boneIndex);\n this.boneIndex = boneIndex;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n let frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.shearX = bone.data.shearX;\n bone.shearY = bone.data.shearY;\n return;\n case MixBlend.first:\n bone.shearX += (bone.data.shearX - bone.shearX) * alpha;\n bone.shearY += (bone.data.shearY - bone.shearY) * alpha;\n }\n return;\n }\n let x = 0, y = 0;\n let i = Timeline.search(frames, time, 3 /*ENTRIES*/);\n let curveType = this.curves[i / 3 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n let before = frames[i];\n x = frames[i + 1 /*VALUE1*/];\n y = frames[i + 2 /*VALUE2*/];\n let t = (time - before) / (frames[i + 3 /*ENTRIES*/] - before);\n x += (frames[i + 3 /*ENTRIES*/ + 1 /*VALUE1*/] - x) * t;\n y += (frames[i + 3 /*ENTRIES*/ + 2 /*VALUE2*/] - y) * t;\n break;\n case 1 /*STEPPED*/:\n x = frames[i + 1 /*VALUE1*/];\n y = frames[i + 2 /*VALUE2*/];\n break;\n default:\n x = this.getBezierValue(time, i, 1 /*VALUE1*/, curveType - 2 /*BEZIER*/);\n y = this.getBezierValue(time, i, 2 /*VALUE2*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n }\n switch (blend) {\n case MixBlend.setup:\n bone.shearX = bone.data.shearX + x * alpha;\n bone.shearY = bone.data.shearY + y * alpha;\n break;\n case MixBlend.first:\n case MixBlend.replace:\n bone.shearX += (bone.data.shearX + x - bone.shearX) * alpha;\n bone.shearY += (bone.data.shearY + y - bone.shearY) * alpha;\n break;\n case MixBlend.add:\n bone.shearX += x * alpha;\n bone.shearY += y * alpha;\n }\n }\n}\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */\nexport class ShearXTimeline extends CurveTimeline1 {\n boneIndex = 0;\n constructor(frameCount, bezierCount, boneIndex) {\n super(frameCount, bezierCount, Property.shearX + \"|\" + boneIndex);\n this.boneIndex = boneIndex;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let bone = skeleton.bones[this.boneIndex];\n if (bone.active)\n bone.shearX = this.getRelativeValue(time, alpha, blend, bone.shearX, bone.data.shearX);\n }\n}\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */\nexport class ShearYTimeline extends CurveTimeline1 {\n boneIndex = 0;\n constructor(frameCount, bezierCount, boneIndex) {\n super(frameCount, bezierCount, Property.shearY + \"|\" + boneIndex);\n this.boneIndex = boneIndex;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let bone = skeleton.bones[this.boneIndex];\n if (bone.active)\n bone.shearY = this.getRelativeValue(time, alpha, blend, bone.shearY, bone.data.shearY);\n }\n}\nexport class InheritTimeline extends Timeline {\n boneIndex = 0;\n constructor(frameCount, boneIndex) {\n super(frameCount, [Property.inherit + \"|\" + boneIndex]);\n this.boneIndex = boneIndex;\n }\n getFrameEntries() {\n return 2 /*ENTRIES*/;\n }\n /** Sets the transform mode for the specified frame.\n * @param frame Between 0 and <code>frameCount</code>, inclusive.\n * @param time The frame time in seconds. */\n setFrame(frame, time, inherit) {\n frame *= 2 /*ENTRIES*/;\n this.frames[frame] = time;\n this.frames[frame + 1 /*INHERIT*/] = inherit;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let bone = skeleton.bones[this.boneIndex];\n if (!bone.active)\n return;\n let frames = this.frames;\n if (time < frames[0]) {\n if (blend == MixBlend.setup || blend == MixBlend.first)\n bone.inherit = bone.data.inherit;\n return;\n }\n bone.inherit = this.frames[Timeline.search(frames, time, 2 /*ENTRIES*/) + 1 /*INHERIT*/];\n }\n}\n/** Changes a slot's {@link Slot#color}. */\nexport class RGBATimeline extends CurveTimeline {\n slotIndex = 0;\n constructor(frameCount, bezierCount, slotIndex) {\n super(frameCount, bezierCount, [\n Property.rgb + \"|\" + slotIndex,\n Property.alpha + \"|\" + slotIndex\n ]);\n this.slotIndex = slotIndex;\n }\n getFrameEntries() {\n return 5 /*ENTRIES*/;\n }\n /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */\n setFrame(frame, time, r, g, b, a) {\n frame *= 5 /*ENTRIES*/;\n this.frames[frame] = time;\n this.frames[frame + 1 /*R*/] = r;\n this.frames[frame + 2 /*G*/] = g;\n this.frames[frame + 3 /*B*/] = b;\n this.frames[frame + 4 /*A*/] = a;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n let frames = this.frames;\n let color = slot.color;\n if (time < frames[0]) {\n let setup = slot.data.color;\n switch (blend) {\n case MixBlend.setup:\n color.setFromColor(setup);\n return;\n case MixBlend.first:\n color.add((setup.r - color.r) * alpha, (setup.g - color.g) * alpha, (setup.b - color.b) * alpha, (setup.a - color.a) * alpha);\n }\n return;\n }\n let r = 0, g = 0, b = 0, a = 0;\n let i = Timeline.search(frames, time, 5 /*ENTRIES*/);\n let curveType = this.curves[i / 5 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n let before = frames[i];\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n a = frames[i + 4 /*A*/];\n let t = (time - before) / (frames[i + 5 /*ENTRIES*/] - before);\n r += (frames[i + 5 /*ENTRIES*/ + 1 /*R*/] - r) * t;\n g += (frames[i + 5 /*ENTRIES*/ + 2 /*G*/] - g) * t;\n b += (frames[i + 5 /*ENTRIES*/ + 3 /*B*/] - b) * t;\n a += (frames[i + 5 /*ENTRIES*/ + 4 /*A*/] - a) * t;\n break;\n case 1 /*STEPPED*/:\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n a = frames[i + 4 /*A*/];\n break;\n default:\n r = this.getBezierValue(time, i, 1 /*R*/, curveType - 2 /*BEZIER*/);\n g = this.getBezierValue(time, i, 2 /*G*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n b = this.getBezierValue(time, i, 3 /*B*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);\n a = this.getBezierValue(time, i, 4 /*A*/, curveType + 18 /*BEZIER_SIZE*/ * 3 - 2 /*BEZIER*/);\n }\n if (alpha == 1)\n color.set(r, g, b, a);\n else {\n if (blend == MixBlend.setup)\n color.setFromColor(slot.data.color);\n color.add((r - color.r) * alpha, (g - color.g) * alpha, (b - color.b) * alpha, (a - color.a) * alpha);\n }\n }\n}\n/** Changes a slot's {@link Slot#color}. */\nexport class RGBTimeline extends CurveTimeline {\n slotIndex = 0;\n constructor(frameCount, bezierCount, slotIndex) {\n super(frameCount, bezierCount, [\n Property.rgb + \"|\" + slotIndex\n ]);\n this.slotIndex = slotIndex;\n }\n getFrameEntries() {\n return 4 /*ENTRIES*/;\n }\n /** Sets the time in seconds, red, green, blue, and alpha for the specified key frame. */\n setFrame(frame, time, r, g, b) {\n frame <<= 2;\n this.frames[frame] = time;\n this.frames[frame + 1 /*R*/] = r;\n this.frames[frame + 2 /*G*/] = g;\n this.frames[frame + 3 /*B*/] = b;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n let frames = this.frames;\n let color = slot.color;\n if (time < frames[0]) {\n let setup = slot.data.color;\n switch (blend) {\n case MixBlend.setup:\n color.r = setup.r;\n color.g = setup.g;\n color.b = setup.b;\n return;\n case MixBlend.first:\n color.r += (setup.r - color.r) * alpha;\n color.g += (setup.g - color.g) * alpha;\n color.b += (setup.b - color.b) * alpha;\n }\n return;\n }\n let r = 0, g = 0, b = 0;\n let i = Timeline.search(frames, time, 4 /*ENTRIES*/);\n let curveType = this.curves[i >> 2];\n switch (curveType) {\n case 0 /*LINEAR*/:\n let before = frames[i];\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n let t = (time - before) / (frames[i + 4 /*ENTRIES*/] - before);\n r += (frames[i + 4 /*ENTRIES*/ + 1 /*R*/] - r) * t;\n g += (frames[i + 4 /*ENTRIES*/ + 2 /*G*/] - g) * t;\n b += (frames[i + 4 /*ENTRIES*/ + 3 /*B*/] - b) * t;\n break;\n case 1 /*STEPPED*/:\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n break;\n default:\n r = this.getBezierValue(time, i, 1 /*R*/, curveType - 2 /*BEZIER*/);\n g = this.getBezierValue(time, i, 2 /*G*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n b = this.getBezierValue(time, i, 3 /*B*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);\n }\n if (alpha == 1) {\n color.r = r;\n color.g = g;\n color.b = b;\n }\n else {\n if (blend == MixBlend.setup) {\n let setup = slot.data.color;\n color.r = setup.r;\n color.g = setup.g;\n color.b = setup.b;\n }\n color.r += (r - color.r) * alpha;\n color.g += (g - color.g) * alpha;\n color.b += (b - color.b) * alpha;\n }\n }\n}\n/** Changes a bone's local {@link Bone#shearX} and {@link Bone#shearY}. */\nexport class AlphaTimeline extends CurveTimeline1 {\n slotIndex = 0;\n constructor(frameCount, bezierCount, slotIndex) {\n super(frameCount, bezierCount, Property.alpha + \"|\" + slotIndex);\n this.slotIndex = slotIndex;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n let color = slot.color;\n if (time < this.frames[0]) {\n let setup = slot.data.color;\n switch (blend) {\n case MixBlend.setup:\n color.a = setup.a;\n return;\n case MixBlend.first:\n color.a += (setup.a - color.a) * alpha;\n }\n return;\n }\n let a = this.getCurveValue(time);\n if (alpha == 1)\n color.a = a;\n else {\n if (blend == MixBlend.setup)\n color.a = slot.data.color.a;\n color.a += (a - color.a) * alpha;\n }\n }\n}\n/** Changes a slot's {@link Slot#color} and {@link Slot#darkColor} for two color tinting. */\nexport class RGBA2Timeline extends CurveTimeline {\n slotIndex = 0;\n constructor(frameCount, bezierCount, slotIndex) {\n super(frameCount, bezierCount, [\n Property.rgb + \"|\" + slotIndex,\n Property.alpha + \"|\" + slotIndex,\n Property.rgb2 + \"|\" + slotIndex\n ]);\n this.slotIndex = slotIndex;\n }\n getFrameEntries() {\n return 8 /*ENTRIES*/;\n }\n /** Sets the time in seconds, light, and dark colors for the specified key frame. */\n setFrame(frame, time, r, g, b, a, r2, g2, b2) {\n frame <<= 3;\n this.frames[frame] = time;\n this.frames[frame + 1 /*R*/] = r;\n this.frames[frame + 2 /*G*/] = g;\n this.frames[frame + 3 /*B*/] = b;\n this.frames[frame + 4 /*A*/] = a;\n this.frames[frame + 5 /*R2*/] = r2;\n this.frames[frame + 6 /*G2*/] = g2;\n this.frames[frame + 7 /*B2*/] = b2;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n let frames = this.frames;\n let light = slot.color, dark = slot.darkColor;\n if (time < frames[0]) {\n let setupLight = slot.data.color, setupDark = slot.data.darkColor;\n switch (blend) {\n case MixBlend.setup:\n light.setFromColor(setupLight);\n dark.r = setupDark.r;\n dark.g = setupDark.g;\n dark.b = setupDark.b;\n return;\n case MixBlend.first:\n light.add((setupLight.r - light.r) * alpha, (setupLight.g - light.g) * alpha, (setupLight.b - light.b) * alpha, (setupLight.a - light.a) * alpha);\n dark.r += (setupDark.r - dark.r) * alpha;\n dark.g += (setupDark.g - dark.g) * alpha;\n dark.b += (setupDark.b - dark.b) * alpha;\n }\n return;\n }\n let r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0;\n let i = Timeline.search(frames, time, 8 /*ENTRIES*/);\n let curveType = this.curves[i >> 3];\n switch (curveType) {\n case 0 /*LINEAR*/:\n let before = frames[i];\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n a = frames[i + 4 /*A*/];\n r2 = frames[i + 5 /*R2*/];\n g2 = frames[i + 6 /*G2*/];\n b2 = frames[i + 7 /*B2*/];\n let t = (time - before) / (frames[i + 8 /*ENTRIES*/] - before);\n r += (frames[i + 8 /*ENTRIES*/ + 1 /*R*/] - r) * t;\n g += (frames[i + 8 /*ENTRIES*/ + 2 /*G*/] - g) * t;\n b += (frames[i + 8 /*ENTRIES*/ + 3 /*B*/] - b) * t;\n a += (frames[i + 8 /*ENTRIES*/ + 4 /*A*/] - a) * t;\n r2 += (frames[i + 8 /*ENTRIES*/ + 5 /*R2*/] - r2) * t;\n g2 += (frames[i + 8 /*ENTRIES*/ + 6 /*G2*/] - g2) * t;\n b2 += (frames[i + 8 /*ENTRIES*/ + 7 /*B2*/] - b2) * t;\n break;\n case 1 /*STEPPED*/:\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n a = frames[i + 4 /*A*/];\n r2 = frames[i + 5 /*R2*/];\n g2 = frames[i + 6 /*G2*/];\n b2 = frames[i + 7 /*B2*/];\n break;\n default:\n r = this.getBezierValue(time, i, 1 /*R*/, curveType - 2 /*BEZIER*/);\n g = this.getBezierValue(time, i, 2 /*G*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n b = this.getBezierValue(time, i, 3 /*B*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);\n a = this.getBezierValue(time, i, 4 /*A*/, curveType + 18 /*BEZIER_SIZE*/ * 3 - 2 /*BEZIER*/);\n r2 = this.getBezierValue(time, i, 5 /*R2*/, curveType + 18 /*BEZIER_SIZE*/ * 4 - 2 /*BEZIER*/);\n g2 = this.getBezierValue(time, i, 6 /*G2*/, curveType + 18 /*BEZIER_SIZE*/ * 5 - 2 /*BEZIER*/);\n b2 = this.getBezierValue(time, i, 7 /*B2*/, curveType + 18 /*BEZIER_SIZE*/ * 6 - 2 /*BEZIER*/);\n }\n if (alpha == 1) {\n light.set(r, g, b, a);\n dark.r = r2;\n dark.g = g2;\n dark.b = b2;\n }\n else {\n if (blend == MixBlend.setup) {\n light.setFromColor(slot.data.color);\n let setupDark = slot.data.darkColor;\n dark.r = setupDark.r;\n dark.g = setupDark.g;\n dark.b = setupDark.b;\n }\n light.add((r - light.r) * alpha, (g - light.g) * alpha, (b - light.b) * alpha, (a - light.a) * alpha);\n dark.r += (r2 - dark.r) * alpha;\n dark.g += (g2 - dark.g) * alpha;\n dark.b += (b2 - dark.b) * alpha;\n }\n }\n}\n/** Changes a slot's {@link Slot#color} and {@link Slot#darkColor} for two color tinting. */\nexport class RGB2Timeline extends CurveTimeline {\n slotIndex = 0;\n constructor(frameCount, bezierCount, slotIndex) {\n super(frameCount, bezierCount, [\n Property.rgb + \"|\" + slotIndex,\n Property.rgb2 + \"|\" + slotIndex\n ]);\n this.slotIndex = slotIndex;\n }\n getFrameEntries() {\n return 7 /*ENTRIES*/;\n }\n /** Sets the time in seconds, light, and dark colors for the specified key frame. */\n setFrame(frame, time, r, g, b, r2, g2, b2) {\n frame *= 7 /*ENTRIES*/;\n this.frames[frame] = time;\n this.frames[frame + 1 /*R*/] = r;\n this.frames[frame + 2 /*G*/] = g;\n this.frames[frame + 3 /*B*/] = b;\n this.frames[frame + 4 /*R2*/] = r2;\n this.frames[frame + 5 /*G2*/] = g2;\n this.frames[frame + 6 /*B2*/] = b2;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n let frames = this.frames;\n let light = slot.color, dark = slot.darkColor;\n if (time < frames[0]) {\n let setupLight = slot.data.color, setupDark = slot.data.darkColor;\n switch (blend) {\n case MixBlend.setup:\n light.r = setupLight.r;\n light.g = setupLight.g;\n light.b = setupLight.b;\n dark.r = setupDark.r;\n dark.g = setupDark.g;\n dark.b = setupDark.b;\n return;\n case MixBlend.first:\n light.r += (setupLight.r - light.r) * alpha;\n light.g += (setupLight.g - light.g) * alpha;\n light.b += (setupLight.b - light.b) * alpha;\n dark.r += (setupDark.r - dark.r) * alpha;\n dark.g += (setupDark.g - dark.g) * alpha;\n dark.b += (setupDark.b - dark.b) * alpha;\n }\n return;\n }\n let r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0;\n let i = Timeline.search(frames, time, 7 /*ENTRIES*/);\n let curveType = this.curves[i / 7 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n let before = frames[i];\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n r2 = frames[i + 4 /*R2*/];\n g2 = frames[i + 5 /*G2*/];\n b2 = frames[i + 6 /*B2*/];\n let t = (time - before) / (frames[i + 7 /*ENTRIES*/] - before);\n r += (frames[i + 7 /*ENTRIES*/ + 1 /*R*/] - r) * t;\n g += (frames[i + 7 /*ENTRIES*/ + 2 /*G*/] - g) * t;\n b += (frames[i + 7 /*ENTRIES*/ + 3 /*B*/] - b) * t;\n r2 += (frames[i + 7 /*ENTRIES*/ + 4 /*R2*/] - r2) * t;\n g2 += (frames[i + 7 /*ENTRIES*/ + 5 /*G2*/] - g2) * t;\n b2 += (frames[i + 7 /*ENTRIES*/ + 6 /*B2*/] - b2) * t;\n break;\n case 1 /*STEPPED*/:\n r = frames[i + 1 /*R*/];\n g = frames[i + 2 /*G*/];\n b = frames[i + 3 /*B*/];\n r2 = frames[i + 4 /*R2*/];\n g2 = frames[i + 5 /*G2*/];\n b2 = frames[i + 6 /*B2*/];\n break;\n default:\n r = this.getBezierValue(time, i, 1 /*R*/, curveType - 2 /*BEZIER*/);\n g = this.getBezierValue(time, i, 2 /*G*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n b = this.getBezierValue(time, i, 3 /*B*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);\n r2 = this.getBezierValue(time, i, 4 /*R2*/, curveType + 18 /*BEZIER_SIZE*/ * 3 - 2 /*BEZIER*/);\n g2 = this.getBezierValue(time, i, 5 /*G2*/, curveType + 18 /*BEZIER_SIZE*/ * 4 - 2 /*BEZIER*/);\n b2 = this.getBezierValue(time, i, 6 /*B2*/, curveType + 18 /*BEZIER_SIZE*/ * 5 - 2 /*BEZIER*/);\n }\n if (alpha == 1) {\n light.r = r;\n light.g = g;\n light.b = b;\n dark.r = r2;\n dark.g = g2;\n dark.b = b2;\n }\n else {\n if (blend == MixBlend.setup) {\n let setupLight = slot.data.color, setupDark = slot.data.darkColor;\n light.r = setupLight.r;\n light.g = setupLight.g;\n light.b = setupLight.b;\n dark.r = setupDark.r;\n dark.g = setupDark.g;\n dark.b = setupDark.b;\n }\n light.r += (r - light.r) * alpha;\n light.g += (g - light.g) * alpha;\n light.b += (b - light.b) * alpha;\n dark.r += (r2 - dark.r) * alpha;\n dark.g += (g2 - dark.g) * alpha;\n dark.b += (b2 - dark.b) * alpha;\n }\n }\n}\n/** Changes a slot's {@link Slot#attachment}. */\nexport class AttachmentTimeline extends Timeline {\n slotIndex = 0;\n /** The attachment name for each key frame. May contain null values to clear the attachment. */\n attachmentNames;\n constructor(frameCount, slotIndex) {\n super(frameCount, [\n Property.attachment + \"|\" + slotIndex\n ]);\n this.slotIndex = slotIndex;\n this.attachmentNames = new Array(frameCount);\n }\n getFrameCount() {\n return this.frames.length;\n }\n /** Sets the time in seconds and the attachment name for the specified key frame. */\n setFrame(frame, time, attachmentName) {\n this.frames[frame] = time;\n this.attachmentNames[frame] = attachmentName;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n if (direction == MixDirection.mixOut) {\n if (blend == MixBlend.setup)\n this.setAttachment(skeleton, slot, slot.data.attachmentName);\n return;\n }\n if (time < this.frames[0]) {\n if (blend == MixBlend.setup || blend == MixBlend.first)\n this.setAttachment(skeleton, slot, slot.data.attachmentName);\n return;\n }\n this.setAttachment(skeleton, slot, this.attachmentNames[Timeline.search1(this.frames, time)]);\n }\n setAttachment(skeleton, slot, attachmentName) {\n slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName));\n }\n}\n/** Changes a slot's {@link Slot#deform} to deform a {@link VertexAttachment}. */\nexport class DeformTimeline extends CurveTimeline {\n slotIndex = 0;\n /** The attachment that will be deformed. */\n attachment;\n /** The vertices for each key frame. */\n vertices;\n constructor(frameCount, bezierCount, slotIndex, attachment) {\n super(frameCount, bezierCount, [\n Property.deform + \"|\" + slotIndex + \"|\" + attachment.id\n ]);\n this.slotIndex = slotIndex;\n this.attachment = attachment;\n this.vertices = new Array(frameCount);\n }\n getFrameCount() {\n return this.frames.length;\n }\n /** Sets the time in seconds and the vertices for the specified key frame.\n * @param vertices Vertex positions for an unweighted VertexAttachment, or deform offsets if it has weights. */\n setFrame(frame, time, vertices) {\n this.frames[frame] = time;\n this.vertices[frame] = vertices;\n }\n /** @param value1 Ignored (0 is used for a deform timeline).\n * @param value2 Ignored (1 is used for a deform timeline). */\n setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2) {\n let curves = this.curves;\n let i = this.getFrameCount() + bezier * 18 /*BEZIER_SIZE*/;\n if (value == 0)\n curves[frame] = 2 /*BEZIER*/ + i;\n let tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = cy2 * 0.03 - cy1 * 0.06;\n let dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006, dddy = (cy1 - cy2 + 0.33333333) * 0.018;\n let ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy;\n let dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = cy1 * 0.3 + tmpy + dddy * 0.16666667;\n let x = time1 + dx, y = dy;\n for (let n = i + 18 /*BEZIER_SIZE*/; i < n; i += 2) {\n curves[i] = x;\n curves[i + 1] = y;\n dx += ddx;\n dy += ddy;\n ddx += dddx;\n ddy += dddy;\n x += dx;\n y += dy;\n }\n }\n getCurvePercent(time, frame) {\n let curves = this.curves;\n let i = curves[frame];\n switch (i) {\n case 0 /*LINEAR*/:\n let x = this.frames[frame];\n return (time - x) / (this.frames[frame + this.getFrameEntries()] - x);\n case 1 /*STEPPED*/:\n return 0;\n }\n i -= 2 /*BEZIER*/;\n if (curves[i] > time) {\n let x = this.frames[frame];\n return curves[i + 1] * (time - x) / (curves[i] - x);\n }\n let n = i + 18 /*BEZIER_SIZE*/;\n for (i += 2; i < n; i += 2) {\n if (curves[i] >= time) {\n let x = curves[i - 2], y = curves[i - 1];\n return y + (time - x) / (curves[i] - x) * (curves[i + 1] - y);\n }\n }\n let x = curves[n - 2], y = curves[n - 1];\n return y + (1 - y) * (time - x) / (this.frames[frame + this.getFrameEntries()] - x);\n }\n apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n let slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n let slotAttachment = slot.getAttachment();\n if (!slotAttachment)\n return;\n if (!(slotAttachment instanceof VertexAttachment) || slotAttachment.timelineAttachment != this.attachment)\n return;\n let deform = slot.deform;\n if (deform.length == 0)\n blend = MixBlend.setup;\n let vertices = this.vertices;\n let vertexCount = vertices[0].length;\n let frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n deform.length = 0;\n return;\n case MixBlend.first:\n if (alpha == 1) {\n deform.length = 0;\n return;\n }\n deform.length = vertexCount;\n let vertexAttachment = slotAttachment;\n if (!vertexAttachment.bones) {\n // Unweighted vertex positions.\n let setupVertices = vertexAttachment.vertices;\n for (var i = 0; i < vertexCount; i++)\n deform[i] += (setupVertices[i] - deform[i]) * alpha;\n }\n else {\n // Weighted deform offsets.\n alpha = 1 - alpha;\n for (var i = 0; i < vertexCount; i++)\n deform[i] *= alpha;\n }\n }\n return;\n }\n deform.length = vertexCount;\n if (time >= frames[frames.length - 1]) {\n let lastVertices = vertices[frames.length - 1];\n if (alpha == 1) {\n if (blend == MixBlend.add) {\n let vertexAttachment = slotAttachment;\n if (!vertexAttachment.bones) {\n // Unweighted vertex positions, with alpha.\n let setupVertices = vertexAttachment.vertices;\n for (let i = 0; i < vertexCount; i++)\n deform[i] += lastVertices[i] - setupVertices[i];\n }\n else {\n // Weighted deform offsets, with alpha.\n for (let i = 0; i < vertexCount; i++)\n deform[i] += lastVertices[i];\n }\n }\n else\n Utils.arrayCopy(lastVertices, 0, deform, 0, vertexCount);\n }\n else {\n switch (blend) {\n case MixBlend.setup: {\n let vertexAttachment = slotAttachment;\n if (!vertexAttachment.bones) {\n // Unweighted vertex positions, with alpha.\n let setupVertices = vertexAttachment.vertices;\n for (let i = 0; i < vertexCount; i++) {\n let setup = setupVertices[i];\n deform[i] = setup + (lastVertices[i] - setup) * alpha;\n }\n }\n else {\n // Weighted deform offsets, with alpha.\n for (let i = 0; i < vertexCount; i++)\n deform[i] = lastVertices[i] * alpha;\n }\n break;\n }\n case MixBlend.first:\n case MixBlend.replace:\n for (let i = 0; i < vertexCount; i++)\n deform[i] += (lastVertices[i] - deform[i]) * alpha;\n break;\n case MixBlend.add:\n let vertexAttachment = slotAttachment;\n if (!vertexAttachment.bones) {\n // Unweighted vertex positions, with alpha.\n let setupVertices = vertexAttachment.vertices;\n for (let i = 0; i < vertexCount; i++)\n deform[i] += (lastVertices[i] - setupVertices[i]) * alpha;\n }\n else {\n // Weighted deform offsets, with alpha.\n for (let i = 0; i < vertexCount; i++)\n deform[i] += lastVertices[i] * alpha;\n }\n }\n }\n return;\n }\n // Interpolate between the previous frame and the current frame.\n let frame = Timeline.search1(frames, time);\n let percent = this.getCurvePercent(time, frame);\n let prevVertices = vertices[frame];\n let nextVertices = vertices[frame + 1];\n if (alpha == 1) {\n if (blend == MixBlend.add) {\n let vertexAttachment = slotAttachment;\n if (!vertexAttachment.bones) {\n // Unweighted vertex positions, with alpha.\n let setupVertices = vertexAttachment.vertices;\n for (let i = 0; i < vertexCount; i++) {\n let prev = prevVertices[i];\n deform[i] += prev + (nextVertices[i] - prev) * percent - setupVertices[i];\n }\n }\n else {\n // Weighted deform offsets, with alpha.\n for (let i = 0; i < vertexCount; i++) {\n let prev = prevVertices[i];\n deform[i] += prev + (nextVertices[i] - prev) * percent;\n }\n }\n }\n else {\n for (let i = 0; i < vertexCount; i++) {\n let prev = prevVertices[i];\n deform[i] = prev + (nextVertices[i] - prev) * percent;\n }\n }\n }\n else {\n switch (blend) {\n case MixBlend.setup: {\n let vertexAttachment = slotAttachment;\n if (!vertexAttachment.bones) {\n // Unweighted vertex positions, with alpha.\n let setupVertices = vertexAttachment.vertices;\n for (let i = 0; i < vertexCount; i++) {\n let prev = prevVertices[i], setup = setupVertices[i];\n deform[i] = setup + (prev + (nextVertices[i] - prev) * percent - setup) * alpha;\n }\n }\n else {\n // Weighted deform offsets, with alpha.\n for (let i = 0; i < vertexCount; i++) {\n let prev = prevVertices[i];\n deform[i] = (prev + (nextVertices[i] - prev) * percent) * alpha;\n }\n }\n break;\n }\n case MixBlend.first:\n case MixBlend.replace:\n for (let i = 0; i < vertexCount; i++) {\n let prev = prevVertices[i];\n deform[i] += (prev + (nextVertices[i] - prev) * percent - deform[i]) * alpha;\n }\n break;\n case MixBlend.add:\n let vertexAttachment = slotAttachment;\n if (!vertexAttachment.bones) {\n // Unweighted vertex positions, with alpha.\n let setupVertices = vertexAttachment.vertices;\n for (let i = 0; i < vertexCount; i++) {\n let prev = prevVertices[i];\n deform[i] += (prev + (nextVertices[i] - prev) * percent - setupVertices[i]) * alpha;\n }\n }\n else {\n // Weighted deform offsets, with alpha.\n for (let i = 0; i < vertexCount; i++) {\n let prev = prevVertices[i];\n deform[i] += (prev + (nextVertices[i] - prev) * percent) * alpha;\n }\n }\n }\n }\n }\n}\n/** Fires an {@link Event} when specific animation times are reached. */\nexport class EventTimeline extends Timeline {\n static propertyIds = [\"\" + Property.event];\n /** The event for each key frame. */\n events;\n constructor(frameCount) {\n super(frameCount, EventTimeline.propertyIds);\n this.events = new Array(frameCount);\n }\n getFrameCount() {\n return this.frames.length;\n }\n /** Sets the time in seconds and the event for the specified key frame. */\n setFrame(frame, event) {\n this.frames[frame] = event.time;\n this.events[frame] = event;\n }\n /** Fires events for frames > `lastTime` and <= `time`. */\n apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n if (!firedEvents)\n return;\n let frames = this.frames;\n let frameCount = this.frames.length;\n if (lastTime > time) { // Apply after lastTime for looped animations.\n this.apply(skeleton, lastTime, Number.MAX_VALUE, firedEvents, alpha, blend, direction);\n lastTime = -1;\n }\n else if (lastTime >= frames[frameCount - 1]) // Last time is after last frame.\n return;\n if (time < frames[0])\n return;\n let i = 0;\n if (lastTime < frames[0])\n i = 0;\n else {\n i = Timeline.search1(frames, lastTime) + 1;\n let frameTime = frames[i];\n while (i > 0) { // Fire multiple events with the same frame.\n if (frames[i - 1] != frameTime)\n break;\n i--;\n }\n }\n for (; i < frameCount && time >= frames[i]; i++)\n firedEvents.push(this.events[i]);\n }\n}\n/** Changes a skeleton's {@link Skeleton#drawOrder}. */\nexport class DrawOrderTimeline extends Timeline {\n static propertyIds = [\"\" + Property.drawOrder];\n /** The draw order for each key frame. See {@link #setFrame(int, float, int[])}. */\n drawOrders;\n constructor(frameCount) {\n super(frameCount, DrawOrderTimeline.propertyIds);\n this.drawOrders = new Array(frameCount);\n }\n getFrameCount() {\n return this.frames.length;\n }\n /** Sets the time in seconds and the draw order for the specified key frame.\n * @param drawOrder For each slot in {@link Skeleton#slots}, the index of the new draw order. May be null to use setup pose\n * draw order. */\n setFrame(frame, time, drawOrder) {\n this.frames[frame] = time;\n this.drawOrders[frame] = drawOrder;\n }\n apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n if (direction == MixDirection.mixOut) {\n if (blend == MixBlend.setup)\n Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n return;\n }\n if (time < this.frames[0]) {\n if (blend == MixBlend.setup || blend == MixBlend.first)\n Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n return;\n }\n let idx = Timeline.search1(this.frames, time);\n let drawOrderToSetupIndex = this.drawOrders[idx];\n if (!drawOrderToSetupIndex)\n Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length);\n else {\n let drawOrder = skeleton.drawOrder;\n let slots = skeleton.slots;\n for (let i = 0, n = drawOrderToSetupIndex.length; i < n; i++)\n drawOrder[i] = slots[drawOrderToSetupIndex[i]];\n }\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 /** The index of the IK constraint in {@link Skeleton#getIkConstraints()} that will be changed when this timeline is applied */\n constraintIndex = 0;\n constructor(frameCount, bezierCount, ikConstraintIndex) {\n super(frameCount, bezierCount, [\n Property.ikConstraint + \"|\" + ikConstraintIndex\n ]);\n this.constraintIndex = ikConstraintIndex;\n }\n getFrameEntries() {\n return 6 /*ENTRIES*/;\n }\n /** Sets the time in seconds, mix, softness, bend direction, compress, and stretch for the specified key frame. */\n setFrame(frame, time, mix, softness, bendDirection, compress, stretch) {\n frame *= 6 /*ENTRIES*/;\n this.frames[frame] = time;\n this.frames[frame + 1 /*MIX*/] = mix;\n this.frames[frame + 2 /*SOFTNESS*/] = softness;\n this.frames[frame + 3 /*BEND_DIRECTION*/] = bendDirection;\n this.frames[frame + 4 /*COMPRESS*/] = compress ? 1 : 0;\n this.frames[frame + 5 /*STRETCH*/] = stretch ? 1 : 0;\n }\n apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n let constraint = skeleton.ikConstraints[this.constraintIndex];\n if (!constraint.active)\n return;\n let frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.mix = constraint.data.mix;\n constraint.softness = constraint.data.softness;\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n return;\n case MixBlend.first:\n constraint.mix += (constraint.data.mix - constraint.mix) * alpha;\n constraint.softness += (constraint.data.softness - constraint.softness) * alpha;\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n }\n return;\n }\n let mix = 0, softness = 0;\n let i = Timeline.search(frames, time, 6 /*ENTRIES*/);\n let curveType = this.curves[i / 6 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n let before = frames[i];\n mix = frames[i + 1 /*MIX*/];\n softness = frames[i + 2 /*SOFTNESS*/];\n let t = (time - before) / (frames[i + 6 /*ENTRIES*/] - before);\n mix += (frames[i + 6 /*ENTRIES*/ + 1 /*MIX*/] - mix) * t;\n softness += (frames[i + 6 /*ENTRIES*/ + 2 /*SOFTNESS*/] - softness) * t;\n break;\n case 1 /*STEPPED*/:\n mix = frames[i + 1 /*MIX*/];\n softness = frames[i + 2 /*SOFTNESS*/];\n break;\n default:\n mix = this.getBezierValue(time, i, 1 /*MIX*/, curveType - 2 /*BEZIER*/);\n softness = this.getBezierValue(time, i, 2 /*SOFTNESS*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n }\n if (blend == MixBlend.setup) {\n constraint.mix = constraint.data.mix + (mix - constraint.data.mix) * alpha;\n constraint.softness = constraint.data.softness + (softness - constraint.data.softness) * alpha;\n if (direction == MixDirection.mixOut) {\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.compress = constraint.data.compress;\n constraint.stretch = constraint.data.stretch;\n }\n else {\n constraint.bendDirection = frames[i + 3 /*BEND_DIRECTION*/];\n constraint.compress = frames[i + 4 /*COMPRESS*/] != 0;\n constraint.stretch = frames[i + 5 /*STRETCH*/] != 0;\n }\n }\n else {\n constraint.mix += (mix - constraint.mix) * alpha;\n constraint.softness += (softness - constraint.softness) * alpha;\n if (direction == MixDirection.mixIn) {\n constraint.bendDirection = frames[i + 3 /*BEND_DIRECTION*/];\n constraint.compress = frames[i + 4 /*COMPRESS*/] != 0;\n constraint.stretch = frames[i + 5 /*STRETCH*/] != 0;\n }\n }\n }\n}\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 /** The index of the transform constraint slot in {@link Skeleton#transformConstraints} that will be changed. */\n constraintIndex = 0;\n constructor(frameCount, bezierCount, transformConstraintIndex) {\n super(frameCount, bezierCount, [\n Property.transformConstraint + \"|\" + transformConstraintIndex\n ]);\n this.constraintIndex = transformConstraintIndex;\n }\n getFrameEntries() {\n return 7 /*ENTRIES*/;\n }\n /** The time in seconds, rotate mix, translate mix, scale mix, and shear mix for the specified key frame. */\n setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY) {\n let frames = this.frames;\n frame *= 7 /*ENTRIES*/;\n frames[frame] = time;\n frames[frame + 1 /*ROTATE*/] = mixRotate;\n frames[frame + 2 /*X*/] = mixX;\n frames[frame + 3 /*Y*/] = mixY;\n frames[frame + 4 /*SCALEX*/] = mixScaleX;\n frames[frame + 5 /*SCALEY*/] = mixScaleY;\n frames[frame + 6 /*SHEARY*/] = mixShearY;\n }\n apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n let constraint = skeleton.transformConstraints[this.constraintIndex];\n if (!constraint.active)\n return;\n let frames = this.frames;\n if (time < frames[0]) {\n let data = constraint.data;\n switch (blend) {\n case MixBlend.setup:\n constraint.mixRotate = data.mixRotate;\n constraint.mixX = data.mixX;\n constraint.mixY = data.mixY;\n constraint.mixScaleX = data.mixScaleX;\n constraint.mixScaleY = data.mixScaleY;\n constraint.mixShearY = data.mixShearY;\n return;\n case MixBlend.first:\n constraint.mixRotate += (data.mixRotate - constraint.mixRotate) * alpha;\n constraint.mixX += (data.mixX - constraint.mixX) * alpha;\n constraint.mixY += (data.mixY - constraint.mixY) * alpha;\n constraint.mixScaleX += (data.mixScaleX - constraint.mixScaleX) * alpha;\n constraint.mixScaleY += (data.mixScaleY - constraint.mixScaleY) * alpha;\n constraint.mixShearY += (data.mixShearY - constraint.mixShearY) * alpha;\n }\n return;\n }\n let rotate, x, y, scaleX, scaleY, shearY;\n let i = Timeline.search(frames, time, 7 /*ENTRIES*/);\n let curveType = this.curves[i / 7 /*ENTRIES*/];\n switch (curveType) {\n case 0 /*LINEAR*/:\n let before = frames[i];\n rotate = frames[i + 1 /*ROTATE*/];\n x = frames[i + 2 /*X*/];\n y = frames[i + 3 /*Y*/];\n scaleX = frames[i + 4 /*SCALEX*/];\n scaleY = frames[i + 5 /*SCALEY*/];\n shearY = frames[i + 6 /*SHEARY*/];\n let t = (time - before) / (frames[i + 7 /*ENTRIES*/] - before);\n rotate += (frames[i + 7 /*ENTRIES*/ + 1 /*ROTATE*/] - rotate) * t;\n x += (frames[i + 7 /*ENTRIES*/ + 2 /*X*/] - x) * t;\n y += (frames[i + 7 /*ENTRIES*/ + 3 /*Y*/] - y) * t;\n scaleX += (frames[i + 7 /*ENTRIES*/ + 4 /*SCALEX*/] - scaleX) * t;\n scaleY += (frames[i + 7 /*ENTRIES*/ + 5 /*SCALEY*/] - scaleY) * t;\n shearY += (frames[i + 7 /*ENTRIES*/ + 6 /*SHEARY*/] - shearY) * t;\n break;\n case 1 /*STEPPED*/:\n rotate = frames[i + 1 /*ROTATE*/];\n x = frames[i + 2 /*X*/];\n y = frames[i + 3 /*Y*/];\n scaleX = frames[i + 4 /*SCALEX*/];\n scaleY = frames[i + 5 /*SCALEY*/];\n shearY = frames[i + 6 /*SHEARY*/];\n break;\n default:\n rotate = this.getBezierValue(time, i, 1 /*ROTATE*/, curveType - 2 /*BEZIER*/);\n x = this.getBezierValue(time, i, 2 /*X*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n y = this.getBezierValue(time, i, 3 /*Y*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);\n scaleX = this.getBezierValue(time, i, 4 /*SCALEX*/, curveType + 18 /*BEZIER_SIZE*/ * 3 - 2 /*BEZIER*/);\n scaleY = this.getBezierValue(time, i, 5 /*SCALEY*/, curveType + 18 /*BEZIER_SIZE*/ * 4 - 2 /*BEZIER*/);\n shearY = this.getBezierValue(time, i, 6 /*SHEARY*/, curveType + 18 /*BEZIER_SIZE*/ * 5 - 2 /*BEZIER*/);\n }\n if (blend == MixBlend.setup) {\n let data = constraint.data;\n constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha;\n constraint.mixX = data.mixX + (x - data.mixX) * alpha;\n constraint.mixY = data.mixY + (y - data.mixY) * alpha;\n constraint.mixScaleX = data.mixScaleX + (scaleX - data.mixScaleX) * alpha;\n constraint.mixScaleY = data.mixScaleY + (scaleY - data.mixScaleY) * alpha;\n constraint.mixShearY = data.mixShearY + (shearY - data.mixShearY) * alpha;\n }\n else {\n constraint.mixRotate += (rotate - constraint.mixRotate) * alpha;\n constraint.mixX += (x - constraint.mixX) * alpha;\n constraint.mixY += (y - constraint.mixY) * alpha;\n constraint.mixScaleX += (scaleX - constraint.mixScaleX) * alpha;\n constraint.mixScaleY += (scaleY - constraint.mixScaleY) * alpha;\n constraint.mixShearY += (shearY - constraint.mixShearY) * alpha;\n }\n }\n}\n/** Changes a path constraint's {@link PathConstraint#position}. */\nexport class PathConstraintPositionTimeline extends CurveTimeline1 {\n /** The index of the path constraint in {@link Skeleton#getPathConstraints()} that will be changed when this timeline is\n * applied. */\n constraintIndex = 0;\n constructor(frameCount, bezierCount, pathConstraintIndex) {\n super(frameCount, bezierCount, Property.pathConstraintPosition + \"|\" + pathConstraintIndex);\n this.constraintIndex = pathConstraintIndex;\n }\n apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n let constraint = skeleton.pathConstraints[this.constraintIndex];\n if (constraint.active)\n constraint.position = this.getAbsoluteValue(time, alpha, blend, constraint.position, constraint.data.position);\n }\n}\n/** Changes a path constraint's {@link PathConstraint#spacing}. */\nexport class PathConstraintSpacingTimeline extends CurveTimeline1 {\n /** The index of the path constraint in {@link Skeleton#getPathConstraints()} that will be changed when this timeline is\n * applied. */\n constraintIndex = 0;\n constructor(frameCount, bezierCount, pathConstraintIndex) {\n super(frameCount, bezierCount, Property.pathConstraintSpacing + \"|\" + pathConstraintIndex);\n this.constraintIndex = pathConstraintIndex;\n }\n apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n let constraint = skeleton.pathConstraints[this.constraintIndex];\n if (constraint.active)\n constraint.spacing = this.getAbsoluteValue(time, alpha, blend, constraint.spacing, constraint.data.spacing);\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 /** The index of the path constraint in {@link Skeleton#getPathConstraints()} that will be changed when this timeline is\n * applied. */\n constraintIndex = 0;\n constructor(frameCount, bezierCount, pathConstraintIndex) {\n super(frameCount, bezierCount, [\n Property.pathConstraintMix + \"|\" + pathConstraintIndex\n ]);\n this.constraintIndex = pathConstraintIndex;\n }\n getFrameEntries() {\n return 4 /*ENTRIES*/;\n }\n setFrame(frame, time, mixRotate, mixX, mixY) {\n let frames = this.frames;\n frame <<= 2;\n frames[frame] = time;\n frames[frame + 1 /*ROTATE*/] = mixRotate;\n frames[frame + 2 /*X*/] = mixX;\n frames[frame + 3 /*Y*/] = mixY;\n }\n apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n let constraint = skeleton.pathConstraints[this.constraintIndex];\n if (!constraint.active)\n return;\n let frames = this.frames;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n constraint.mixRotate = constraint.data.mixRotate;\n constraint.mixX = constraint.data.mixX;\n constraint.mixY = constraint.data.mixY;\n return;\n case MixBlend.first:\n constraint.mixRotate += (constraint.data.mixRotate - constraint.mixRotate) * alpha;\n constraint.mixX += (constraint.data.mixX - constraint.mixX) * alpha;\n constraint.mixY += (constraint.data.mixY - constraint.mixY) * alpha;\n }\n return;\n }\n let rotate, x, y;\n let i = Timeline.search(frames, time, 4 /*ENTRIES*/);\n let curveType = this.curves[i >> 2];\n switch (curveType) {\n case 0 /*LINEAR*/:\n let before = frames[i];\n rotate = frames[i + 1 /*ROTATE*/];\n x = frames[i + 2 /*X*/];\n y = frames[i + 3 /*Y*/];\n let t = (time - before) / (frames[i + 4 /*ENTRIES*/] - before);\n rotate += (frames[i + 4 /*ENTRIES*/ + 1 /*ROTATE*/] - rotate) * t;\n x += (frames[i + 4 /*ENTRIES*/ + 2 /*X*/] - x) * t;\n y += (frames[i + 4 /*ENTRIES*/ + 3 /*Y*/] - y) * t;\n break;\n case 1 /*STEPPED*/:\n rotate = frames[i + 1 /*ROTATE*/];\n x = frames[i + 2 /*X*/];\n y = frames[i + 3 /*Y*/];\n break;\n default:\n rotate = this.getBezierValue(time, i, 1 /*ROTATE*/, curveType - 2 /*BEZIER*/);\n x = this.getBezierValue(time, i, 2 /*X*/, curveType + 18 /*BEZIER_SIZE*/ - 2 /*BEZIER*/);\n y = this.getBezierValue(time, i, 3 /*Y*/, curveType + 18 /*BEZIER_SIZE*/ * 2 - 2 /*BEZIER*/);\n }\n if (blend == MixBlend.setup) {\n let data = constraint.data;\n constraint.mixRotate = data.mixRotate + (rotate - data.mixRotate) * alpha;\n constraint.mixX = data.mixX + (x - data.mixX) * alpha;\n constraint.mixY = data.mixY + (y - data.mixY) * alpha;\n }\n else {\n constraint.mixRotate += (rotate - constraint.mixRotate) * alpha;\n constraint.mixX += (x - constraint.mixX) * alpha;\n constraint.mixY += (y - constraint.mixY) * alpha;\n }\n }\n}\n/** The base class for most {@link PhysicsConstraint} timelines. */\nexport class PhysicsConstraintTimeline extends CurveTimeline1 {\n /** The index of the physics constraint in {@link Skeleton#getPhysicsConstraints()} that will be changed when this timeline\n * is applied, or -1 if all physics constraints in the skeleton will be changed. */\n constraintIndex = 0;\n /** @param physicsConstraintIndex -1 for all physics constraints in the skeleton. */\n constructor(frameCount, bezierCount, physicsConstraintIndex, property) {\n super(frameCount, bezierCount, property + \"|\" + physicsConstraintIndex);\n this.constraintIndex = physicsConstraintIndex;\n }\n apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n let constraint;\n if (this.constraintIndex == -1) {\n const value = time >= this.frames[0] ? this.getCurveValue(time) : 0;\n for (const constraint of skeleton.physicsConstraints) {\n if (constraint.active && this.global(constraint.data))\n this.set(constraint, this.getAbsoluteValue2(time, alpha, blend, this.get(constraint), this.setup(constraint), value));\n }\n }\n else {\n constraint = skeleton.physicsConstraints[this.constraintIndex];\n if (constraint.active)\n this.set(constraint, this.getAbsoluteValue(time, alpha, blend, this.get(constraint), this.setup(constraint)));\n }\n }\n}\n/** Changes a physics constraint's {@link PhysicsConstraint#getInertia()}. */\nexport class PhysicsConstraintInertiaTimeline extends PhysicsConstraintTimeline {\n constructor(frameCount, bezierCount, physicsConstraintIndex) {\n super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintInertia);\n }\n setup(constraint) {\n return constraint.data.inertia;\n }\n get(constraint) {\n return constraint.inertia;\n }\n set(constraint, value) {\n constraint.inertia = value;\n }\n global(constraint) {\n return constraint.inertiaGlobal;\n }\n}\n/** Changes a physics constraint's {@link PhysicsConstraint#getStrength()}. */\nexport class PhysicsConstraintStrengthTimeline extends PhysicsConstraintTimeline {\n constructor(frameCount, bezierCount, physicsConstraintIndex) {\n super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintStrength);\n }\n setup(constraint) {\n return constraint.data.strength;\n }\n get(constraint) {\n return constraint.strength;\n }\n set(constraint, value) {\n constraint.strength = value;\n }\n global(constraint) {\n return constraint.strengthGlobal;\n }\n}\n/** Changes a physics constraint's {@link PhysicsConstraint#getDamping()}. */\nexport class PhysicsConstraintDampingTimeline extends PhysicsConstraintTimeline {\n constructor(frameCount, bezierCount, physicsConstraintIndex) {\n super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintDamping);\n }\n setup(constraint) {\n return constraint.data.damping;\n }\n get(constraint) {\n return constraint.damping;\n }\n set(constraint, value) {\n constraint.damping = value;\n }\n global(constraint) {\n return constraint.dampingGlobal;\n }\n}\n/** Changes a physics constraint's {@link PhysicsConstraint#getMassInverse()}. The timeline values are not inverted. */\nexport class PhysicsConstraintMassTimeline extends PhysicsConstraintTimeline {\n constructor(frameCount, bezierCount, physicsConstraintIndex) {\n super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintMass);\n }\n setup(constraint) {\n return 1 / constraint.data.massInverse;\n }\n get(constraint) {\n return 1 / constraint.massInverse;\n }\n set(constraint, value) {\n constraint.massInverse = 1 / value;\n }\n global(constraint) {\n return constraint.massGlobal;\n }\n}\n/** Changes a physics constraint's {@link PhysicsConstraint#getWind()}. */\nexport class PhysicsConstraintWindTimeline extends PhysicsConstraintTimeline {\n constructor(frameCount, bezierCount, physicsConstraintIndex) {\n super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintWind);\n }\n setup(constraint) {\n return constraint.data.wind;\n }\n get(constraint) {\n return constraint.wind;\n }\n set(constraint, value) {\n constraint.wind = value;\n }\n global(constraint) {\n return constraint.windGlobal;\n }\n}\n/** Changes a physics constraint's {@link PhysicsConstraint#getGravity()}. */\nexport class PhysicsConstraintGravityTimeline extends PhysicsConstraintTimeline {\n constructor(frameCount, bezierCount, physicsConstraintIndex) {\n super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintGravity);\n }\n setup(constraint) {\n return constraint.data.gravity;\n }\n get(constraint) {\n return constraint.gravity;\n }\n set(constraint, value) {\n constraint.gravity = value;\n }\n global(constraint) {\n return constraint.gravityGlobal;\n }\n}\n/** Changes a physics constraint's {@link PhysicsConstraint#getMix()}. */\nexport class PhysicsConstraintMixTimeline extends PhysicsConstraintTimeline {\n constructor(frameCount, bezierCount, physicsConstraintIndex) {\n super(frameCount, bezierCount, physicsConstraintIndex, Property.physicsConstraintMix);\n }\n setup(constraint) {\n return constraint.data.mix;\n }\n get(constraint) {\n return constraint.mix;\n }\n set(constraint, value) {\n constraint.mix = value;\n }\n global(constraint) {\n return constraint.mixGlobal;\n }\n}\n/** Resets a physics constraint when specific animation times are reached. */\nexport class PhysicsConstraintResetTimeline extends Timeline {\n static propertyIds = [Property.physicsConstraintReset.toString()];\n /** The index of the physics constraint in {@link Skeleton#getPhysicsConstraints()} that will be reset when this timeline is\n * applied, or -1 if all physics constraints in the skeleton will be reset. */\n constraintIndex;\n /** @param physicsConstraintIndex -1 for all physics constraints in the skeleton. */\n constructor(frameCount, physicsConstraintIndex) {\n super(frameCount, PhysicsConstraintResetTimeline.propertyIds);\n this.constraintIndex = physicsConstraintIndex;\n }\n getFrameCount() {\n return this.frames.length;\n }\n /** Sets the time for the specified frame.\n * @param frame Between 0 and <code>frameCount</code>, inclusive. */\n setFrame(frame, time) {\n this.frames[frame] = time;\n }\n /** Resets the physics constraint when frames > <code>lastTime</code> and <= <code>time</code>. */\n apply(skeleton, lastTime, time, firedEvents, alpha, blend, direction) {\n let constraint;\n if (this.constraintIndex != -1) {\n constraint = skeleton.physicsConstraints[this.constraintIndex];\n if (!constraint.active)\n return;\n }\n const frames = this.frames;\n if (lastTime > time) { // Apply after lastTime for looped animations.\n this.apply(skeleton, lastTime, Number.MAX_VALUE, [], alpha, blend, direction);\n lastTime = -1;\n }\n else if (lastTime >= frames[frames.length - 1]) // Last time is after last frame.\n return;\n if (time < frames[0])\n return;\n if (lastTime < frames[0] || time >= frames[Timeline.search1(frames, lastTime) + 1]) {\n if (constraint != null)\n constraint.reset();\n else {\n for (const constraint of skeleton.physicsConstraints) {\n if (constraint.active)\n constraint.reset();\n }\n }\n }\n }\n}\n/** Changes a slot's {@link Slot#getSequenceIndex()} for an attachment's {@link Sequence}. */\nexport class SequenceTimeline extends Timeline {\n static ENTRIES = 3;\n static MODE = 1;\n static DELAY = 2;\n slotIndex;\n attachment;\n constructor(frameCount, slotIndex, attachment) {\n super(frameCount, [\n Property.sequence + \"|\" + slotIndex + \"|\" + attachment.sequence.id\n ]);\n this.slotIndex = slotIndex;\n this.attachment = attachment;\n }\n getFrameEntries() {\n return SequenceTimeline.ENTRIES;\n }\n getSlotIndex() {\n return this.slotIndex;\n }\n getAttachment() {\n return this.attachment;\n }\n /** Sets the time, mode, index, and frame time for the specified frame.\n * @param frame Between 0 and <code>frameCount</code>, inclusive.\n * @param time Seconds between frames. */\n setFrame(frame, time, mode, index, delay) {\n let frames = this.frames;\n frame *= SequenceTimeline.ENTRIES;\n frames[frame] = time;\n frames[frame + SequenceTimeline.MODE] = mode | (index << 4);\n frames[frame + SequenceTimeline.DELAY] = delay;\n }\n apply(skeleton, lastTime, time, events, alpha, blend, direction) {\n let slot = skeleton.slots[this.slotIndex];\n if (!slot.bone.active)\n return;\n let slotAttachment = slot.attachment;\n let attachment = this.attachment;\n if (slotAttachment != attachment) {\n if (!(slotAttachment instanceof VertexAttachment)\n || slotAttachment.timelineAttachment != attachment)\n return;\n }\n let frames = this.frames;\n if (time < frames[0]) {\n if (blend == MixBlend.setup || blend == MixBlend.first)\n slot.sequenceIndex = -1;\n return;\n }\n let i = Timeline.search(frames, time, SequenceTimeline.ENTRIES);\n let before = frames[i];\n let modeAndIndex = frames[i + SequenceTimeline.MODE];\n let delay = frames[i + SequenceTimeline.DELAY];\n if (!this.attachment.sequence)\n return;\n let index = modeAndIndex >> 4, count = this.attachment.sequence.regions.length;\n let mode = SequenceModeValues[modeAndIndex & 0xf];\n if (mode != SequenceMode.hold) {\n index += (((time - before) / delay + 0.00001) | 0);\n switch (mode) {\n case SequenceMode.once:\n index = Math.min(count - 1, index);\n break;\n case SequenceMode.loop:\n index %= count;\n break;\n case SequenceMode.pingpong: {\n let n = (count << 1) - 2;\n index = n == 0 ? 0 : index % n;\n if (index >= count)\n index = n - index;\n break;\n }\n case SequenceMode.onceReverse:\n index = Math.max(count - 1 - index, 0);\n break;\n case SequenceMode.loopReverse:\n index = count - 1 - (index % count);\n break;\n case SequenceMode.pingpongReverse: {\n let n = (count << 1) - 2;\n index = n == 0 ? 0 : (index + count - 1) % n;\n if (index >= count)\n index = n - index;\n }\n }\n }\n slot.sequenceIndex = index;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5pbWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0FuaW1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFjLE1BQU0sNkJBQTZCLENBQUM7QUFNM0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFtQixNQUFNLFlBQVksQ0FBQztBQUcxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFLN0UsNkRBQTZEO0FBQzdELE1BQU0sT0FBTyxTQUFTO0lBQ3JCLG1GQUFtRjtJQUNuRixJQUFJLENBQVM7SUFDYixTQUFTLEdBQW9CLEVBQUUsQ0FBQztJQUNoQyxXQUFXLEdBQWMsSUFBSSxTQUFTLEVBQUUsQ0FBQztJQUV6Qyx1R0FBdUc7SUFDdkcsUUFBUSxDQUFTO0lBRWpCLFlBQWEsSUFBWSxFQUFFLFNBQTBCLEVBQUUsUUFBZ0I7UUFDdEUsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMxQixDQUFDO0lBRUQsWUFBWSxDQUFFLFNBQTBCO1FBQ3ZDLElBQUksQ0FBQyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMs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LEVBQUU7WUFDckIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLENBQUM7WUFDM0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQSxlQUFlLENBQUM7UUFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUM5RDtTQUNEO1FBQ0QsVUFBVSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENB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QUFFLENBQUEsZUFBZSxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsQ0FBQztnQkFDdEYsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUEsS0FBSyxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUEsZUFBZSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUEsVUFBVSxDQUFDLENBQUM7Z0JBQzFGLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBLEtBQUssRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFBLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO2dCQUMxRixFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQSxNQUFNLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQSxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsQ0FBQztnQkFDNUYsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUEsTUFBTSxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUEsZUFBZSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUEsVUFBVSxDQUFDLENBQUM7Z0JBQzVGLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBLE1BQU0sRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFBLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO1NBQzdGO1FBRUQsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ2YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNa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Q0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUM1QyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUM1QyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUM1QyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUN6QyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUN6QyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO2FBQzFDO1lBQ0QsT0FBTztTQUNQO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUEsV0FBVyxDQUFDLENBQUM7UUFDcEQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFdBQVcsQ0FBQyxDQUFDO1FBQzlDLFFBQVEsU0FBUyxFQUFFO1lBQ2xCLEtBQUssQ0FBQyxDQUFBLFVBQVU7Z0JBQ2YsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixDQUFDLEdB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QUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsQ0FBQztnQkFDakMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO2dCQUM5RCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxXQUFXLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsV0FBVyxHQUFHLENBQUMsQ0FBQSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pELENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFdBQVcsR0FBRyxDQUFDLENBQUEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqRCxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxXQUFXLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEUsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsV0FBVyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFdBQVcsR0FBRyxDQUFDLENBQUEsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNO1lBQ1AsS0FBSyxDQUFDLENBQUEsV0FBVztnQkFDaEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZCLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxLQUFLLENBQUMsQ0FBQztnQkFDdkIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO2dCQUNqQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUEsVUFBVSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsQ0FBQztnQkFDakMsTUFBTTtZQUNQO2dCQUNDLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBLFVBQVUsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO2dCQUM1RSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQSxLQUFLLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQSxlQUFlLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO2dCQUN0RixDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQSxLQUFLLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQSxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsQ0FBQztnQkFDMUYsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUEsVUFBVSxFQUFFLFNBQVMsR0FBRyxFQUFFLENBQUEsZUFBZSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUEsVUFBVSxDQUFDLENBQUM7Z0JBQ3BHLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBLFVBQVUsRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFBLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO2dCQUNwRyxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQSxVQUFVLEVBQUUsU0FBUyxHQUFHLEVBQUUsQ0FBQSxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQSxVQUFVLENBQUMsQ0FBQztTQUNyRztRQUVELElBQUksS0FBSyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUU7WUFDNUIsSUFBSSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztZQUMzQixVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUMxRSxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0RCxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0RCxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUMxRSxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUMxRSxV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VSxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUEsVUFBVSxDQUFDLENBQUM7Z0JBQzVFLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBLEtBQUssRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFBLGVBQWUsR0FBRyxDQUFDLENBQUEsVUFBVSxDQUFDLENBQUM7Z0JBQ3RGLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBLEtBQUssRUFBRSxTQUFTLEdBQUcsRUFBRSxDQUFBLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBLFVBQVUsQ0FBQyxDQUFDO1NBQzNGO1FBRUQsSUFBSSxLQUFLLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtZQUM1QixJQUFJLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQzNCLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQzFFLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ3RELFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQ3REO2FBQU07WUFDTixVQUFVLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDaEUsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2pELFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVSxD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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Animation, MixBlend, AttachmentTimeline, MixDirection, RotateTimeline, DrawOrderTimeline, Timeline, EventTimeline } from \"./Animation.js\";\nimport { StringSet, Pool, Utils, MathUtils } from \"./Utils.js\";\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 static _emptyAnimation = new Animation(\"<empty>\", [], 0);\n static emptyAnimation() {\n return AnimationState._emptyAnimation;\n }\n /** The AnimationStateData to look up mix durations. */\n data;\n /** The list of tracks that currently have animations, which may contain null entries. */\n tracks = new Array();\n /** Multiplier for the delta time when the animation state is updated, causing time for all animations and mixes to play slower\n * or faster. Defaults to 1.\n *\n * See TrackEntry {@link TrackEntry#timeScale} for affecting a single animation. */\n timeScale = 1;\n unkeyedState = 0;\n events = new Array();\n listeners = new Array();\n queue = new EventQueue(this);\n propertyIDs = new StringSet();\n animationsChanged = false;\n trackEntryPool = new Pool(() => new TrackEntry());\n constructor(data) {\n this.data = data;\n }\n /** Increments each track entry {@link TrackEntry#trackTime()}, setting queued animations as current if needed. */\n update(delta) {\n delta *= this.timeScale;\n let tracks = this.tracks;\n for (let i = 0, n = tracks.length; i < n; i++) {\n let current = tracks[i];\n if (!current)\n continue;\n current.animationLast = current.nextAnimationLast;\n current.trackLast = current.nextTrackLast;\n let currentDelta = delta * current.timeScale;\n if (current.delay > 0) {\n current.delay -= currentDelta;\n if (current.delay > 0)\n continue;\n currentDelta = -current.delay;\n current.delay = 0;\n }\n let next = current.next;\n if (next) {\n // When the next entry's delay is passed, change to the next entry, preserving leftover time.\n let nextTime = current.trackLast - next.delay;\n if (nextTime >= 0) {\n next.delay = 0;\n next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale;\n current.trackTime += currentDelta;\n this.setCurrent(i, next, true);\n while (next.mixingFrom) {\n next.mixTime += delta;\n next = next.mixingFrom;\n }\n continue;\n }\n }\n else if (current.trackLast >= current.trackEnd && !current.mixingFrom) {\n tracks[i] = null;\n this.queue.end(current);\n this.clearNext(current);\n continue;\n }\n if (current.mixingFrom && this.updateMixingFrom(current, delta)) {\n // End mixing from entries once all have completed.\n let from = current.mixingFrom;\n current.mixingFrom = null;\n if (from)\n from.mixingTo = null;\n while (from) {\n this.queue.end(from);\n from = from.mixingFrom;\n }\n }\n current.trackTime += currentDelta;\n }\n this.queue.drain();\n }\n /** Returns true when all mixing from entries are complete. */\n updateMixingFrom(to, delta) {\n let from = to.mixingFrom;\n if (!from)\n return true;\n let finished = this.updateMixingFrom(from, delta);\n from.animationLast = from.nextAnimationLast;\n from.trackLast = from.nextTrackLast;\n // Require mixTime > 0 to ensure the mixing from entry was applied at least once.\n if (to.mixTime > 0 && to.mixTime >= to.mixDuration) {\n // Require totalAlpha == 0 to ensure mixing is complete, unless mixDuration == 0 (the transition is a single frame).\n if (from.totalAlpha == 0 || to.mixDuration == 0) {\n to.mixingFrom = from.mixingFrom;\n if (from.mixingFrom)\n from.mixingFrom.mixingTo = to;\n to.interruptAlpha = from.interruptAlpha;\n this.queue.end(from);\n }\n return finished;\n }\n from.trackTime += delta * from.timeScale;\n to.mixTime += delta;\n return false;\n }\n /** Poses the skeleton using the track entry animations. There are no side effects other than invoking listeners, so the\n * animation state can be applied to multiple skeletons to pose them identically.\n * @returns True if any animations were applied. */\n apply(skeleton) {\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n if (this.animationsChanged)\n this._animationsChanged();\n let events = this.events;\n let tracks = this.tracks;\n let applied = false;\n for (let i = 0, n = tracks.length; i < n; i++) {\n let current = tracks[i];\n if (!current || current.delay > 0)\n continue;\n applied = true;\n let blend = i == 0 ? MixBlend.first : current.mixBlend;\n // Apply mixing from entries first.\n let alpha = current.alpha;\n if (current.mixingFrom)\n alpha *= this.applyMixingFrom(current, skeleton, blend);\n else if (current.trackTime >= current.trackEnd && !current.next)\n alpha = 0;\n let attachments = alpha >= current.alphaAttachmentThreshold;\n // Apply current entry.\n let animationLast = current.animationLast, animationTime = current.getAnimationTime(), applyTime = animationTime;\n let applyEvents = events;\n if (current.reverse) {\n applyTime = current.animation.duration - applyTime;\n applyEvents = null;\n }\n let timelines = current.animation.timelines;\n let timelineCount = timelines.length;\n if ((i == 0 && alpha == 1) || blend == MixBlend.add) {\n if (i == 0)\n attachments = true;\n for (let ii = 0; ii < timelineCount; ii++) {\n // Fixes issue #302 on IOS9 where mix, blend sometimes became undefined and caused assets\n // to sometimes stop rendering when using color correction, as their RGBA values become NaN.\n // (https://github.com/pixijs/pixi-spine/issues/302)\n Utils.webkit602BugfixHelper(alpha, blend);\n var timeline = timelines[ii];\n if (timeline instanceof AttachmentTimeline)\n this.applyAttachmentTimeline(timeline, skeleton, applyTime, blend, attachments);\n else\n timeline.apply(skeleton, animationLast, applyTime, applyEvents, alpha, blend, MixDirection.mixIn);\n }\n }\n else {\n let timelineMode = current.timelineMode;\n let shortestRotation = current.shortestRotation;\n let firstFrame = !shortestRotation && current.timelinesRotation.length != timelineCount << 1;\n if (firstFrame)\n current.timelinesRotation.length = timelineCount << 1;\n for (let ii = 0; ii < timelineCount; ii++) {\n let timeline = timelines[ii];\n let timelineBlend = timelineMode[ii] == SUBSEQUENT ? blend : MixBlend.setup;\n if (!shortestRotation && timeline instanceof RotateTimeline) {\n this.applyRotateTimeline(timeline, skeleton, applyTime, alpha, timelineBlend, current.timelinesRotation, ii << 1, firstFrame);\n }\n else if (timeline instanceof AttachmentTimeline) {\n this.applyAttachmentTimeline(timeline, skeleton, applyTime, blend, attachments);\n }\n else {\n // This fixes the WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109\n Utils.webkit602BugfixHelper(alpha, blend);\n timeline.apply(skeleton, animationLast, applyTime, applyEvents, alpha, timelineBlend, MixDirection.mixIn);\n }\n }\n }\n this.queueEvents(current, animationTime);\n events.length = 0;\n current.nextAnimationLast = animationTime;\n current.nextTrackLast = current.trackTime;\n }\n // Set slots attachments to the setup pose, if needed. This occurs if an animation that is mixing out sets attachments so\n // subsequent timelines see any deform, but the subsequent timelines don't set an attachment (eg they are also mixing out or\n // the time is before the first key).\n var setupState = this.unkeyedState + SETUP;\n var slots = skeleton.slots;\n for (var i = 0, n = skeleton.slots.length; i < n; i++) {\n var slot = slots[i];\n if (slot.attachmentState == setupState) {\n var attachmentName = slot.data.attachmentName;\n slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName));\n }\n }\n this.unkeyedState += 2; // Increasing after each use avoids the need to reset attachmentState for every slot.\n this.queue.drain();\n return applied;\n }\n applyMixingFrom(to, skeleton, blend) {\n let from = to.mixingFrom;\n if (from.mixingFrom)\n this.applyMixingFrom(from, skeleton, blend);\n let mix = 0;\n if (to.mixDuration == 0) { // Single frame mix to undo mixingFrom changes.\n mix = 1;\n if (blend == MixBlend.first)\n blend = MixBlend.setup;\n }\n else {\n mix = to.mixTime / to.mixDuration;\n if (mix > 1)\n mix = 1;\n if (blend != MixBlend.first)\n blend = from.mixBlend;\n }\n let attachments = mix < from.mixAttachmentThreshold, drawOrder = mix < from.mixDrawOrderThreshold;\n let timelines = from.animation.timelines;\n let timelineCount = timelines.length;\n let alphaHold = from.alpha * to.interruptAlpha, alphaMix = alphaHold * (1 - mix);\n let animationLast = from.animationLast, animationTime = from.getAnimationTime(), applyTime = animationTime;\n let events = null;\n if (from.reverse)\n applyTime = from.animation.duration - applyTime;\n else if (mix < from.eventThreshold)\n events = this.events;\n if (blend == MixBlend.add) {\n for (let i = 0; i < timelineCount; i++)\n timelines[i].apply(skeleton, animationLast, applyTime, events, alphaMix, blend, MixDirection.mixOut);\n }\n else {\n let timelineMode = from.timelineMode;\n let timelineHoldMix = from.timelineHoldMix;\n let shortestRotation = from.shortestRotation;\n let firstFrame = !shortestRotation && from.timelinesRotation.length != timelineCount << 1;\n if (firstFrame)\n from.timelinesRotation.length = timelineCount << 1;\n from.totalAlpha = 0;\n for (let i = 0; i < timelineCount; i++) {\n let timeline = timelines[i];\n let direction = MixDirection.mixOut;\n let timelineBlend;\n let alpha = 0;\n switch (timelineMode[i]) {\n case SUBSEQUENT:\n if (!drawOrder && timeline instanceof DrawOrderTimeline)\n continue;\n timelineBlend = blend;\n alpha = alphaMix;\n break;\n case FIRST:\n timelineBlend = MixBlend.setup;\n alpha = alphaMix;\n break;\n case HOLD_SUBSEQUENT:\n timelineBlend = blend;\n alpha = alphaHold;\n break;\n case HOLD_FIRST:\n timelineBlend = MixBlend.setup;\n alpha = alphaHold;\n break;\n default:\n timelineBlend = MixBlend.setup;\n let holdMix = timelineHoldMix[i];\n alpha = alphaHold * Math.max(0, 1 - holdMix.mixTime / holdMix.mixDuration);\n break;\n }\n from.totalAlpha += alpha;\n if (!shortestRotation && timeline instanceof RotateTimeline)\n this.applyRotateTimeline(timeline, skeleton, applyTime, alpha, timelineBlend, from.timelinesRotation, i << 1, firstFrame);\n else if (timeline instanceof AttachmentTimeline)\n this.applyAttachmentTimeline(timeline, skeleton, applyTime, timelineBlend, attachments && alpha >= from.alphaAttachmentThreshold);\n else {\n // This fixes the WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109\n Utils.webkit602BugfixHelper(alpha, blend);\n if (drawOrder && timeline instanceof DrawOrderTimeline && timelineBlend == MixBlend.setup)\n direction = MixDirection.mixIn;\n timeline.apply(skeleton, animationLast, applyTime, events, alpha, timelineBlend, direction);\n }\n }\n }\n if (to.mixDuration > 0)\n this.queueEvents(from, animationTime);\n this.events.length = 0;\n from.nextAnimationLast = animationTime;\n from.nextTrackLast = from.trackTime;\n return mix;\n }\n applyAttachmentTimeline(timeline, skeleton, time, blend, attachments) {\n var slot = skeleton.slots[timeline.slotIndex];\n if (!slot.bone.active)\n return;\n if (time < timeline.frames[0]) { // Time is before first frame.\n if (blend == MixBlend.setup || blend == MixBlend.first)\n this.setAttachment(skeleton, slot, slot.data.attachmentName, attachments);\n }\n else\n this.setAttachment(skeleton, slot, timeline.attachmentNames[Timeline.search1(timeline.frames, time)], attachments);\n // If an attachment wasn't set (ie before the first frame or attachments is false), set the setup attachment later.\n if (slot.attachmentState <= this.unkeyedState)\n slot.attachmentState = this.unkeyedState + SETUP;\n }\n setAttachment(skeleton, slot, attachmentName, attachments) {\n slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName));\n if (attachments)\n slot.attachmentState = this.unkeyedState + CURRENT;\n }\n applyRotateTimeline(timeline, skeleton, time, alpha, blend, timelinesRotation, i, firstFrame) {\n if (firstFrame)\n timelinesRotation[i] = 0;\n if (alpha == 1) {\n timeline.apply(skeleton, 0, time, null, 1, blend, MixDirection.mixIn);\n return;\n }\n let bone = skeleton.bones[timeline.boneIndex];\n if (!bone.active)\n return;\n let frames = timeline.frames;\n let r1 = 0, r2 = 0;\n if (time < frames[0]) {\n switch (blend) {\n case MixBlend.setup:\n bone.rotation = bone.data.rotation;\n default:\n return;\n case MixBlend.first:\n r1 = bone.rotation;\n r2 = bone.data.rotation;\n }\n }\n else {\n r1 = blend == MixBlend.setup ? bone.data.rotation : bone.rotation;\n r2 = bone.data.rotation + timeline.getCurveValue(time);\n }\n // Mix between rotations using the direction of the shortest route on the first frame while detecting crosses.\n let total = 0, diff = r2 - r1;\n diff -= Math.ceil(diff / 360 - 0.5) * 360;\n if (diff == 0) {\n total = timelinesRotation[i];\n }\n else {\n let lastTotal = 0, lastDiff = 0;\n if (firstFrame) {\n lastTotal = 0;\n lastDiff = diff;\n }\n else {\n lastTotal = timelinesRotation[i];\n lastDiff = timelinesRotation[i + 1];\n }\n let loops = lastTotal - lastTotal % 360;\n total = diff + loops;\n let current = diff >= 0, dir = lastTotal >= 0;\n if (Math.abs(lastDiff) <= 90 && MathUtils.signum(lastDiff) != MathUtils.signum(diff)) {\n if (Math.abs(lastTotal - loops) > 180) {\n total += 360 * MathUtils.signum(lastTotal);\n dir = current;\n }\n else if (loops != 0)\n total -= 360 * MathUtils.signum(lastTotal);\n else\n dir = current;\n }\n if (dir != current)\n total += 360 * MathUtils.signum(lastTotal);\n timelinesRotation[i] = total;\n }\n timelinesRotation[i + 1] = diff;\n bone.rotation = r1 + total * alpha;\n }\n queueEvents(entry, animationTime) {\n let animationStart = entry.animationStart, animationEnd = entry.animationEnd;\n let duration = animationEnd - animationStart;\n let trackLastWrapped = entry.trackLast % duration;\n // Queue events before complete.\n let events = this.events;\n let i = 0, n = events.length;\n for (; i < n; i++) {\n let event = events[i];\n if (event.time < trackLastWrapped)\n break;\n if (event.time > animationEnd)\n continue; // Discard events outside animation start/end.\n this.queue.event(entry, event);\n }\n // Queue complete if completed a loop iteration or the animation.\n let complete = false;\n if (entry.loop) {\n if (duration == 0)\n complete = true;\n else {\n const cycles = Math.floor(entry.trackTime / duration);\n complete = cycles > 0 && cycles > Math.floor(entry.trackLast / duration);\n }\n }\n else\n complete = animationTime >= animationEnd && entry.animationLast < animationEnd;\n if (complete)\n this.queue.complete(entry);\n // Queue events after complete.\n for (; i < n; i++) {\n let event = events[i];\n if (event.time < animationStart)\n continue; // Discard events outside animation start/end.\n this.queue.event(entry, event);\n }\n }\n /** Removes all animations from all tracks, leaving skeletons in their current pose.\n *\n * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose,\n * rather than leaving them in their current pose. */\n clearTracks() {\n let oldDrainDisabled = this.queue.drainDisabled;\n this.queue.drainDisabled = true;\n for (let i = 0, n = this.tracks.length; i < n; i++)\n this.clearTrack(i);\n this.tracks.length = 0;\n this.queue.drainDisabled = oldDrainDisabled;\n this.queue.drain();\n }\n /** Removes all animations from the track, leaving skeletons in their current pose.\n *\n * It may be desired to use {@link AnimationState#setEmptyAnimation()} to mix the skeletons back to the setup pose,\n * rather than leaving them in their current pose. */\n clearTrack(trackIndex) {\n if (trackIndex >= this.tracks.length)\n return;\n let current = this.tracks[trackIndex];\n if (!current)\n return;\n this.queue.end(current);\n this.clearNext(current);\n let entry = current;\n while (true) {\n let from = entry.mixingFrom;\n if (!from)\n break;\n this.queue.end(from);\n entry.mixingFrom = null;\n entry.mixingTo = null;\n entry = from;\n }\n this.tracks[current.trackIndex] = null;\n this.queue.drain();\n }\n setCurrent(index, current, interrupt) {\n let from = this.expandToIndex(index);\n this.tracks[index] = current;\n current.previous = null;\n if (from) {\n if (interrupt)\n this.queue.interrupt(from);\n current.mixingFrom = from;\n from.mixingTo = current;\n current.mixTime = 0;\n // Store the interrupted mix percentage.\n if (from.mixingFrom && from.mixDuration > 0)\n current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration);\n from.timelinesRotation.length = 0; // Reset rotation for mixing out, in case entry was mixed in.\n }\n this.queue.start(current);\n }\n /** Sets an animation by name.\n *\n * See {@link #setAnimationWith()}. */\n setAnimation(trackIndex, animationName, loop = false) {\n let animation = this.data.skeletonData.findAnimation(animationName);\n if (!animation)\n throw new Error(\"Animation not found: \" + animationName);\n return this.setAnimationWith(trackIndex, animation, loop);\n }\n /** Sets the current animation for a track, discarding any queued animations. If the formerly current track entry was never\n * applied to a skeleton, it is replaced (not mixed from).\n * @param loop If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its\n * duration. In either case {@link TrackEntry#trackEnd} determines when the track is cleared.\n * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept\n * after the {@link AnimationStateListener#dispose()} event occurs. */\n setAnimationWith(trackIndex, animation, loop = false) {\n if (!animation)\n throw new Error(\"animation cannot be null.\");\n let interrupt = true;\n let current = this.expandToIndex(trackIndex);\n if (current) {\n if (current.nextTrackLast == -1) {\n // Don't mix from an entry that was never applied.\n this.tracks[trackIndex] = current.mixingFrom;\n this.queue.interrupt(current);\n this.queue.end(current);\n this.clearNext(current);\n current = current.mixingFrom;\n interrupt = false;\n }\n else\n this.clearNext(current);\n }\n let entry = this.trackEntry(trackIndex, animation, loop, current);\n this.setCurrent(trackIndex, entry, interrupt);\n this.queue.drain();\n return entry;\n }\n /** Queues an animation by name.\n *\n * See {@link #addAnimationWith()}. */\n addAnimation(trackIndex, animationName, loop = false, delay = 0) {\n let animation = this.data.skeletonData.findAnimation(animationName);\n if (!animation)\n throw new Error(\"Animation not found: \" + animationName);\n return this.addAnimationWith(trackIndex, animation, loop, delay);\n }\n /** Adds an animation to be played after the current or last queued animation for a track. If the track is empty, it is\n * equivalent to calling {@link #setAnimationWith()}.\n * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry\n * minus any mix duration (from the {@link AnimationStateData}) plus the specified `delay` (ie the mix\n * ends at (`delay` = 0) or before (`delay` < 0) the previous track entry duration). If the\n * previous entry is looping, its next loop completion is used instead of its duration.\n * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept\n * after the {@link AnimationStateListener#dispose()} event occurs. */\n addAnimationWith(trackIndex, animation, loop = false, delay = 0) {\n if (!animation)\n throw new Error(\"animation cannot be null.\");\n let last = this.expandToIndex(trackIndex);\n if (last) {\n while (last.next)\n last = last.next;\n }\n let entry = this.trackEntry(trackIndex, animation, loop, last);\n if (!last) {\n this.setCurrent(trackIndex, entry, true);\n this.queue.drain();\n }\n else {\n last.next = entry;\n entry.previous = last;\n if (delay <= 0)\n delay += last.getTrackComplete() - entry.mixDuration;\n }\n entry.delay = delay;\n return entry;\n }\n /** Sets an empty animation for a track, discarding any queued animations, and sets the track entry's\n * {@link TrackEntry#mixduration}. An empty animation has no timelines and serves as a placeholder for mixing in or out.\n *\n * Mixing out is done by setting an empty animation with a mix duration using either {@link #setEmptyAnimation()},\n * {@link #setEmptyAnimations()}, or {@link #addEmptyAnimation()}. Mixing to an empty animation causes\n * the previous animation to be applied less and less over the mix duration. Properties keyed in the previous animation\n * transition to the value from lower tracks or to the setup pose value if no lower tracks key the property. A mix duration of\n * 0 still mixes out over one frame.\n *\n * Mixing in is done by first setting an empty animation, then adding an animation using\n * {@link #addAnimation()} and on the returned track entry, set the\n * {@link TrackEntry#setMixDuration()}. Mixing from an empty animation causes the new animation to be applied more and\n * more over the mix duration. Properties keyed in the new animation transition from the value from lower tracks or from the\n * setup pose value if no lower tracks key the property to the value keyed in the new animation. */\n setEmptyAnimation(trackIndex, mixDuration = 0) {\n let entry = this.setAnimationWith(trackIndex, AnimationState.emptyAnimation(), false);\n entry.mixDuration = mixDuration;\n entry.trackEnd = mixDuration;\n return entry;\n }\n /** Adds an empty animation to be played after the current or last queued animation for a track, and sets the track entry's\n * {@link TrackEntry#mixDuration}. If the track is empty, it is equivalent to calling\n * {@link #setEmptyAnimation()}.\n *\n * See {@link #setEmptyAnimation()}.\n * @param delay If > 0, sets {@link TrackEntry#delay}. If <= 0, the delay set is the duration of the previous track entry\n * minus any mix duration plus the specified `delay` (ie the mix ends at (`delay` = 0) or\n * before (`delay` < 0) the previous track entry duration). If the previous entry is looping, its next\n * loop completion is used instead of its duration.\n * @return A track entry to allow further customization of animation playback. References to the track entry must not be kept\n * after the {@link AnimationStateListener#dispose()} event occurs. */\n addEmptyAnimation(trackIndex, mixDuration = 0, delay = 0) {\n let entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation(), false, delay);\n if (delay <= 0)\n entry.delay += entry.mixDuration - mixDuration;\n entry.mixDuration = mixDuration;\n entry.trackEnd = mixDuration;\n return entry;\n }\n /** Sets an empty animation for every track, discarding any queued animations, and mixes to it over the specified mix\n * duration. */\n setEmptyAnimations(mixDuration = 0) {\n let oldDrainDisabled = this.queue.drainDisabled;\n this.queue.drainDisabled = true;\n for (let i = 0, n = this.tracks.length; i < n; i++) {\n let current = this.tracks[i];\n if (current)\n this.setEmptyAnimation(current.trackIndex, mixDuration);\n }\n this.queue.drainDisabled = oldDrainDisabled;\n this.queue.drain();\n }\n expandToIndex(index) {\n if (index < this.tracks.length)\n return this.tracks[index];\n Utils.ensureArrayCapacity(this.tracks, index + 1, null);\n this.tracks.length = index + 1;\n return null;\n }\n /** @param last May be null. */\n trackEntry(trackIndex, animation, loop, last) {\n let entry = this.trackEntryPool.obtain();\n entry.reset();\n entry.trackIndex = trackIndex;\n entry.animation = animation;\n entry.loop = loop;\n entry.holdPrevious = false;\n entry.reverse = false;\n entry.shortestRotation = false;\n entry.eventThreshold = 0;\n entry.alphaAttachmentThreshold = 0;\n entry.mixAttachmentThreshold = 0;\n entry.mixDrawOrderThreshold = 0;\n entry.animationStart = 0;\n entry.animationEnd = animation.duration;\n entry.animationLast = -1;\n entry.nextAnimationLast = -1;\n entry.delay = 0;\n entry.trackTime = 0;\n entry.trackLast = -1;\n entry.nextTrackLast = -1;\n entry.trackEnd = Number.MAX_VALUE;\n entry.timeScale = 1;\n entry.alpha = 1;\n entry.mixTime = 0;\n entry.mixDuration = !last ? 0 : this.data.getMix(last.animation, animation);\n entry.interruptAlpha = 1;\n entry.totalAlpha = 0;\n entry.mixBlend = MixBlend.replace;\n return entry;\n }\n /** Removes the {@link TrackEntry#getNext() next entry} and all entries after it for the specified entry. */\n clearNext(entry) {\n let next = entry.next;\n while (next) {\n this.queue.dispose(next);\n next = next.next;\n }\n entry.next = null;\n }\n _animationsChanged() {\n this.animationsChanged = false;\n this.propertyIDs.clear();\n let tracks = this.tracks;\n for (let i = 0, n = tracks.length; i < n; i++) {\n let entry = tracks[i];\n if (!entry)\n continue;\n while (entry.mixingFrom)\n entry = entry.mixingFrom;\n do {\n if (!entry.mixingTo || entry.mixBlend != MixBlend.add)\n this.computeHold(entry);\n entry = entry.mixingTo;\n } while (entry);\n }\n }\n computeHold(entry) {\n let to = entry.mixingTo;\n let timelines = entry.animation.timelines;\n let timelinesCount = entry.animation.timelines.length;\n let timelineMode = entry.timelineMode;\n timelineMode.length = timelinesCount;\n let timelineHoldMix = entry.timelineHoldMix;\n timelineHoldMix.length = 0;\n let propertyIDs = this.propertyIDs;\n if (to && to.holdPrevious) {\n for (let i = 0; i < timelinesCount; i++)\n timelineMode[i] = propertyIDs.addAll(timelines[i].getPropertyIds()) ? HOLD_FIRST : HOLD_SUBSEQUENT;\n return;\n }\n outer: for (let i = 0; i < timelinesCount; i++) {\n let timeline = timelines[i];\n let ids = timeline.getPropertyIds();\n if (!propertyIDs.addAll(ids))\n timelineMode[i] = SUBSEQUENT;\n else if (!to || timeline instanceof AttachmentTimeline || timeline instanceof DrawOrderTimeline\n || timeline instanceof EventTimeline || !to.animation.hasTimeline(ids)) {\n timelineMode[i] = FIRST;\n }\n else {\n for (let next = to.mixingTo; next; next = next.mixingTo) {\n if (next.animation.hasTimeline(ids))\n continue;\n if (entry.mixDuration > 0) {\n timelineMode[i] = HOLD_MIX;\n timelineHoldMix[i] = next;\n continue outer;\n }\n break;\n }\n timelineMode[i] = HOLD_FIRST;\n }\n }\n }\n /** Returns the track entry for the animation currently playing on the track, or null if no animation is currently playing. */\n getCurrent(trackIndex) {\n if (trackIndex >= this.tracks.length)\n return null;\n return this.tracks[trackIndex];\n }\n /** Adds a listener to receive events for all track entries. */\n addListener(listener) {\n if (!listener)\n throw new Error(\"listener cannot be null.\");\n this.listeners.push(listener);\n }\n /** Removes the listener added with {@link #addListener()}. */\n removeListener(listener) {\n let index = this.listeners.indexOf(listener);\n if (index >= 0)\n this.listeners.splice(index, 1);\n }\n /** Removes all listeners added with {@link #addListener()}. */\n clearListeners() {\n this.listeners.length = 0;\n }\n /** Discards all listener notifications that have not yet been delivered. This can be useful to call from an\n * {@link AnimationStateListener} when it is known that further notifications that may have been already queued for delivery\n * are not wanted because new animations are being set. */\n clearListenerNotifications() {\n this.queue.clear();\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 /** The animation to apply for this track entry. */\n animation = null;\n previous = null;\n /** The animation queued to start after this animation, or null. `next` makes up a linked list. */\n next = null;\n /** The track entry for the previous animation when mixing from the previous animation to this animation, or null if no\n * mixing is currently occuring. When mixing from multiple animations, `mixingFrom` makes up a linked list. */\n mixingFrom = null;\n /** The track entry for the next animation when mixing from this animation to the next animation, or null if no mixing is\n * currently occuring. When mixing to multiple animations, `mixingTo` makes up a linked list. */\n mixingTo = null;\n /** The listener for events generated by this track entry, or null.\n *\n * A track entry returned from {@link AnimationState#setAnimation()} is already the current animation\n * for the track, so the track entry listener {@link AnimationStateListener#start()} will not be called. */\n listener = null;\n /** The index of the track where this track entry is either current or queued.\n *\n * See {@link AnimationState#getCurrent()}. */\n trackIndex = 0;\n /** If true, the animation will repeat. If false it will not, instead its last frame is applied if played beyond its\n * duration. */\n loop = false;\n /** If true, when mixing from the previous animation to this animation, the previous animation is applied as normal instead\n * of being mixed out.\n *\n * When mixing between animations that key the same property, if a lower track also keys that property then the value will\n * briefly dip toward the lower track value during the mix. This happens because the first animation mixes from 100% to 0%\n * while the second animation mixes from 0% to 100%. Setting `holdPrevious` to true applies the first animation\n * at 100% during the mix so the lower track value is overwritten. Such dipping does not occur on the lowest track which\n * keys the property, only when a higher track also keys the property.\n *\n * Snapping will occur if `holdPrevious` is true and this animation does not key all the same properties as the\n * previous animation. */\n holdPrevious = false;\n reverse = false;\n shortestRotation = false;\n /** When the mix percentage ({@link #mixTime} / {@link #mixDuration}) is less than the\n * `eventThreshold`, event timelines are applied while this animation is being mixed out. Defaults to 0, so event\n * timelines are not applied while this animation is being mixed out. */\n eventThreshold = 0;\n /** When the mix percentage ({@link #mixtime} / {@link #mixDuration}) is less than the\n * `attachmentThreshold`, attachment timelines are applied while this animation is being mixed out. Defaults to\n * 0, so attachment timelines are not applied while this animation is being mixed out. */\n mixAttachmentThreshold = 0;\n /** When {@link #getAlpha()} is greater than <code>alphaAttachmentThreshold</code>, attachment timelines are applied.\n * Defaults to 0, so attachment timelines are always applied. */\n alphaAttachmentThreshold = 0;\n /** When the mix percentage ({@link #getMixTime()} / {@link #getMixDuration()}) is less than the\n * <code>mixDrawOrderThreshold</code>, draw order timelines are applied while this animation is being mixed out. Defaults to\n * 0, so draw order timelines are not applied while this animation is being mixed out. */\n mixDrawOrderThreshold = 0;\n /** Seconds when this animation starts, both initially and after looping. Defaults to 0.\n *\n * When changing the `animationStart` time, it often makes sense to set {@link #animationLast} to the same\n * value to prevent timeline keys before the start time from triggering. */\n animationStart = 0;\n /** Seconds for the last frame of this animation. Non-looping animations won't play past this time. Looping animations will\n * loop back to {@link #animationStart} at this time. Defaults to the animation {@link Animation#duration}. */\n animationEnd = 0;\n /** The time in seconds this animation was last applied. Some timelines use this for one-time triggers. Eg, when this\n * animation is applied, event timelines will fire all events between the `animationLast` time (exclusive) and\n * `animationTime` (inclusive). Defaults to -1 to ensure triggers on frame 0 happen the first time this animation\n * is applied. */\n animationLast = 0;\n nextAnimationLast = 0;\n /** Seconds to postpone playing the animation. When this track entry is the current track entry, `delay`\n * postpones incrementing the {@link #trackTime}. When this track entry is queued, `delay` is the time from\n * the start of the previous animation to when this track entry will become the current track entry (ie when the previous\n * track entry {@link TrackEntry#trackTime} >= this track entry's `delay`).\n *\n * {@link #timeScale} affects the delay. */\n delay = 0;\n /** Current time in seconds this track entry has been the current track entry. The track time determines\n * {@link #animationTime}. The track time can be set to start the animation at a time other than 0, without affecting\n * looping. */\n trackTime = 0;\n trackLast = 0;\n nextTrackLast = 0;\n /** The track time in seconds when this animation will be removed from the track. Defaults to the highest possible float\n * value, meaning the animation will be applied until a new animation is set or the track is cleared. If the track end time\n * is reached, no other animations are queued for playback, and mixing from any previous animations is complete, then the\n * properties keyed by the animation are set to the setup pose and the track is cleared.\n *\n * It may be desired to use {@link AnimationState#addEmptyAnimation()} rather than have the animation\n * abruptly cease being applied. */\n trackEnd = 0;\n /** Multiplier for the delta time when this track entry is updated, causing time for this animation to pass slower or\n * faster. Defaults to 1.\n *\n * {@link #mixTime} is not affected by track entry time scale, so {@link #mixDuration} may need to be adjusted to\n * match the animation speed.\n *\n * When using {@link AnimationState#addAnimation()} with a `delay` <= 0, note the\n * {@link #delay} is set using the mix duration from the {@link AnimationStateData}, assuming time scale to be 1. If\n * the time scale is not 1, the delay may need to be adjusted.\n *\n * See AnimationState {@link AnimationState#timeScale} for affecting all animations. */\n timeScale = 0;\n /** Values < 1 mix this animation with the skeleton's current pose (usually the pose resulting from lower tracks). Defaults\n * to 1, which overwrites the skeleton's current pose with this animation.\n *\n * Typically track 0 is used to completely pose the skeleton, then alpha is used on higher tracks. It doesn't make sense to\n * use alpha on track 0 if the skeleton pose is from the last frame render. */\n alpha = 0;\n /** Seconds from 0 to the {@link #getMixDuration()} when mixing from the previous animation to this animation. May be\n * slightly more than `mixDuration` when the mix is complete. */\n mixTime = 0;\n /** Seconds for mixing from the previous animation to this animation. Defaults to the value provided by AnimationStateData\n * {@link AnimationStateData#getMix()} based on the animation before this animation (if any).\n *\n * 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 * properties it was animating.\n *\n * The `mixDuration` can be set manually rather than use the value from\n * {@link AnimationStateData#getMix()}. In that case, the `mixDuration` can be set for a new\n * track entry only before {@link AnimationState#update(float)} is first called.\n *\n * When using {@link AnimationState#addAnimation()} with a `delay` <= 0, note the\n * {@link #delay} is set using the mix duration from the {@link AnimationStateData}, not a mix duration set\n * afterward. */\n _mixDuration = 0;\n interruptAlpha = 0;\n totalAlpha = 0;\n get mixDuration() {\n return this._mixDuration;\n }\n set mixDuration(mixDuration) {\n this._mixDuration = mixDuration;\n }\n setMixDurationWithDelay(mixDuration, delay) {\n this._mixDuration = mixDuration;\n if (this.previous != null && delay <= 0)\n delay += this.previous.getTrackComplete() - mixDuration;\n this.delay = delay;\n }\n /** Controls how properties keyed in the animation are mixed with lower tracks. Defaults to {@link MixBlend#replace}, which\n * replaces the values from the lower tracks with the animation values. {@link MixBlend#add} adds the animation values to\n * the values from the lower tracks.\n *\n * The `mixBlend` can be set for a new track entry only before {@link AnimationState#apply()} is first\n * called. */\n mixBlend = MixBlend.replace;\n timelineMode = new Array();\n timelineHoldMix = new Array();\n timelinesRotation = new Array();\n reset() {\n this.next = null;\n this.previous = null;\n this.mixingFrom = null;\n this.mixingTo = null;\n this.animation = null;\n this.listener = null;\n this.timelineMode.length = 0;\n this.timelineHoldMix.length = 0;\n this.timelinesRotation.length = 0;\n }\n /** Uses {@link #trackTime} to compute the `animationTime`, which is between {@link #animationStart}\n * and {@link #animationEnd}. When the `trackTime` is 0, the `animationTime` is equal to the\n * `animationStart` time. */\n getAnimationTime() {\n if (this.loop) {\n let duration = this.animationEnd - this.animationStart;\n if (duration == 0)\n return this.animationStart;\n return (this.trackTime % duration) + this.animationStart;\n }\n return Math.min(this.trackTime + this.animationStart, this.animationEnd);\n }\n setAnimationLast(animationLast) {\n this.animationLast = animationLast;\n this.nextAnimationLast = animationLast;\n }\n /** Returns true if at least one loop has been completed.\n *\n * See {@link AnimationStateListener#complete()}. */\n isComplete() {\n return this.trackTime >= this.animationEnd - this.animationStart;\n }\n /** Resets the rotation directions for mixing this entry's rotate timelines. This can be useful to avoid bones rotating the\n * long way around when using {@link #alpha} and starting animations on other tracks.\n *\n * Mixing with {@link MixBlend#replace} involves finding a rotation between two others, which has two possible solutions:\n * the short way or the long way around. The two rotations likely change over time, so which direction is the short or long\n * way also changes. If the short way was always chosen, bones would flip to the other side when that direction became the\n * long way. TrackEntry chooses the short way the first time it is applied and remembers that direction. */\n resetRotationDirections() {\n this.timelinesRotation.length = 0;\n }\n getTrackComplete() {\n let duration = this.animationEnd - this.animationStart;\n if (duration != 0) {\n if (this.loop)\n return duration * (1 + ((this.trackTime / duration) | 0)); // Completion of next loop.\n if (this.trackTime < duration)\n return duration; // Before duration.\n }\n return this.trackTime; // Next update.\n }\n /** Returns true if this track entry has been applied at least once.\n * <p>\n * See {@link AnimationState#apply(Skeleton)}. */\n wasApplied() {\n return this.nextTrackLast != -1;\n }\n /** Returns true if there is a {@link #getNext()} track entry and it will become the current track entry during the next\n * {@link AnimationState#update(float)}. */\n isNextReady() {\n return this.next != null && this.nextTrackLast - this.next.delay >= 0;\n }\n}\nexport class EventQueue {\n objects = [];\n drainDisabled = false;\n animState;\n constructor(animState) {\n this.animState = animState;\n }\n start(entry) {\n this.objects.push(EventType.start);\n this.objects.push(entry);\n this.animState.animationsChanged = true;\n }\n interrupt(entry) {\n this.objects.push(EventType.interrupt);\n this.objects.push(entry);\n }\n end(entry) {\n this.objects.push(EventType.end);\n this.objects.push(entry);\n this.animState.animationsChanged = true;\n }\n dispose(entry) {\n this.objects.push(EventType.dispose);\n this.objects.push(entry);\n }\n complete(entry) {\n this.objects.push(EventType.complete);\n this.objects.push(entry);\n }\n event(entry, event) {\n this.objects.push(EventType.event);\n this.objects.push(entry);\n this.objects.push(event);\n }\n drain() {\n if (this.drainDisabled)\n return;\n this.drainDisabled = true;\n let objects = this.objects;\n let listeners = this.animState.listeners;\n for (let i = 0; i < objects.length; i += 2) {\n let type = objects[i];\n let entry = objects[i + 1];\n switch (type) {\n case EventType.start:\n if (entry.listener && entry.listener.start)\n entry.listener.start(entry);\n for (let ii = 0; ii < listeners.length; ii++) {\n let listener = listeners[ii];\n if (listener.start)\n listener.start(entry);\n }\n break;\n case EventType.interrupt:\n if (entry.listener && entry.listener.interrupt)\n entry.listener.interrupt(entry);\n for (let ii = 0; ii < listeners.length; ii++) {\n let listener = listeners[ii];\n if (listener.interrupt)\n listener.interrupt(entry);\n }\n break;\n case EventType.end:\n if (entry.listener && entry.listener.end)\n entry.listener.end(entry);\n for (let ii = 0; ii < listeners.length; ii++) {\n let listener = listeners[ii];\n if (listener.end)\n listener.end(entry);\n }\n // Fall through.\n case EventType.dispose:\n if (entry.listener && entry.listener.dispose)\n entry.listener.dispose(entry);\n for (let ii = 0; ii < listeners.length; ii++) {\n let listener = listeners[ii];\n if (listener.dispose)\n listener.dispose(entry);\n }\n this.animState.trackEntryPool.free(entry);\n break;\n case EventType.complete:\n if (entry.listener && entry.listener.complete)\n entry.listener.complete(entry);\n for (let ii = 0; ii < listeners.length; ii++) {\n let listener = listeners[ii];\n if (listener.complete)\n listener.complete(entry);\n }\n break;\n case EventType.event:\n let event = objects[i++ + 2];\n if (entry.listener && entry.listener.event)\n entry.listener.event(entry, event);\n for (let ii = 0; ii < listeners.length; ii++) {\n let listener = listeners[ii];\n if (listener.event)\n listener.event(entry, event);\n }\n break;\n }\n }\n this.clear();\n this.drainDisabled = false;\n }\n clear() {\n this.objects.length = 0;\n }\n}\nexport var EventType;\n(function (EventType) {\n EventType[EventType[\"start\"] = 0] = \"start\";\n EventType[EventType[\"interrupt\"] = 1] = \"interrupt\";\n EventType[EventType[\"end\"] = 2] = \"end\";\n EventType[EventType[\"dispose\"] = 3] = \"dispose\";\n EventType[EventType[\"complete\"] = 4] = \"complete\";\n EventType[EventType[\"event\"] = 5] = \"event\";\n})(EventType || (EventType = {}));\nexport class AnimationStateAdapter {\n start(entry) {\n }\n interrupt(entry) {\n }\n end(entry) {\n }\n dispose(entry) {\n }\n complete(entry) {\n }\n event(entry, event) {\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;\nexport const SETUP = 1;\nexport const CURRENT = 2;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5pbWF0aW9uU3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQW5pbWF0aW9uU3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSW5KLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJL0Q7OztvSEFHb0g7QUFDcEgsTUFBTSxPQUFPLGNBQWM7SUFDMUIsTUFBTSxDQUFDLGVBQWUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sQ0FBQyxjQUFjO1FBQzVCLE9BQU8sY0FBYyxDQUFDLGVBQWUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsdURBQXVEO0lBQ3ZELElBQUksQ0FBcUI7SUFFekIseUZBQXlGO0lBQ3pGLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBcUIsQ0FBQztJQUV4Qzs7O3VGQUdtRjtJQUNuRixTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUVqQixNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQVMsQ0FBQztJQUM1QixTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQTBCLENBQUM7SUFDaEQsS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLFdBQVcsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBQzlCLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUUxQixjQUFjLEdBQUcsSUFBSSxJQUFJLENBQWEsR0FBRyxFQUFFLENBQUMsSUFBSSxV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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n/** Stores mix (crossfade) durations to be applied when {@link AnimationState} animations are changed. */\nexport class AnimationStateData {\n /** The SkeletonData to look up animations when they are specified by name. */\n skeletonData;\n animationToMixTime = {};\n /** The mix duration to use when no mix duration has been defined between two animations. */\n defaultMix = 0;\n constructor(skeletonData) {\n if (!skeletonData)\n throw new Error(\"skeletonData cannot be null.\");\n this.skeletonData = skeletonData;\n }\n /** Sets a mix duration by animation name.\n *\n * See {@link #setMixWith()}. */\n setMix(fromName, toName, duration) {\n let from = this.skeletonData.findAnimation(fromName);\n if (!from)\n throw new Error(\"Animation not found: \" + fromName);\n let to = this.skeletonData.findAnimation(toName);\n if (!to)\n throw new Error(\"Animation not found: \" + toName);\n this.setMixWith(from, to, duration);\n }\n /** Sets the mix duration when changing from the specified animation to the other.\n *\n * See {@link TrackEntry#mixDuration}. */\n setMixWith(from, to, duration) {\n if (!from)\n throw new Error(\"from cannot be null.\");\n if (!to)\n throw new Error(\"to cannot be null.\");\n let key = from.name + \".\" + to.name;\n this.animationToMixTime[key] = duration;\n }\n /** Returns the mix duration to use when changing from the specified animation to the other, or the {@link #defaultMix} if\n * no mix duration has been set. */\n getMix(from, to) {\n let key = from.name + \".\" + to.name;\n let value = this.animationToMixTime[key];\n return value === undefined ? this.defaultMix : value;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQW5pbWF0aW9uU3RhdGVEYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0FuaW1hdGlvblN0YXRlRGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFPL0UseUdBQXlHO0FBQ3pHLE1BQU0sT0FBTyxrQkFBa0I7SUFDOUIsOEVBQThFO0lBQzlFLFlBQVksQ0FBZTtJQUUzQixrQkFBa0IsR0FBc0IsRUFBRSxDQUFDO0lBRTNDLDRGQUE0RjtJQUM1RixVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBRWYsWUFBYSxZQUEwQjtRQUN0QyxJQUFJLENBQUMsWUFBWTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O29DQUVnQztJQUNoQyxNQUFNLENBQUUsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsUUFBZ0I7UUFDekQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQy9ELElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxFQUFFO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs2Q0FFeUM7SUFDekMsVUFBVSxDQUFFLElBQWUsRUFBRSxFQUFhLEVBQUUsUUFBZ0I7UUFDM0QsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLEVBQUU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDL0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQ3pDLENBQUM7SUFFRDt3Q0FDb0M7SUFDcEMsTUFBTSxDQUFFLElBQWUsRUFBRSxFQUFhO1FBQ3JDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDcEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3RELENBQUM7Q0FDRCJ9","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Color } from \"../Utils.js\";\nimport { VertexAttachment } from \"./Attachment.js\";\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 color = new Color(1, 1, 1, 1);\n constructor(name) {\n super(name);\n }\n copy() {\n let copy = new BoundingBoxAttachment(this.name);\n this.copyTo(copy);\n copy.color.setFromColor(this.color);\n return copy;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm91bmRpbmdCb3hBdHRhY2htZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F0dGFjaG1lbnRzL0JvdW5kaW5nQm94QXR0YWNobWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUUvRDs7OztZQUlZO0FBQ1osTUFBTSxPQUFPLHFCQUFzQixTQUFRLGdCQUFnQjtJQUMxRCxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFOUIsWUFBYSxJQUFZO1FBQ3hCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxJQUFJO1FBQ0gsSUFBSSxJQUFJLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0NBQ0QifQ==","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Color } from \"../Utils.js\";\nimport { VertexAttachment } from \"./Attachment.js\";\n/** An attachment with vertices that make up a polygon used for clipping the rendering of other attachments. */\nexport class ClippingAttachment extends VertexAttachment {\n /** Clipping is performed between the clipping polygon's slot and the end slot. Returns null if clipping is done until the end of\n * the skeleton's rendering. */\n endSlot = null;\n // Nonessential.\n /** The color of the clipping polygon as it was in Spine. Available only when nonessential data was exported. Clipping polygons\n * are not usually rendered at runtime. */\n color = new Color(0.2275, 0.2275, 0.8078, 1); // ce3a3aff\n constructor(name) {\n super(name);\n }\n copy() {\n let copy = new ClippingAttachment(this.name);\n this.copyTo(copy);\n copy.endSlot = this.endSlot;\n copy.color.setFromColor(this.color);\n return copy;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2xpcHBpbmdBdHRhY2htZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F0dGFjaG1lbnRzL0NsaXBwaW5nQXR0YWNobWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUUvRCwrR0FBK0c7QUFDL0csTUFBTSxPQUFPLGtCQUFtQixTQUFRLGdCQUFnQjtJQUN2RDttQ0FDK0I7SUFDL0IsT0FBTyxHQUFvQixJQUFJLENBQUM7SUFFaEMsZ0JBQWdCO0lBQ2hCOzhDQUMwQztJQUMxQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXO0lBRXpELFlBQWEsSUFBWTtRQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDYixDQUFDO0lBRUQsSUFBSTtRQUNILElBQUksSUFBSSxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7Q0FDRCJ9","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nexport class Texture {\n _image;\n constructor(image) {\n this._image = image;\n }\n getImage() {\n return this._image;\n }\n}\nexport var TextureFilter;\n(function (TextureFilter) {\n TextureFilter[TextureFilter[\"Nearest\"] = 9728] = \"Nearest\";\n TextureFilter[TextureFilter[\"Linear\"] = 9729] = \"Linear\";\n TextureFilter[TextureFilter[\"MipMap\"] = 9987] = \"MipMap\";\n TextureFilter[TextureFilter[\"MipMapNearestNearest\"] = 9984] = \"MipMapNearestNearest\";\n TextureFilter[TextureFilter[\"MipMapLinearNearest\"] = 9985] = \"MipMapLinearNearest\";\n TextureFilter[TextureFilter[\"MipMapNearestLinear\"] = 9986] = \"MipMapNearestLinear\";\n TextureFilter[TextureFilter[\"MipMapLinearLinear\"] = 9987] = \"MipMapLinearLinear\"; // WebGLRenderingContext.LINEAR_MIPMAP_LINEAR\n})(TextureFilter || (TextureFilter = {}));\nexport var TextureWrap;\n(function (TextureWrap) {\n TextureWrap[TextureWrap[\"MirroredRepeat\"] = 33648] = \"MirroredRepeat\";\n TextureWrap[TextureWrap[\"ClampToEdge\"] = 33071] = \"ClampToEdge\";\n TextureWrap[TextureWrap[\"Repeat\"] = 10497] = \"Repeat\"; // WebGLRenderingContext.REPEAT\n})(TextureWrap || (TextureWrap = {}));\nexport class TextureRegion {\n texture;\n u = 0;\n v = 0;\n u2 = 0;\n v2 = 0;\n width = 0;\n height = 0;\n degrees = 0;\n offsetX = 0;\n offsetY = 0;\n originalWidth = 0;\n originalHeight = 0;\n}\nexport class FakeTexture extends Texture {\n setFilters(minFilter, magFilter) { }\n setWraps(uWrap, vWrap) { }\n dispose() { }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dHVyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9UZXh0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUUvRSxNQUFNLE9BQWdCLE9BQU87SUFDbEIsTUFBTSxDQUFpQztJQUVqRCxZQUFhLEtBQXFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxRQUFRO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3BCLENBQUM7Q0FLRDtBQUVELE1BQU0sQ0FBTixJQUFZLGFBUVg7QUFSRCxXQUFZLGFBQWE7SUFDeEIsMERBQWMsQ0FBQTtJQUNkLHdEQUFhLENBQUE7SUFDYix3REFBYSxDQUFBO0lBQ2Isb0ZBQTJCLENBQUE7SUFDM0Isa0ZBQTBCLENBQUE7SUFDMUIsa0ZBQTBCLENBQUE7SUFDMUIsZ0ZBQXlCLENBQUEsQ0FBQyw2Q0FBNkM7QUFDeEUsQ0FBQyxFQVJXLGFBQWEsS0FBYixhQUFhLFFBUXhCO0FBRUQsTUFBTSxDQUFOLElBQVksV0FJWDtBQUpELFdBQVksV0FBVztJQUN0QixxRUFBc0IsQ0FBQTtJQUN0QiwrREFBbUIsQ0FBQTtJQUNuQixxREFBYyxDQUFBLENBQUMsK0JBQStCO0FBQy9DLENBQUMsRUFKVyxXQUFXLEtBQVgsV0FBVyxRQUl0QjtBQUVELE1BQU0sT0FBTyxhQUFhO0lBQ3pCLE9BQU8sQ0FBTTtJQUNiLENBQUMsR0FBRyxDQUFDLENBQUM7SUFBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDZixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN0QixPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTyxHQUFHLENBQUMsQ0FBQztJQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDekIsYUFBYSxHQUFHLENBQUMsQ0FBQztJQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7Q0FDdEM7QUFFRCxNQUFNLE9BQU8sV0FBWSxTQUFRLE9BQU87SUFDdkMsVUFBVSxDQUFFLFNBQXdCLEVBQUUsU0FBd0IsSUFBSSxDQUFDO0lBQ25FLFFBQVEsQ0FBRSxLQUFrQixFQUFFLEtBQWtCLElBQUksQ0FBQztJQUNyRCxPQUFPLEtBQU0sQ0FBQztDQUNkIn0=","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Color } from \"./Utils.js\";\n/** Stores the setup pose for a {@link Bone}. */\nexport class BoneData {\n /** The index of the bone in {@link Skeleton#getBones()}. */\n index = 0;\n /** The name of the bone, which is unique across all bones in the skeleton. */\n name;\n /** @returns May be null. */\n parent = null;\n /** The bone's length. */\n length = 0;\n /** The local x translation. */\n x = 0;\n /** The local y translation. */\n y = 0;\n /** The local rotation in degrees, counter clockwise. */\n rotation = 0;\n /** The local scaleX. */\n scaleX = 1;\n /** The local scaleY. */\n scaleY = 1;\n /** The local shearX. */\n shearX = 0;\n /** The local shearX. */\n shearY = 0;\n /** The transform mode for how parent world transforms affect this bone. */\n inherit = Inherit.Normal;\n /** When true, {@link Skeleton#updateWorldTransform()} only updates this bone if the {@link Skeleton#skin} contains this\n * bone.\n * @see Skin#bones */\n skinRequired = false;\n /** The color of the bone as it was in Spine. Available only when nonessential data was exported. Bones are not usually\n * rendered at runtime. */\n color = new Color();\n /** The bone icon as it was in Spine, or null if nonessential data was not exported. */\n icon;\n /** False if the bone was hidden in Spine and nonessential data was exported. Does not affect runtime rendering. */\n visible = false;\n constructor(index, name, parent) {\n if (index < 0)\n throw new Error(\"index must be >= 0.\");\n if (!name)\n throw new Error(\"name cannot be null.\");\n this.index = index;\n this.name = name;\n this.parent = parent;\n }\n}\n/** Determines how a bone inherits world transforms from parent bones. */\nexport var Inherit;\n(function (Inherit) {\n Inherit[Inherit[\"Normal\"] = 0] = \"Normal\";\n Inherit[Inherit[\"OnlyTranslation\"] = 1] = \"OnlyTranslation\";\n Inherit[Inherit[\"NoRotationOrReflection\"] = 2] = \"NoRotationOrReflection\";\n Inherit[Inherit[\"NoScale\"] = 3] = \"NoScale\";\n Inherit[Inherit[\"NoScaleOrReflection\"] = 4] = \"NoScaleOrReflection\";\n})(Inherit || (Inherit = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9uZURhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQm9uZURhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFbkMsZ0RBQWdEO0FBQ2hELE1BQU0sT0FBTyxRQUFRO0lBQ3BCLDREQUE0RDtJQUM1RCxLQUFLLEdBQVcsQ0FBQyxDQUFDO0lBRWxCLDhFQUE4RTtJQUM5RSxJQUFJLENBQVM7SUFFYiw0QkFBNEI7SUFDNUIsTUFBTSxHQUFvQixJQUFJLENBQUM7SUFFL0IseUJBQXlCO0lBQ3pCLE1BQU0sR0FBVyxDQUFDLENBQUM7SUFFbkIsK0JBQStCO0lBQy9CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFTiwrQkFBK0I7SUFDL0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLHdEQUF3RDtJQUN4RCxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRWIsd0JBQXdCO0lBQ3hCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLHdCQUF3QjtJQUN4QixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRVgsd0JBQXdCO0lBQ3hCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCwyRUFBMkU7SUFDM0UsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFFekI7OzBCQUVzQjtJQUN0QixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBRXJCOzhCQUMwQjtJQUMxQixLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUVwQix1RkFBdUY7SUFDdkYsSUFBSSxDQUFVO0lBRWQsbUhBQW1IO0lBQ25ILE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFaEIsWUFBYSxLQUFhLEVBQUUsSUFBWSxFQUFFLE1BQXVCO1FBQ2hFLElBQUksS0FBSyxHQUFHLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdEIsQ0FBQztDQUNEO0FBRUQseUVBQXlFO0FBQ3pFLE1BQU0sQ0FBTixJQUFZLE9BQXlGO0FBQXJHLFdBQVksT0FBTztJQUFHLHlDQUFNLENBQUE7SUFBRSwyREFBZSxDQUFBO0lBQUUseUVBQXNCLENBQUE7SUFBRSwyQ0FBTyxDQUFBO0lBQUUsbUVBQW1CLENBQUE7QUFBQyxDQUFDLEVBQXpGLE9BQU8sS0FBUCxPQUFPLFFBQWtGIn0=","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { ConstraintData } from \"./ConstraintData.js\";\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 /** The bones that will be modified by this path constraint. */\n bones = new Array();\n /** The slot whose path attachment will be used to constrained the bones. */\n _target = null;\n set target(slotData) { this._target = slotData; }\n get target() {\n if (!this._target)\n throw new Error(\"SlotData not set.\");\n else\n return this._target;\n }\n /** The mode for positioning the first bone on the path. */\n positionMode = PositionMode.Fixed;\n /** The mode for positioning the bones after the first bone on the path. */\n spacingMode = SpacingMode.Fixed;\n /** The mode for adjusting the rotation of the bones. */\n rotateMode = RotateMode.Chain;\n /** An offset added to the constrained bone rotation. */\n offsetRotation = 0;\n /** The position along the path. */\n position = 0;\n /** The spacing between bones. */\n spacing = 0;\n mixRotate = 0;\n mixX = 0;\n mixY = 0;\n constructor(name) {\n super(name, 0, false);\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 var PositionMode;\n(function (PositionMode) {\n PositionMode[PositionMode[\"Fixed\"] = 0] = \"Fixed\";\n PositionMode[PositionMode[\"Percent\"] = 1] = \"Percent\";\n})(PositionMode || (PositionMode = {}));\n/** Controls how bones after the first bone are positioned along the path.\n *\n * See [spacing](http://esotericsoftware.com/spine-path-constraints#Spacing) in the Spine User Guide. */\nexport var SpacingMode;\n(function (SpacingMode) {\n SpacingMode[SpacingMode[\"Length\"] = 0] = \"Length\";\n SpacingMode[SpacingMode[\"Fixed\"] = 1] = \"Fixed\";\n SpacingMode[SpacingMode[\"Percent\"] = 2] = \"Percent\";\n SpacingMode[SpacingMode[\"Proportional\"] = 3] = \"Proportional\";\n})(SpacingMode || (SpacingMode = {}));\n/** Controls how bones are rotated, translated, and scaled to match the path.\n *\n * See [rotate mix](http://esotericsoftware.com/spine-path-constraints#Rotate-mix) in the Spine User Guide. */\nexport var RotateMode;\n(function (RotateMode) {\n RotateMode[RotateMode[\"Tangent\"] = 0] = \"Tangent\";\n RotateMode[RotateMode[\"Chain\"] = 1] = \"Chain\";\n RotateMode[RotateMode[\"ChainScale\"] = 2] = \"ChainScale\";\n})(RotateMode || (RotateMode = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0aENvbnN0cmFpbnREYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1BhdGhDb25zdHJhaW50RGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXJEOzt5R0FFeUc7QUFDekcsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQWM7SUFFckQsK0RBQStEO0lBQy9ELEtBQUssR0FBRyxJQUFJLEtBQUssRUFBWSxDQUFDO0lBRTlCLDRFQUE0RTtJQUNwRSxPQUFPLEdBQW9CLElBQUksQ0FBQztJQUN4QyxJQUFXLE1BQU0sQ0FBRSxRQUFrQixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNuRSxJQUFXLE1BQU07UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBOztZQUNsRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxZQUFZLEdBQWlCLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFFaEQsMkVBQTJFO0lBQzNFLFdBQVcsR0FBZ0IsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUU3Qyx3REFBd0Q7SUFDeEQsVUFBVSxHQUFlLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFFMUMsd0RBQXdEO0lBQ3hELGNBQWMsR0FBVyxDQUFDLENBQUM7SUFFM0IsbUNBQW1DO0lBQ25DLFFBQVEsR0FBVyxDQUFDLENBQUM7SUFFckIsaUNBQWlDO0lBQ2pDLE9BQU8sR0FBVyxDQUFDLENBQUM7SUFFcEIsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLElBQUksR0FBRyxDQUFDLENBQUM7SUFDVCxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRVQsWUFBYSxJQUFZO1FBQ3hCLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FDRDtBQUVEOzswR0FFMEc7QUFDMUcsTUFBTSxDQUFOLElBQVksWUFBK0I7QUFBM0MsV0FBWSxZQUFZO0lBQUcsaURBQUssQ0FBQTtJQUFFLHFEQUFPLENBQUE7QUFBQyxDQUFDLEVBQS9CLFlBQVksS0FBWixZQUFZLFFBQW1CO0FBRTNDOzt3R0FFd0c7QUFDeEcsTUFBTSxDQUFOLElBQVksV0FBb0Q7QUFBaEUsV0FBWSxXQUFXO0lBQUcsaURBQU0sQ0FBQTtJQUFFLCtDQUFLLENBQUE7SUFBRSxtREFBTyxDQUFBO0lBQUUsNkRBQVksQ0FBQTtBQUFDLENBQUMsRUFBcEQsV0FBVyxLQUFYLFdBQVcsUUFBeUM7QUFFaEU7OzhHQUU4RztBQUM5RyxNQUFNLENBQU4sSUFBWSxVQUF5QztBQUFyRCxXQUFZLFVBQVU7SUFBRyxpREFBTyxDQUFBO0lBQUUsNkNBQUssQ0FBQTtJQUFFLHVEQUFVLENBQUE7QUFBQyxDQUFDLEVBQXpDLFVBQVUsS0FBVixVQUFVLFFBQStCIn0=","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\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 { Slot } from \"./Slot.js\";\nimport { TransformConstraint } from \"./TransformConstraint.js\";\nimport { Color, Utils, MathUtils, Vector2 } from \"./Utils.js\";\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 static quadTriangles = [0, 1, 2, 2, 3, 0];\n static yDown = false;\n /** The skeleton's setup pose data. */\n data;\n /** The skeleton's bones, sorted parent first. The root bone is always the first bone. */\n bones;\n /** The skeleton's slots in the setup pose draw order. */\n slots;\n /** The skeleton's slots in the order they should be drawn. The returned array may be modified to change the draw order. */\n drawOrder;\n /** The skeleton's IK constraints. */\n ikConstraints;\n /** The skeleton's transform constraints. */\n transformConstraints;\n /** The skeleton's path constraints. */\n pathConstraints;\n /** The skeleton's physics constraints. */\n physicsConstraints;\n /** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link #updateCache()}. */\n _updateCache = new Array();\n /** The skeleton's current skin. May be null. */\n skin = null;\n /** The color to tint all the skeleton's attachments. */\n color;\n /** Scales the entire skeleton on the X axis. This affects all bones, even if the bone's transform mode disallows scale\n * inheritance. */\n scaleX = 1;\n /** Scales the entire skeleton on the Y axis. This affects all bones, even if the bone's transform mode disallows scale\n * inheritance. */\n _scaleY = 1;\n get scaleY() {\n return Skeleton.yDown ? -this._scaleY : this._scaleY;\n }\n set scaleY(scaleY) {\n this._scaleY = scaleY;\n }\n /** Sets the skeleton X position, which is added to the root bone worldX position. */\n x = 0;\n /** Sets the skeleton Y position, which is added to the root bone worldY position. */\n y = 0;\n /** Returns the skeleton's time. This is used for time-based manipulations, such as {@link PhysicsConstraint}.\n * <p>\n * See {@link #update(float)}. */\n time = 0;\n constructor(data) {\n if (!data)\n throw new Error(\"data cannot be null.\");\n this.data = data;\n this.bones = new Array();\n for (let i = 0; i < data.bones.length; i++) {\n let boneData = data.bones[i];\n let bone;\n if (!boneData.parent)\n bone = new Bone(boneData, this, null);\n else {\n let parent = this.bones[boneData.parent.index];\n bone = new Bone(boneData, this, parent);\n parent.children.push(bone);\n }\n this.bones.push(bone);\n }\n this.slots = new Array();\n this.drawOrder = new Array();\n for (let i = 0; i < data.slots.length; i++) {\n let slotData = data.slots[i];\n let bone = this.bones[slotData.boneData.index];\n let slot = new Slot(slotData, bone);\n this.slots.push(slot);\n this.drawOrder.push(slot);\n }\n this.ikConstraints = new Array();\n for (let i = 0; i < data.ikConstraints.length; i++) {\n let ikConstraintData = data.ikConstraints[i];\n this.ikConstraints.push(new IkConstraint(ikConstraintData, this));\n }\n this.transformConstraints = new Array();\n for (let i = 0; i < data.transformConstraints.length; i++) {\n let transformConstraintData = data.transformConstraints[i];\n this.transformConstraints.push(new TransformConstraint(transformConstraintData, this));\n }\n this.pathConstraints = new Array();\n for (let i = 0; i < data.pathConstraints.length; i++) {\n let pathConstraintData = data.pathConstraints[i];\n this.pathConstraints.push(new PathConstraint(pathConstraintData, this));\n }\n this.physicsConstraints = new Array();\n for (let i = 0; i < data.physicsConstraints.length; i++) {\n let physicsConstraintData = data.physicsConstraints[i];\n this.physicsConstraints.push(new PhysicsConstraint(physicsConstraintData, this));\n }\n this.color = new Color(1, 1, 1, 1);\n this.updateCache();\n }\n /** Caches information about bones and constraints. Must be called if the {@link #getSkin()} is modified or if bones,\n * constraints, or weighted path attachments are added or removed. */\n updateCache() {\n let updateCache = this._updateCache;\n updateCache.length = 0;\n let bones = this.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n bone.sorted = bone.data.skinRequired;\n bone.active = !bone.sorted;\n }\n if (this.skin) {\n let skinBones = this.skin.bones;\n for (let i = 0, n = this.skin.bones.length; i < n; i++) {\n let bone = this.bones[skinBones[i].index];\n do {\n bone.sorted = false;\n bone.active = true;\n bone = bone.parent;\n } while (bone);\n }\n }\n // IK first, lowest hierarchy depth first.\n let ikConstraints = this.ikConstraints;\n let transformConstraints = this.transformConstraints;\n let pathConstraints = this.pathConstraints;\n let physicsConstraints = this.physicsConstraints;\n let ikCount = ikConstraints.length, transformCount = transformConstraints.length, pathCount = pathConstraints.length, physicsCount = this.physicsConstraints.length;\n let constraintCount = ikCount + transformCount + pathCount + physicsCount;\n outer: for (let i = 0; i < constraintCount; i++) {\n for (let ii = 0; ii < ikCount; ii++) {\n let constraint = ikConstraints[ii];\n if (constraint.data.order == i) {\n this.sortIkConstraint(constraint);\n continue outer;\n }\n }\n for (let ii = 0; ii < transformCount; ii++) {\n let constraint = transformConstraints[ii];\n if (constraint.data.order == i) {\n this.sortTransformConstraint(constraint);\n continue outer;\n }\n }\n for (let ii = 0; ii < pathCount; ii++) {\n let constraint = pathConstraints[ii];\n if (constraint.data.order == i) {\n this.sortPathConstraint(constraint);\n continue outer;\n }\n }\n for (let ii = 0; ii < physicsCount; ii++) {\n const constraint = physicsConstraints[ii];\n if (constraint.data.order == i) {\n this.sortPhysicsConstraint(constraint);\n continue outer;\n }\n }\n }\n for (let i = 0, n = bones.length; i < n; i++)\n this.sortBone(bones[i]);\n }\n sortIkConstraint(constraint) {\n constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));\n if (!constraint.active)\n return;\n let target = constraint.target;\n this.sortBone(target);\n let constrained = constraint.bones;\n let parent = constrained[0];\n this.sortBone(parent);\n if (constrained.length == 1) {\n this._updateCache.push(constraint);\n this.sortReset(parent.children);\n }\n else {\n let child = constrained[constrained.length - 1];\n this.sortBone(child);\n this._updateCache.push(constraint);\n this.sortReset(parent.children);\n child.sorted = true;\n }\n }\n sortPathConstraint(constraint) {\n constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));\n if (!constraint.active)\n return;\n let slot = constraint.target;\n let slotIndex = slot.data.index;\n let slotBone = slot.bone;\n if (this.skin)\n this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);\n if (this.data.defaultSkin && this.data.defaultSkin != this.skin)\n this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);\n for (let i = 0, n = this.data.skins.length; i < n; i++)\n this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);\n let attachment = slot.getAttachment();\n if (attachment instanceof PathAttachment)\n this.sortPathConstraintAttachmentWith(attachment, slotBone);\n let constrained = constraint.bones;\n let boneCount = constrained.length;\n for (let i = 0; i < boneCount; i++)\n this.sortBone(constrained[i]);\n this._updateCache.push(constraint);\n for (let i = 0; i < boneCount; i++)\n this.sortReset(constrained[i].children);\n for (let i = 0; i < boneCount; i++)\n constrained[i].sorted = true;\n }\n sortTransformConstraint(constraint) {\n constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));\n if (!constraint.active)\n return;\n this.sortBone(constraint.target);\n let constrained = constraint.bones;\n let boneCount = constrained.length;\n if (constraint.data.local) {\n for (let i = 0; i < boneCount; i++) {\n let child = constrained[i];\n this.sortBone(child.parent);\n this.sortBone(child);\n }\n }\n else {\n for (let i = 0; i < boneCount; i++) {\n this.sortBone(constrained[i]);\n }\n }\n this._updateCache.push(constraint);\n for (let i = 0; i < boneCount; i++)\n this.sortReset(constrained[i].children);\n for (let i = 0; i < boneCount; i++)\n constrained[i].sorted = true;\n }\n sortPathConstraintAttachment(skin, slotIndex, slotBone) {\n let attachments = skin.attachments[slotIndex];\n if (!attachments)\n return;\n for (let key in attachments) {\n this.sortPathConstraintAttachmentWith(attachments[key], slotBone);\n }\n }\n sortPathConstraintAttachmentWith(attachment, slotBone) {\n if (!(attachment instanceof PathAttachment))\n return;\n let pathBones = attachment.bones;\n if (!pathBones)\n this.sortBone(slotBone);\n else {\n let bones = this.bones;\n for (let i = 0, n = pathBones.length; i < n;) {\n let nn = pathBones[i++];\n nn += i;\n while (i < nn)\n this.sortBone(bones[pathBones[i++]]);\n }\n }\n }\n sortPhysicsConstraint(constraint) {\n const bone = constraint.bone;\n constraint.active = bone.active && (!constraint.data.skinRequired || (this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true)));\n if (!constraint.active)\n return;\n this.sortBone(bone);\n this._updateCache.push(constraint);\n this.sortReset(bone.children);\n bone.sorted = true;\n }\n sortBone(bone) {\n if (!bone)\n return;\n if (bone.sorted)\n return;\n let parent = bone.parent;\n if (parent)\n this.sortBone(parent);\n bone.sorted = true;\n this._updateCache.push(bone);\n }\n sortReset(bones) {\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n if (!bone.active)\n continue;\n if (bone.sorted)\n this.sortReset(bone.children);\n bone.sorted = false;\n }\n }\n /** Updates the world transform for each bone and applies all constraints.\n *\n * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine\n * Runtimes Guide. */\n updateWorldTransform(physics) {\n if (physics === undefined || physics === null)\n throw new Error(\"physics is undefined\");\n let bones = this.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n bone.ax = bone.x;\n bone.ay = bone.y;\n bone.arotation = bone.rotation;\n bone.ascaleX = bone.scaleX;\n bone.ascaleY = bone.scaleY;\n bone.ashearX = bone.shearX;\n bone.ashearY = bone.shearY;\n }\n let updateCache = this._updateCache;\n for (let i = 0, n = updateCache.length; i < n; i++)\n updateCache[i].update(physics);\n }\n updateWorldTransformWith(physics, parent) {\n // Apply the parent bone transform to the root bone. The root bone always inherits scale, rotation and reflection.\n let rootBone = this.getRootBone();\n if (!rootBone)\n throw new Error(\"Root bone must not be null.\");\n let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n rootBone.worldX = pa * this.x + pb * this.y + parent.worldX;\n rootBone.worldY = pc * this.x + pd * this.y + parent.worldY;\n const rx = (rootBone.rotation + rootBone.shearX) * MathUtils.degRad;\n const ry = (rootBone.rotation + 90 + rootBone.shearY) * MathUtils.degRad;\n const la = Math.cos(rx) * rootBone.scaleX;\n const lb = Math.cos(ry) * rootBone.scaleY;\n const lc = Math.sin(rx) * rootBone.scaleX;\n const ld = Math.sin(ry) * rootBone.scaleY;\n rootBone.a = (pa * la + pb * lc) * this.scaleX;\n rootBone.b = (pa * lb + pb * ld) * this.scaleX;\n rootBone.c = (pc * la + pd * lc) * this.scaleY;\n rootBone.d = (pc * lb + pd * ld) * this.scaleY;\n // Update everything except root bone.\n let updateCache = this._updateCache;\n for (let i = 0, n = updateCache.length; i < n; i++) {\n let updatable = updateCache[i];\n if (updatable != rootBone)\n updatable.update(physics);\n }\n }\n /** Sets the bones, constraints, and slots to their setup pose values. */\n setToSetupPose() {\n this.setBonesToSetupPose();\n this.setSlotsToSetupPose();\n }\n /** Sets the bones and constraints to their setup pose values. */\n setBonesToSetupPose() {\n for (const bone of this.bones)\n bone.setToSetupPose();\n for (const constraint of this.ikConstraints)\n constraint.setToSetupPose();\n for (const constraint of this.transformConstraints)\n constraint.setToSetupPose();\n for (const constraint of this.pathConstraints)\n constraint.setToSetupPose();\n for (const constraint of this.physicsConstraints)\n constraint.setToSetupPose();\n }\n /** Sets the slots and draw order to their setup pose values. */\n setSlotsToSetupPose() {\n let slots = this.slots;\n Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);\n for (let i = 0, n = slots.length; i < n; i++)\n slots[i].setToSetupPose();\n }\n /** @returns May return null. */\n getRootBone() {\n if (this.bones.length == 0)\n return null;\n return this.bones[0];\n }\n /** @returns May be null. */\n findBone(boneName) {\n if (!boneName)\n throw new Error(\"boneName cannot be null.\");\n let bones = this.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n if (bone.data.name == boneName)\n return bone;\n }\n return null;\n }\n /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it\n * repeatedly.\n * @returns May be null. */\n findSlot(slotName) {\n if (!slotName)\n throw new Error(\"slotName cannot be null.\");\n let slots = this.slots;\n for (let i = 0, n = slots.length; i < n; i++) {\n let slot = slots[i];\n if (slot.data.name == slotName)\n return slot;\n }\n return null;\n }\n /** Sets a skin by name.\n *\n * See {@link #setSkin()}. */\n setSkinByName(skinName) {\n let skin = this.data.findSkin(skinName);\n if (!skin)\n throw new Error(\"Skin not found: \" + skinName);\n this.setSkin(skin);\n }\n /** Sets the skin used to look up attachments before looking in the {@link SkeletonData#defaultSkin default skin}. If the\n * skin is changed, {@link #updateCache()} is called.\n *\n * Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no\n * old skin, each slot's setup mode attachment is attached from the new skin.\n *\n * After changing the skin, the visible attachments can be reset to those attached in the setup pose by calling\n * {@link #setSlotsToSetupPose()}. Also, often {@link AnimationState#apply()} is called before the next time the\n * skeleton is rendered to allow any attachment keys in the current animation(s) to hide or show attachments from the new skin.\n * @param newSkin May be null. */\n setSkin(newSkin) {\n if (newSkin == this.skin)\n return;\n if (newSkin) {\n if (this.skin)\n newSkin.attachAll(this, this.skin);\n else {\n let slots = this.slots;\n for (let i = 0, n = slots.length; i < n; i++) {\n let slot = slots[i];\n let name = slot.data.attachmentName;\n if (name) {\n let attachment = newSkin.getAttachment(i, name);\n if (attachment)\n slot.setAttachment(attachment);\n }\n }\n }\n }\n this.skin = newSkin;\n this.updateCache();\n }\n /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot name and attachment\n * name.\n *\n * See {@link #getAttachment()}.\n * @returns May be null. */\n getAttachmentByName(slotName, attachmentName) {\n let slot = this.data.findSlot(slotName);\n if (!slot)\n throw new Error(`Can't find slot with name ${slotName}`);\n return this.getAttachment(slot.index, attachmentName);\n }\n /** Finds an attachment by looking in the {@link #skin} and {@link SkeletonData#defaultSkin} using the slot index and\n * attachment name. First the skin is checked and if the attachment was not found, the default skin is checked.\n *\n * See [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide.\n * @returns May be null. */\n getAttachment(slotIndex, attachmentName) {\n if (!attachmentName)\n throw new Error(\"attachmentName cannot be null.\");\n if (this.skin) {\n let attachment = this.skin.getAttachment(slotIndex, attachmentName);\n if (attachment)\n return attachment;\n }\n if (this.data.defaultSkin)\n return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);\n return null;\n }\n /** A convenience method to set an attachment by finding the slot with {@link #findSlot()}, finding the attachment with\n * {@link #getAttachment()}, then setting the slot's {@link Slot#attachment}.\n * @param attachmentName May be null to clear the slot's attachment. */\n setAttachment(slotName, attachmentName) {\n if (!slotName)\n throw new Error(\"slotName cannot be null.\");\n let slots = this.slots;\n for (let i = 0, n = slots.length; i < n; i++) {\n let slot = slots[i];\n if (slot.data.name == slotName) {\n let attachment = null;\n if (attachmentName) {\n attachment = this.getAttachment(i, attachmentName);\n if (!attachment)\n throw new Error(\"Attachment not found: \" + attachmentName + \", for slot: \" + slotName);\n }\n slot.setAttachment(attachment);\n return;\n }\n }\n throw new Error(\"Slot not found: \" + slotName);\n }\n /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method\n * than to call it repeatedly.\n * @return May be null. */\n findIkConstraint(constraintName) {\n if (!constraintName)\n throw new Error(\"constraintName cannot be null.\");\n return this.ikConstraints.find((constraint) => constraint.data.name == constraintName) ?? null;\n }\n /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of\n * this method than to call it repeatedly.\n * @return May be null. */\n findTransformConstraint(constraintName) {\n if (!constraintName)\n throw new Error(\"constraintName cannot be null.\");\n return this.transformConstraints.find((constraint) => constraint.data.name == constraintName) ?? null;\n }\n /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method\n * than to call it repeatedly.\n * @return May be null. */\n findPathConstraint(constraintName) {\n if (!constraintName)\n throw new Error(\"constraintName cannot be null.\");\n return this.pathConstraints.find((constraint) => constraint.data.name == constraintName) ?? null;\n }\n /** Finds a physics constraint by comparing each physics constraint's name. It is more efficient to cache the results of this\n * method than to call it repeatedly. */\n findPhysicsConstraint(constraintName) {\n if (constraintName == null)\n throw new Error(\"constraintName cannot be null.\");\n return this.physicsConstraints.find((constraint) => constraint.data.name == constraintName) ?? null;\n }\n /** 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 * Note that this method will create temporary objects which can add to garbage collection pressure. Use `getBounds()` if garbage collection is a concern. */\n getBoundsRect() {\n let offset = new Vector2();\n let size = new Vector2();\n this.getBounds(offset, size);\n return { x: offset.x, y: offset.y, width: size.x, height: size.y };\n }\n /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose.\n * @param offset An output value, the distance from the skeleton origin to the bottom left corner of the AABB.\n * @param size An output value, the width and height of the AABB.\n * @param temp Working memory to temporarily store attachments' computed world vertices.\n * @param clipper {@link SkeletonClipping} to use. If <code>null</code>, no clipping is applied. */\n getBounds(offset, size, temp = new Array(2), clipper = null) {\n if (!offset)\n throw new Error(\"offset cannot be null.\");\n if (!size)\n throw new Error(\"size cannot be null.\");\n let drawOrder = this.drawOrder;\n let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n for (let i = 0, n = drawOrder.length; i < n; i++) {\n let slot = drawOrder[i];\n if (!slot.bone.active)\n continue;\n let verticesLength = 0;\n let vertices = null;\n let triangles = null;\n let attachment = slot.getAttachment();\n if (attachment instanceof RegionAttachment) {\n verticesLength = 8;\n vertices = Utils.setArraySize(temp, verticesLength, 0);\n attachment.computeWorldVertices(slot, vertices, 0, 2);\n triangles = Skeleton.quadTriangles;\n }\n else if (attachment instanceof MeshAttachment) {\n let mesh = attachment;\n verticesLength = mesh.worldVerticesLength;\n vertices = Utils.setArraySize(temp, verticesLength, 0);\n mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);\n triangles = mesh.triangles;\n }\n else if (attachment instanceof ClippingAttachment && clipper != null) {\n clipper.clipStart(slot, attachment);\n continue;\n }\n if (vertices && triangles) {\n if (clipper != null && clipper.isClipping()) {\n clipper.clipTriangles(vertices, triangles, triangles.length);\n vertices = clipper.clippedVertices;\n verticesLength = clipper.clippedVertices.length;\n }\n for (let ii = 0, nn = vertices.length; ii < nn; ii += 2) {\n let x = vertices[ii], y = vertices[ii + 1];\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n if (clipper != null)\n clipper.clipEndWithSlot(slot);\n }\n if (clipper != null)\n clipper.clipEnd();\n offset.set(minX, minY);\n size.set(maxX - minX, maxY - minY);\n }\n /** Increments the skeleton's {@link #time}. */\n update(delta) {\n this.time += delta;\n }\n physicsTranslate(x, y) {\n const physicsConstraints = this.physicsConstraints;\n for (let i = 0, n = physicsConstraints.length; i < n; i++)\n physicsConstraints[i].translate(x, y);\n }\n /** Calls {@link PhysicsConstraint#rotate(float, float, float)} for each physics constraint. */\n physicsRotate(x, y, degrees) {\n const physicsConstraints = this.physicsConstraints;\n for (let i = 0, n = physicsConstraints.length; i < n; i++)\n physicsConstraints[i].rotate(x, y, degrees);\n }\n}\n/** Determines how physics and other non-deterministic updates are applied. */\nexport var Physics;\n(function (Physics) {\n /** Physics are not updated or applied. */\n Physics[Physics[\"none\"] = 0] = \"none\";\n /** Physics are reset to the current pose. */\n Physics[Physics[\"reset\"] = 1] = \"reset\";\n /** Physics are updated and the pose from physics is applied. */\n Physics[Physics[\"update\"] = 2] = \"update\";\n /** Physics are not updated but the pose from physics is applied. */\n Physics[Physics[\"pose\"] = 3] = \"pose\";\n})(Physics || (Physics = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRy9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTNELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDakMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBbUIsTUFBTSxZQUFZLENBQUM7QUFFL0U7O2tJQUVrSTtBQUNsSSxNQUFNLE9BQU8sUUFBUTtJQUNaLE1BQU0sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBRXJCLHNDQUFzQztJQUN0QyxJQUFJLENBQWU7SUFFbkIseUZBQXlGO0lBQ3pGLEtBQUssQ0FBYztJQUVuQix5REFBeUQ7SUFDekQsS0FBSyxD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LE1BQU0sQ0FBQztRQUN6RSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDMUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQzFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUMxQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDMUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDL0MsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDL0MsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDL0MsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFFL0Msc0NBQXNDO1FBQ3RDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuRCxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Color } from \"./Utils.js\";\n/** Stores the setup pose for a {@link Slot}. */\nexport class SlotData {\n /** The index of the slot in {@link Skeleton#getSlots()}. */\n index = 0;\n /** The name of the slot, which is unique across all slots in the skeleton. */\n name;\n /** The bone this slot belongs to. */\n boneData;\n /** The color used to tint the slot's attachment. If {@link #getDarkColor()} is set, this is used as the light color for two\n * color tinting. */\n color = new Color(1, 1, 1, 1);\n /** 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 * color's alpha is not used. */\n darkColor = null;\n /** The name of the attachment that is visible for this slot in the setup pose, or null if no attachment is visible. */\n attachmentName = null;\n /** The blend mode for drawing the slot's attachment. */\n blendMode = BlendMode.Normal;\n /** False if the slot was hidden in Spine and nonessential data was exported. Does not affect runtime rendering. */\n visible = true;\n constructor(index, name, boneData) {\n if (index < 0)\n throw new Error(\"index must be >= 0.\");\n if (!name)\n throw new Error(\"name cannot be null.\");\n if (!boneData)\n throw new Error(\"boneData cannot be null.\");\n this.index = index;\n this.name = name;\n this.boneData = boneData;\n }\n}\n/** Determines how images are blended with existing pixels when drawn. */\nexport var BlendMode;\n(function (BlendMode) {\n BlendMode[BlendMode[\"Normal\"] = 0] = \"Normal\";\n BlendMode[BlendMode[\"Additive\"] = 1] = \"Additive\";\n BlendMode[BlendMode[\"Multiply\"] = 2] = \"Multiply\";\n BlendMode[BlendMode[\"Screen\"] = 3] = \"Screen\";\n})(BlendMode || (BlendMode = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2xvdERhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2xvdERhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRy9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFbkMsZ0RBQWdEO0FBQ2hELE1BQU0sT0FBTyxRQUFRO0lBQ3BCLDREQUE0RDtJQUM1RCxLQUFLLEdBQVcsQ0FBQyxDQUFDO0lBRWxCLDhFQUE4RTtJQUM5RSxJQUFJLENBQVM7SUFFYixxQ0FBcUM7SUFDckMsUUFBUSxDQUFXO0lBRW5CO3dCQUNvQjtJQUNwQixLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFOUI7b0NBQ2dDO0lBQ2hDLFNBQVMsR0FBaUIsSUFBSSxDQUFDO0lBRS9CLHVIQUF1SDtJQUN2SCxjQUFjLEdBQWtCLElBQUksQ0FBQztJQUVyQyx3REFBd0Q7SUFDeEQsU0FBUyxHQUFjLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFFeEMsbUhBQW1IO0lBQ25ILE9BQU8sR0FBRyxJQUFJLENBQUM7SUFFZixZQUFhLEtBQWEsRUFBRSxJQUFZLEVBQUUsUUFBa0I7UUFDM0QsSUFBSSxLQUFLLEdBQUcsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMxQixDQUFDO0NBQ0Q7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxDQUFOLElBQVksU0FBZ0Q7QUFBNUQsV0FBWSxTQUFTO0lBQUcsNkNBQU0sQ0FBQTtJQUFFLGlEQUFRLENBQUE7SUFBRSxpREFBUSxDQUFBO0lBQUUsNkNBQU0sQ0FBQTtBQUFDLENBQUMsRUFBaEQsU0FBUyxLQUFULFNBQVMsUUFBdUMifQ==","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Animation, 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, SequenceTimeline, PhysicsConstraintResetTimeline, PhysicsConstraintInertiaTimeline, PhysicsConstraintStrengthTimeline, PhysicsConstraintDampingTimeline, PhysicsConstraintMassTimeline, PhysicsConstraintWindTimeline, PhysicsConstraintGravityTimeline, PhysicsConstraintMixTimeline } from \"./Animation.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/** 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 /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at\n * runtime than were used in Spine.\n *\n * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */\n scale = 1;\n attachmentLoader;\n linkedMeshes = new Array();\n constructor(attachmentLoader) {\n this.attachmentLoader = attachmentLoader;\n }\n readSkeletonData(binary) {\n let scale = this.scale;\n let skeletonData = new SkeletonData();\n skeletonData.name = \"\"; // BOZO\n let input = new BinaryInput(binary);\n let lowHash = input.readInt32();\n let highHash = input.readInt32();\n skeletonData.hash = highHash == 0 && lowHash == 0 ? null : highHash.toString(16) + lowHash.toString(16);\n skeletonData.version = input.readString();\n skeletonData.x = input.readFloat();\n skeletonData.y = input.readFloat();\n skeletonData.width = input.readFloat();\n skeletonData.height = input.readFloat();\n skeletonData.referenceScale = input.readFloat() * scale;\n let nonessential = input.readBoolean();\n if (nonessential) {\n skeletonData.fps = input.readFloat();\n skeletonData.imagesPath = input.readString();\n skeletonData.audioPath = input.readString();\n }\n let n = 0;\n // Strings.\n n = input.readInt(true);\n for (let i = 0; i < n; i++) {\n let str = input.readString();\n if (!str)\n throw new Error(\"String in string table must not be null.\");\n input.strings.push(str);\n }\n // Bones.\n n = input.readInt(true);\n for (let i = 0; i < n; i++) {\n let name = input.readString();\n if (!name)\n throw new Error(\"Bone name must not be null.\");\n let parent = i == 0 ? null : skeletonData.bones[input.readInt(true)];\n let data = new BoneData(i, name, parent);\n data.rotation = input.readFloat();\n data.x = input.readFloat() * scale;\n data.y = input.readFloat() * scale;\n data.scaleX = input.readFloat();\n data.scaleY = input.readFloat();\n data.shearX = input.readFloat();\n data.shearY = input.readFloat();\n data.length = input.readFloat() * scale;\n data.inherit = input.readByte();\n data.skinRequired = input.readBoolean();\n if (nonessential) {\n Color.rgba8888ToColor(data.color, input.readInt32());\n data.icon = input.readString() ?? undefined;\n data.visible = input.readBoolean();\n }\n skeletonData.bones.push(data);\n }\n // Slots.\n n = input.readInt(true);\n for (let i = 0; i < n; i++) {\n let slotName = input.readString();\n if (!slotName)\n throw new Error(\"Slot name must not be null.\");\n let boneData = skeletonData.bones[input.readInt(true)];\n let data = new SlotData(i, slotName, boneData);\n Color.rgba8888ToColor(data.color, input.readInt32());\n let darkColor = input.readInt32();\n if (darkColor != -1)\n Color.rgb888ToColor(data.darkColor = new Color(), darkColor);\n data.attachmentName = input.readStringRef();\n data.blendMode = input.readInt(true);\n if (nonessential)\n data.visible = input.readBoolean();\n skeletonData.slots.push(data);\n }\n // IK constraints.\n n = input.readInt(true);\n for (let i = 0, nn; i < n; i++) {\n let name = input.readString();\n if (!name)\n throw new Error(\"IK constraint data name must not be null.\");\n let data = new IkConstraintData(name);\n data.order = input.readInt(true);\n nn = input.readInt(true);\n for (let ii = 0; ii < nn; ii++)\n data.bones.push(skeletonData.bones[input.readInt(true)]);\n data.target = skeletonData.bones[input.readInt(true)];\n let flags = input.readByte();\n data.skinRequired = (flags & 1) != 0;\n data.bendDirection = (flags & 2) != 0 ? 1 : -1;\n data.compress = (flags & 4) != 0;\n data.stretch = (flags & 8) != 0;\n data.uniform = (flags & 16) != 0;\n if ((flags & 32) != 0)\n data.mix = (flags & 64) != 0 ? input.readFloat() : 1;\n if ((flags & 128) != 0)\n data.softness = input.readFloat() * scale;\n skeletonData.ikConstraints.push(data);\n }\n // Transform constraints.\n n = input.readInt(true);\n for (let i = 0, nn; i < n; i++) {\n let name = input.readString();\n if (!name)\n throw new Error(\"Transform constraint data name must not be null.\");\n let data = new TransformConstraintData(name);\n data.order = input.readInt(true);\n nn = input.readInt(true);\n for (let ii = 0; ii < nn; ii++)\n data.bones.push(skeletonData.bones[input.readInt(true)]);\n data.target = skeletonData.bones[input.readInt(true)];\n let flags = input.readByte();\n data.skinRequired = (flags & 1) != 0;\n data.local = (flags & 2) != 0;\n data.relative = (flags & 4) != 0;\n if ((flags & 8) != 0)\n data.offsetRotation = input.readFloat();\n if ((flags & 16) != 0)\n data.offsetX = input.readFloat() * scale;\n if ((flags & 32) != 0)\n data.offsetY = input.readFloat() * scale;\n if ((flags & 64) != 0)\n data.offsetScaleX = input.readFloat();\n if ((flags & 128) != 0)\n data.offsetScaleY = input.readFloat();\n flags = input.readByte();\n if ((flags & 1) != 0)\n data.offsetShearY = input.readFloat();\n if ((flags & 2) != 0)\n data.mixRotate = input.readFloat();\n if ((flags & 4) != 0)\n data.mixX = input.readFloat();\n if ((flags & 8) != 0)\n data.mixY = input.readFloat();\n if ((flags & 16) != 0)\n data.mixScaleX = input.readFloat();\n if ((flags & 32) != 0)\n data.mixScaleY = input.readFloat();\n if ((flags & 64) != 0)\n data.mixShearY = input.readFloat();\n skeletonData.transformConstraints.push(data);\n }\n // Path constraints.\n n = input.readInt(true);\n for (let i = 0, nn; i < n; i++) {\n let name = input.readString();\n if (!name)\n throw new Error(\"Path constraint data name must not be null.\");\n let data = new PathConstraintData(name);\n data.order = input.readInt(true);\n data.skinRequired = input.readBoolean();\n nn = input.readInt(true);\n for (let ii = 0; ii < nn; ii++)\n data.bones.push(skeletonData.bones[input.readInt(true)]);\n data.target = skeletonData.slots[input.readInt(true)];\n const flags = input.readByte();\n data.positionMode = flags & 1;\n data.spacingMode = (flags >> 1) & 3;\n data.rotateMode = (flags >> 3) & 3;\n if ((flags & 128) != 0)\n data.offsetRotation = input.readFloat();\n data.position = input.readFloat();\n if (data.positionMode == PositionMode.Fixed)\n data.position *= scale;\n data.spacing = input.readFloat();\n if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)\n data.spacing *= scale;\n data.mixRotate = input.readFloat();\n data.mixX = input.readFloat();\n data.mixY = input.readFloat();\n skeletonData.pathConstraints.push(data);\n }\n // Physics constraints.\n n = input.readInt(true);\n for (let i = 0, nn; i < n; i++) {\n const name = input.readString();\n if (!name)\n throw new Error(\"Physics constraint data name must not be null.\");\n const data = new PhysicsConstraintData(name);\n data.order = input.readInt(true);\n data.bone = skeletonData.bones[input.readInt(true)];\n let flags = input.readByte();\n data.skinRequired = (flags & 1) != 0;\n if ((flags & 2) != 0)\n data.x = input.readFloat();\n if ((flags & 4) != 0)\n data.y = input.readFloat();\n if ((flags & 8) != 0)\n data.rotate = input.readFloat();\n if ((flags & 16) != 0)\n data.scaleX = input.readFloat();\n if ((flags & 32) != 0)\n data.shearX = input.readFloat();\n data.limit = ((flags & 64) != 0 ? input.readFloat() : 5000) * scale;\n data.step = 1 / input.readUnsignedByte();\n data.inertia = input.readFloat();\n data.strength = input.readFloat();\n data.damping = input.readFloat();\n data.massInverse = (flags & 128) != 0 ? input.readFloat() : 1;\n data.wind = input.readFloat();\n data.gravity = input.readFloat();\n flags = input.readByte();\n if ((flags & 1) != 0)\n data.inertiaGlobal = true;\n if ((flags & 2) != 0)\n data.strengthGlobal = true;\n if ((flags & 4) != 0)\n data.dampingGlobal = true;\n if ((flags & 8) != 0)\n data.massGlobal = true;\n if ((flags & 16) != 0)\n data.windGlobal = true;\n if ((flags & 32) != 0)\n data.gravityGlobal = true;\n if ((flags & 64) != 0)\n data.mixGlobal = true;\n data.mix = (flags & 128) != 0 ? input.readFloat() : 1;\n skeletonData.physicsConstraints.push(data);\n }\n // Default skin.\n let defaultSkin = this.readSkin(input, skeletonData, true, nonessential);\n if (defaultSkin) {\n skeletonData.defaultSkin = defaultSkin;\n skeletonData.skins.push(defaultSkin);\n }\n // Skins.\n {\n let i = skeletonData.skins.length;\n Utils.setArraySize(skeletonData.skins, n = i + input.readInt(true));\n for (; i < n; i++) {\n let skin = this.readSkin(input, skeletonData, false, nonessential);\n if (!skin)\n throw new Error(\"readSkin() should not have returned null.\");\n skeletonData.skins[i] = skin;\n }\n }\n // Linked meshes.\n n = this.linkedMeshes.length;\n for (let i = 0; i < n; i++) {\n let linkedMesh = this.linkedMeshes[i];\n const skin = skeletonData.skins[linkedMesh.skinIndex];\n if (!linkedMesh.parent)\n throw new Error(\"Linked mesh parent must not be null\");\n let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n if (!parent)\n throw new Error(`Parent mesh not found: ${linkedMesh.parent}`);\n linkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimeline ? parent : linkedMesh.mesh;\n linkedMesh.mesh.setParentMesh(parent);\n if (linkedMesh.mesh.region != null)\n linkedMesh.mesh.updateRegion();\n }\n this.linkedMeshes.length = 0;\n // Events.\n n = input.readInt(true);\n for (let i = 0; i < n; i++) {\n let eventName = input.readString();\n if (!eventName)\n throw new Error(\"Event data name must not be null\");\n let data = new EventData(eventName);\n data.intValue = input.readInt(false);\n data.floatValue = input.readFloat();\n data.stringValue = input.readString();\n data.audioPath = input.readString();\n if (data.audioPath) {\n data.volume = input.readFloat();\n data.balance = input.readFloat();\n }\n skeletonData.events.push(data);\n }\n // Animations.\n n = input.readInt(true);\n for (let i = 0; i < n; i++) {\n let animationName = input.readString();\n if (!animationName)\n throw new Error(\"Animatio name must not be null.\");\n skeletonData.animations.push(this.readAnimation(input, animationName, skeletonData));\n }\n return skeletonData;\n }\n readSkin(input, skeletonData, defaultSkin, nonessential) {\n let skin = null;\n let slotCount = 0;\n if (defaultSkin) {\n slotCount = input.readInt(true);\n if (slotCount == 0)\n return null;\n skin = new Skin(\"default\");\n }\n else {\n let skinName = input.readString();\n if (!skinName)\n throw new Error(\"Skin name must not be null.\");\n skin = new Skin(skinName);\n if (nonessential)\n Color.rgba8888ToColor(skin.color, input.readInt32());\n skin.bones.length = input.readInt(true);\n for (let i = 0, n = skin.bones.length; i < n; i++)\n skin.bones[i] = skeletonData.bones[input.readInt(true)];\n for (let i = 0, n = input.readInt(true); i < n; i++)\n skin.constraints.push(skeletonData.ikConstraints[input.readInt(true)]);\n for (let i = 0, n = input.readInt(true); i < n; i++)\n skin.constraints.push(skeletonData.transformConstraints[input.readInt(true)]);\n for (let i = 0, n = input.readInt(true); i < n; i++)\n skin.constraints.push(skeletonData.pathConstraints[input.readInt(true)]);\n for (let i = 0, n = input.readInt(true); i < n; i++)\n skin.constraints.push(skeletonData.physicsConstraints[input.readInt(true)]);\n slotCount = input.readInt(true);\n }\n for (let i = 0; i < slotCount; i++) {\n let slotIndex = input.readInt(true);\n for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n let name = input.readStringRef();\n if (!name)\n throw new Error(\"Attachment name must not be null\");\n let attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name, nonessential);\n if (attachment)\n skin.setAttachment(slotIndex, name, attachment);\n }\n }\n return skin;\n }\n readAttachment(input, skeletonData, skin, slotIndex, attachmentName, nonessential) {\n let scale = this.scale;\n let flags = input.readByte();\n const name = (flags & 8) != 0 ? input.readStringRef() : attachmentName;\n if (!name)\n throw new Error(\"Attachment name must not be null\");\n switch ((flags & 0b111)) { // BUG?\n case AttachmentType.Region: {\n let path = (flags & 16) != 0 ? input.readStringRef() : null;\n const color = (flags & 32) != 0 ? input.readInt32() : 0xffffffff;\n const sequence = (flags & 64) != 0 ? this.readSequence(input) : null;\n let rotation = (flags & 128) != 0 ? input.readFloat() : 0;\n let x = input.readFloat();\n let y = input.readFloat();\n let scaleX = input.readFloat();\n let scaleY = input.readFloat();\n let width = input.readFloat();\n let height = input.readFloat();\n if (!path)\n path = name;\n let region = this.attachmentLoader.newRegionAttachment(skin, name, path, sequence);\n if (!region)\n return null;\n region.path = path;\n region.x = x * scale;\n region.y = y * scale;\n region.scaleX = scaleX;\n region.scaleY = scaleY;\n region.rotation = rotation;\n region.width = width * scale;\n region.height = height * scale;\n Color.rgba8888ToColor(region.color, color);\n region.sequence = sequence;\n if (sequence == null)\n region.updateRegion();\n return region;\n }\n case AttachmentType.BoundingBox: {\n let vertices = this.readVertices(input, (flags & 16) != 0);\n let color = nonessential ? input.readInt32() : 0;\n let box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n if (!box)\n return null;\n box.worldVerticesLength = vertices.length;\n box.vertices = vertices.vertices;\n box.bones = vertices.bones;\n if (nonessential)\n Color.rgba8888ToColor(box.color, color);\n return box;\n }\n case AttachmentType.Mesh: {\n let path = (flags & 16) != 0 ? input.readStringRef() : name;\n const color = (flags & 32) != 0 ? input.readInt32() : 0xffffffff;\n const sequence = (flags & 64) != 0 ? this.readSequence(input) : null;\n const hullLength = input.readInt(true);\n const vertices = this.readVertices(input, (flags & 128) != 0);\n const uvs = this.readFloatArray(input, vertices.length, 1);\n const triangles = this.readShortArray(input, (vertices.length - hullLength - 2) * 3);\n let edges = [];\n let width = 0, height = 0;\n if (nonessential) {\n edges = this.readShortArray(input, input.readInt(true));\n width = input.readFloat();\n height = input.readFloat();\n }\n if (!path)\n path = name;\n let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);\n if (!mesh)\n return null;\n mesh.path = path;\n Color.rgba8888ToColor(mesh.color, color);\n mesh.bones = vertices.bones;\n mesh.vertices = vertices.vertices;\n mesh.worldVerticesLength = vertices.length;\n mesh.triangles = triangles;\n mesh.regionUVs = uvs;\n if (sequence == null)\n mesh.updateRegion();\n mesh.hullLength = hullLength << 1;\n mesh.sequence = sequence;\n if (nonessential) {\n mesh.edges = edges;\n mesh.width = width * scale;\n mesh.height = height * scale;\n }\n return mesh;\n }\n case AttachmentType.LinkedMesh: {\n const path = (flags & 16) != 0 ? input.readStringRef() : name;\n if (path == null)\n throw new Error(\"Path of linked mesh must not be null\");\n const color = (flags & 32) != 0 ? input.readInt32() : 0xffffffff;\n const sequence = (flags & 64) != 0 ? this.readSequence(input) : null;\n const inheritTimelines = (flags & 128) != 0;\n const skinIndex = input.readInt(true);\n const parent = input.readStringRef();\n let width = 0, height = 0;\n if (nonessential) {\n width = input.readFloat();\n height = input.readFloat();\n }\n let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);\n if (!mesh)\n return null;\n mesh.path = path;\n Color.rgba8888ToColor(mesh.color, color);\n mesh.sequence = sequence;\n if (nonessential) {\n mesh.width = width * scale;\n mesh.height = height * scale;\n }\n this.linkedMeshes.push(new LinkedMesh(mesh, skinIndex, slotIndex, parent, inheritTimelines));\n return mesh;\n }\n case AttachmentType.Path: {\n const closed = (flags & 16) != 0;\n const constantSpeed = (flags & 32) != 0;\n const vertices = this.readVertices(input, (flags & 64) != 0);\n const lengths = Utils.newArray(vertices.length / 6, 0);\n for (let i = 0, n = lengths.length; i < n; i++)\n lengths[i] = input.readFloat() * scale;\n const color = nonessential ? input.readInt32() : 0;\n const path = this.attachmentLoader.newPathAttachment(skin, name);\n if (!path)\n return null;\n path.closed = closed;\n path.constantSpeed = constantSpeed;\n path.worldVerticesLength = vertices.length;\n path.vertices = vertices.vertices;\n path.bones = vertices.bones;\n path.lengths = lengths;\n if (nonessential)\n Color.rgba8888ToColor(path.color, color);\n return path;\n }\n case AttachmentType.Point: {\n const rotation = input.readFloat();\n const x = input.readFloat();\n const y = input.readFloat();\n const color = nonessential ? input.readInt32() : 0;\n const point = this.attachmentLoader.newPointAttachment(skin, name);\n if (!point)\n return null;\n point.x = x * scale;\n point.y = y * scale;\n point.rotation = rotation;\n if (nonessential)\n Color.rgba8888ToColor(point.color, color);\n return point;\n }\n case AttachmentType.Clipping: {\n const endSlotIndex = input.readInt(true);\n const vertices = this.readVertices(input, (flags & 16) != 0);\n let color = nonessential ? input.readInt32() : 0;\n let clip = this.attachmentLoader.newClippingAttachment(skin, name);\n if (!clip)\n return null;\n clip.endSlot = skeletonData.slots[endSlotIndex];\n clip.worldVerticesLength = vertices.length;\n clip.vertices = vertices.vertices;\n clip.bones = vertices.bones;\n if (nonessential)\n Color.rgba8888ToColor(clip.color, color);\n return clip;\n }\n }\n return null;\n }\n readSequence(input) {\n let sequence = new Sequence(input.readInt(true));\n sequence.start = input.readInt(true);\n sequence.digits = input.readInt(true);\n sequence.setupIndex = input.readInt(true);\n return sequence;\n }\n readVertices(input, weighted) {\n const scale = this.scale;\n const vertexCount = input.readInt(true);\n const vertices = new Vertices();\n vertices.length = vertexCount << 1;\n if (!weighted) {\n vertices.vertices = this.readFloatArray(input, vertices.length, scale);\n return vertices;\n }\n let weights = new Array();\n let bonesArray = new Array();\n for (let i = 0; i < vertexCount; i++) {\n let boneCount = input.readInt(true);\n bonesArray.push(boneCount);\n for (let ii = 0; ii < boneCount; ii++) {\n bonesArray.push(input.readInt(true));\n weights.push(input.readFloat() * scale);\n weights.push(input.readFloat() * scale);\n weights.push(input.readFloat());\n }\n }\n vertices.vertices = Utils.toFloatArray(weights);\n vertices.bones = bonesArray;\n return vertices;\n }\n readFloatArray(input, n, scale) {\n let array = new Array(n);\n if (scale == 1) {\n for (let i = 0; i < n; i++)\n array[i] = input.readFloat();\n }\n else {\n for (let i = 0; i < n; i++)\n array[i] = input.readFloat() * scale;\n }\n return array;\n }\n readShortArray(input, n) {\n let array = new Array(n);\n for (let i = 0; i < n; i++)\n array[i] = input.readInt(true);\n return array;\n }\n readAnimation(input, name, skeletonData) {\n input.readInt(true); // Number of timelines.\n let timelines = new Array();\n let scale = this.scale;\n // Slot timelines.\n for (let i = 0, n = input.readInt(true); i < n; i++) {\n let slotIndex = input.readInt(true);\n for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n let timelineType = input.readByte();\n let frameCount = input.readInt(true);\n let frameLast = frameCount - 1;\n switch (timelineType) {\n case SLOT_ATTACHMENT: {\n let timeline = new AttachmentTimeline(frameCount, slotIndex);\n for (let frame = 0; frame < frameCount; frame++)\n timeline.setFrame(frame, input.readFloat(), input.readStringRef());\n timelines.push(timeline);\n break;\n }\n case SLOT_RGBA: {\n let bezierCount = input.readInt(true);\n let timeline = new RGBATimeline(frameCount, bezierCount, slotIndex);\n let time = input.readFloat();\n let r = input.readUnsignedByte() / 255.0;\n let g = input.readUnsignedByte() / 255.0;\n let b = input.readUnsignedByte() / 255.0;\n let a = input.readUnsignedByte() / 255.0;\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, r, g, b, a);\n if (frame == frameLast)\n break;\n let time2 = input.readFloat();\n let r2 = input.readUnsignedByte() / 255.0;\n let g2 = input.readUnsignedByte() / 255.0;\n let b2 = input.readUnsignedByte() / 255.0;\n let a2 = input.readUnsignedByte() / 255.0;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);\n setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);\n setBezier(input, timeline, bezier++, frame, 3, time, time2, a, a2, 1);\n }\n time = time2;\n r = r2;\n g = g2;\n b = b2;\n a = a2;\n }\n timelines.push(timeline);\n break;\n }\n case SLOT_RGB: {\n let bezierCount = input.readInt(true);\n let timeline = new RGBTimeline(frameCount, bezierCount, slotIndex);\n let time = input.readFloat();\n let r = input.readUnsignedByte() / 255.0;\n let g = input.readUnsignedByte() / 255.0;\n let b = input.readUnsignedByte() / 255.0;\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, r, g, b);\n if (frame == frameLast)\n break;\n let time2 = input.readFloat();\n let r2 = input.readUnsignedByte() / 255.0;\n let g2 = input.readUnsignedByte() / 255.0;\n let b2 = input.readUnsignedByte() / 255.0;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, r, r2, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, g, g2, 1);\n setBezier(input, timeline, bezier++, frame, 2, time, time2, b, b2, 1);\n }\n time = time2;\n r = r2;\n g = g2;\n b = b2;\n }\n timelines.push(timeline);\n break;\n }\n case SLOT_RGBA2: {\n let bezierCount = input.readInt(true);\n let timeline = new RGBA2Timeline(frameCount, bezierCount, slotIndex);\n let time = input.readFloat();\n let r = input.readUnsignedByte() / 255.0;\n let g = input.readUnsignedByte() / 255.0;\n let b = input.readUnsignedByte() / 255.0;\n let a = input.readUnsignedByte() / 255.0;\n let r2 = input.readUnsignedByte() / 255.0;\n let g2 = input.readUnsignedByte() / 255.0;\n let b2 = input.readUnsignedByte() / 255.0;\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, r, g, b, a, r2, g2, b2);\n if (frame == frameLast)\n break;\n let time2 = input.readFloat();\n let nr = input.readUnsignedByte() / 255.0;\n let ng = input.readUnsignedByte() / 255.0;\n let nb = input.readUnsignedByte() / 255.0;\n let na = input.readUnsignedByte() / 255.0;\n let nr2 = input.readUnsignedByte() / 255.0;\n let ng2 = input.readUnsignedByte() / 255.0;\n let nb2 = input.readUnsignedByte() / 255.0;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);\n setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);\n setBezier(input, timeline, bezier++, frame, 3, time, time2, a, na, 1);\n setBezier(input, timeline, bezier++, frame, 4, time, time2, r2, nr2, 1);\n setBezier(input, timeline, bezier++, frame, 5, time, time2, g2, ng2, 1);\n setBezier(input, timeline, bezier++, frame, 6, time, time2, b2, nb2, 1);\n }\n time = time2;\n r = nr;\n g = ng;\n b = nb;\n a = na;\n r2 = nr2;\n g2 = ng2;\n b2 = nb2;\n }\n timelines.push(timeline);\n break;\n }\n case SLOT_RGB2: {\n let bezierCount = input.readInt(true);\n let timeline = new RGB2Timeline(frameCount, bezierCount, slotIndex);\n let time = input.readFloat();\n let r = input.readUnsignedByte() / 255.0;\n let g = input.readUnsignedByte() / 255.0;\n let b = input.readUnsignedByte() / 255.0;\n let r2 = input.readUnsignedByte() / 255.0;\n let g2 = input.readUnsignedByte() / 255.0;\n let b2 = input.readUnsignedByte() / 255.0;\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, r, g, b, r2, g2, b2);\n if (frame == frameLast)\n break;\n let time2 = input.readFloat();\n let nr = input.readUnsignedByte() / 255.0;\n let ng = input.readUnsignedByte() / 255.0;\n let nb = input.readUnsignedByte() / 255.0;\n let nr2 = input.readUnsignedByte() / 255.0;\n let ng2 = input.readUnsignedByte() / 255.0;\n let nb2 = input.readUnsignedByte() / 255.0;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, r, nr, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, g, ng, 1);\n setBezier(input, timeline, bezier++, frame, 2, time, time2, b, nb, 1);\n setBezier(input, timeline, bezier++, frame, 3, time, time2, r2, nr2, 1);\n setBezier(input, timeline, bezier++, frame, 4, time, time2, g2, ng2, 1);\n setBezier(input, timeline, bezier++, frame, 5, time, time2, b2, nb2, 1);\n }\n time = time2;\n r = nr;\n g = ng;\n b = nb;\n r2 = nr2;\n g2 = ng2;\n b2 = nb2;\n }\n timelines.push(timeline);\n break;\n }\n case SLOT_ALPHA: {\n let timeline = new AlphaTimeline(frameCount, input.readInt(true), slotIndex);\n let time = input.readFloat(), a = input.readUnsignedByte() / 255;\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, a);\n if (frame == frameLast)\n break;\n let time2 = input.readFloat();\n let a2 = input.readUnsignedByte() / 255;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, a, a2, 1);\n }\n time = time2;\n a = a2;\n }\n timelines.push(timeline);\n }\n }\n }\n }\n // Bone timelines.\n for (let i = 0, n = input.readInt(true); i < n; i++) {\n let boneIndex = input.readInt(true);\n for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n let type = input.readByte(), frameCount = input.readInt(true);\n if (type == BONE_INHERIT) {\n let timeline = new InheritTimeline(frameCount, boneIndex);\n for (let frame = 0; frame < frameCount; frame++) {\n timeline.setFrame(frame, input.readFloat(), input.readByte());\n }\n timelines.push(timeline);\n continue;\n }\n let bezierCount = input.readInt(true);\n switch (type) {\n case BONE_ROTATE:\n timelines.push(readTimeline1(input, new RotateTimeline(frameCount, bezierCount, boneIndex), 1));\n break;\n case BONE_TRANSLATE:\n timelines.push(readTimeline2(input, new TranslateTimeline(frameCount, bezierCount, boneIndex), scale));\n break;\n case BONE_TRANSLATEX:\n timelines.push(readTimeline1(input, new TranslateXTimeline(frameCount, bezierCount, boneIndex), scale));\n break;\n case BONE_TRANSLATEY:\n timelines.push(readTimeline1(input, new TranslateYTimeline(frameCount, bezierCount, boneIndex), scale));\n break;\n case BONE_SCALE:\n timelines.push(readTimeline2(input, new ScaleTimeline(frameCount, bezierCount, boneIndex), 1));\n break;\n case BONE_SCALEX:\n timelines.push(readTimeline1(input, new ScaleXTimeline(frameCount, bezierCount, boneIndex), 1));\n break;\n case BONE_SCALEY:\n timelines.push(readTimeline1(input, new ScaleYTimeline(frameCount, bezierCount, boneIndex), 1));\n break;\n case BONE_SHEAR:\n timelines.push(readTimeline2(input, new ShearTimeline(frameCount, bezierCount, boneIndex), 1));\n break;\n case BONE_SHEARX:\n timelines.push(readTimeline1(input, new ShearXTimeline(frameCount, bezierCount, boneIndex), 1));\n break;\n case BONE_SHEARY:\n timelines.push(readTimeline1(input, new ShearYTimeline(frameCount, bezierCount, boneIndex), 1));\n }\n }\n }\n // IK constraint timelines.\n for (let i = 0, n = input.readInt(true); i < n; i++) {\n let index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;\n let timeline = new IkConstraintTimeline(frameCount, input.readInt(true), index);\n let flags = input.readByte();\n let time = input.readFloat(), mix = (flags & 1) != 0 ? ((flags & 2) != 0 ? input.readFloat() : 1) : 0;\n let softness = (flags & 4) != 0 ? input.readFloat() * scale : 0;\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, mix, softness, (flags & 8) != 0 ? 1 : -1, (flags & 16) != 0, (flags & 32) != 0);\n if (frame == frameLast)\n break;\n flags = input.readByte();\n const time2 = input.readFloat(), mix2 = (flags & 1) != 0 ? ((flags & 2) != 0 ? input.readFloat() : 1) : 0;\n const softness2 = (flags & 4) != 0 ? input.readFloat() * scale : 0;\n if ((flags & 64) != 0) {\n timeline.setStepped(frame);\n }\n else if ((flags & 128) != 0) {\n setBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale);\n }\n time = time2;\n mix = mix2;\n softness = softness2;\n }\n timelines.push(timeline);\n }\n // Transform constraint timelines.\n for (let i = 0, n = input.readInt(true); i < n; i++) {\n let index = input.readInt(true), frameCount = input.readInt(true), frameLast = frameCount - 1;\n let timeline = new TransformConstraintTimeline(frameCount, input.readInt(true), index);\n let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat(), mixScaleX = input.readFloat(), mixScaleY = input.readFloat(), mixShearY = input.readFloat();\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);\n if (frame == frameLast)\n break;\n let time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat(), mixScaleX2 = input.readFloat(), mixScaleY2 = input.readFloat(), mixShearY2 = input.readFloat();\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);\n setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);\n setBezier(input, timeline, bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);\n setBezier(input, timeline, bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);\n setBezier(input, timeline, bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1);\n }\n time = time2;\n mixRotate = mixRotate2;\n mixX = mixX2;\n mixY = mixY2;\n mixScaleX = mixScaleX2;\n mixScaleY = mixScaleY2;\n mixShearY = mixShearY2;\n }\n timelines.push(timeline);\n }\n // Path constraint timelines.\n for (let i = 0, n = input.readInt(true); i < n; i++) {\n let index = input.readInt(true);\n let data = skeletonData.pathConstraints[index];\n for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n const type = input.readByte(), frameCount = input.readInt(true), bezierCount = input.readInt(true);\n switch (type) {\n case PATH_POSITION:\n timelines\n .push(readTimeline1(input, new PathConstraintPositionTimeline(frameCount, bezierCount, index), data.positionMode == PositionMode.Fixed ? scale : 1));\n break;\n case PATH_SPACING:\n timelines\n .push(readTimeline1(input, new PathConstraintSpacingTimeline(frameCount, bezierCount, index), data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed ? scale : 1));\n break;\n case PATH_MIX:\n let timeline = new PathConstraintMixTimeline(frameCount, bezierCount, index);\n let time = input.readFloat(), mixRotate = input.readFloat(), mixX = input.readFloat(), mixY = input.readFloat();\n for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {\n timeline.setFrame(frame, time, mixRotate, mixX, mixY);\n if (frame == frameLast)\n break;\n let time2 = input.readFloat(), mixRotate2 = input.readFloat(), mixX2 = input.readFloat(), mixY2 = input.readFloat();\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, mixX, mixX2, 1);\n setBezier(input, timeline, bezier++, frame, 2, time, time2, mixY, mixY2, 1);\n }\n time = time2;\n mixRotate = mixRotate2;\n mixX = mixX2;\n mixY = mixY2;\n }\n timelines.push(timeline);\n }\n }\n }\n // Physics timelines.\n for (let i = 0, n = input.readInt(true); i < n; i++) {\n const index = input.readInt(true) - 1;\n for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n const type = input.readByte(), frameCount = input.readInt(true);\n if (type == PHYSICS_RESET) {\n const timeline = new PhysicsConstraintResetTimeline(frameCount, index);\n for (let frame = 0; frame < frameCount; frame++)\n timeline.setFrame(frame, input.readFloat());\n timelines.push(timeline);\n continue;\n }\n const bezierCount = input.readInt(true);\n switch (type) {\n case PHYSICS_INERTIA:\n timelines.push(readTimeline1(input, new PhysicsConstraintInertiaTimeline(frameCount, bezierCount, index), 1));\n break;\n case PHYSICS_STRENGTH:\n timelines.push(readTimeline1(input, new PhysicsConstraintStrengthTimeline(frameCount, bezierCount, index), 1));\n break;\n case PHYSICS_DAMPING:\n timelines.push(readTimeline1(input, new PhysicsConstraintDampingTimeline(frameCount, bezierCount, index), 1));\n break;\n case PHYSICS_MASS:\n timelines.push(readTimeline1(input, new PhysicsConstraintMassTimeline(frameCount, bezierCount, index), 1));\n break;\n case PHYSICS_WIND:\n timelines.push(readTimeline1(input, new PhysicsConstraintWindTimeline(frameCount, bezierCount, index), 1));\n break;\n case PHYSICS_GRAVITY:\n timelines.push(readTimeline1(input, new PhysicsConstraintGravityTimeline(frameCount, bezierCount, index), 1));\n break;\n case PHYSICS_MIX:\n timelines.push(readTimeline1(input, new PhysicsConstraintMixTimeline(frameCount, bezierCount, index), 1));\n }\n }\n }\n // Deform timelines.\n for (let i = 0, n = input.readInt(true); i < n; i++) {\n let skin = skeletonData.skins[input.readInt(true)];\n for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) {\n let slotIndex = input.readInt(true);\n for (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) {\n let attachmentName = input.readStringRef();\n if (!attachmentName)\n throw new Error(\"attachmentName must not be null.\");\n let attachment = skin.getAttachment(slotIndex, attachmentName);\n let timelineType = input.readByte();\n let frameCount = input.readInt(true);\n let frameLast = frameCount - 1;\n switch (timelineType) {\n case ATTACHMENT_DEFORM: {\n let vertexAttachment = attachment;\n let weighted = vertexAttachment.bones;\n let vertices = vertexAttachment.vertices;\n let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n let bezierCount = input.readInt(true);\n let timeline = new DeformTimeline(frameCount, bezierCount, slotIndex, vertexAttachment);\n let time = input.readFloat();\n for (let frame = 0, bezier = 0;; frame++) {\n let deform;\n let end = input.readInt(true);\n if (end == 0)\n deform = weighted ? Utils.newFloatArray(deformLength) : vertices;\n else {\n deform = Utils.newFloatArray(deformLength);\n let start = input.readInt(true);\n end += start;\n if (scale == 1) {\n for (let v = start; v < end; v++)\n deform[v] = input.readFloat();\n }\n else {\n for (let v = start; v < end; v++)\n deform[v] = input.readFloat() * scale;\n }\n if (!weighted) {\n for (let v = 0, vn = deform.length; v < vn; v++)\n deform[v] += vertices[v];\n }\n }\n timeline.setFrame(frame, time, deform);\n if (frame == frameLast)\n break;\n let time2 = input.readFloat();\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, 0, 1, 1);\n }\n time = time2;\n }\n timelines.push(timeline);\n break;\n }\n case ATTACHMENT_SEQUENCE: {\n let timeline = new SequenceTimeline(frameCount, slotIndex, attachment);\n for (let frame = 0; frame < frameCount; frame++) {\n let time = input.readFloat();\n let modeAndIndex = input.readInt32();\n timeline.setFrame(frame, time, SequenceModeValues[modeAndIndex & 0xf], modeAndIndex >> 4, input.readFloat());\n }\n timelines.push(timeline);\n break;\n }\n }\n }\n }\n }\n // Draw order timeline.\n let drawOrderCount = input.readInt(true);\n if (drawOrderCount > 0) {\n let timeline = new DrawOrderTimeline(drawOrderCount);\n let slotCount = skeletonData.slots.length;\n for (let i = 0; i < drawOrderCount; i++) {\n let time = input.readFloat();\n let offsetCount = input.readInt(true);\n let drawOrder = Utils.newArray(slotCount, 0);\n for (let ii = slotCount - 1; ii >= 0; ii--)\n drawOrder[ii] = -1;\n let unchanged = Utils.newArray(slotCount - offsetCount, 0);\n let originalIndex = 0, unchangedIndex = 0;\n for (let ii = 0; ii < offsetCount; ii++) {\n let slotIndex = input.readInt(true);\n // Collect unchanged items.\n while (originalIndex != slotIndex)\n unchanged[unchangedIndex++] = originalIndex++;\n // Set changed items.\n drawOrder[originalIndex + input.readInt(true)] = originalIndex++;\n }\n // Collect remaining unchanged items.\n while (originalIndex < slotCount)\n unchanged[unchangedIndex++] = originalIndex++;\n // Fill in unchanged items.\n for (let ii = slotCount - 1; ii >= 0; ii--)\n if (drawOrder[ii] == -1)\n drawOrder[ii] = unchanged[--unchangedIndex];\n timeline.setFrame(i, time, drawOrder);\n }\n timelines.push(timeline);\n }\n // Event timeline.\n let eventCount = input.readInt(true);\n if (eventCount > 0) {\n let timeline = new EventTimeline(eventCount);\n for (let i = 0; i < eventCount; i++) {\n let time = input.readFloat();\n let eventData = skeletonData.events[input.readInt(true)];\n let event = new Event(time, eventData);\n event.intValue = input.readInt(false);\n event.floatValue = input.readFloat();\n event.stringValue = input.readString();\n if (event.stringValue == null)\n event.stringValue = eventData.stringValue;\n if (event.data.audioPath) {\n event.volume = input.readFloat();\n event.balance = input.readFloat();\n }\n timeline.setFrame(i, event);\n }\n timelines.push(timeline);\n }\n let duration = 0;\n for (let i = 0, n = timelines.length; i < n; i++)\n duration = Math.max(duration, timelines[i].getDuration());\n return new Animation(name, timelines, duration);\n }\n}\nexport class BinaryInput {\n strings;\n index;\n buffer;\n constructor(data, strings = new Array(), index = 0, buffer = new DataView(data.buffer)) {\n this.strings = strings;\n this.index = index;\n this.buffer = buffer;\n }\n readByte() {\n return this.buffer.getInt8(this.index++);\n }\n readUnsignedByte() {\n return this.buffer.getUint8(this.index++);\n }\n readShort() {\n let value = this.buffer.getInt16(this.index);\n this.index += 2;\n return value;\n }\n readInt32() {\n let value = this.buffer.getInt32(this.index);\n this.index += 4;\n return value;\n }\n readInt(optimizePositive) {\n let b = this.readByte();\n let result = b & 0x7F;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 7;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 14;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 21;\n if ((b & 0x80) != 0) {\n b = this.readByte();\n result |= (b & 0x7F) << 28;\n }\n }\n }\n }\n return optimizePositive ? result : ((result >>> 1) ^ -(result & 1));\n }\n readStringRef() {\n let index = this.readInt(true);\n return index == 0 ? null : this.strings[index - 1];\n }\n readString() {\n let byteCount = this.readInt(true);\n switch (byteCount) {\n case 0:\n return null;\n case 1:\n return \"\";\n }\n byteCount--;\n let chars = \"\";\n let charCount = 0;\n for (let i = 0; i < byteCount;) {\n let b = this.readUnsignedByte();\n switch (b >> 4) {\n case 12:\n case 13:\n chars += String.fromCharCode(((b & 0x1F) << 6 | this.readByte() & 0x3F));\n i += 2;\n break;\n case 14:\n chars += String.fromCharCode(((b & 0x0F) << 12 | (this.readByte() & 0x3F) << 6 | this.readByte() & 0x3F));\n i += 3;\n break;\n default:\n chars += String.fromCharCode(b);\n i++;\n }\n }\n return chars;\n }\n readFloat() {\n let value = this.buffer.getFloat32(this.index);\n this.index += 4;\n return value;\n }\n readBoolean() {\n return this.readByte() != 0;\n }\n}\nclass LinkedMesh {\n parent;\n skinIndex;\n slotIndex;\n mesh;\n inheritTimeline;\n constructor(mesh, skinIndex, slotIndex, parent, inheritDeform) {\n this.mesh = mesh;\n this.skinIndex = skinIndex;\n this.slotIndex = slotIndex;\n this.parent = parent;\n this.inheritTimeline = inheritDeform;\n }\n}\nclass Vertices {\n bones;\n vertices;\n length;\n constructor(bones = null, vertices = null, length = 0) {\n this.bones = bones;\n this.vertices = vertices;\n this.length = length;\n }\n}\nvar AttachmentType;\n(function (AttachmentType) {\n AttachmentType[AttachmentType[\"Region\"] = 0] = \"Region\";\n AttachmentType[AttachmentType[\"BoundingBox\"] = 1] = \"BoundingBox\";\n AttachmentType[AttachmentType[\"Mesh\"] = 2] = \"Mesh\";\n AttachmentType[AttachmentType[\"LinkedMesh\"] = 3] = \"LinkedMesh\";\n AttachmentType[AttachmentType[\"Path\"] = 4] = \"Path\";\n AttachmentType[AttachmentType[\"Point\"] = 5] = \"Point\";\n AttachmentType[AttachmentType[\"Clipping\"] = 6] = \"Clipping\";\n})(AttachmentType || (AttachmentType = {}));\nfunction readTimeline1(input, timeline, scale) {\n let time = input.readFloat(), value = input.readFloat() * scale;\n for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {\n timeline.setFrame(frame, time, value);\n if (frame == frameLast)\n break;\n let time2 = input.readFloat(), value2 = input.readFloat() * scale;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, value, value2, scale);\n }\n time = time2;\n value = value2;\n }\n return timeline;\n}\nfunction readTimeline2(input, timeline, scale) {\n let time = input.readFloat(), value1 = input.readFloat() * scale, value2 = input.readFloat() * scale;\n for (let frame = 0, bezier = 0, frameLast = timeline.getFrameCount() - 1;; frame++) {\n timeline.setFrame(frame, time, value1, value2);\n if (frame == frameLast)\n break;\n let time2 = input.readFloat(), nvalue1 = input.readFloat() * scale, nvalue2 = input.readFloat() * scale;\n switch (input.readByte()) {\n case CURVE_STEPPED:\n timeline.setStepped(frame);\n break;\n case CURVE_BEZIER:\n setBezier(input, timeline, bezier++, frame, 0, time, time2, value1, nvalue1, scale);\n setBezier(input, timeline, bezier++, frame, 1, time, time2, value2, nvalue2, scale);\n }\n time = time2;\n value1 = nvalue1;\n value2 = nvalue2;\n }\n return timeline;\n}\nfunction setBezier(input, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {\n timeline.setBezier(bezier, frame, value, time1, value1, input.readFloat(), input.readFloat() * scale, input.readFloat(), input.readFloat() * scale, time2, value2);\n}\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;\nconst SLOT_ATTACHMENT = 0;\nconst SLOT_RGBA = 1;\nconst SLOT_RGB = 2;\nconst SLOT_RGBA2 = 3;\nconst SLOT_RGB2 = 4;\nconst SLOT_ALPHA = 5;\nconst ATTACHMENT_DEFORM = 0;\nconst ATTACHMENT_SEQUENCE = 1;\nconst PATH_POSITION = 0;\nconst PATH_SPACING = 1;\nconst PATH_MIX = 2;\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;\nconst CURVE_LINEAR = 0;\nconst CURVE_STEPPED = 1;\nconst CURVE_BEZIER = 2;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25CaW5hcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b25CaW5hcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxTQUFTLEVBQVksZUFBZSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLDJCQUEyQixFQUFFLDhCQUE4QixFQUFFLDZCQUE2QixFQUFFLHlCQUF5QixFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQWlELGdCQUFnQixFQUFFLDhCQUE4QixFQUFFLGdDQUFnQyxFQUFFLGlDQUFpQyxFQUFFLGdDQUFnQyxFQUFFLDZCQUE2QixFQUFFLDZCQUE2QixFQUFFLGdDQUFnQyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLLzBCLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1B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S0FBSyxFQUFFLElBQUksa0JBQWtCLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN4RyxNQUFNO29CQUNQLEtBQUssVUFBVTt3QkFDZCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxhQUFhLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMvRixNQUFNO29CQUNQLEtBQUssV0FBVzt3QkFDZixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxjQUFjLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNoRyxNQUFNO29CQUNQLEtBQUssV0FBVzt3QkFDZixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxjQUFjLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNoRyxNQUFNO29CQUNQLEtBQUssVUFBVTt3QkFDZCxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxhQUFhLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMvRixNQUFNO29CQUNQLEtBQUssV0FBVzt3QkFDZixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxjQUFjLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNoRyxNQUFNO29CQUNQLEtBQUssV0FBVzt3QkFDZixTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxjQUFjLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNqRzthQUNEO1NBQ0Q7UUFFRCwyQkFBMkI7UUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwRCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQzlGLElBQUksUUFBUSxHQUFHLElBQUksb0JBQW9CLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEYsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RHLElBQUksUUFBUSxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEdBQUksS0FBSyxFQUFFLEVBQUU7Z0JBQzFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQy9HLElBQUksS0FBSyxJQUFJLFNBQVM7b0JBQUUsTUFBTTtnQkFDOUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFHLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDdEIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDM0I7cUJBQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzlCLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxF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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { TextureFilter, TextureWrap, TextureRegion } from \"./Texture.js\";\nimport { Utils } from \"./Utils.js\";\nexport class TextureAtlas {\n pages = new Array();\n regions = new Array();\n constructor(atlasText) {\n let reader = new TextureAtlasReader(atlasText);\n let entry = new Array(4);\n let pageFields = {};\n pageFields[\"size\"] = (page) => {\n page.width = parseInt(entry[1]);\n page.height = parseInt(entry[2]);\n };\n pageFields[\"format\"] = () => {\n // page.format = Format[tuple[0]]; we don't need format in WebGL\n };\n pageFields[\"filter\"] = (page) => {\n page.minFilter = Utils.enumValue(TextureFilter, entry[1]);\n page.magFilter = Utils.enumValue(TextureFilter, entry[2]);\n };\n pageFields[\"repeat\"] = (page) => {\n if (entry[1].indexOf('x') != -1)\n page.uWrap = TextureWrap.Repeat;\n if (entry[1].indexOf('y') != -1)\n page.vWrap = TextureWrap.Repeat;\n };\n pageFields[\"pma\"] = (page) => {\n page.pma = entry[1] == \"true\";\n };\n var regionFields = {};\n regionFields[\"xy\"] = (region) => {\n region.x = parseInt(entry[1]);\n region.y = parseInt(entry[2]);\n };\n regionFields[\"size\"] = (region) => {\n region.width = parseInt(entry[1]);\n region.height = parseInt(entry[2]);\n };\n regionFields[\"bounds\"] = (region) => {\n region.x = parseInt(entry[1]);\n region.y = parseInt(entry[2]);\n region.width = parseInt(entry[3]);\n region.height = parseInt(entry[4]);\n };\n regionFields[\"offset\"] = (region) => {\n region.offsetX = parseInt(entry[1]);\n region.offsetY = parseInt(entry[2]);\n };\n regionFields[\"orig\"] = (region) => {\n region.originalWidth = parseInt(entry[1]);\n region.originalHeight = parseInt(entry[2]);\n };\n regionFields[\"offsets\"] = (region) => {\n region.offsetX = parseInt(entry[1]);\n region.offsetY = parseInt(entry[2]);\n region.originalWidth = parseInt(entry[3]);\n region.originalHeight = parseInt(entry[4]);\n };\n regionFields[\"rotate\"] = (region) => {\n let value = entry[1];\n if (value == \"true\")\n region.degrees = 90;\n else if (value != \"false\")\n region.degrees = parseInt(value);\n };\n regionFields[\"index\"] = (region) => {\n region.index = parseInt(entry[1]);\n };\n let line = reader.readLine();\n // Ignore empty lines before first entry.\n while (line && line.trim().length == 0)\n line = reader.readLine();\n // Header entries.\n while (true) {\n if (!line || line.trim().length == 0)\n break;\n if (reader.readEntry(entry, line) == 0)\n break; // Silently ignore all header fields.\n line = reader.readLine();\n }\n // Page and region entries.\n let page = null;\n let names = null;\n let values = null;\n while (true) {\n if (line === null)\n break;\n if (line.trim().length == 0) {\n page = null;\n line = reader.readLine();\n }\n else if (!page) {\n page = new TextureAtlasPage(line.trim());\n while (true) {\n if (reader.readEntry(entry, line = reader.readLine()) == 0)\n break;\n let field = pageFields[entry[0]];\n if (field)\n field(page);\n }\n this.pages.push(page);\n }\n else {\n let region = new TextureAtlasRegion(page, line);\n while (true) {\n let count = reader.readEntry(entry, line = reader.readLine());\n if (count == 0)\n break;\n let field = regionFields[entry[0]];\n if (field)\n field(region);\n else {\n if (!names)\n names = [];\n if (!values)\n values = [];\n names.push(entry[0]);\n let entryValues = [];\n for (let i = 0; i < count; i++)\n entryValues.push(parseInt(entry[i + 1]));\n values.push(entryValues);\n }\n }\n if (region.originalWidth == 0 && region.originalHeight == 0) {\n region.originalWidth = region.width;\n region.originalHeight = region.height;\n }\n if (names && names.length > 0 && values && values.length > 0) {\n region.names = names;\n region.values = values;\n names = null;\n values = null;\n }\n region.u = region.x / page.width;\n region.v = region.y / page.height;\n if (region.degrees == 90) {\n region.u2 = (region.x + region.height) / page.width;\n region.v2 = (region.y + region.width) / page.height;\n }\n else {\n region.u2 = (region.x + region.width) / page.width;\n region.v2 = (region.y + region.height) / page.height;\n }\n this.regions.push(region);\n }\n }\n }\n findRegion(name) {\n for (let i = 0; i < this.regions.length; i++) {\n if (this.regions[i].name == name) {\n return this.regions[i];\n }\n }\n return null;\n }\n setTextures(assetManager, pathPrefix = \"\") {\n for (let page of this.pages)\n page.setTexture(assetManager.get(pathPrefix + page.name));\n }\n dispose() {\n for (let i = 0; i < this.pages.length; i++) {\n this.pages[i].texture?.dispose();\n }\n }\n}\nclass TextureAtlasReader {\n lines;\n index = 0;\n constructor(text) {\n this.lines = text.split(/\\r\\n|\\r|\\n/);\n }\n readLine() {\n if (this.index >= this.lines.length)\n return null;\n return this.lines[this.index++];\n }\n readEntry(entry, line) {\n if (!line)\n return 0;\n line = line.trim();\n if (line.length == 0)\n return 0;\n let colon = line.indexOf(':');\n if (colon == -1)\n return 0;\n entry[0] = line.substr(0, colon).trim();\n for (let i = 1, lastMatch = colon + 1;; i++) {\n let comma = line.indexOf(',', lastMatch);\n if (comma == -1) {\n entry[i] = line.substr(lastMatch).trim();\n return i;\n }\n entry[i] = line.substr(lastMatch, comma - lastMatch).trim();\n lastMatch = comma + 1;\n if (i == 4)\n return 4;\n }\n }\n}\nexport class TextureAtlasPage {\n name;\n minFilter = TextureFilter.Nearest;\n magFilter = TextureFilter.Nearest;\n uWrap = TextureWrap.ClampToEdge;\n vWrap = TextureWrap.ClampToEdge;\n texture = null;\n width = 0;\n height = 0;\n pma = false;\n regions = new Array();\n constructor(name) {\n this.name = name;\n }\n setTexture(texture) {\n this.texture = texture;\n texture.setFilters(this.minFilter, this.magFilter);\n texture.setWraps(this.uWrap, this.vWrap);\n for (let region of this.regions)\n region.texture = texture;\n }\n}\nexport class TextureAtlasRegion extends TextureRegion {\n page;\n name;\n x = 0;\n y = 0;\n offsetX = 0;\n offsetY = 0;\n originalWidth = 0;\n originalHeight = 0;\n index = 0;\n degrees = 0;\n names = null;\n values = null;\n constructor(page, name) {\n super();\n this.page = page;\n this.name = name;\n page.regions.push(this);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGV4dHVyZUF0bGFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1RleHR1cmVBdGxhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQVcsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xGLE9BQU8sRUFBYyxLQUFLLEVBQWEsTUFBTSxZQUFZLENBQUM7QUFFMUQsTUFBTSxPQUFPLFlBQVk7SUFDeEIsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFvQixDQUFDO0lBQ3RDLE9BQU8sR0FBRyxJQUFJLEtBQUssRUFBc0IsQ0FBQztJQUUxQyxZQUFhLFNBQWlCO1FBQzdCLElBQUksTUFBTSxHQUFHLElBQUksa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFakMsSUFBSSxVQUFVLEdBQWdELEVBQUUsQ0FBQztRQUNqRSxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFzQixFQUFFLEVBQUU7WUFDL0MsSUFBSyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsSUFBSyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDO1FBQ0YsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsRUFBRTtZQUMzQixnRUFBZ0U7UUFDakUsQ0FBQyxDQUFDO1FBQ0YsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBc0IsRUFBRSxFQUFFO1lBQ2pELElBQUssQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUM7UUFDRixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFzQixFQUFFLEVBQUU7WUFDakQsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFBRSxJQUFLLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDbEUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFBRSxJQUFLLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDbkUsQ0FBQyxDQUFDO1FBQ0YsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBc0IsRUFBRSxFQUFFO1lBQzlDLElBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUNoQyxDQUFDLENBQUM7UUFFRixJQUFJLFlBQVksR0FBb0QsRUFBRSxDQUFDO1FBQ3ZFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQTBCLEVBQUUsRUFBRTtZQUNuRCxNQUFNLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUM7UUFDRixZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUEwQixFQUFFLEVBQUU7WUFDckQsTUFBTSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDO1FBQ0YsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBMEIsRUFBRSxFQUFFO1lBQ3ZELE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQztRQUNGLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQTBCLEVBQUUsRUFBRTtZQUN2RCxNQUFNLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxNQUFNLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUM7UUFDRixZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUEwQixFQUFFLEVBQUU7WUFDckQsTUFBTSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUMsTUFBTSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDO1FBQ0YsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBMEIsRUFBRSxFQUFFO1lBQ3hELE1BQU0sQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFD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QUFDLFdBQVcsQ0FBQztJQUM3QyxLQUFLLEdBQWdCLFdBQVcsQ0FBQyxXQUFXLENBQUM7SUFDN0MsT0FBTyxHQUFtQixJQUFJLENBQUM7SUFDL0IsS0FBSyxHQUFXLENBQUMsQ0FBQztJQUNsQixNQUFNLEdBQVcsQ0FBQyxDQUFDO0lBQ25CLEdBQUcsR0FBWSxLQUFLLENBQUM7SUFDckIsT0FBTyxHQUFHLElBQUksS0FBSyxFQUFzQixDQUFDO0lBRTFDLFlBQWEsSUFBWTtRQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0lBRUQsVUFBVSxDQUFFLE9BQWdCO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxLQUFLLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQzlCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQzNCLENBQUM7Q0FDRDtBQUVELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBQ3BELElBQUksQ0FBbUI7SUFDdkIsSUFBSSxDQUFTO0lBQ2IsQ0FBQyxHQUFXLENBQUMsQ0FBQztJQUNkLENBQUMsR0FBVyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQVcsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sR0FBVyxDQUFDLENBQUM7SUFDcEIsYUFBYSxHQUFXLENBQUMsQ0FBQztJQUMxQixjQUFjLEdBQVcsQ0FBQyxDQUFDO0lBQzNCLEtBQUssR0FBVyxDQUFDLENBQUM7SUFDbEIsT0FBTyxHQUFXLENBQUMsQ0FBQztJQUNwQixLQUFLLEdBQW9CLElBQUksQ0FBQztJQUM5QixNQUFNLEdBQXNCLElBQUksQ0FBQztJQUVqQyxZQUFhLElBQXNCLEVBQUUsSUFBWTtRQUNoRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7Q0FDRCJ9","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { TextureAtlasRegion } from \"../TextureAtlas.js\";\nimport { Color, Utils } from \"../Utils.js\";\nimport { VertexAttachment } from \"./Attachment.js\";\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 {\n region = null;\n /** The name of the texture region for this attachment. */\n path;\n /** The UV pair for each vertex, normalized within the texture region. */\n regionUVs = [];\n /** The UV pair for each vertex, normalized within the entire texture.\n *\n * See {@link #updateUVs}. */\n uvs = [];\n /** Triplets of vertex indices which describe the mesh's triangulation. */\n triangles = [];\n /** The color to tint the mesh. */\n color = new Color(1, 1, 1, 1);\n /** The width of the mesh's image. Available only when nonessential data was exported. */\n width = 0;\n /** The height of the mesh's image. Available only when nonessential data was exported. */\n height = 0;\n /** The number of entries at the beginning of {@link #vertices} that make up the mesh hull. */\n hullLength = 0;\n /** Vertex index pairs describing edges for controling triangulation. Mesh triangles will never cross edges. Only available if\n * nonessential data was exported. Triangulation is not performed at runtime. */\n edges = [];\n parentMesh = null;\n sequence = null;\n tempColor = new Color(0, 0, 0, 0);\n constructor(name, path) {\n super(name);\n this.path = path;\n }\n /** Calculates {@link #uvs} using the {@link #regionUVs} and region. Must be called if the region, the region's properties, or\n * the {@link #regionUVs} are changed. */\n updateRegion() {\n if (!this.region)\n throw new Error(\"Region not set.\");\n let regionUVs = this.regionUVs;\n if (!this.uvs || this.uvs.length != regionUVs.length)\n this.uvs = Utils.newFloatArray(regionUVs.length);\n let uvs = this.uvs;\n let n = this.uvs.length;\n let u = this.region.u, v = this.region.v, width = 0, height = 0;\n if (this.region instanceof TextureAtlasRegion) {\n let region = this.region, page = region.page;\n let textureWidth = page.width, textureHeight = page.height;\n switch (region.degrees) {\n case 90:\n u -= (region.originalHeight - region.offsetY - region.height) / textureWidth;\n v -= (region.originalWidth - region.offsetX - region.width) / textureHeight;\n width = region.originalHeight / textureWidth;\n height = region.originalWidth / textureHeight;\n for (let i = 0; i < n; i += 2) {\n uvs[i] = u + regionUVs[i + 1] * width;\n uvs[i + 1] = v + (1 - regionUVs[i]) * height;\n }\n return;\n case 180:\n u -= (region.originalWidth - region.offsetX - region.width) / textureWidth;\n v -= region.offsetY / textureHeight;\n width = region.originalWidth / textureWidth;\n height = region.originalHeight / textureHeight;\n for (let i = 0; i < n; i += 2) {\n uvs[i] = u + (1 - regionUVs[i]) * width;\n uvs[i + 1] = v + (1 - regionUVs[i + 1]) * height;\n }\n return;\n case 270:\n u -= region.offsetY / textureWidth;\n v -= region.offsetX / textureHeight;\n width = region.originalHeight / textureWidth;\n height = region.originalWidth / textureHeight;\n for (let i = 0; i < n; i += 2) {\n uvs[i] = u + (1 - regionUVs[i + 1]) * width;\n uvs[i + 1] = v + regionUVs[i] * height;\n }\n return;\n }\n u -= region.offsetX / textureWidth;\n v -= (region.originalHeight - region.offsetY - region.height) / textureHeight;\n width = region.originalWidth / textureWidth;\n height = region.originalHeight / textureHeight;\n }\n else if (!this.region) {\n u = v = 0;\n width = height = 1;\n }\n else {\n width = this.region.u2 - u;\n height = this.region.v2 - v;\n }\n for (let i = 0; i < n; i += 2) {\n uvs[i] = u + regionUVs[i] * width;\n uvs[i + 1] = v + regionUVs[i + 1] * height;\n }\n }\n /** The parent mesh if this is a linked mesh, else null. A linked mesh shares the {@link #bones}, {@link #vertices},\n * {@link #regionUVs}, {@link #triangles}, {@link #hullLength}, {@link #edges}, {@link #width}, and {@link #height} with the\n * parent mesh, but may have a different {@link #name} or {@link #path} (and therefore a different texture). */\n getParentMesh() {\n return this.parentMesh;\n }\n /** @param parentMesh May be null. */\n setParentMesh(parentMesh) {\n this.parentMesh = parentMesh;\n if (parentMesh) {\n this.bones = parentMesh.bones;\n this.vertices = parentMesh.vertices;\n this.worldVerticesLength = parentMesh.worldVerticesLength;\n this.regionUVs = parentMesh.regionUVs;\n this.triangles = parentMesh.triangles;\n this.hullLength = parentMesh.hullLength;\n this.worldVerticesLength = parentMesh.worldVerticesLength;\n }\n }\n copy() {\n if (this.parentMesh)\n return this.newLinkedMesh();\n let copy = new MeshAttachment(this.name, this.path);\n copy.region = this.region;\n copy.color.setFromColor(this.color);\n this.copyTo(copy);\n copy.regionUVs = new Array(this.regionUVs.length);\n Utils.arrayCopy(this.regionUVs, 0, copy.regionUVs, 0, this.regionUVs.length);\n copy.uvs = new Array(this.uvs.length);\n Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, this.uvs.length);\n copy.triangles = new Array(this.triangles.length);\n Utils.arrayCopy(this.triangles, 0, copy.triangles, 0, this.triangles.length);\n copy.hullLength = this.hullLength;\n copy.sequence = this.sequence != null ? this.sequence.copy() : null;\n // Nonessential.\n if (this.edges) {\n copy.edges = new Array(this.edges.length);\n Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length);\n }\n copy.width = this.width;\n copy.height = this.height;\n return copy;\n }\n computeWorldVertices(slot, start, count, worldVertices, offset, stride) {\n if (this.sequence != null)\n this.sequence.apply(slot, this);\n super.computeWorldVertices(slot, start, count, worldVertices, offset, stride);\n }\n /** Returns a new mesh with the {@link #parentMesh} set to this mesh's parent mesh, if any, else to this mesh. **/\n newLinkedMesh() {\n let copy = new MeshAttachment(this.name, this.path);\n copy.region = this.region;\n copy.color.setFromColor(this.color);\n copy.timelineAttachment = this.timelineAttachment;\n copy.setParentMesh(this.parentMesh ? this.parentMesh : this);\n if (copy.region != null)\n copy.updateRegion();\n return copy;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVzaEF0dGFjaG1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXR0YWNobWVudHMvTWVzaEF0dGFjaG1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRy9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQW1CLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWMsTUFBTSxpQkFBaUIsQ0FBQztBQUsvRDs7OytGQUcrRjtBQUMvRixNQUFNLE9BQU8sY0FBZSxTQUFRLGdCQUFnQjtJQUNuRCxNQUFNLEdBQXlCLElBQUksQ0FBQztJQUVwQywwREFBMEQ7SUFDMUQsSUFBSSxDQUFTO0lBRWIseUVBQXlFO0lBQ3pFLFNBQVMsR0FBb0IsRUFBRSxDQUFDO0lBRWhDOztpQ0FFNkI7SUFDN0IsR0FBRyxHQUFvQixFQUFFLENBQUM7SUFFMUIsMEVBQTBFO0lBQzFFLFNBQVMsR0FBa0IsRUFBRSxDQUFDO0lBRTlCLGtDQUFrQztJQUNsQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFOUIseUZBQXlGO0lBQ3pGLEtBQUssR0FBVyxDQUFDLENBQUM7SUFFbEIsMEZBQTBGO0lBQzFGLE1BQU0sR0FBVyxDQUFDLENBQUM7SUFFbkIsOEZBQThGO0lBQzlGLFVBQVUsR0FBVyxDQUFDLENBQUM7SUFFdkI7b0ZBQ2dGO0lBQ2hGLEtBQUssR0FBa0IsRUFBRSxDQUFDO0lBRWxCLFVBQVUsR0FBMEIsSUFBSSxDQUFDO0lBRWpELFFBQVEsR0FBb0IsSUFBSSxDQUFDO0lBRWpDLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxD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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Color, Utils } from \"../Utils.js\";\nimport { VertexAttachment } from \"./Attachment.js\";\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 /** The lengths along the path in the setup pose from the start of the path to the end of each Bezier curve. */\n lengths = [];\n /** If true, the start and end knots are connected. */\n closed = false;\n /** If true, additional calculations are performed to make calculating positions along the path more accurate. If false, fewer\n * calculations are performed but calculating positions along the path is less accurate. */\n constantSpeed = false;\n /** The color of the path as it was in Spine. Available only when nonessential data was exported. Paths are not usually\n * rendered at runtime. */\n color = new Color(1, 1, 1, 1);\n constructor(name) {\n super(name);\n }\n copy() {\n let copy = new PathAttachment(this.name);\n this.copyTo(copy);\n copy.lengths = new Array(this.lengths.length);\n Utils.arrayCopy(this.lengths, 0, copy.lengths, 0, this.lengths.length);\n copy.closed = closed;\n copy.constantSpeed = this.constantSpeed;\n copy.color.setFromColor(this.color);\n return copy;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0aEF0dGFjaG1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXR0YWNobWVudHMvUGF0aEF0dGFjaG1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBYyxNQUFNLGlCQUFpQixDQUFDO0FBRS9EOzs4R0FFOEc7QUFDOUcsTUFBTSxPQUFPLGNBQWUsU0FBUSxnQkFBZ0I7SUFFbkQsK0dBQStHO0lBQy9HLE9BQU8sR0FBa0IsRUFBRSxDQUFDO0lBRTVCLHNEQUFzRDtJQUN0RCxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBRWY7K0ZBQzJGO0lBQzNGLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFdEI7OEJBQzBCO0lBQzFCLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU5QixZQUFhLElBQVk7UUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQUk7UUFDSCxJQUFJLElBQUksR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksS0FBSyxDQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDYixDQUFDO0NBQ0QifQ==","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Color, MathUtils } from \"../Utils.js\";\nimport { VertexAttachment } from \"./Attachment.js\";\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 x = 0;\n y = 0;\n rotation = 0;\n /** The color of the point attachment as it was in Spine. Available only when nonessential data was exported. Point attachments\n * are not usually rendered at runtime. */\n color = new Color(0.38, 0.94, 0, 1);\n constructor(name) {\n super(name);\n }\n computeWorldPosition(bone, point) {\n point.x = this.x * bone.a + this.y * bone.b + bone.worldX;\n point.y = this.x * bone.c + this.y * bone.d + bone.worldY;\n return point;\n }\n computeWorldRotation(bone) {\n const r = this.rotation * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);\n const x = cos * bone.a + sin * bone.b;\n const y = cos * bone.c + sin * bone.d;\n return MathUtils.atan2Deg(y, x);\n }\n copy() {\n let copy = new PointAttachment(this.name);\n copy.x = this.x;\n copy.y = this.y;\n copy.rotation = this.rotation;\n copy.color.setFromColor(this.color);\n return copy;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9pbnRBdHRhY2htZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F0dGFjaG1lbnRzL1BvaW50QXR0YWNobWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLEtBQUssRUFBVyxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFjLE1BQU0saUJBQWlCLENBQUM7QUFFL0Q7Ozs7MkdBSTJHO0FBQzNHLE1BQU0sT0FBTyxlQUFnQixTQUFRLGdCQUFnQjtJQUNwRCxDQUFDLEdBQVcsQ0FBQyxDQUFDO0lBQ2QsQ0FBQyxHQUFXLENBQUMsQ0FBQztJQUNkLFFBQVEsR0FBVyxDQUFDLENBQUM7SUFFckI7OENBQzBDO0lBQzFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVwQyxZQUFhLElBQVk7UUFDeEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELG9CQUFvQixDQUFFLElBQVUsRUFBRSxLQUFjO1FBQy9DLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzFELEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzFELE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUVELG9CQUFvQixDQUFFLElBQVU7UUFDL0IsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUk7UUFDSCxJQUFJLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztDQUNEIn0=","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Color, MathUtils, Utils } from \"../Utils.js\";\nimport { Attachment } from \"./Attachment.js\";\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 {\n /** The local x translation. */\n x = 0;\n /** The local y translation. */\n y = 0;\n /** The local scaleX. */\n scaleX = 1;\n /** The local scaleY. */\n scaleY = 1;\n /** The local rotation. */\n rotation = 0;\n /** The width of the region attachment in Spine. */\n width = 0;\n /** The height of the region attachment in Spine. */\n height = 0;\n /** The color to tint the region attachment. */\n color = new Color(1, 1, 1, 1);\n /** The name of the texture region for this attachment. */\n path;\n region = null;\n sequence = null;\n /** For each of the 4 vertices, a pair of <code>x,y</code> values that is the local position of the vertex.\n *\n * See {@link #updateOffset()}. */\n offset = Utils.newFloatArray(8);\n uvs = Utils.newFloatArray(8);\n tempColor = new Color(1, 1, 1, 1);\n constructor(name, path) {\n super(name);\n this.path = path;\n }\n /** Calculates the {@link #offset} using the region settings. Must be called after changing region settings. */\n updateRegion() {\n if (!this.region)\n throw new Error(\"Region not set.\");\n let region = this.region;\n let uvs = this.uvs;\n if (region == null) {\n uvs[0] = 0;\n uvs[1] = 0;\n uvs[2] = 0;\n uvs[3] = 1;\n uvs[4] = 1;\n uvs[5] = 1;\n uvs[6] = 1;\n uvs[7] = 0;\n return;\n }\n let regionScaleX = this.width / this.region.originalWidth * this.scaleX;\n let regionScaleY = this.height / this.region.originalHeight * this.scaleY;\n let localX = -this.width / 2 * this.scaleX + this.region.offsetX * regionScaleX;\n let localY = -this.height / 2 * this.scaleY + this.region.offsetY * regionScaleY;\n let localX2 = localX + this.region.width * regionScaleX;\n let localY2 = localY + this.region.height * regionScaleY;\n let radians = this.rotation * MathUtils.degRad;\n let cos = Math.cos(radians);\n let sin = Math.sin(radians);\n let x = this.x, y = this.y;\n let localXCos = localX * cos + x;\n let localXSin = localX * sin;\n let localYCos = localY * cos + y;\n let localYSin = localY * sin;\n let localX2Cos = localX2 * cos + x;\n let localX2Sin = localX2 * sin;\n let localY2Cos = localY2 * cos + y;\n let localY2Sin = localY2 * sin;\n let offset = this.offset;\n offset[0] = localXCos - localYSin;\n offset[1] = localYCos + localXSin;\n offset[2] = localXCos - localY2Sin;\n offset[3] = localY2Cos + localXSin;\n offset[4] = localX2Cos - localY2Sin;\n offset[5] = localY2Cos + localX2Sin;\n offset[6] = localX2Cos - localYSin;\n offset[7] = localYCos + localX2Sin;\n if (region.degrees == 90) {\n uvs[0] = region.u2;\n uvs[1] = region.v2;\n uvs[2] = region.u;\n uvs[3] = region.v2;\n uvs[4] = region.u;\n uvs[5] = region.v;\n uvs[6] = region.u2;\n uvs[7] = region.v;\n }\n else {\n uvs[0] = region.u;\n uvs[1] = region.v2;\n uvs[2] = region.u;\n uvs[3] = region.v;\n uvs[4] = region.u2;\n uvs[5] = region.v;\n uvs[6] = region.u2;\n uvs[7] = region.v2;\n }\n }\n /** Transforms the attachment's four vertices to world coordinates. If the attachment has a {@link #sequence}, the region may\n * be changed.\n * <p>\n * See <a href=\"http://esotericsoftware.com/spine-runtime-skeletons#World-transforms\">World transforms</a> in the Spine\n * Runtimes Guide.\n * @param worldVertices The output world vertices. Must have a length >= <code>offset</code> + 8.\n * @param offset The <code>worldVertices</code> index to begin writing values.\n * @param stride The number of <code>worldVertices</code> entries between the value pairs written. */\n computeWorldVertices(slot, worldVertices, offset, stride) {\n if (this.sequence != null)\n this.sequence.apply(slot, this);\n let bone = slot.bone;\n let vertexOffset = this.offset;\n let x = bone.worldX, y = bone.worldY;\n let a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n let offsetX = 0, offsetY = 0;\n offsetX = vertexOffset[0];\n offsetY = vertexOffset[1];\n worldVertices[offset] = offsetX * a + offsetY * b + x; // br\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n offset += stride;\n offsetX = vertexOffset[2];\n offsetY = vertexOffset[3];\n worldVertices[offset] = offsetX * a + offsetY * b + x; // bl\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n offset += stride;\n offsetX = vertexOffset[4];\n offsetY = vertexOffset[5];\n worldVertices[offset] = offsetX * a + offsetY * b + x; // ul\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n offset += stride;\n offsetX = vertexOffset[6];\n offsetY = vertexOffset[7];\n worldVertices[offset] = offsetX * a + offsetY * b + x; // ur\n worldVertices[offset + 1] = offsetX * c + offsetY * d + y;\n }\n copy() {\n let copy = new RegionAttachment(this.name, this.path);\n copy.region = this.region;\n copy.x = this.x;\n copy.y = this.y;\n copy.scaleX = this.scaleX;\n copy.scaleY = this.scaleY;\n copy.rotation = this.rotation;\n copy.width = this.width;\n copy.height = this.height;\n Utils.arrayCopy(this.uvs, 0, copy.uvs, 0, 8);\n Utils.arrayCopy(this.offset, 0, copy.offset, 0, 8);\n copy.color.setFromColor(this.color);\n copy.sequence = this.sequence != null ? this.sequence.copy() : null;\n return copy;\n }\n static X1 = 0;\n static Y1 = 1;\n static C1R = 2;\n static C1G = 3;\n static C1B = 4;\n static C1A = 5;\n static U1 = 6;\n static V1 = 7;\n static X2 = 8;\n static Y2 = 9;\n static C2R = 10;\n static C2G = 11;\n static C2B = 12;\n static C2A = 13;\n static U2 = 14;\n static V2 = 15;\n static X3 = 16;\n static Y3 = 17;\n static C3R = 18;\n static C3G = 19;\n static C3B = 20;\n static C3A = 21;\n static U3 = 22;\n static V3 = 23;\n static X4 = 24;\n static Y4 = 25;\n static C4R = 26;\n static C4G = 27;\n static C4B = 28;\n static C4A = 29;\n static U4 = 30;\n static V4 = 31;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVnaW9uQXR0YWNobWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdHRhY2htZW50cy9SZWdpb25BdHRhY2htZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUkvRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBbUIsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUs3Qzs7a0dBRWtHO0FBQ2xHLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxVQUFVO0lBQy9DLCtCQUErQjtJQUMvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRU4sK0JBQStCO0lBQy9CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFTix3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLHdCQUF3QjtJQUN4QixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRVgsMEJBQTBCO0lBQzFCLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFYixtREFBbUQ7SUFDbkQsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUVWLG9EQUFvRDtJQUNwRCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRVgsK0NBQStDO0lBQy9DLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUU5QiwwREFBMEQ7SUFDMUQsSUFBSSxDQUFTO0lBRWIsTUFBTSxHQUF5QixJQUFJLENBQUM7SUFDcEMsUUFBUSxHQUFvQixJQUFJLENBQUM7SUFFakM7O3NDQUVrQztJQUNsQyxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVoQyxHQUFHLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU3QixTQUFTLEdBQUcsSUFB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LENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNmLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2YsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDaEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDaEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDaEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDaEIsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDZixNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUVmLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2YsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDZixNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNoQixNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNoQixNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNoQixNQUFNLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNoQixNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNmLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDIn0=","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\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\";\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 {\n atlas;\n constructor(atlas) {\n this.atlas = atlas;\n }\n loadSequence(name, basePath, sequence) {\n let regions = sequence.regions;\n for (let i = 0, n = regions.length; i < n; i++) {\n let path = sequence.getPath(basePath, i);\n let region = this.atlas.findRegion(path);\n if (region == null)\n throw new Error(\"Region not found in atlas: \" + path + \" (sequence: \" + name + \")\");\n regions[i] = region;\n }\n }\n newRegionAttachment(skin, name, path, sequence) {\n let attachment = new RegionAttachment(name, path);\n if (sequence != null) {\n this.loadSequence(name, path, sequence);\n }\n else {\n let region = this.atlas.findRegion(path);\n if (!region)\n throw new Error(\"Region not found in atlas: \" + path + \" (region attachment: \" + name + \")\");\n attachment.region = region;\n }\n return attachment;\n }\n newMeshAttachment(skin, name, path, sequence) {\n let attachment = new MeshAttachment(name, path);\n if (sequence != null) {\n this.loadSequence(name, path, sequence);\n }\n else {\n let region = this.atlas.findRegion(path);\n if (!region)\n throw new Error(\"Region not found in atlas: \" + path + \" (mesh attachment: \" + name + \")\");\n attachment.region = region;\n }\n return attachment;\n }\n newBoundingBoxAttachment(skin, name) {\n return new BoundingBoxAttachment(name);\n }\n newPathAttachment(skin, name) {\n return new PathAttachment(name);\n }\n newPointAttachment(skin, name) {\n return new PointAttachment(name);\n }\n newClippingAttachment(skin, name) {\n return new ClippingAttachment(name);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXRsYXNBdHRhY2htZW50TG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0F0bGFzQXR0YWNobWVudExvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFLckU7OzsyQkFHMkI7QUFDM0IsTUFBTSxPQUFPLHFCQUFxQjtJQUNqQyxLQUFLLENBQWU7SUFFcEIsWUFBYSxLQUFtQjtRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsWUFBWSxDQUFFLElBQVksRUFBRSxRQUFnQixFQUFFLFFBQWtCO1FBQy9ELElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMvQyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxJQUFJLE1BQU0sSUFBSSxJQUFJO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxHQUFHLGNBQWMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDeEcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztTQUNwQjtJQUNGLENBQUM7SUFFRCxtQkFBbUIsQ0FBRSxJQUFVLEVBQUUsSUFBWSxFQUFFLElBQVksRUFBRSxRQUFrQjtRQUM5RSxJQUFJLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3hDO2FBQU07WUFDTixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsTUFBTTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixHQUFHLElBQUksR0FBRyx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDMUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7U0FDM0I7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNuQixDQUFDO0lBRUQsaUJBQWlCLENBQUUsSUFBVSxFQUFFLElBQVksRUFBRSxJQUFZLEVBQUUsUUFBa0I7UUFDNUUsSUFBSSxVQUFVLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hELElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDeEM7YUFBTTtZQUNOLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxNQUFNO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxHQUFHLHFCQUFxQixHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN4RyxVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztTQUMzQjtRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ25CLENBQUM7SUFFRCx3QkFBd0IsQ0FBRSxJQUFVLEVBQUUsSUFBWTtRQUNqRCxPQUFPLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGlCQUFpQixDQUFFLElBQVUsRUFBRSxJQUFZO1FBQzFDLE9BQU8sSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELGtCQUFrQixDQUFFLElBQVUsRUFBRSxJQUFZO1FBQzNDLE9BQU8sSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELHFCQUFxQixDQUFFLElBQVUsRUFBRSxJQUFZO1FBQzlDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBQ0QifQ==","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Inherit } from \"./BoneData.js\";\nimport { MathUtils } from \"./Utils.js\";\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 {\n /** The bone's setup pose data. */\n data;\n /** The skeleton this bone belongs to. */\n skeleton;\n /** The parent bone, or null if this is the root bone. */\n parent = null;\n /** The immediate children of this bone. */\n children = new Array();\n /** The local x translation. */\n x = 0;\n /** The local y translation. */\n y = 0;\n /** The local rotation in degrees, counter clockwise. */\n rotation = 0;\n /** The local scaleX. */\n scaleX = 0;\n /** The local scaleY. */\n scaleY = 0;\n /** The local shearX. */\n shearX = 0;\n /** The local shearY. */\n shearY = 0;\n /** The applied local x translation. */\n ax = 0;\n /** The applied local y translation. */\n ay = 0;\n /** The applied local rotation in degrees, counter clockwise. */\n arotation = 0;\n /** The applied local scaleX. */\n ascaleX = 0;\n /** The applied local scaleY. */\n ascaleY = 0;\n /** The applied local shearX. */\n ashearX = 0;\n /** The applied local shearY. */\n ashearY = 0;\n /** Part of the world transform matrix for the X axis. If changed, {@link #updateAppliedTransform()} should be called. */\n a = 0;\n /** Part of the world transform matrix for the Y axis. If changed, {@link #updateAppliedTransform()} should be called. */\n b = 0;\n /** Part of the world transform matrix for the X axis. If changed, {@link #updateAppliedTransform()} should be called. */\n c = 0;\n /** Part of the world transform matrix for the Y axis. If changed, {@link #updateAppliedTransform()} should be called. */\n d = 0;\n /** The world X position. If changed, {@link #updateAppliedTransform()} should be called. */\n worldY = 0;\n /** The world Y position. If changed, {@link #updateAppliedTransform()} should be called. */\n worldX = 0;\n inherit = Inherit.Normal;\n sorted = false;\n active = false;\n /** @param parent May be null. */\n constructor(data, skeleton, parent) {\n if (!data)\n throw new Error(\"data cannot be null.\");\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.skeleton = skeleton;\n this.parent = parent;\n this.setToSetupPose();\n }\n /** Returns false when the bone has not been computed because {@link BoneData#skinRequired} is true and the\n * {@link Skeleton#skin active skin} does not {@link Skin#bones contain} this bone. */\n isActive() {\n return this.active;\n }\n /** Computes the world transform using the parent bone and this bone's local applied transform. */\n update(physics) {\n this.updateWorldTransformWith(this.ax, this.ay, this.arotation, this.ascaleX, this.ascaleY, this.ashearX, this.ashearY);\n }\n /** Computes the world transform using the parent bone and this bone's local transform.\n *\n * See {@link #updateWorldTransformWith()}. */\n updateWorldTransform() {\n this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);\n }\n /** Computes the world transform using the parent bone and the specified local transform. The applied transform is set to the\n * specified local transform. Child bones are not updated.\n *\n * See [World transforms](http://esotericsoftware.com/spine-runtime-skeletons#World-transforms) in the Spine\n * Runtimes Guide. */\n updateWorldTransformWith(x, y, rotation, scaleX, scaleY, shearX, shearY) {\n this.ax = x;\n this.ay = y;\n this.arotation = rotation;\n this.ascaleX = scaleX;\n this.ascaleY = scaleY;\n this.ashearX = shearX;\n this.ashearY = shearY;\n let parent = this.parent;\n if (!parent) { // Root bone.\n let skeleton = this.skeleton;\n const sx = skeleton.scaleX, sy = skeleton.scaleY;\n const rx = (rotation + shearX) * MathUtils.degRad;\n const ry = (rotation + 90 + shearY) * MathUtils.degRad;\n this.a = Math.cos(rx) * scaleX * sx;\n this.b = Math.cos(ry) * scaleY * sx;\n this.c = Math.sin(rx) * scaleX * sy;\n this.d = Math.sin(ry) * scaleY * sy;\n this.worldX = x * sx + skeleton.x;\n this.worldY = y * sy + skeleton.y;\n return;\n }\n let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n this.worldX = pa * x + pb * y + parent.worldX;\n this.worldY = pc * x + pd * y + parent.worldY;\n switch (this.inherit) {\n case Inherit.Normal: {\n const rx = (rotation + shearX) * MathUtils.degRad;\n const ry = (rotation + 90 + shearY) * MathUtils.degRad;\n const la = Math.cos(rx) * scaleX;\n const lb = Math.cos(ry) * scaleY;\n const lc = Math.sin(rx) * scaleX;\n const ld = Math.sin(ry) * scaleY;\n this.a = pa * la + pb * lc;\n this.b = pa * lb + pb * ld;\n this.c = pc * la + pd * lc;\n this.d = pc * lb + pd * ld;\n return;\n }\n case Inherit.OnlyTranslation: {\n const rx = (rotation + shearX) * MathUtils.degRad;\n const ry = (rotation + 90 + shearY) * MathUtils.degRad;\n this.a = Math.cos(rx) * scaleX;\n this.b = Math.cos(ry) * scaleY;\n this.c = Math.sin(rx) * scaleX;\n this.d = Math.sin(ry) * scaleY;\n break;\n }\n case Inherit.NoRotationOrReflection: {\n let s = pa * pa + pc * pc;\n let prx = 0;\n if (s > 0.0001) {\n s = Math.abs(pa * pd - pb * pc) / s;\n pa /= this.skeleton.scaleX;\n pc /= this.skeleton.scaleY;\n pb = pc * s;\n pd = pa * s;\n prx = Math.atan2(pc, pa) * MathUtils.radDeg;\n }\n else {\n pa = 0;\n pc = 0;\n prx = 90 - Math.atan2(pd, pb) * MathUtils.radDeg;\n }\n const rx = (rotation + shearX - prx) * MathUtils.degRad;\n const ry = (rotation + shearY - prx + 90) * MathUtils.degRad;\n const la = Math.cos(rx) * scaleX;\n const lb = Math.cos(ry) * scaleY;\n const lc = Math.sin(rx) * scaleX;\n const ld = Math.sin(ry) * scaleY;\n this.a = pa * la - pb * lc;\n this.b = pa * lb - pb * ld;\n this.c = pc * la + pd * lc;\n this.d = pc * lb + pd * ld;\n break;\n }\n case Inherit.NoScale:\n case Inherit.NoScaleOrReflection: {\n rotation *= MathUtils.degRad;\n const cos = Math.cos(rotation), sin = Math.sin(rotation);\n let za = (pa * cos + pb * sin) / this.skeleton.scaleX;\n let zc = (pc * cos + pd * sin) / this.skeleton.scaleY;\n let s = Math.sqrt(za * za + zc * zc);\n if (s > 0.00001)\n s = 1 / s;\n za *= s;\n zc *= s;\n s = Math.sqrt(za * za + zc * zc);\n if (this.inherit == Inherit.NoScale\n && (pa * pd - pb * pc < 0) != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0))\n s = -s;\n rotation = Math.PI / 2 + Math.atan2(zc, za);\n const zb = Math.cos(rotation) * s;\n const zd = Math.sin(rotation) * s;\n shearX *= MathUtils.degRad;\n shearY = (90 + shearY) * MathUtils.degRad;\n const la = Math.cos(shearX) * scaleX;\n const lb = Math.cos(shearY) * scaleY;\n const lc = Math.sin(shearX) * scaleX;\n const ld = Math.sin(shearY) * scaleY;\n this.a = za * la + zb * lc;\n this.b = za * lb + zb * ld;\n this.c = zc * la + zd * lc;\n this.d = zc * lb + zd * ld;\n break;\n }\n }\n this.a *= this.skeleton.scaleX;\n this.b *= this.skeleton.scaleX;\n this.c *= this.skeleton.scaleY;\n this.d *= this.skeleton.scaleY;\n }\n /** Sets this bone's local transform to the setup pose. */\n setToSetupPose() {\n let data = this.data;\n this.x = data.x;\n this.y = data.y;\n this.rotation = data.rotation;\n this.scaleX = data.scaleX;\n this.scaleY = data.scaleY;\n this.shearX = data.shearX;\n this.shearY = data.shearY;\n this.inherit = data.inherit;\n }\n /** Computes the applied transform values from the world transform.\n *\n * If the world transform is modified (by a constraint, {@link #rotateWorld(float)}, etc) then this method should be called so\n * the applied transform matches the world transform. The applied transform may be needed by other code (eg to apply other\n * constraints).\n *\n * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. The applied transform after\n * calling this method is equivalent to the local transform used to compute the world transform, but may not be identical. */\n updateAppliedTransform() {\n let parent = this.parent;\n if (!parent) {\n this.ax = this.worldX - this.skeleton.x;\n this.ay = this.worldY - this.skeleton.y;\n this.arotation = Math.atan2(this.c, this.a) * MathUtils.radDeg;\n this.ascaleX = Math.sqrt(this.a * this.a + this.c * this.c);\n this.ascaleY = Math.sqrt(this.b * this.b + this.d * this.d);\n this.ashearX = 0;\n this.ashearY = Math.atan2(this.a * this.b + this.c * this.d, this.a * this.d - this.b * this.c) * MathUtils.radDeg;\n return;\n }\n let pa = parent.a, pb = parent.b, pc = parent.c, pd = parent.d;\n let pid = 1 / (pa * pd - pb * pc);\n let ia = pd * pid, ib = pb * pid, ic = pc * pid, id = pa * pid;\n let dx = this.worldX - parent.worldX, dy = this.worldY - parent.worldY;\n this.ax = (dx * ia - dy * ib);\n this.ay = (dy * id - dx * ic);\n let ra, rb, rc, rd;\n if (this.inherit == Inherit.OnlyTranslation) {\n ra = this.a;\n rb = this.b;\n rc = this.c;\n rd = this.d;\n }\n else {\n switch (this.inherit) {\n case Inherit.NoRotationOrReflection: {\n let s = Math.abs(pa * pd - pb * pc) / (pa * pa + pc * pc);\n let sa = pa / this.skeleton.scaleX;\n let sc = pc / this.skeleton.scaleY;\n pb = -sc * s * this.skeleton.scaleX;\n pd = sa * s * this.skeleton.scaleY;\n pid = 1 / (pa * pd - pb * pc);\n ia = pd * pid;\n ib = pb * pid;\n break;\n }\n case Inherit.NoScale:\n case Inherit.NoScaleOrReflection:\n let cos = MathUtils.cosDeg(this.rotation), sin = MathUtils.sinDeg(this.rotation);\n pa = (pa * cos + pb * sin) / this.skeleton.scaleX;\n pc = (pc * cos + pd * sin) / this.skeleton.scaleY;\n let s = Math.sqrt(pa * pa + pc * pc);\n if (s > 0.00001)\n s = 1 / s;\n pa *= s;\n pc *= s;\n s = Math.sqrt(pa * pa + pc * pc);\n if (this.inherit == Inherit.NoScale && pid < 0 != (this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0))\n s = -s;\n let r = MathUtils.PI / 2 + Math.atan2(pc, pa);\n pb = Math.cos(r) * s;\n pd = Math.sin(r) * s;\n pid = 1 / (pa * pd - pb * pc);\n ia = pd * pid;\n ib = pb * pid;\n ic = pc * pid;\n id = pa * pid;\n }\n ra = ia * this.a - ib * this.c;\n rb = ia * this.b - ib * this.d;\n rc = id * this.c - ic * this.a;\n rd = id * this.d - ic * this.b;\n }\n this.ashearX = 0;\n this.ascaleX = Math.sqrt(ra * ra + rc * rc);\n if (this.ascaleX > 0.0001) {\n let det = ra * rd - rb * rc;\n this.ascaleY = det / this.ascaleX;\n this.ashearY = -Math.atan2(ra * rb + rc * rd, det) * MathUtils.radDeg;\n this.arotation = Math.atan2(rc, ra) * MathUtils.radDeg;\n }\n else {\n this.ascaleX = 0;\n this.ascaleY = Math.sqrt(rb * rb + rd * rd);\n this.ashearY = 0;\n this.arotation = 90 - Math.atan2(rd, rb) * MathUtils.radDeg;\n }\n }\n /** The world rotation for the X axis, calculated using {@link #a} and {@link #c}. */\n getWorldRotationX() {\n return Math.atan2(this.c, this.a) * MathUtils.radDeg;\n }\n /** The world rotation for the Y axis, calculated using {@link #b} and {@link #d}. */\n getWorldRotationY() {\n return Math.atan2(this.d, this.b) * MathUtils.radDeg;\n }\n /** The magnitude (always positive) of the world scale X, calculated using {@link #a} and {@link #c}. */\n getWorldScaleX() {\n return Math.sqrt(this.a * this.a + this.c * this.c);\n }\n /** The magnitude (always positive) of the world scale Y, calculated using {@link #b} and {@link #d}. */\n getWorldScaleY() {\n return Math.sqrt(this.b * this.b + this.d * this.d);\n }\n /** Transforms a point from world coordinates to the bone's local coordinates. */\n worldToLocal(world) {\n let invDet = 1 / (this.a * this.d - this.b * this.c);\n let x = world.x - this.worldX, y = world.y - this.worldY;\n world.x = x * this.d * invDet - y * this.b * invDet;\n world.y = y * this.a * invDet - x * this.c * invDet;\n return world;\n }\n /** Transforms a point from the bone's local coordinates to world coordinates. */\n localToWorld(local) {\n let x = local.x, y = local.y;\n local.x = x * this.a + y * this.b + this.worldX;\n local.y = x * this.c + y * this.d + this.worldY;\n return local;\n }\n /** Transforms a point from world coordinates to the parent bone's local coordinates. */\n worldToParent(world) {\n if (world == null)\n throw new Error(\"world cannot be null.\");\n return this.parent == null ? world : this.parent.worldToLocal(world);\n }\n /** Transforms a point from the parent bone's coordinates to world coordinates. */\n parentToWorld(world) {\n if (world == null)\n throw new Error(\"world cannot be null.\");\n return this.parent == null ? world : this.parent.localToWorld(world);\n }\n /** Transforms a world rotation to a local rotation. */\n worldToLocalRotation(worldRotation) {\n let sin = MathUtils.sinDeg(worldRotation), cos = MathUtils.cosDeg(worldRotation);\n return Math.atan2(this.a * sin - this.c * cos, this.d * cos - this.b * sin) * MathUtils.radDeg + this.rotation - this.shearX;\n }\n /** Transforms a local rotation to a world rotation. */\n localToWorldRotation(localRotation) {\n localRotation -= this.rotation - this.shearX;\n let sin = MathUtils.sinDeg(localRotation), cos = MathUtils.cosDeg(localRotation);\n return Math.atan2(cos * this.c + sin * this.d, cos * this.a + sin * this.b) * MathUtils.radDeg;\n }\n /** Rotates the world transform the specified amount.\n * <p>\n * After changes are made to the world transform, {@link #updateAppliedTransform()} should be called and\n * {@link #update(Physics)} will need to be called on any child bones, recursively. */\n rotateWorld(degrees) {\n degrees *= MathUtils.degRad;\n const sin = Math.sin(degrees), cos = Math.cos(degrees);\n const ra = this.a, rb = this.b;\n this.a = cos * ra - sin * this.c;\n this.b = cos * rb - sin * this.d;\n this.c = sin * ra + cos * this.c;\n this.d = sin * rb + cos * this.d;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Cb25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUUvRSxPQUFPLEVBQVksT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2xELE9BQU8sRUFBRSxTQUFTLEVBQVcsTUFBTSxZQUFZLENBQUM7QUFFaEQ7Ozs7aUhBSWlIO0FBQ2pILE1BQU0sT0FBTyxJQUFJO0lBQ2hCLGtDQUFrQztJQUNsQyxJQUFJLENBQVc7SUFFZix5Q0FBeUM7SUFDekMsUUFBUSxDQUFXO0lBRW5CLHlEQUF5RDtJQUN6RCxNQUFNLEdBQWdCLElBQUksQ0FBQztJQUUzQiwyQ0FBMkM7SUFDM0MsUUFBUSxHQUFHLElBQUksS0FBSyxFQUFRLENBQUM7SUFFN0IsK0JBQStCO0lBQy9CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFTiwrQkFBK0I7SUFDL0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVOLHdEQUF3RDtJQUN4RCxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRWIsd0JBQXdCO0lBQ3hCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx3QkFBd0I7SUFDeEIsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVYLHdCQUF3QjtJQUN4QixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRVgsd0JBQXdCO0lBQ3hCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFWCx1Q0FBdUM7SUFDdkMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVQLHVDQUF1QztJQUN2QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRVAsZ0VBQWdFO0lBQ2hFLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFZCxnQ0FBZ0M7SUFDaEMsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUVaLGdDQUFnQztJQUNoQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBRVosZ0NBQWdDO0lBQ2hDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFF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QyxRQUFRLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDdkQsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEMsT0FBTztTQUNQO1FBRUQsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzlDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFFOUMsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3JCLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dC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LENBQUM7Z0JBQzVDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUM7Z0JBQzNCLE1BQU0sR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO2dCQUMxQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztnQkFDckMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7Z0JBQ3JDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUNyQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztnQkFDckMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLE1BQU07YUFDTjtTQUNEO1FBQ0QsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUMvQixJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9CLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDL0IsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsMERBQTBEO0lBQzFELGNBQWM7UUFDYixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7O2lJQU82SDtJQUM3SCxzQkFBc0I7UUFDckIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1osSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztZQUMvRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDbkgsT0FBTztTQUNQO1FBQ0QsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUs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QyxPQUFPLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0QifQ==","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n/** The base class for all constraint datas. */\nexport class ConstraintData {\n name;\n order;\n skinRequired;\n constructor(name, order, skinRequired) {\n this.name = name;\n this.order = order;\n this.skinRequired = skinRequired;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RyYWludERhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvQ29uc3RyYWludERhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLCtDQUErQztBQUMvQyxNQUFNLE9BQWdCLGNBQWM7SUFDZjtJQUFxQjtJQUFzQjtJQUEvRCxZQUFvQixJQUFZLEVBQVMsS0FBYSxFQUFTLFlBQXFCO1FBQWhFLFNBQUksR0FBSixJQUFJLENBQVE7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsaUJBQVksR0FBWixZQUFZLENBQVM7SUFBSSxDQUFDO0NBQ3pGIn0=","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { TextureAtlas } from \"./TextureAtlas.js\";\nexport class AssetManagerBase {\n pathPrefix = \"\";\n textureLoader;\n downloader;\n assets = {};\n errors = {};\n toLoad = 0;\n loaded = 0;\n constructor(textureLoader, pathPrefix = \"\", downloader = new Downloader()) {\n this.textureLoader = textureLoader;\n this.pathPrefix = pathPrefix;\n this.downloader = downloader;\n }\n start(path) {\n this.toLoad++;\n return this.pathPrefix + path;\n }\n success(callback, path, asset) {\n this.toLoad--;\n this.loaded++;\n this.assets[path] = asset;\n if (callback)\n callback(path, asset);\n }\n error(callback, path, message) {\n this.toLoad--;\n this.loaded++;\n this.errors[path] = message;\n if (callback)\n callback(path, message);\n }\n loadAll() {\n let promise = new Promise((resolve, reject) => {\n let check = () => {\n if (this.isLoadingComplete()) {\n if (this.hasErrors())\n reject(this.errors);\n else\n resolve(this);\n return;\n }\n requestAnimationFrame(check);\n };\n requestAnimationFrame(check);\n });\n return promise;\n }\n setRawDataURI(path, data) {\n this.downloader.rawDataUris[this.pathPrefix + path] = data;\n }\n loadBinary(path, success = () => { }, error = () => { }) {\n path = this.start(path);\n this.downloader.downloadBinary(path, (data) => {\n this.success(success, path, data);\n }, (status, responseText) => {\n this.error(error, path, `Couldn't load binary ${path}: status ${status}, ${responseText}`);\n });\n }\n loadText(path, success = () => { }, error = () => { }) {\n path = this.start(path);\n this.downloader.downloadText(path, (data) => {\n this.success(success, path, data);\n }, (status, responseText) => {\n this.error(error, path, `Couldn't load text ${path}: status ${status}, ${responseText}`);\n });\n }\n loadJson(path, success = () => { }, error = () => { }) {\n path = this.start(path);\n this.downloader.downloadJson(path, (data) => {\n this.success(success, path, data);\n }, (status, responseText) => {\n this.error(error, path, `Couldn't load JSON ${path}: status ${status}, ${responseText}`);\n });\n }\n loadTexture(path, success = () => { }, error = () => { }) {\n path = this.start(path);\n let isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document);\n let isWebWorker = !isBrowser; // && typeof importScripts !== 'undefined';\n if (isWebWorker) {\n fetch(path, { mode: \"cors\" }).then((response) => {\n if (response.ok)\n return response.blob();\n this.error(error, path, `Couldn't load image: ${path}`);\n return null;\n }).then((blob) => {\n return blob ? createImageBitmap(blob, { premultiplyAlpha: \"none\", colorSpaceConversion: \"none\" }) : null;\n }).then((bitmap) => {\n if (bitmap)\n this.success(success, path, this.textureLoader(bitmap));\n });\n }\n else {\n let image = new Image();\n image.crossOrigin = \"anonymous\";\n image.onload = () => {\n this.success(success, path, this.textureLoader(image));\n };\n image.onerror = () => {\n this.error(error, path, `Couldn't load image: ${path}`);\n };\n if (this.downloader.rawDataUris[path])\n path = this.downloader.rawDataUris[path];\n image.src = path;\n }\n }\n loadTextureAtlas(path, success = () => { }, error = () => { }, fileAlias) {\n let index = path.lastIndexOf(\"/\");\n let parent = index >= 0 ? path.substring(0, index + 1) : \"\";\n path = this.start(path);\n this.downloader.downloadText(path, (atlasText) => {\n try {\n let atlas = new TextureAtlas(atlasText);\n let toLoad = atlas.pages.length, abort = false;\n for (let page of atlas.pages) {\n this.loadTexture(!fileAlias ? parent + page.name : fileAlias[page.name], (imagePath, texture) => {\n if (!abort) {\n page.setTexture(texture);\n if (--toLoad == 0)\n this.success(success, path, atlas);\n }\n }, (imagePath, message) => {\n if (!abort)\n this.error(error, path, `Couldn't load texture atlas ${path} page image: ${imagePath}`);\n abort = true;\n });\n }\n }\n catch (e) {\n this.error(error, path, `Couldn't parse texture atlas ${path}: ${e.message}`);\n }\n }, (status, responseText) => {\n this.error(error, path, `Couldn't load texture atlas ${path}: status ${status}, ${responseText}`);\n });\n }\n get(path) {\n return this.assets[this.pathPrefix + path];\n }\n require(path) {\n path = this.pathPrefix + path;\n let asset = this.assets[path];\n if (asset)\n return asset;\n let error = this.errors[path];\n throw Error(\"Asset not found: \" + path + (error ? \"\\n\" + error : \"\"));\n }\n remove(path) {\n path = this.pathPrefix + path;\n let asset = this.assets[path];\n if (asset.dispose)\n asset.dispose();\n delete this.assets[path];\n return asset;\n }\n removeAll() {\n for (let key in this.assets) {\n let asset = this.assets[key];\n if (asset.dispose)\n asset.dispose();\n }\n this.assets = {};\n }\n isLoadingComplete() {\n return this.toLoad == 0;\n }\n getToLoad() {\n return this.toLoad;\n }\n getLoaded() {\n return this.loaded;\n }\n dispose() {\n this.removeAll();\n }\n hasErrors() {\n return Object.keys(this.errors).length > 0;\n }\n getErrors() {\n return this.errors;\n }\n}\nexport class Downloader {\n callbacks = {};\n rawDataUris = {};\n dataUriToString(dataUri) {\n if (!dataUri.startsWith(\"data:\")) {\n throw new Error(\"Not a data URI.\");\n }\n let base64Idx = dataUri.indexOf(\"base64,\");\n if (base64Idx != -1) {\n base64Idx += \"base64,\".length;\n return atob(dataUri.substr(base64Idx));\n }\n else {\n return dataUri.substr(dataUri.indexOf(\",\") + 1);\n }\n }\n base64ToUint8Array(base64) {\n var binary_string = window.atob(base64);\n var len = binary_string.length;\n var bytes = new Uint8Array(len);\n for (var i = 0; i < len; i++) {\n bytes[i] = binary_string.charCodeAt(i);\n }\n return bytes;\n }\n dataUriToUint8Array(dataUri) {\n if (!dataUri.startsWith(\"data:\")) {\n throw new Error(\"Not a data URI.\");\n }\n let base64Idx = dataUri.indexOf(\"base64,\");\n if (base64Idx == -1)\n throw new Error(\"Not a binary data URI.\");\n base64Idx += \"base64,\".length;\n return this.base64ToUint8Array(dataUri.substr(base64Idx));\n }\n downloadText(url, success, error) {\n if (this.start(url, success, error))\n return;\n if (this.rawDataUris[url]) {\n try {\n let dataUri = this.rawDataUris[url];\n this.finish(url, 200, this.dataUriToString(dataUri));\n }\n catch (e) {\n this.finish(url, 400, JSON.stringify(e));\n }\n return;\n }\n let request = new XMLHttpRequest();\n request.overrideMimeType(\"text/html\");\n request.open(\"GET\", url, true);\n let done = () => {\n this.finish(url, request.status, request.responseText);\n };\n request.onload = done;\n request.onerror = done;\n request.send();\n }\n downloadJson(url, success, error) {\n this.downloadText(url, (data) => {\n success(JSON.parse(data));\n }, error);\n }\n downloadBinary(url, success, error) {\n if (this.start(url, success, error))\n return;\n if (this.rawDataUris[url]) {\n try {\n let dataUri = this.rawDataUris[url];\n this.finish(url, 200, this.dataUriToUint8Array(dataUri));\n }\n catch (e) {\n this.finish(url, 400, JSON.stringify(e));\n }\n return;\n }\n let request = new XMLHttpRequest();\n request.open(\"GET\", url, true);\n request.responseType = \"arraybuffer\";\n let onerror = () => {\n this.finish(url, request.status, request.response);\n };\n request.onload = () => {\n if (request.status == 200 || request.status == 0)\n this.finish(url, 200, new Uint8Array(request.response));\n else\n onerror();\n };\n request.onerror = onerror;\n request.send();\n }\n start(url, success, error) {\n let callbacks = this.callbacks[url];\n try {\n if (callbacks)\n return true;\n this.callbacks[url] = callbacks = [];\n }\n finally {\n callbacks.push(success, error);\n }\n }\n finish(url, status, data) {\n let callbacks = this.callbacks[url];\n delete this.callbacks[url];\n let args = status == 200 || status == 0 ? [data] : [status, data];\n for (let i = args.length - 1, n = callbacks.length; i < n; i += 2)\n callbacks[i].apply(null, args);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNzZXRNYW5hZ2VyQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Bc3NldE1hbmFnZXJCYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUcvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHakQsTUFBTSxPQUFPLGdCQUFnQjtJQUNwQixVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLGFBQWEsQ0FBcUQ7SUFDbEUsVUFBVSxDQUFhO0lBQ3ZCLE1BQU0sR0FBbUIsRUFBRSxDQUFDO0lBQzVCLE1BQU0sR0FBc0IsRUFBRSxDQUFDO0lBQy9CLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDWCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBRW5CLFlBQWEsYUFBaUUsRUFBRSxhQUFxQixFQUFFLEVBQUUsYUFBeUIsSUFBSSxVQUFVLEVBQUU7UUFDakosSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDOUIsQ0FBQztJQUVPLEtBQUssQ0FBRSxJQUFZO1FBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVPLE9BQU8sQ0FBRSxRQUEyQyxFQUFFLElBQVksRUFBRSxLQUFVO1FBQ3JGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksUUFBUTtZQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLEtBQUss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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n/** Stores the current pose values for an {@link Event}.\n *\n * See Timeline {@link Timeline#apply()},\n * AnimationStateListener {@link AnimationStateListener#event()}, and\n * [Events](http://esotericsoftware.com/spine-events) in the Spine User Guide. */\nexport class Event {\n data;\n intValue = 0;\n floatValue = 0;\n stringValue = null;\n time = 0;\n volume = 0;\n balance = 0;\n constructor(time, data) {\n if (!data)\n throw new Error(\"data cannot be null.\");\n this.time = time;\n this.data = data;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvRXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBSS9FOzs7O2lGQUlpRjtBQUNqRixNQUFNLE9BQU8sS0FBSztJQUNqQixJQUFJLENBQVk7SUFDaEIsUUFBUSxHQUFXLENBQUMsQ0FBQztJQUNyQixVQUFVLEdBQVcsQ0FBQyxDQUFDO0lBQ3ZCLFdBQVcsR0FBa0IsSUFBSSxDQUFDO0lBQ2xDLElBQUksR0FBVyxDQUFDLENBQUM7SUFDakIsTUFBTSxHQUFXLENBQUMsQ0FBQztJQUNuQixPQUFPLEdBQVcsQ0FBQyxDQUFDO0lBRXBCLFlBQWEsSUFBWSxFQUFFLElBQWU7UUFDekMsSUFBSSxDQUFDLElBQUk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQztDQUNEIn0=","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n/** Stores the setup pose values for an {@link Event}.\n *\n * See [Events](http://esotericsoftware.com/spine-events) in the Spine User Guide. */\nexport class EventData {\n name;\n intValue = 0;\n floatValue = 0;\n stringValue = null;\n audioPath = null;\n volume = 0;\n balance = 0;\n constructor(name) {\n this.name = name;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnREYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0V2ZW50RGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0U7O3FGQUVxRjtBQUNyRixNQUFNLE9BQU8sU0FBUztJQUNyQixJQUFJLENBQVM7SUFDYixRQUFRLEdBQVcsQ0FBQyxDQUFDO0lBQ3JCLFVBQVUsR0FBVyxDQUFDLENBQUM7SUFDdkIsV0FBVyxHQUFrQixJQUFJLENBQUM7SUFDbEMsU0FBUyxHQUFrQixJQUFJLENBQUM7SUFDaEMsTUFBTSxHQUFXLENBQUMsQ0FBQztJQUNuQixPQUFPLEdBQVcsQ0FBQyxDQUFDO0lBRXBCLFlBQWEsSUFBWTtRQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNsQixDQUFDO0NBQ0QifQ==","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Inherit } from \"./BoneData.js\";\nimport { MathUtils } from \"./Utils.js\";\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 {\n /** The IK constraint's setup pose data. */\n data;\n /** The bones that will be modified by this IK constraint. */\n bones;\n /** The bone that is the IK target. */\n target;\n /** Controls the bend direction of the IK bones, either 1 or -1. */\n bendDirection = 0;\n /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */\n compress = false;\n /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained\n * and the parent bone has local nonuniform scale, stretch is not applied. */\n stretch = false;\n /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */\n mix = 1;\n /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */\n softness = 0;\n active = false;\n constructor(data, skeleton) {\n if (!data)\n throw new Error(\"data cannot be null.\");\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.bones = new Array();\n for (let i = 0; i < data.bones.length; i++) {\n let bone = skeleton.findBone(data.bones[i].name);\n if (!bone)\n throw new Error(`Couldn't find bone ${data.bones[i].name}`);\n this.bones.push(bone);\n }\n let target = skeleton.findBone(data.target.name);\n if (!target)\n throw new Error(`Couldn't find bone ${data.target.name}`);\n this.target = target;\n this.mix = data.mix;\n this.softness = data.softness;\n this.bendDirection = data.bendDirection;\n this.compress = data.compress;\n this.stretch = data.stretch;\n }\n isActive() {\n return this.active;\n }\n setToSetupPose() {\n const data = this.data;\n this.mix = data.mix;\n this.softness = data.softness;\n this.bendDirection = data.bendDirection;\n this.compress = data.compress;\n this.stretch = data.stretch;\n }\n update(physics) {\n if (this.mix == 0)\n return;\n let target = this.target;\n let bones = this.bones;\n switch (bones.length) {\n case 1:\n this.apply1(bones[0], target.worldX, target.worldY, this.compress, this.stretch, this.data.uniform, this.mix);\n break;\n case 2:\n this.apply2(bones[0], bones[1], target.worldX, target.worldY, this.bendDirection, this.stretch, this.data.uniform, this.softness, this.mix);\n break;\n }\n }\n /** Applies 1 bone IK. The target is specified in the world coordinate system. */\n apply1(bone, targetX, targetY, compress, stretch, uniform, alpha) {\n let p = bone.parent;\n if (!p)\n throw new Error(\"IK bone must have parent.\");\n let pa = p.a, pb = p.b, pc = p.c, pd = p.d;\n let rotationIK = -bone.ashearX - bone.arotation, tx = 0, ty = 0;\n switch (bone.inherit) {\n case Inherit.OnlyTranslation:\n tx = (targetX - bone.worldX) * MathUtils.signum(bone.skeleton.scaleX);\n ty = (targetY - bone.worldY) * MathUtils.signum(bone.skeleton.scaleY);\n break;\n case Inherit.NoRotationOrReflection:\n let s = Math.abs(pa * pd - pb * pc) / Math.max(0.0001, pa * pa + pc * pc);\n let sa = pa / bone.skeleton.scaleX;\n let sc = pc / bone.skeleton.scaleY;\n pb = -sc * s * bone.skeleton.scaleX;\n pd = sa * s * bone.skeleton.scaleY;\n rotationIK += Math.atan2(sc, sa) * MathUtils.radDeg;\n // Fall through\n default:\n let x = targetX - p.worldX, y = targetY - p.worldY;\n let d = pa * pd - pb * pc;\n if (Math.abs(d) <= 0.0001) {\n tx = 0;\n ty = 0;\n }\n else {\n tx = (x * pd - y * pb) / d - bone.ax;\n ty = (y * pa - x * pc) / d - bone.ay;\n }\n }\n rotationIK += Math.atan2(ty, tx) * MathUtils.radDeg;\n if (bone.ascaleX < 0)\n rotationIK += 180;\n if (rotationIK > 180)\n rotationIK -= 360;\n else if (rotationIK < -180)\n rotationIK += 360;\n let sx = bone.ascaleX, sy = bone.ascaleY;\n if (compress || stretch) {\n switch (bone.inherit) {\n case Inherit.NoScale:\n case Inherit.NoScaleOrReflection:\n tx = targetX - bone.worldX;\n ty = targetY - bone.worldY;\n }\n const b = bone.data.length * sx;\n if (b > 0.0001) {\n const dd = tx * tx + ty * ty;\n if ((compress && dd < b * b) || (stretch && dd > b * b)) {\n const s = (Math.sqrt(dd) / b - 1) * alpha + 1;\n sx *= s;\n if (uniform)\n sy *= s;\n }\n }\n }\n bone.updateWorldTransformWith(bone.ax, bone.ay, bone.arotation + rotationIK * alpha, sx, sy, bone.ashearX, bone.ashearY);\n }\n /** Applies 2 bone IK. The target is specified in the world coordinate system.\n * @param child A direct descendant of the parent bone. */\n apply2(parent, child, targetX, targetY, bendDir, stretch, uniform, softness, alpha) {\n if (parent.inherit != Inherit.Normal || child.inherit != Inherit.Normal)\n return;\n let px = parent.ax, py = parent.ay, psx = parent.ascaleX, psy = parent.ascaleY, sx = psx, sy = psy, csx = child.ascaleX;\n let os1 = 0, os2 = 0, s2 = 0;\n if (psx < 0) {\n psx = -psx;\n os1 = 180;\n s2 = -1;\n }\n else {\n os1 = 0;\n s2 = 1;\n }\n if (psy < 0) {\n psy = -psy;\n s2 = -s2;\n }\n if (csx < 0) {\n csx = -csx;\n os2 = 180;\n }\n else\n os2 = 0;\n let cx = child.ax, cy = 0, cwx = 0, cwy = 0, a = parent.a, b = parent.b, c = parent.c, d = parent.d;\n let u = Math.abs(psx - psy) <= 0.0001;\n if (!u || stretch) {\n cy = 0;\n cwx = a * cx + parent.worldX;\n cwy = c * cx + parent.worldY;\n }\n else {\n cy = child.ay;\n cwx = a * cx + b * cy + parent.worldX;\n cwy = c * cx + d * cy + parent.worldY;\n }\n let pp = parent.parent;\n if (!pp)\n throw new Error(\"IK parent must itself have a parent.\");\n a = pp.a;\n b = pp.b;\n c = pp.c;\n d = pp.d;\n let id = a * d - b * c, x = cwx - pp.worldX, y = cwy - pp.worldY;\n id = Math.abs(id) <= 0.0001 ? 0 : 1 / id;\n let dx = (x * d - y * b) * id - px, dy = (y * a - x * c) * id - py;\n let l1 = Math.sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2;\n if (l1 < 0.0001) {\n this.apply1(parent, targetX, targetY, false, stretch, false, alpha);\n child.updateWorldTransformWith(cx, cy, 0, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);\n return;\n }\n x = targetX - pp.worldX;\n y = targetY - pp.worldY;\n let tx = (x * d - y * b) * id - px, ty = (y * a - x * c) * id - py;\n let dd = tx * tx + ty * ty;\n if (softness != 0) {\n softness *= psx * (csx + 1) * 0.5;\n let td = Math.sqrt(dd), sd = td - l1 - l2 * psx + softness;\n if (sd > 0) {\n let p = Math.min(1, sd / (softness * 2)) - 1;\n p = (sd - softness * (1 - p * p)) / td;\n tx -= p * tx;\n ty -= p * ty;\n dd = tx * tx + ty * ty;\n }\n }\n outer: if (u) {\n l2 *= psx;\n let cos = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2);\n if (cos < -1) {\n cos = -1;\n a2 = Math.PI * bendDir;\n }\n else if (cos > 1) {\n cos = 1;\n a2 = 0;\n if (stretch) {\n a = (Math.sqrt(dd) / (l1 + l2) - 1) * alpha + 1;\n sx *= a;\n if (uniform)\n sy *= a;\n }\n }\n else\n a2 = Math.acos(cos) * bendDir;\n a = l1 + l2 * cos;\n b = l2 * Math.sin(a2);\n a1 = Math.atan2(ty * a - tx * b, tx * a + ty * b);\n }\n else {\n a = psx * l2;\n b = psy * l2;\n let aa = a * a, bb = b * b, ta = Math.atan2(ty, tx);\n c = bb * l1 * l1 + aa * dd - aa * bb;\n let c1 = -2 * bb * l1, c2 = bb - aa;\n d = c1 * c1 - 4 * c2 * c;\n if (d >= 0) {\n let q = Math.sqrt(d);\n if (c1 < 0)\n q = -q;\n q = -(c1 + q) * 0.5;\n let r0 = q / c2, r1 = c / q;\n let r = Math.abs(r0) < Math.abs(r1) ? r0 : r1;\n if (r * r <= dd) {\n y = Math.sqrt(dd - r * r) * bendDir;\n a1 = ta - Math.atan2(y, r);\n a2 = Math.atan2(y / psy, (r - l1) / psx);\n break outer;\n }\n }\n let minAngle = MathUtils.PI, minX = l1 - a, minDist = minX * minX, minY = 0;\n let maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0;\n c = -a * l1 / (aa - bb);\n if (c >= -1 && c <= 1) {\n c = Math.acos(c);\n x = a * Math.cos(c) + l1;\n y = b * Math.sin(c);\n d = x * x + y * y;\n if (d < minDist) {\n minAngle = c;\n minDist = d;\n minX = x;\n minY = y;\n }\n if (d > maxDist) {\n maxAngle = c;\n maxDist = d;\n maxX = x;\n maxY = y;\n }\n }\n if (dd <= (minDist + maxDist) * 0.5) {\n a1 = ta - Math.atan2(minY * bendDir, minX);\n a2 = minAngle * bendDir;\n }\n else {\n a1 = ta - Math.atan2(maxY * bendDir, maxX);\n a2 = maxAngle * bendDir;\n }\n }\n let os = Math.atan2(cy, cx) * s2;\n let rotation = parent.arotation;\n a1 = (a1 - os) * MathUtils.radDeg + os1 - rotation;\n if (a1 > 180)\n a1 -= 360;\n else if (a1 < -180) //\n a1 += 360;\n parent.updateWorldTransformWith(px, py, rotation + a1 * alpha, sx, sy, 0, 0);\n rotation = child.arotation;\n a2 = ((a2 + os) * MathUtils.radDeg - child.ashearX) * s2 + os2 - rotation;\n if (a2 > 180)\n a2 -= 360;\n else if (a2 < -180) //\n a2 += 360;\n child.updateWorldTransformWith(cx, cy, rotation + a2 * alpha, child.ascaleX, child.ascaleY, child.ashearX, child.ashearY);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWtDb25zdHJhaW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0lrQ29uc3RyYWludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUl4QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXZDOzs7cUdBR3FHO0FBQ3JHLE1BQU0sT0FBTyxZQUFZO0lBQ3hCLDJDQUEyQztJQUMzQyxJQUFJLENBQW1CO0lBRXZCLDZEQUE2RDtJQUM3RCxLQUFLLENBQWM7SUFFbkIsc0NBQXNDO0lBQ3RDLE1BQU0sQ0FBTztJQUViLG1FQUFtRTtJQUNuRSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBRWxCLHlIQUF5SDtJQUN6SCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRWpCO2lGQUM2RTtJQUM3RSxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRWhCLG9HQUFvRztJQUNwRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBRVIsaUdBQWlHO0lBQ2pHLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDYixNQUFNLEdBQUcsS0FBSyxDQUFDO0lBRWYsWUFBYSxJQUFzQixFQUFFLFFBQWtCO1FBQ3RELElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVEsQ0FBQztRQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVB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QUMsRUFBRSxDQUFDO1NBQ1Q7UUFDRCxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7WUFDWixHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDWCxHQUFHLEdBQUcsR0FBRyxDQUFDO1NBQ1Y7O1lBQ0EsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNULElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFO1lBQ2xCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDUCxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzdCLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDN0I7YUFBTTtZQUNOLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2QsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3RDLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUN0QztRQUNELElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdkIsSUFBSSxDQUFDLEVBQUU7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDakUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDVCxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNULENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ1QsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDVCxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUNqRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN6QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNuRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUM1RSxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRSxLQUFLLENBQUMsd0JBQXdCLENBQUMsRUFBRSxFQUFFLEVB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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { ConstraintData } from \"./ConstraintData.js\";\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 /** The bones that are constrained by this IK constraint. */\n bones = new Array();\n /** The bone that is the IK target. */\n _target = null;\n set target(boneData) { this._target = boneData; }\n get target() {\n if (!this._target)\n throw new Error(\"BoneData not set.\");\n else\n return this._target;\n }\n /** Controls the bend direction of the IK bones, either 1 or -1. */\n bendDirection = 0;\n /** When true and only a single bone is being constrained, if the target is too close, the bone is scaled to reach it. */\n compress = false;\n /** When true, if the target is out of range, the parent bone is scaled to reach it. If more than one bone is being constrained\n * and the parent bone has local nonuniform scale, stretch is not applied. */\n stretch = false;\n /** When true, only a single bone is being constrained, and {@link #getCompress()} or {@link #getStretch()} is used, the bone\n * is scaled on both the X and Y axes. */\n uniform = false;\n /** A percentage (0-1) that controls the mix between the constrained and unconstrained rotations. */\n mix = 0;\n /** For two bone IK, the distance from the maximum reach of the bones that rotation will slow. */\n softness = 0;\n constructor(name) {\n super(name, 0, false);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWtDb25zdHJhaW50RGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ja0NvbnN0cmFpbnREYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUcvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHckQ7O3FHQUVxRztBQUNyRyxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsY0FBYztJQUNuRCw0REFBNEQ7SUFDNUQsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFZLENBQUM7SUFFOUIsc0NBQXNDO0lBQzlCLE9BQU8sR0FBb0IsSUFBSSxDQUFDO0lBQ3hDLElBQVcsTUFBTSxDQUFFLFFBQWtCLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ25FLElBQVcsTUFBTTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUE7O1lBQ2xELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUMxQixDQUFDO0lBRUQsbUVBQW1FO0lBQ25FLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFFbEIseUhBQXlIO0lBQ3pILFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFakI7aUZBQzZFO0lBQzdFLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFaEI7NkNBQ3lDO0lBQ3pDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFaEIsb0dBQW9HO0lBQ3BHLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFFUixpR0FBaUc7SUFDakcsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUViLFlBQWEsSUFBWTtRQUN4QixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0NBQ0QifQ==","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { PathAttachment } from \"./attachments/PathAttachment.js\";\nimport { RotateMode, SpacingMode, PositionMode } from \"./PathConstraintData.js\";\nimport { Utils, MathUtils } from \"./Utils.js\";\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 {\n static NONE = -1;\n static BEFORE = -2;\n static AFTER = -3;\n static epsilon = 0.00001;\n /** The path constraint's setup pose data. */\n data;\n /** The bones that will be modified by this path constraint. */\n bones;\n /** The slot whose path attachment will be used to constrained the bones. */\n target;\n /** The position along the path. */\n position = 0;\n /** The spacing between bones. */\n spacing = 0;\n mixRotate = 0;\n mixX = 0;\n mixY = 0;\n spaces = new Array();\n positions = new Array();\n world = new Array();\n curves = new Array();\n lengths = new Array();\n segments = new Array();\n active = false;\n constructor(data, skeleton) {\n if (!data)\n throw new Error(\"data cannot be null.\");\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.bones = new Array();\n for (let i = 0, n = data.bones.length; i < n; i++) {\n let bone = skeleton.findBone(data.bones[i].name);\n if (!bone)\n throw new Error(`Couldn't find bone ${data.bones[i].name}.`);\n this.bones.push(bone);\n }\n let target = skeleton.findSlot(data.target.name);\n if (!target)\n throw new Error(`Couldn't find target bone ${data.target.name}`);\n this.target = target;\n this.position = data.position;\n this.spacing = data.spacing;\n this.mixRotate = data.mixRotate;\n this.mixX = data.mixX;\n this.mixY = data.mixY;\n }\n isActive() {\n return this.active;\n }\n setToSetupPose() {\n const data = this.data;\n this.position = data.position;\n this.spacing = data.spacing;\n this.mixRotate = data.mixRotate;\n this.mixX = data.mixX;\n this.mixY = data.mixY;\n }\n update(physics) {\n let attachment = this.target.getAttachment();\n if (!(attachment instanceof PathAttachment))\n return;\n let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY;\n if (mixRotate == 0 && mixX == 0 && mixY == 0)\n return;\n let data = this.data;\n let tangents = data.rotateMode == RotateMode.Tangent, scale = data.rotateMode == RotateMode.ChainScale;\n let bones = this.bones;\n let boneCount = bones.length, spacesCount = tangents ? boneCount : boneCount + 1;\n let spaces = Utils.setArraySize(this.spaces, spacesCount), lengths = scale ? this.lengths = Utils.setArraySize(this.lengths, boneCount) : [];\n let spacing = this.spacing;\n switch (data.spacingMode) {\n case SpacingMode.Percent:\n if (scale) {\n for (let i = 0, n = spacesCount - 1; i < n; i++) {\n let bone = bones[i];\n let setupLength = bone.data.length;\n let x = setupLength * bone.a, y = setupLength * bone.c;\n lengths[i] = Math.sqrt(x * x + y * y);\n }\n }\n Utils.arrayFill(spaces, 1, spacesCount, spacing);\n break;\n case SpacingMode.Proportional:\n let sum = 0;\n for (let i = 0, n = spacesCount - 1; i < n;) {\n let bone = bones[i];\n let setupLength = bone.data.length;\n if (setupLength < PathConstraint.epsilon) {\n if (scale)\n lengths[i] = 0;\n spaces[++i] = spacing;\n }\n else {\n let x = setupLength * bone.a, y = setupLength * bone.c;\n let length = Math.sqrt(x * x + y * y);\n if (scale)\n lengths[i] = length;\n spaces[++i] = length;\n sum += length;\n }\n }\n if (sum > 0) {\n sum = spacesCount / sum * spacing;\n for (let i = 1; i < spacesCount; i++)\n spaces[i] *= sum;\n }\n break;\n default:\n let lengthSpacing = data.spacingMode == SpacingMode.Length;\n for (let i = 0, n = spacesCount - 1; i < n;) {\n let bone = bones[i];\n let setupLength = bone.data.length;\n if (setupLength < PathConstraint.epsilon) {\n if (scale)\n lengths[i] = 0;\n spaces[++i] = spacing;\n }\n else {\n let x = setupLength * bone.a, y = setupLength * bone.c;\n let length = Math.sqrt(x * x + y * y);\n if (scale)\n lengths[i] = length;\n spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength;\n }\n }\n }\n let positions = this.computeWorldPositions(attachment, spacesCount, tangents);\n let boneX = positions[0], boneY = positions[1], offsetRotation = data.offsetRotation;\n let tip = false;\n if (offsetRotation == 0)\n tip = data.rotateMode == RotateMode.Chain;\n else {\n tip = false;\n let p = this.target.bone;\n offsetRotation *= p.a * p.d - p.b * p.c > 0 ? MathUtils.degRad : -MathUtils.degRad;\n }\n for (let i = 0, p = 3; i < boneCount; i++, p += 3) {\n let bone = bones[i];\n bone.worldX += (boneX - bone.worldX) * mixX;\n bone.worldY += (boneY - bone.worldY) * mixY;\n let x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY;\n if (scale) {\n let length = lengths[i];\n if (length != 0) {\n let s = (Math.sqrt(dx * dx + dy * dy) / length - 1) * mixRotate + 1;\n bone.a *= s;\n bone.c *= s;\n }\n }\n boneX = x;\n boneY = y;\n if (mixRotate > 0) {\n let a = bone.a, b = bone.b, c = bone.c, d = bone.d, r = 0, cos = 0, sin = 0;\n if (tangents)\n r = positions[p - 1];\n else if (spaces[i + 1] == 0)\n r = positions[p + 2];\n else\n r = Math.atan2(dy, dx);\n r -= Math.atan2(c, a);\n if (tip) {\n cos = Math.cos(r);\n sin = Math.sin(r);\n let length = bone.data.length;\n boneX += (length * (cos * a - sin * c) - dx) * mixRotate;\n boneY += (length * (sin * a + cos * c) - dy) * mixRotate;\n }\n else {\n r += offsetRotation;\n }\n if (r > MathUtils.PI)\n r -= MathUtils.PI2;\n else if (r < -MathUtils.PI) //\n r += MathUtils.PI2;\n r *= mixRotate;\n cos = Math.cos(r);\n sin = Math.sin(r);\n bone.a = cos * a - sin * c;\n bone.b = cos * b - sin * d;\n bone.c = sin * a + cos * c;\n bone.d = sin * b + cos * d;\n }\n bone.updateAppliedTransform();\n }\n }\n computeWorldPositions(path, spacesCount, tangents) {\n let target = this.target;\n let position = this.position;\n let spaces = this.spaces, out = Utils.setArraySize(this.positions, spacesCount * 3 + 2), world = this.world;\n let closed = path.closed;\n let verticesLength = path.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PathConstraint.NONE;\n if (!path.constantSpeed) {\n let lengths = path.lengths;\n curveCount -= closed ? 1 : 2;\n let pathLength = lengths[curveCount];\n if (this.data.positionMode == PositionMode.Percent)\n position *= pathLength;\n let multiplier;\n switch (this.data.spacingMode) {\n case SpacingMode.Percent:\n multiplier = pathLength;\n break;\n case SpacingMode.Proportional:\n multiplier = pathLength / spacesCount;\n break;\n default:\n multiplier = 1;\n }\n world = Utils.setArraySize(this.world, 8);\n for (let i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) {\n let space = spaces[i] * multiplier;\n position += space;\n let p = position;\n if (closed) {\n p %= pathLength;\n if (p < 0)\n p += pathLength;\n curve = 0;\n }\n else if (p < 0) {\n if (prevCurve != PathConstraint.BEFORE) {\n prevCurve = PathConstraint.BEFORE;\n path.computeWorldVertices(target, 2, 4, world, 0, 2);\n }\n this.addBeforePosition(p, world, 0, out, o);\n continue;\n }\n else if (p > pathLength) {\n if (prevCurve != PathConstraint.AFTER) {\n prevCurve = PathConstraint.AFTER;\n path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2);\n }\n this.addAfterPosition(p - pathLength, world, 0, out, o);\n continue;\n }\n // Determine curve containing position.\n for (;; curve++) {\n let length = lengths[curve];\n if (p > length)\n continue;\n if (curve == 0)\n p /= length;\n else {\n let prev = lengths[curve - 1];\n p = (p - prev) / (length - prev);\n }\n break;\n }\n if (curve != prevCurve) {\n prevCurve = curve;\n if (closed && curve == curveCount) {\n path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2);\n path.computeWorldVertices(target, 0, 4, world, 4, 2);\n }\n else\n path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2);\n }\n this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || (i > 0 && space == 0));\n }\n return out;\n }\n // World vertices.\n if (closed) {\n verticesLength += 2;\n world = Utils.setArraySize(this.world, verticesLength);\n path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2);\n path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2);\n world[verticesLength - 2] = world[0];\n world[verticesLength - 1] = world[1];\n }\n else {\n curveCount--;\n verticesLength -= 4;\n world = Utils.setArraySize(this.world, verticesLength);\n path.computeWorldVertices(target, 2, verticesLength, world, 0, 2);\n }\n // Curve lengths.\n let curves = Utils.setArraySize(this.curves, curveCount);\n let pathLength = 0;\n let x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0;\n let tmpx = 0, tmpy = 0, dddfx = 0, dddfy = 0, ddfx = 0, ddfy = 0, dfx = 0, dfy = 0;\n for (let i = 0, w = 2; i < curveCount; i++, w += 6) {\n cx1 = world[w];\n cy1 = world[w + 1];\n cx2 = world[w + 2];\n cy2 = world[w + 3];\n x2 = world[w + 4];\n y2 = world[w + 5];\n tmpx = (x1 - cx1 * 2 + cx2) * 0.1875;\n tmpy = (y1 - cy1 * 2 + cy2) * 0.1875;\n dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375;\n dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375;\n ddfx = tmpx * 2 + dddfx;\n ddfy = tmpy * 2 + dddfy;\n dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667;\n dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx;\n dfy += ddfy;\n ddfx += dddfx;\n ddfy += dddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx;\n dfy += ddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx + dddfx;\n dfy += ddfy + dddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n curves[i] = pathLength;\n x1 = x2;\n y1 = y2;\n }\n if (this.data.positionMode == PositionMode.Percent)\n position *= pathLength;\n let multiplier;\n switch (this.data.spacingMode) {\n case SpacingMode.Percent:\n multiplier = pathLength;\n break;\n case SpacingMode.Proportional:\n multiplier = pathLength / spacesCount;\n break;\n default:\n multiplier = 1;\n }\n let segments = this.segments;\n let curveLength = 0;\n for (let i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) {\n let space = spaces[i] * multiplier;\n position += space;\n let p = position;\n if (closed) {\n p %= pathLength;\n if (p < 0)\n p += pathLength;\n curve = 0;\n }\n else if (p < 0) {\n this.addBeforePosition(p, world, 0, out, o);\n continue;\n }\n else if (p > pathLength) {\n this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o);\n continue;\n }\n // Determine curve containing position.\n for (;; curve++) {\n let length = curves[curve];\n if (p > length)\n continue;\n if (curve == 0)\n p /= length;\n else {\n let prev = curves[curve - 1];\n p = (p - prev) / (length - prev);\n }\n break;\n }\n // Curve segment lengths.\n if (curve != prevCurve) {\n prevCurve = curve;\n let ii = curve * 6;\n x1 = world[ii];\n y1 = world[ii + 1];\n cx1 = world[ii + 2];\n cy1 = world[ii + 3];\n cx2 = world[ii + 4];\n cy2 = world[ii + 5];\n x2 = world[ii + 6];\n y2 = world[ii + 7];\n tmpx = (x1 - cx1 * 2 + cx2) * 0.03;\n tmpy = (y1 - cy1 * 2 + cy2) * 0.03;\n dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006;\n dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006;\n ddfx = tmpx * 2 + dddfx;\n ddfy = tmpy * 2 + dddfy;\n dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667;\n dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667;\n curveLength = Math.sqrt(dfx * dfx + dfy * dfy);\n segments[0] = curveLength;\n for (ii = 1; ii < 8; ii++) {\n dfx += ddfx;\n dfy += ddfy;\n ddfx += dddfx;\n ddfy += dddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[ii] = curveLength;\n }\n dfx += ddfx;\n dfy += ddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[8] = curveLength;\n dfx += ddfx + dddfx;\n dfy += ddfy + dddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[9] = curveLength;\n segment = 0;\n }\n // Weight by segment length.\n p *= curveLength;\n for (;; segment++) {\n let length = segments[segment];\n if (p > length)\n continue;\n if (segment == 0)\n p /= length;\n else {\n let prev = segments[segment - 1];\n p = segment + (p - prev) / (length - prev);\n }\n break;\n }\n this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0));\n }\n return out;\n }\n addBeforePosition(p, temp, i, out, o) {\n let x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = Math.atan2(dy, dx);\n out[o] = x1 + p * Math.cos(r);\n out[o + 1] = y1 + p * Math.sin(r);\n out[o + 2] = r;\n }\n addAfterPosition(p, temp, i, out, o) {\n let x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = Math.atan2(dy, dx);\n out[o] = x1 + p * Math.cos(r);\n out[o + 1] = y1 + p * Math.sin(r);\n out[o + 2] = r;\n }\n addCurvePosition(p, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents) {\n if (p == 0 || isNaN(p)) {\n out[o] = x1;\n out[o + 1] = y1;\n out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n return;\n }\n let tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u;\n let ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p;\n let x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt;\n out[o] = x;\n out[o + 1] = y;\n if (tangents) {\n if (p < 0.001)\n out[o + 2] = Math.atan2(cy1 - y1, cx1 - x1);\n else\n out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt));\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGF0aENvbnN0cmFpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUGF0aENvbnN0cmFpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRSxPQUFPLEVBQXNCLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJcEcsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHOUM7Ozt5R0FHeUc7QUFDekcsTUFBTSxPQUFPLGNBQWM7SUFDMUIsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztJQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBRXpCLDZDQUE2QztJQUM3QyxJQUFJLENBQXFCO0lBRXpCLCtEQUErRDtJQUMvRCxLQUFLLENBQWM7SUFFbkIsNEVBQTRFO0lBQzVFLE1BQU0sQ0FBTztJQUViLG1DQUFtQztJQUNuQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRWIsaUNBQWlDO0lBQ2pDLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFFWixTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRWQsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUVULElBQUksR0FBRyxDQUFDLENBQUM7SUFFVCxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztJQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBQzlELEtBQUssR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBQUMsTUFBTSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7SUFBQyxPQUFPLEdB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QUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckYsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDbkYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkQsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNmLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25CLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25CLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25CLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztZQUNyQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7WUFDckMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7WUFDOUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcs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QUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1osR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDaEIsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLE9BQU87U0FDUDtRQUNELElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ3pHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksUUFBUSxFQUFFO1lBQ2IsSUFBSSxDQUFDLEdBQUcsS0FBSztnQkFDWixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7O2dCQUU1QyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUMzRztJQUNGLENBQUMifQ==","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Physics, Skeleton } from \"./Skeleton.js\";\nimport { MathUtils } from \"./Utils.js\";\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 {\n data;\n _bone = null;\n /** The bone constrained by this physics constraint. */\n set bone(bone) { this._bone = bone; }\n get bone() {\n if (!this._bone)\n throw new Error(\"Bone not set.\");\n else\n return this._bone;\n }\n inertia = 0;\n strength = 0;\n damping = 0;\n massInverse = 0;\n wind = 0;\n gravity = 0;\n mix = 0;\n _reset = true;\n ux = 0;\n uy = 0;\n cx = 0;\n cy = 0;\n tx = 0;\n ty = 0;\n xOffset = 0;\n xVelocity = 0;\n yOffset = 0;\n yVelocity = 0;\n rotateOffset = 0;\n rotateVelocity = 0;\n scaleOffset = 0;\n scaleVelocity = 0;\n active = false;\n skeleton;\n remaining = 0;\n lastTime = 0;\n constructor(data, skeleton) {\n this.data = data;\n this.skeleton = skeleton;\n this.bone = skeleton.bones[data.bone.index];\n this.inertia = data.inertia;\n this.strength = data.strength;\n this.damping = data.damping;\n this.massInverse = data.massInverse;\n this.wind = data.wind;\n this.gravity = data.gravity;\n this.mix = data.mix;\n }\n reset() {\n this.remaining = 0;\n this.lastTime = this.skeleton.time;\n this._reset = true;\n this.xOffset = 0;\n this.xVelocity = 0;\n this.yOffset = 0;\n this.yVelocity = 0;\n this.rotateOffset = 0;\n this.rotateVelocity = 0;\n this.scaleOffset = 0;\n this.scaleVelocity = 0;\n }\n setToSetupPose() {\n const data = this.data;\n this.inertia = data.inertia;\n this.strength = data.strength;\n this.damping = data.damping;\n this.massInverse = data.massInverse;\n this.wind = data.wind;\n this.gravity = data.gravity;\n this.mix = data.mix;\n }\n isActive() {\n return this.active;\n }\n /** Applies the constraint to the constrained bones. */\n update(physics) {\n const mix = this.mix;\n if (mix == 0)\n return;\n const 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 const bone = this.bone;\n const l = bone.data.length;\n switch (physics) {\n case Physics.none:\n return;\n case Physics.reset:\n this.reset();\n // Fall through.\n case Physics.update:\n const delta = Math.max(this.skeleton.time - this.lastTime, 0);\n this.remaining += delta;\n this.lastTime = this.skeleton.time;\n const bx = bone.worldX, by = bone.worldY;\n if (this._reset) {\n this._reset = false;\n this.ux = bx;\n this.uy = by;\n }\n else {\n let a = this.remaining, i = this.inertia, q = this.data.limit * delta, t = this.data.step, f = this.skeleton.data.referenceScale, d = -1;\n if (x || y) {\n if (x) {\n const u = (this.ux - bx) * i;\n this.xOffset += u > q ? q : u < -q ? -q : u;\n this.ux = bx;\n }\n if (y) {\n const u = (this.uy - by) * i;\n this.yOffset += u > q ? q : u < -q ? -q : u;\n this.uy = by;\n }\n if (a >= t) {\n d = Math.pow(this.damping, 60 * t);\n const m = this.massInverse * t, e = this.strength, w = this.wind * f, g = (Skeleton.yDown ? -this.gravity : this.gravity) * f;\n do {\n if (x) {\n this.xVelocity += (w - this.xOffset * e) * m;\n this.xOffset += this.xVelocity * t;\n this.xVelocity *= d;\n }\n if (y) {\n this.yVelocity -= (g + this.yOffset * e) * m;\n this.yOffset += this.yVelocity * t;\n this.yVelocity *= d;\n }\n a -= t;\n } while (a >= t);\n }\n if (x)\n bone.worldX += this.xOffset * mix * this.data.x;\n if (y)\n bone.worldY += this.yOffset * mix * this.data.y;\n }\n if (rotateOrShearX || scaleX) {\n let ca = Math.atan2(bone.c, bone.a), c = 0, s = 0, mr = 0;\n let dx = this.cx - bone.worldX, dy = this.cy - bone.worldY;\n if (dx > q)\n dx = q;\n else if (dx < -q) //\n dx = -q;\n if (dy > q)\n dy = q;\n else if (dy < -q) //\n dy = -q;\n if (rotateOrShearX) {\n mr = (this.data.rotate + this.data.shearX) * mix;\n let r = Math.atan2(dy + this.ty, dx + this.tx) - ca - this.rotateOffset * mr;\n this.rotateOffset += (r - Math.ceil(r * MathUtils.invPI2 - 0.5) * MathUtils.PI2) * i;\n r = this.rotateOffset * mr + ca;\n c = Math.cos(r);\n s = Math.sin(r);\n if (scaleX) {\n r = l * bone.getWorldScaleX();\n if (r > 0)\n this.scaleOffset += (dx * c + dy * s) * i / r;\n }\n }\n else {\n c = Math.cos(ca);\n s = Math.sin(ca);\n const r = l * bone.getWorldScaleX();\n if (r > 0)\n this.scaleOffset += (dx * c + dy * s) * i / r;\n }\n a = this.remaining;\n if (a >= t) {\n if (d == -1)\n d = Math.pow(this.damping, 60 * t);\n const m = this.massInverse * t, e = this.strength, w = this.wind, g = (Skeleton.yDown ? -this.gravity : this.gravity), h = l / f;\n while (true) {\n a -= t;\n if (scaleX) {\n this.scaleVelocity += (w * c - g * s - this.scaleOffset * e) * m;\n this.scaleOffset += this.scaleVelocity * t;\n this.scaleVelocity *= d;\n }\n if (rotateOrShearX) {\n this.rotateVelocity -= ((w * s + g * c) * h + this.rotateOffset * e) * m;\n this.rotateOffset += this.rotateVelocity * t;\n this.rotateVelocity *= d;\n if (a < t)\n break;\n const r = this.rotateOffset * mr + ca;\n c = Math.cos(r);\n s = Math.sin(r);\n }\n else if (a < t) //\n break;\n }\n }\n }\n this.remaining = a;\n }\n this.cx = bone.worldX;\n this.cy = bone.worldY;\n break;\n case Physics.pose:\n if (x)\n bone.worldX += this.xOffset * mix * this.data.x;\n if (y)\n bone.worldY += this.yOffset * mix * this.data.y;\n }\n if (rotateOrShearX) {\n let o = this.rotateOffset * mix, s = 0, c = 0, a = 0;\n if (this.data.shearX > 0) {\n let r = 0;\n if (this.data.rotate > 0) {\n r = o * this.data.rotate;\n s = Math.sin(r);\n c = Math.cos(r);\n a = bone.b;\n bone.b = c * a - s * bone.d;\n bone.d = s * a + c * bone.d;\n }\n r += o * this.data.shearX;\n s = Math.sin(r);\n c = Math.cos(r);\n a = bone.a;\n bone.a = c * a - s * bone.c;\n bone.c = s * a + c * bone.c;\n }\n else {\n o *= this.data.rotate;\n s = Math.sin(o);\n c = Math.cos(o);\n a = bone.a;\n bone.a = c * a - s * bone.c;\n bone.c = s * a + c * bone.c;\n a = bone.b;\n bone.b = c * a - s * bone.d;\n bone.d = s * a + c * bone.d;\n }\n }\n if (scaleX) {\n const s = 1 + this.scaleOffset * mix * this.data.scaleX;\n bone.a *= s;\n bone.c *= s;\n }\n if (physics != Physics.pose) {\n this.tx = l * bone.a;\n this.ty = l * bone.c;\n }\n bone.updateAppliedTransform();\n }\n /** Translates the physics constraint so next {@link #update(Physics)} forces are applied as if the bone moved an additional\n * amount in world space. */\n translate(x, y) {\n this.ux -= x;\n this.uy -= y;\n this.cx -= x;\n this.cy -= y;\n }\n /** Rotates the physics constraint so next {@link #update(Physics)} forces are applied as if the bone rotated around the\n * specified point in world space. */\n rotate(x, y, degrees) {\n const r = degrees * MathUtils.degRad, cos = Math.cos(r), sin = Math.sin(r);\n const dx = this.cx - x, dy = this.cy - y;\n this.translate(dx * cos - dy * sin - dx, dx * sin + dy * cos - dy);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGh5c2ljc0NvbnN0cmFpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvUGh5c2ljc0NvbnN0cmFpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBSS9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHdkM7OzBIQUUwSDtBQUMxSCxNQUFNLE9BQU8saUJBQWlCO0lBQ3BCLElBQUksQ0FBd0I7SUFDN0IsS0FBSyxHQUFnQixJQUFJLENBQUM7SUFDbEMsdURBQXVEO0lBQ3ZELElBQVcsSUFBSSxDQUFFLElBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbkQsSUFBVyxJQUFJO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQTs7WUFDNUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNiLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDWixXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLElBQUksR0FBRyxDQUFDLENBQUM7SUFDVCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osR0FBRyxHQUFHLENBQUMsQ0FBQztJQUVSLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDZCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDUCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1AsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNQLEVBQUUsR0FBRyxDQUFDLENBQUM7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UUFDYixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRDt5Q0FDcUM7SUFDckMsTUFBTSxDQUFFLENBQVMsRUFBRSxDQUFTLEVBQUUsT0FBZTtRQUM1QyxNQUFNLENBQUMsR0FBRyxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0NBQ0QifQ==","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { VertexAttachment } from \"./attachments/Attachment.js\";\nimport { Color } from \"./Utils.js\";\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 /** The slot's setup pose data. */\n data;\n /** The bone this slot belongs to. */\n bone;\n /** The color used to tint the slot's attachment. If {@link #getDarkColor()} is set, this is used as the light color for two\n * color tinting. */\n color;\n /** 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 * color's alpha is not used. */\n darkColor = null;\n attachment = null;\n attachmentState = 0;\n /** The index of the texture region to display when the slot's attachment has a {@link Sequence}. -1 represents the\n * {@link Sequence#getSetupIndex()}. */\n sequenceIndex = -1;\n /** Values to deform the slot's attachment. For an unweighted mesh, the entries are local positions for each vertex. For a\n * weighted mesh, the entries are an offset for each vertex which will be added to the mesh's local vertex positions.\n *\n * See {@link VertexAttachment#computeWorldVertices()} and {@link DeformTimeline}. */\n deform = new Array();\n constructor(data, bone) {\n if (!data)\n throw new Error(\"data cannot be null.\");\n if (!bone)\n throw new Error(\"bone cannot be null.\");\n this.data = data;\n this.bone = bone;\n this.color = new Color();\n this.darkColor = !data.darkColor ? null : new Color();\n this.setToSetupPose();\n }\n /** The skeleton this slot belongs to. */\n getSkeleton() {\n return this.bone.skeleton;\n }\n /** The current attachment for the slot, or null if the slot has no attachment. */\n getAttachment() {\n return this.attachment;\n }\n /** Sets the slot's attachment and, if the attachment changed, resets {@link #sequenceIndex} and clears the {@link #deform}.\n * The deform is not cleared if the old attachment has the same {@link VertexAttachment#getTimelineAttachment()} as the\n * specified attachment. */\n setAttachment(attachment) {\n if (this.attachment == attachment)\n return;\n if (!(attachment instanceof VertexAttachment) || !(this.attachment instanceof VertexAttachment)\n || attachment.timelineAttachment != this.attachment.timelineAttachment) {\n this.deform.length = 0;\n }\n this.attachment = attachment;\n this.sequenceIndex = -1;\n }\n /** Sets this slot to the setup pose. */\n setToSetupPose() {\n this.color.setFromColor(this.data.color);\n if (this.darkColor)\n this.darkColor.setFromColor(this.data.darkColor);\n if (!this.data.attachmentName)\n this.attachment = null;\n else {\n this.attachment = null;\n this.setAttachment(this.bone.skeleton.getAttachment(this.data.index, this.data.attachmentName));\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2xvdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9TbG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUUvRSxPQUFPLEVBQWMsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUkzRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRW5DOztnQ0FFZ0M7QUFDaEMsTUFBTSxPQUFPLElBQUk7SUFDaEIsa0NBQWtDO0lBQ2xDLElBQUksQ0FBVztJQUVmLHFDQUFxQztJQUNyQyxJQUFJLENBQU87SUFFWDt3QkFDb0I7SUFDcEIsS0FBSyxDQUFRO0lBRWI7b0NBQ2dDO0lBQ2hDLFNBQVMsR0FBaUIsSUFBSSxDQUFDO0lBRS9CLFVBQVUsR0FBc0IsSUFBSSxDQUFDO0lBRXJDLGVBQWUsR0FBVyxDQUFDLENBQUM7SUFFNUI7MkNBQ3VDO0lBQ3ZDLGFBQWEsR0FBVyxDQUFDLENBQUMsQ0FBQztJQUUzQjs7O3lGQUdxRjtJQUNyRixNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztJQUU3QixZQUFhLElBQWMsRUFBRSxJQUFVO1FBQ3RDLElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLFdBQVc7UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrRkFBa0Y7SUFDbEYsYUFBYTtRQUNaLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OytCQUUyQjtJQUMzQixhQUFhLENBQUUsVUFBNkI7UUFDM0MsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVU7WUFBRSxPQUFPO1FBQzFDLElBQUksQ0FBQyxDQUFDLFVBQVUsWUFBWSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxZQUFZLGdCQUFnQixDQUFDO2VBQ3hFLFVBQVcsQ0FBQyxrQkFBa0IsSUFBdUIsSUFBSSxDQUFDLFVBQVcsQ0FBQyxrQkFBa0IsRUFBRTtZQUNoSCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDdkI7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsY0FBYztRQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBVSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztZQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzthQUNuQjtZQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztTQUNoRztJQUNGLENBQUM7Q0FDRCJ9","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Vector2, MathUtils } from \"./Utils.js\";\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 {\n /** The transform constraint's setup pose data. */\n data;\n /** The bones that will be modified by this transform constraint. */\n bones;\n /** The target bone whose world transform will be copied to the constrained bones. */\n target;\n mixRotate = 0;\n mixX = 0;\n mixY = 0;\n mixScaleX = 0;\n mixScaleY = 0;\n mixShearY = 0;\n temp = new Vector2();\n active = false;\n constructor(data, skeleton) {\n if (!data)\n throw new Error(\"data cannot be null.\");\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n this.data = data;\n this.bones = new Array();\n for (let i = 0; i < data.bones.length; i++) {\n let bone = skeleton.findBone(data.bones[i].name);\n if (!bone)\n throw new Error(`Couldn't find bone ${data.bones[i].name}.`);\n this.bones.push(bone);\n }\n let target = skeleton.findBone(data.target.name);\n if (!target)\n throw new Error(`Couldn't find target bone ${data.target.name}.`);\n this.target = target;\n this.mixRotate = data.mixRotate;\n this.mixX = data.mixX;\n this.mixY = data.mixY;\n this.mixScaleX = data.mixScaleX;\n this.mixScaleY = data.mixScaleY;\n this.mixShearY = data.mixShearY;\n }\n isActive() {\n return this.active;\n }\n setToSetupPose() {\n const data = this.data;\n this.mixRotate = data.mixRotate;\n this.mixX = data.mixX;\n this.mixY = data.mixY;\n this.mixScaleX = data.mixScaleX;\n this.mixScaleY = data.mixScaleY;\n this.mixShearY = data.mixShearY;\n }\n update(physics) {\n if (this.mixRotate == 0 && this.mixX == 0 && this.mixY == 0 && this.mixScaleX == 0 && this.mixScaleY == 0 && this.mixShearY == 0)\n return;\n if (this.data.local) {\n if (this.data.relative)\n this.applyRelativeLocal();\n else\n this.applyAbsoluteLocal();\n }\n else {\n if (this.data.relative)\n this.applyRelativeWorld();\n else\n this.applyAbsoluteWorld();\n }\n }\n applyAbsoluteWorld() {\n let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY;\n let translate = mixX != 0 || mixY != 0;\n let target = this.target;\n let ta = target.a, tb = target.b, tc = target.c, td = target.d;\n let degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad;\n let offsetRotation = this.data.offsetRotation * degRadReflect;\n let offsetShearY = this.data.offsetShearY * degRadReflect;\n let bones = this.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n if (mixRotate != 0) {\n let a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n let r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation;\n if (r > MathUtils.PI)\n r -= MathUtils.PI2;\n else if (r < -MathUtils.PI) //\n r += MathUtils.PI2;\n r *= mixRotate;\n let cos = Math.cos(r), sin = Math.sin(r);\n bone.a = cos * a - sin * c;\n bone.b = cos * b - sin * d;\n bone.c = sin * a + cos * c;\n bone.d = sin * b + cos * d;\n }\n if (translate) {\n let temp = this.temp;\n target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n bone.worldX += (temp.x - bone.worldX) * mixX;\n bone.worldY += (temp.y - bone.worldY) * mixY;\n }\n if (mixScaleX != 0) {\n let s = Math.sqrt(bone.a * bone.a + bone.c * bone.c);\n if (s != 0)\n s = (s + (Math.sqrt(ta * ta + tc * tc) - s + this.data.offsetScaleX) * mixScaleX) / s;\n bone.a *= s;\n bone.c *= s;\n }\n if (mixScaleY != 0) {\n let s = Math.sqrt(bone.b * bone.b + bone.d * bone.d);\n if (s != 0)\n s = (s + (Math.sqrt(tb * tb + td * td) - s + this.data.offsetScaleY) * mixScaleY) / s;\n bone.b *= s;\n bone.d *= s;\n }\n if (mixShearY > 0) {\n let b = bone.b, d = bone.d;\n let by = Math.atan2(d, b);\n let r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(bone.c, bone.a));\n if (r > MathUtils.PI)\n r -= MathUtils.PI2;\n else if (r < -MathUtils.PI) //\n r += MathUtils.PI2;\n r = by + (r + offsetShearY) * mixShearY;\n let s = Math.sqrt(b * b + d * d);\n bone.b = Math.cos(r) * s;\n bone.d = Math.sin(r) * s;\n }\n bone.updateAppliedTransform();\n }\n }\n applyRelativeWorld() {\n let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY;\n let translate = mixX != 0 || mixY != 0;\n let target = this.target;\n let ta = target.a, tb = target.b, tc = target.c, td = target.d;\n let degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad;\n let offsetRotation = this.data.offsetRotation * degRadReflect, offsetShearY = this.data.offsetShearY * degRadReflect;\n let bones = this.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n if (mixRotate != 0) {\n let a = bone.a, b = bone.b, c = bone.c, d = bone.d;\n let r = Math.atan2(tc, ta) + offsetRotation;\n if (r > MathUtils.PI)\n r -= MathUtils.PI2;\n else if (r < -MathUtils.PI) //\n r += MathUtils.PI2;\n r *= mixRotate;\n let cos = Math.cos(r), sin = Math.sin(r);\n bone.a = cos * a - sin * c;\n bone.b = cos * b - sin * d;\n bone.c = sin * a + cos * c;\n bone.d = sin * b + cos * d;\n }\n if (translate) {\n let temp = this.temp;\n target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n bone.worldX += temp.x * mixX;\n bone.worldY += temp.y * mixY;\n }\n if (mixScaleX != 0) {\n let s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * mixScaleX + 1;\n bone.a *= s;\n bone.c *= s;\n }\n if (mixScaleY != 0) {\n let s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * mixScaleY + 1;\n bone.b *= s;\n bone.d *= s;\n }\n if (mixShearY > 0) {\n let r = Math.atan2(td, tb) - Math.atan2(tc, ta);\n if (r > MathUtils.PI)\n r -= MathUtils.PI2;\n else if (r < -MathUtils.PI) //\n r += MathUtils.PI2;\n let b = bone.b, d = bone.d;\n r = Math.atan2(d, b) + (r - MathUtils.PI / 2 + offsetShearY) * mixShearY;\n let s = Math.sqrt(b * b + d * d);\n bone.b = Math.cos(r) * s;\n bone.d = Math.sin(r) * s;\n }\n bone.updateAppliedTransform();\n }\n }\n applyAbsoluteLocal() {\n let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY;\n let target = this.target;\n let bones = this.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n let rotation = bone.arotation;\n if (mixRotate != 0)\n rotation += (target.arotation - rotation + this.data.offsetRotation) * mixRotate;\n let x = bone.ax, y = bone.ay;\n x += (target.ax - x + this.data.offsetX) * mixX;\n y += (target.ay - y + this.data.offsetY) * mixY;\n let scaleX = bone.ascaleX, scaleY = bone.ascaleY;\n if (mixScaleX != 0 && scaleX != 0)\n scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * mixScaleX) / scaleX;\n if (mixScaleY != 0 && scaleY != 0)\n scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * mixScaleY) / scaleY;\n let shearY = bone.ashearY;\n if (mixShearY != 0)\n shearY += (target.ashearY - shearY + this.data.offsetShearY) * mixShearY;\n bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n }\n }\n applyRelativeLocal() {\n let mixRotate = this.mixRotate, mixX = this.mixX, mixY = this.mixY, mixScaleX = this.mixScaleX, mixScaleY = this.mixScaleY, mixShearY = this.mixShearY;\n let target = this.target;\n let bones = this.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n let rotation = bone.arotation + (target.arotation + this.data.offsetRotation) * mixRotate;\n let x = bone.ax + (target.ax + this.data.offsetX) * mixX;\n let y = bone.ay + (target.ay + this.data.offsetY) * mixY;\n let scaleX = bone.ascaleX * (((target.ascaleX - 1 + this.data.offsetScaleX) * mixScaleX) + 1);\n let scaleY = bone.ascaleY * (((target.ascaleY - 1 + this.data.offsetScaleY) * mixScaleY) + 1);\n let shearY = bone.ashearY + (target.ashearY + this.data.offsetShearY) * mixShearY;\n bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNmb3JtQ29uc3RyYWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9UcmFuc2Zvcm1Db25zdHJhaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQU0vRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdoRDs7O21IQUdtSDtBQUNuSCxNQUFNLE9BQU8sbUJBQW1CO0lBRS9CLGtEQUFrRDtJQUNsRCxJQUFJLENBQTBCO0lBRTlCLG9FQUFvRTtJQUNwRSxLQUFLLENBQWM7SUFFbkIscUZBQXFGO0lBQ3JGLE1BQU0sQ0FBTztJQUViLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUUvRSxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNyQixNQUFNLEdBQUcsS0FBSyxDQUFDO0lBRWYsWUFBYSxJQUE2QixFQUFFLFFBQWtCO1FBQzdELElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVEsQ0FBQztRQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxJQUFJLEdB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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { ConstraintData } from \"./ConstraintData.js\";\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 _bone = null;\n /** The bone constrained by this physics constraint. */\n set bone(boneData) { this._bone = boneData; }\n get bone() {\n if (!this._bone)\n throw new Error(\"BoneData not set.\");\n else\n return this._bone;\n }\n x = 0;\n y = 0;\n rotate = 0;\n scaleX = 0;\n shearX = 0;\n limit = 0;\n step = 0;\n inertia = 0;\n strength = 0;\n damping = 0;\n massInverse = 0;\n wind = 0;\n gravity = 0;\n /** A percentage (0-1) that controls the mix between the constrained and unconstrained poses. */\n mix = 0;\n inertiaGlobal = false;\n strengthGlobal = false;\n dampingGlobal = false;\n massGlobal = false;\n windGlobal = false;\n gravityGlobal = false;\n mixGlobal = false;\n constructor(name) {\n super(name, 0, false);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGh5c2ljc0NvbnN0cmFpbnREYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1BoeXNpY3NDb25zdHJhaW50RGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFHL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3JEOzswSEFFMEg7QUFDMUgsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGNBQWM7SUFDaEQsS0FBSyxHQUFvQixJQUFJLENBQUM7SUFDdEMsdURBQXVEO0lBQ3ZELElBQVcsSUFBSSxDQUFFLFFBQWtCLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQy9ELElBQVcsSUFBSTtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTs7WUFDaEQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNOLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDWCxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNYLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNaLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDYixPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBQ1osV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNaLGdHQUFnRztJQUNoRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1IsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUN0QixjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDdEIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDdEIsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUVsQixZQUFhLElBQVk7UUFDeEIsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztDQUNEIn0=","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n/** Stores the setup pose and all of the stateless data for a skeleton.\n *\n * See [Data objects](http://esotericsoftware.com/spine-runtime-architecture#Data-objects) in the Spine Runtimes\n * Guide. */\nexport class SkeletonData {\n /** The skeleton's name, which by default is the name of the skeleton data file, if possible. May be null. */\n name = null;\n /** The skeleton's bones, sorted parent first. The root bone is always the first bone. */\n bones = new Array(); // Ordered parents first.\n /** The skeleton's slots in the setup pose draw order. */\n slots = new Array(); // Setup pose draw order.\n skins = new Array();\n /** The skeleton's default skin. By default this skin contains all attachments that were not in a skin in Spine.\n *\n * See {@link Skeleton#getAttachmentByName()}.\n * May be null. */\n defaultSkin = null;\n /** The skeleton's events. */\n events = new Array();\n /** The skeleton's animations. */\n animations = new Array();\n /** The skeleton's IK constraints. */\n ikConstraints = new Array();\n /** The skeleton's transform constraints. */\n transformConstraints = new Array();\n /** The skeleton's path constraints. */\n pathConstraints = new Array();\n /** The skeleton's physics constraints. */\n physicsConstraints = new Array();\n /** The X coordinate of the skeleton's axis aligned bounding box in the setup pose. */\n x = 0;\n /** The Y coordinate of the skeleton's axis aligned bounding box in the setup pose. */\n y = 0;\n /** The width of the skeleton's axis aligned bounding box in the setup pose. */\n width = 0;\n /** The height of the skeleton's axis aligned bounding box in the setup pose. */\n height = 0;\n /** Baseline scale factor for applying distance-dependent effects on non-scalable properties, such as angle or scale. Default\n * is 100. */\n referenceScale = 100;\n /** The Spine version used to export the skeleton data, or null. */\n version = null;\n /** The skeleton data hash. This value will change if any of the skeleton data has changed. May be null. */\n hash = null;\n // Nonessential\n /** The dopesheet FPS in Spine. Available only when nonessential data was exported. */\n fps = 0;\n /** The path to the images directory as defined in Spine. Available only when nonessential data was exported. May be null. */\n imagesPath = null;\n /** The path to the audio directory as defined in Spine. Available only when nonessential data was exported. May be null. */\n audioPath = null;\n /** Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it\n * multiple times.\n * @returns May be null. */\n findBone(boneName) {\n if (!boneName)\n throw new Error(\"boneName cannot be null.\");\n let bones = this.bones;\n for (let i = 0, n = bones.length; i < n; i++) {\n let bone = bones[i];\n if (bone.name == boneName)\n return bone;\n }\n return null;\n }\n /** Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it\n * multiple times.\n * @returns May be null. */\n findSlot(slotName) {\n if (!slotName)\n throw new Error(\"slotName cannot be null.\");\n let slots = this.slots;\n for (let i = 0, n = slots.length; i < n; i++) {\n let slot = slots[i];\n if (slot.name == slotName)\n return slot;\n }\n return null;\n }\n /** Finds a skin by comparing each skin's name. It is more efficient to cache the results of this method than to call it\n * multiple times.\n * @returns May be null. */\n findSkin(skinName) {\n if (!skinName)\n throw new Error(\"skinName cannot be null.\");\n let skins = this.skins;\n for (let i = 0, n = skins.length; i < n; i++) {\n let skin = skins[i];\n if (skin.name == skinName)\n return skin;\n }\n return null;\n }\n /** Finds an event by comparing each events's name. It is more efficient to cache the results of this method than to call it\n * multiple times.\n * @returns May be null. */\n findEvent(eventDataName) {\n if (!eventDataName)\n throw new Error(\"eventDataName cannot be null.\");\n let events = this.events;\n for (let i = 0, n = events.length; i < n; i++) {\n let event = events[i];\n if (event.name == eventDataName)\n return event;\n }\n return null;\n }\n /** Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to\n * call it multiple times.\n * @returns May be null. */\n findAnimation(animationName) {\n if (!animationName)\n throw new Error(\"animationName cannot be null.\");\n let animations = this.animations;\n for (let i = 0, n = animations.length; i < n; i++) {\n let animation = animations[i];\n if (animation.name == animationName)\n return animation;\n }\n return null;\n }\n /** Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method\n * than to call it multiple times.\n * @return May be null. */\n findIkConstraint(constraintName) {\n if (!constraintName)\n throw new Error(\"constraintName cannot be null.\");\n const ikConstraints = this.ikConstraints;\n for (let i = 0, n = ikConstraints.length; i < n; i++) {\n const constraint = ikConstraints[i];\n if (constraint.name == constraintName)\n return constraint;\n }\n return null;\n }\n /** Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of\n * this method than to call it multiple times.\n * @return May be null. */\n findTransformConstraint(constraintName) {\n if (!constraintName)\n throw new Error(\"constraintName cannot be null.\");\n const transformConstraints = this.transformConstraints;\n for (let i = 0, n = transformConstraints.length; i < n; i++) {\n const constraint = transformConstraints[i];\n if (constraint.name == constraintName)\n return constraint;\n }\n return null;\n }\n /** Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method\n * than to call it multiple times.\n * @return May be null. */\n findPathConstraint(constraintName) {\n if (!constraintName)\n throw new Error(\"constraintName cannot be null.\");\n const pathConstraints = this.pathConstraints;\n for (let i = 0, n = pathConstraints.length; i < n; i++) {\n const constraint = pathConstraints[i];\n if (constraint.name == constraintName)\n return constraint;\n }\n return null;\n }\n /** Finds a physics constraint by comparing each physics constraint's name. It is more efficient to cache the results of this method\n * than to call it multiple times.\n * @return May be null. */\n findPhysicsConstraint(constraintName) {\n if (!constraintName)\n throw new Error(\"constraintName cannot be null.\");\n const physicsConstraints = this.physicsConstraints;\n for (let i = 0, n = physicsConstraints.length; i < n; i++) {\n const constraint = physicsConstraints[i];\n if (constraint.name == constraintName)\n return constraint;\n }\n return null;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25EYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NrZWxldG9uRGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFZL0U7OztZQUdZO0FBQ1osTUFBTSxPQUFPLFlBQVk7SUFFeEIsNkdBQTZHO0lBQzdHLElBQUksR0FBa0IsSUFBSSxDQUFDO0lBRTNCLHlGQUF5RjtJQUN6RixLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVksQ0FBQyxDQUFDLHlCQUF5QjtJQUV4RCx5REFBeUQ7SUFDekQsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFZLENBQUMsQ0FBQyx5QkFBeUI7SUFFeEQsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFRLENBQUM7SUFFMUI7OztzQkFHa0I7SUFDbEIsV0FBVyxHQUFnQixJQUFJLENBQUM7SUFFaEMsNkJBQTZCO0lBQzdCLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBYSxDQUFDO0lBRWhDLGlDQUFpQztJQUNqQyxVQUFVLEdBQUcsSUFBSSxLQUFLLEVBQWEsQ0FBQztJQUVwQyxxQ0FBcUM7SUFDckMsYUFBYSxHQUFHLElBQUksS0FBSyxFQUFvQixDQUFDO0lBRTlDLDRDQUE0QztJQUM1QyxvQkFBb0IsR0FBRyxJQUFJLEtBQUssRUFBMkIsQ0FBQztJQUU1RCx1Q0FBdUM7SUFDdkMsZUFBZSxHQUFHLElBQUksS0FBSyxFQUFzQixDQUFDO0lBRWxELDBDQUEwQztJQUMxQyxrQkFBa0IsR0FBRyxJQUFJLEtBQUssRUFBeUIsQ0FBQztJQUV4RCxzRkFBc0Y7SUFDdEYsQ0FBQyxHQUFXLENBQUMsQ0FBQztJQUVkLHNGQUFzRjtJQUN0RixDQUFDLEdBQVcsQ0FBQyxDQUFDO0lBRWQsK0VBQStFO0lBQy9FLEtBQUssR0FBVyxDQUFDLENBQUM7SUFFbEIsZ0ZBQWdGO0lBQ2hGLE1BQU0sR0FBVyxDQUFDLENBQUM7SUFFbkI7aUJBQ2E7SUFDYixj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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { MeshAttachment } from \"./attachments/MeshAttachment.js\";\nimport { Color } from \"./Utils.js\";\n/** Stores an entry in the skin consisting of the slot index, name, and attachment **/\nexport class SkinEntry {\n slotIndex;\n name;\n attachment;\n constructor(slotIndex = 0, name, attachment) {\n this.slotIndex = slotIndex;\n this.name = name;\n this.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 /** The skin's name, which is unique across all skins in the skeleton. */\n name;\n attachments = new Array();\n bones = Array();\n constraints = new Array();\n /** The color of the skin as it was in Spine, or a default color if nonessential data was not exported. */\n color = new Color(0.99607843, 0.61960787, 0.30980393, 1); // fe9e4fff\n constructor(name) {\n if (!name)\n throw new Error(\"name cannot be null.\");\n this.name = name;\n }\n /** Adds an attachment to the skin for the specified slot index and name. */\n setAttachment(slotIndex, name, attachment) {\n if (!attachment)\n throw new Error(\"attachment cannot be null.\");\n let attachments = this.attachments;\n if (slotIndex >= attachments.length)\n attachments.length = slotIndex + 1;\n if (!attachments[slotIndex])\n attachments[slotIndex] = {};\n attachments[slotIndex][name] = attachment;\n }\n /** Adds all attachments, bones, and constraints from the specified skin to this skin. */\n addSkin(skin) {\n for (let i = 0; i < skin.bones.length; i++) {\n let bone = skin.bones[i];\n let contained = false;\n for (let ii = 0; ii < this.bones.length; ii++) {\n if (this.bones[ii] == bone) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.bones.push(bone);\n }\n for (let i = 0; i < skin.constraints.length; i++) {\n let constraint = skin.constraints[i];\n let contained = false;\n for (let ii = 0; ii < this.constraints.length; ii++) {\n if (this.constraints[ii] == constraint) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.constraints.push(constraint);\n }\n let attachments = skin.getAttachments();\n for (let i = 0; i < attachments.length; i++) {\n var attachment = attachments[i];\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n }\n /** Adds all bones and constraints and copies of all attachments from the specified skin to this skin. Mesh attachments are not\n * copied, instead a new linked mesh is created. The attachment copies can be modified without affecting the originals. */\n copySkin(skin) {\n for (let i = 0; i < skin.bones.length; i++) {\n let bone = skin.bones[i];\n let contained = false;\n for (let ii = 0; ii < this.bones.length; ii++) {\n if (this.bones[ii] == bone) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.bones.push(bone);\n }\n for (let i = 0; i < skin.constraints.length; i++) {\n let constraint = skin.constraints[i];\n let contained = false;\n for (let ii = 0; ii < this.constraints.length; ii++) {\n if (this.constraints[ii] == constraint) {\n contained = true;\n break;\n }\n }\n if (!contained)\n this.constraints.push(constraint);\n }\n let attachments = skin.getAttachments();\n for (let i = 0; i < attachments.length; i++) {\n var attachment = attachments[i];\n if (!attachment.attachment)\n continue;\n if (attachment.attachment instanceof MeshAttachment) {\n attachment.attachment = attachment.attachment.newLinkedMesh();\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n else {\n attachment.attachment = attachment.attachment.copy();\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n }\n }\n /** Returns the attachment for the specified slot index and name, or null. */\n getAttachment(slotIndex, name) {\n let dictionary = this.attachments[slotIndex];\n return dictionary ? dictionary[name] : null;\n }\n /** Removes the attachment in the skin for the specified slot index and name, if any. */\n removeAttachment(slotIndex, name) {\n let dictionary = this.attachments[slotIndex];\n if (dictionary)\n delete dictionary[name];\n }\n /** Returns all attachments in this skin. */\n getAttachments() {\n let entries = new Array();\n for (var i = 0; i < this.attachments.length; i++) {\n let slotAttachments = this.attachments[i];\n if (slotAttachments) {\n for (let name in slotAttachments) {\n let attachment = slotAttachments[name];\n if (attachment)\n entries.push(new SkinEntry(i, name, attachment));\n }\n }\n }\n return entries;\n }\n /** Returns all attachments in this skin for the specified slot index. */\n getAttachmentsForSlot(slotIndex, attachments) {\n let slotAttachments = this.attachments[slotIndex];\n if (slotAttachments) {\n for (let name in slotAttachments) {\n let attachment = slotAttachments[name];\n if (attachment)\n attachments.push(new SkinEntry(slotIndex, name, attachment));\n }\n }\n }\n /** Clears all attachments, bones, and constraints. */\n clear() {\n this.attachments.length = 0;\n this.bones.length = 0;\n this.constraints.length = 0;\n }\n /** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */\n attachAll(skeleton, oldSkin) {\n let slotIndex = 0;\n for (let i = 0; i < skeleton.slots.length; i++) {\n let slot = skeleton.slots[i];\n let slotAttachment = slot.getAttachment();\n if (slotAttachment && slotIndex < oldSkin.attachments.length) {\n let dictionary = oldSkin.attachments[slotIndex];\n for (let key in dictionary) {\n let skinAttachment = dictionary[key];\n if (slotAttachment == skinAttachment) {\n let attachment = this.getAttachment(slotIndex, key);\n if (attachment)\n slot.setAttachment(attachment);\n break;\n }\n }\n }\n slotIndex++;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ta2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUcvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJakUsT0FBTyxFQUFFLEtBQUssRUFBYSxNQUFNLFlBQVksQ0FBQztBQUU5QyxzRkFBc0Y7QUFDdEYsTUFBTSxPQUFPLFNBQVM7SUFDRDtJQUE4QjtJQUFxQjtJQUF2RSxZQUFvQixZQUFvQixDQUFDLEVBQVMsSUFBWSxFQUFTLFVBQXNCO1FBQXpFLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFBUyxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUFJLENBQUM7Q0FDbEc7QUFFRDs7O21HQUdtRztBQUNuRyxNQUFNLE9BQU8sSUFBSTtJQUNoQix5RUFBeUU7SUFDekUsSUFBSSxDQUFTO0lBRWIsV0FBVyxHQUFHLElBQUksS0FBSyxFQUF5QixDQUFDO0lBQ2pELEtBQUssR0FBRyxLQUFLLEVBQVksQ0FBQztJQUMxQixXQUFXLEdBQUcsSUFBSSxLQUFLLEVBQWtCLENBQUM7SUFFMUMsMEdBQTBHO0lBQzFHLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVc7SUFFckUsWUFBYSxJQUFZO1FBQ3hCLElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ2xCLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsYUFBYSxDQUFFLFNBQWlCLEVBQUUsSUFBWSxFQUFFLFVBQXNCO1FBQ3JFLElBQUksQ0FBQyxVQUFVO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FB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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { ConstraintData } from \"./ConstraintData.js\";\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 /** The bones that will be modified by this transform constraint. */\n bones = new Array();\n /** The target bone whose world transform will be copied to the constrained bones. */\n _target = null;\n set target(boneData) { this._target = boneData; }\n get target() {\n if (!this._target)\n throw new Error(\"BoneData not set.\");\n else\n return this._target;\n }\n mixRotate = 0;\n mixX = 0;\n mixY = 0;\n mixScaleX = 0;\n mixScaleY = 0;\n mixShearY = 0;\n /** An offset added to the constrained bone rotation. */\n offsetRotation = 0;\n /** An offset added to the constrained bone X translation. */\n offsetX = 0;\n /** An offset added to the constrained bone Y translation. */\n offsetY = 0;\n /** An offset added to the constrained bone scaleX. */\n offsetScaleX = 0;\n /** An offset added to the constrained bone scaleY. */\n offsetScaleY = 0;\n /** An offset added to the constrained bone shearY. */\n offsetShearY = 0;\n relative = false;\n local = false;\n constructor(name) {\n super(name, 0, false);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNmb3JtQ29uc3RyYWludERhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvVHJhbnNmb3JtQ29uc3RyYWludERhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdyRDs7bUhBRW1IO0FBQ25ILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxjQUFjO0lBRTFELG9FQUFvRTtJQUNwRSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVksQ0FBQztJQUU5QixxRkFBcUY7SUFDN0UsT0FBTyxHQUFvQixJQUFJLENBQUM7SUFDeEMsSUFBVyxNQUFNLENBQUUsUUFBa0IsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbkUsSUFBVyxNQUFNO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTs7WUFDbEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFRCxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNULElBQUksR0FBRyxDQUFDLENBQUM7SUFDVCxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNkLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFFZCx3REFBd0Q7SUFDeEQsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUVuQiw2REFBNkQ7SUFDN0QsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUVaLDZEQUE2RDtJQUM3RCxPQUFPLEdBQUcsQ0FBQyxDQUFDO0lBRVosc0RBQXNEO0lBQ3RELFlBQVksR0FBRyxDQUFDLENBQUM7SUFFakIsc0RBQXNEO0lBQ3RELFlBQVksR0FBRyxDQUFDLENBQUM7SUFFakIsc0RBQXNEO0lBQ3RELFlBQVksR0FBRyxDQUFDLENBQUM7SUFFakIsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBRWQsWUFBYSxJQUFZO1FBQ3hCLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7Q0FDRCJ9","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Pool } from \"./Utils.js\";\nexport class Triangulator {\n convexPolygons = new Array();\n convexPolygonsIndices = new Array();\n indicesArray = new Array();\n isConcaveArray = new Array();\n triangles = new Array();\n polygonPool = new Pool(() => {\n return new Array();\n });\n polygonIndicesPool = new Pool(() => {\n return new Array();\n });\n triangulate(verticesArray) {\n let vertices = verticesArray;\n let vertexCount = verticesArray.length >> 1;\n let indices = this.indicesArray;\n indices.length = 0;\n for (let i = 0; i < vertexCount; i++)\n indices[i] = i;\n let isConcave = this.isConcaveArray;\n isConcave.length = 0;\n for (let i = 0, n = vertexCount; i < n; ++i)\n isConcave[i] = Triangulator.isConcave(i, vertexCount, vertices, indices);\n let triangles = this.triangles;\n triangles.length = 0;\n while (vertexCount > 3) {\n // Find ear tip.\n let previous = vertexCount - 1, i = 0, next = 1;\n while (true) {\n outer: if (!isConcave[i]) {\n let p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1;\n let p1x = vertices[p1], p1y = vertices[p1 + 1];\n let p2x = vertices[p2], p2y = vertices[p2 + 1];\n let p3x = vertices[p3], p3y = vertices[p3 + 1];\n for (let ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) {\n if (!isConcave[ii])\n continue;\n let v = indices[ii] << 1;\n let vx = vertices[v], vy = vertices[v + 1];\n if (Triangulator.positiveArea(p3x, p3y, p1x, p1y, vx, vy)) {\n if (Triangulator.positiveArea(p1x, p1y, p2x, p2y, vx, vy)) {\n if (Triangulator.positiveArea(p2x, p2y, p3x, p3y, vx, vy))\n break outer;\n }\n }\n }\n break;\n }\n if (next == 0) {\n do {\n if (!isConcave[i])\n break;\n i--;\n } while (i > 0);\n break;\n }\n previous = i;\n i = next;\n next = (next + 1) % vertexCount;\n }\n // Cut ear tip.\n triangles.push(indices[(vertexCount + i - 1) % vertexCount]);\n triangles.push(indices[i]);\n triangles.push(indices[(i + 1) % vertexCount]);\n indices.splice(i, 1);\n isConcave.splice(i, 1);\n vertexCount--;\n let previousIndex = (vertexCount + i - 1) % vertexCount;\n let nextIndex = i == vertexCount ? 0 : i;\n isConcave[previousIndex] = Triangulator.isConcave(previousIndex, vertexCount, vertices, indices);\n isConcave[nextIndex] = Triangulator.isConcave(nextIndex, vertexCount, vertices, indices);\n }\n if (vertexCount == 3) {\n triangles.push(indices[2]);\n triangles.push(indices[0]);\n triangles.push(indices[1]);\n }\n return triangles;\n }\n decompose(verticesArray, triangles) {\n let vertices = verticesArray;\n let convexPolygons = this.convexPolygons;\n this.polygonPool.freeAll(convexPolygons);\n convexPolygons.length = 0;\n let convexPolygonsIndices = this.convexPolygonsIndices;\n this.polygonIndicesPool.freeAll(convexPolygonsIndices);\n convexPolygonsIndices.length = 0;\n let polygonIndices = this.polygonIndicesPool.obtain();\n polygonIndices.length = 0;\n let polygon = this.polygonPool.obtain();\n polygon.length = 0;\n // Merge subsequent triangles if they form a triangle fan.\n let fanBaseIndex = -1, lastWinding = 0;\n for (let i = 0, n = triangles.length; i < n; i += 3) {\n let t1 = triangles[i] << 1, t2 = triangles[i + 1] << 1, t3 = triangles[i + 2] << 1;\n let x1 = vertices[t1], y1 = vertices[t1 + 1];\n let x2 = vertices[t2], y2 = vertices[t2 + 1];\n let x3 = vertices[t3], y3 = vertices[t3 + 1];\n // If the base of the last triangle is the same as this triangle, check if they form a convex polygon (triangle fan).\n let merged = false;\n if (fanBaseIndex == t1) {\n let o = polygon.length - 4;\n let winding1 = Triangulator.winding(polygon[o], polygon[o + 1], polygon[o + 2], polygon[o + 3], x3, y3);\n let winding2 = Triangulator.winding(x3, y3, polygon[0], polygon[1], polygon[2], polygon[3]);\n if (winding1 == lastWinding && winding2 == lastWinding) {\n polygon.push(x3);\n polygon.push(y3);\n polygonIndices.push(t3);\n merged = true;\n }\n }\n // Otherwise make this triangle the new base.\n if (!merged) {\n if (polygon.length > 0) {\n convexPolygons.push(polygon);\n convexPolygonsIndices.push(polygonIndices);\n }\n else {\n this.polygonPool.free(polygon);\n this.polygonIndicesPool.free(polygonIndices);\n }\n polygon = this.polygonPool.obtain();\n polygon.length = 0;\n polygon.push(x1);\n polygon.push(y1);\n polygon.push(x2);\n polygon.push(y2);\n polygon.push(x3);\n polygon.push(y3);\n polygonIndices = this.polygonIndicesPool.obtain();\n polygonIndices.length = 0;\n polygonIndices.push(t1);\n polygonIndices.push(t2);\n polygonIndices.push(t3);\n lastWinding = Triangulator.winding(x1, y1, x2, y2, x3, y3);\n fanBaseIndex = t1;\n }\n }\n if (polygon.length > 0) {\n convexPolygons.push(polygon);\n convexPolygonsIndices.push(polygonIndices);\n }\n // Go through the list of polygons and try to merge the remaining triangles with the found triangle fans.\n for (let i = 0, n = convexPolygons.length; i < n; i++) {\n polygonIndices = convexPolygonsIndices[i];\n if (polygonIndices.length == 0)\n continue;\n let firstIndex = polygonIndices[0];\n let lastIndex = polygonIndices[polygonIndices.length - 1];\n polygon = convexPolygons[i];\n let o = polygon.length - 4;\n let prevPrevX = polygon[o], prevPrevY = polygon[o + 1];\n let prevX = polygon[o + 2], prevY = polygon[o + 3];\n let firstX = polygon[0], firstY = polygon[1];\n let secondX = polygon[2], secondY = polygon[3];\n let winding = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY);\n for (let ii = 0; ii < n; ii++) {\n if (ii == i)\n continue;\n let otherIndices = convexPolygonsIndices[ii];\n if (otherIndices.length != 3)\n continue;\n let otherFirstIndex = otherIndices[0];\n let otherSecondIndex = otherIndices[1];\n let otherLastIndex = otherIndices[2];\n let otherPoly = convexPolygons[ii];\n let x3 = otherPoly[otherPoly.length - 2], y3 = otherPoly[otherPoly.length - 1];\n if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex)\n continue;\n let winding1 = Triangulator.winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3);\n let winding2 = Triangulator.winding(x3, y3, firstX, firstY, secondX, secondY);\n if (winding1 == winding && winding2 == winding) {\n otherPoly.length = 0;\n otherIndices.length = 0;\n polygon.push(x3);\n polygon.push(y3);\n polygonIndices.push(otherLastIndex);\n prevPrevX = prevX;\n prevPrevY = prevY;\n prevX = x3;\n prevY = y3;\n ii = 0;\n }\n }\n }\n // Remove empty polygons that resulted from the merge step above.\n for (let i = convexPolygons.length - 1; i >= 0; i--) {\n polygon = convexPolygons[i];\n if (polygon.length == 0) {\n convexPolygons.splice(i, 1);\n this.polygonPool.free(polygon);\n polygonIndices = convexPolygonsIndices[i];\n convexPolygonsIndices.splice(i, 1);\n this.polygonIndicesPool.free(polygonIndices);\n }\n }\n return convexPolygons;\n }\n static isConcave(index, vertexCount, vertices, indices) {\n let previous = indices[(vertexCount + index - 1) % vertexCount] << 1;\n let current = indices[index] << 1;\n let next = indices[(index + 1) % vertexCount] << 1;\n return !this.positiveArea(vertices[previous], vertices[previous + 1], vertices[current], vertices[current + 1], vertices[next], vertices[next + 1]);\n }\n static positiveArea(p1x, p1y, p2x, p2y, p3x, p3y) {\n return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0;\n }\n static winding(p1x, p1y, p2x, p2y, p3x, p3y) {\n let px = p2x - p1x, py = p2y - p1y;\n return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJpYW5ndWxhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1RyaWFuZ3VsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFtQixJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFbkQsTUFBTSxPQUFPLFlBQVk7SUFDaEIsY0FBYyxHQUFHLElBQUksS0FBSyxFQUFpQixDQUFDO0lBQzVDLHFCQUFxQixHQUFHLElBQUksS0FBSyxFQUFpQixDQUFDO0lBRW5ELFlBQVksR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBQ25DLGNBQWMsR0FBRyxJQUFJLEtBQUssRUFBVyxDQUFDO0lBQ3RDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBRWhDLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBZ0IsR0FBRyxFQUFFO1FBQ2xELE9BQU8sSUFBSSxLQUFLLEVBQVUsQ0FBQztJQUM1QixDQUFDLENBQUMsQ0FBQztJQUVLLGtCQUFrQixHQUFHLElBQUksSUFBSSxDQUFnQixHQUFHLEVBQUU7UUFDekQsT0FBTyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0lBRUksV0FBVyxDQUFFLGFBQThCO1FBQ2pELElBQUksUUFBUSxHQUFHLGFBQWEsQ0FBQztRQUM3QixJQUFJLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUU1QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFO1lBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFaEIsSUFBSSxTQUFTLEdBQUcsSUFB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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Triangulator } from \"./Triangulator.js\";\nimport { Utils } from \"./Utils.js\";\nexport class SkeletonClipping {\n triangulator = new Triangulator();\n clippingPolygon = new Array();\n clipOutput = new Array();\n clippedVertices = new Array();\n clippedTriangles = new Array();\n scratch = new Array();\n clipAttachment = null;\n clippingPolygons = null;\n clipStart(slot, clip) {\n if (this.clipAttachment)\n return 0;\n this.clipAttachment = clip;\n let n = clip.worldVerticesLength;\n let vertices = Utils.setArraySize(this.clippingPolygon, n);\n clip.computeWorldVertices(slot, 0, n, vertices, 0, 2);\n let clippingPolygon = this.clippingPolygon;\n SkeletonClipping.makeClockwise(clippingPolygon);\n let clippingPolygons = this.clippingPolygons = this.triangulator.decompose(clippingPolygon, this.triangulator.triangulate(clippingPolygon));\n for (let i = 0, n = clippingPolygons.length; i < n; i++) {\n let polygon = clippingPolygons[i];\n SkeletonClipping.makeClockwise(polygon);\n polygon.push(polygon[0]);\n polygon.push(polygon[1]);\n }\n return clippingPolygons.length;\n }\n clipEndWithSlot(slot) {\n if (this.clipAttachment && this.clipAttachment.endSlot == slot.data)\n this.clipEnd();\n }\n clipEnd() {\n if (!this.clipAttachment)\n return;\n this.clipAttachment = null;\n this.clippingPolygons = null;\n this.clippedVertices.length = 0;\n this.clippedTriangles.length = 0;\n this.clippingPolygon.length = 0;\n }\n isClipping() {\n return this.clipAttachment != null;\n }\n clipTriangles(vertices, triangles, trianglesLength, uvs, light, dark, twoColor) {\n if (uvs && light && dark && typeof twoColor === 'boolean')\n this.clipTrianglesRender(vertices, triangles, trianglesLength, uvs, light, dark, twoColor);\n else\n this.clipTrianglesNoRender(vertices, triangles, trianglesLength);\n }\n clipTrianglesNoRender(vertices, triangles, trianglesLength) {\n let clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;\n let clippedTriangles = this.clippedTriangles;\n let polygons = this.clippingPolygons;\n let polygonsCount = polygons.length;\n let index = 0;\n clippedVertices.length = 0;\n clippedTriangles.length = 0;\n for (let i = 0; i < trianglesLength; i += 3) {\n let vertexOffset = triangles[i] << 1;\n let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];\n vertexOffset = triangles[i + 1] << 1;\n let x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];\n vertexOffset = triangles[i + 2] << 1;\n let x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];\n for (let p = 0; p < polygonsCount; p++) {\n let s = clippedVertices.length;\n if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {\n let clipOutputLength = clipOutput.length;\n if (clipOutputLength == 0)\n continue;\n let clipOutputCount = clipOutputLength >> 1;\n let clipOutputItems = this.clipOutput;\n let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * 2);\n for (let ii = 0; ii < clipOutputLength; ii += 2, s += 2) {\n let x = clipOutputItems[ii], y = clipOutputItems[ii + 1];\n clippedVerticesItems[s] = x;\n clippedVerticesItems[s + 1] = y;\n }\n s = clippedTriangles.length;\n let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));\n clipOutputCount--;\n for (let ii = 1; ii < clipOutputCount; ii++, s += 3) {\n clippedTrianglesItems[s] = index;\n clippedTrianglesItems[s + 1] = (index + ii);\n clippedTrianglesItems[s + 2] = (index + ii + 1);\n }\n index += clipOutputCount + 1;\n }\n else {\n let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * 2);\n clippedVerticesItems[s] = x1;\n clippedVerticesItems[s + 1] = y1;\n clippedVerticesItems[s + 2] = x2;\n clippedVerticesItems[s + 3] = y2;\n clippedVerticesItems[s + 4] = x3;\n clippedVerticesItems[s + 5] = y3;\n s = clippedTriangles.length;\n let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3);\n clippedTrianglesItems[s] = index;\n clippedTrianglesItems[s + 1] = (index + 1);\n clippedTrianglesItems[s + 2] = (index + 2);\n index += 3;\n break;\n }\n }\n }\n }\n clipTrianglesRender(vertices, triangles, trianglesLength, uvs, light, dark, twoColor) {\n let clipOutput = this.clipOutput, clippedVertices = this.clippedVertices;\n let clippedTriangles = this.clippedTriangles;\n let polygons = this.clippingPolygons;\n let polygonsCount = polygons.length;\n let vertexSize = twoColor ? 12 : 8;\n let index = 0;\n clippedVertices.length = 0;\n clippedTriangles.length = 0;\n for (let i = 0; i < trianglesLength; i += 3) {\n let vertexOffset = triangles[i] << 1;\n let x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1];\n let u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1];\n vertexOffset = triangles[i + 1] << 1;\n let x2 = vertices[vertexOffset], y2 = vertices[vertexOffset + 1];\n let u2 = uvs[vertexOffset], v2 = uvs[vertexOffset + 1];\n vertexOffset = triangles[i + 2] << 1;\n let x3 = vertices[vertexOffset], y3 = vertices[vertexOffset + 1];\n let u3 = uvs[vertexOffset], v3 = uvs[vertexOffset + 1];\n for (let p = 0; p < polygonsCount; p++) {\n let s = clippedVertices.length;\n if (this.clip(x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) {\n let clipOutputLength = clipOutput.length;\n if (clipOutputLength == 0)\n continue;\n let d0 = y2 - y3, d1 = x3 - x2, d2 = x1 - x3, d4 = y3 - y1;\n let d = 1 / (d0 * d2 + d1 * (y1 - y3));\n let clipOutputCount = clipOutputLength >> 1;\n let clipOutputItems = this.clipOutput;\n let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + clipOutputCount * vertexSize);\n for (let ii = 0; ii < clipOutputLength; ii += 2, s += vertexSize) {\n let x = clipOutputItems[ii], y = clipOutputItems[ii + 1];\n clippedVerticesItems[s] = x;\n clippedVerticesItems[s + 1] = y;\n clippedVerticesItems[s + 2] = light.r;\n clippedVerticesItems[s + 3] = light.g;\n clippedVerticesItems[s + 4] = light.b;\n clippedVerticesItems[s + 5] = light.a;\n let c0 = x - x3, c1 = y - y3;\n let a = (d0 * c0 + d1 * c1) * d;\n let b = (d4 * c0 + d2 * c1) * d;\n let c = 1 - a - b;\n clippedVerticesItems[s + 6] = u1 * a + u2 * b + u3 * c;\n clippedVerticesItems[s + 7] = v1 * a + v2 * b + v3 * c;\n if (twoColor) {\n clippedVerticesItems[s + 8] = dark.r;\n clippedVerticesItems[s + 9] = dark.g;\n clippedVerticesItems[s + 10] = dark.b;\n clippedVerticesItems[s + 11] = dark.a;\n }\n }\n s = clippedTriangles.length;\n let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3 * (clipOutputCount - 2));\n clipOutputCount--;\n for (let ii = 1; ii < clipOutputCount; ii++, s += 3) {\n clippedTrianglesItems[s] = index;\n clippedTrianglesItems[s + 1] = (index + ii);\n clippedTrianglesItems[s + 2] = (index + ii + 1);\n }\n index += clipOutputCount + 1;\n }\n else {\n let clippedVerticesItems = Utils.setArraySize(clippedVertices, s + 3 * vertexSize);\n clippedVerticesItems[s] = x1;\n clippedVerticesItems[s + 1] = y1;\n clippedVerticesItems[s + 2] = light.r;\n clippedVerticesItems[s + 3] = light.g;\n clippedVerticesItems[s + 4] = light.b;\n clippedVerticesItems[s + 5] = light.a;\n if (!twoColor) {\n clippedVerticesItems[s + 6] = u1;\n clippedVerticesItems[s + 7] = v1;\n clippedVerticesItems[s + 8] = x2;\n clippedVerticesItems[s + 9] = y2;\n clippedVerticesItems[s + 10] = light.r;\n clippedVerticesItems[s + 11] = light.g;\n clippedVerticesItems[s + 12] = light.b;\n clippedVerticesItems[s + 13] = light.a;\n clippedVerticesItems[s + 14] = u2;\n clippedVerticesItems[s + 15] = v2;\n clippedVerticesItems[s + 16] = x3;\n clippedVerticesItems[s + 17] = y3;\n clippedVerticesItems[s + 18] = light.r;\n clippedVerticesItems[s + 19] = light.g;\n clippedVerticesItems[s + 20] = light.b;\n clippedVerticesItems[s + 21] = light.a;\n clippedVerticesItems[s + 22] = u3;\n clippedVerticesItems[s + 23] = v3;\n }\n else {\n clippedVerticesItems[s + 6] = u1;\n clippedVerticesItems[s + 7] = v1;\n clippedVerticesItems[s + 8] = dark.r;\n clippedVerticesItems[s + 9] = dark.g;\n clippedVerticesItems[s + 10] = dark.b;\n clippedVerticesItems[s + 11] = dark.a;\n clippedVerticesItems[s + 12] = x2;\n clippedVerticesItems[s + 13] = y2;\n clippedVerticesItems[s + 14] = light.r;\n clippedVerticesItems[s + 15] = light.g;\n clippedVerticesItems[s + 16] = light.b;\n clippedVerticesItems[s + 17] = light.a;\n clippedVerticesItems[s + 18] = u2;\n clippedVerticesItems[s + 19] = v2;\n clippedVerticesItems[s + 20] = dark.r;\n clippedVerticesItems[s + 21] = dark.g;\n clippedVerticesItems[s + 22] = dark.b;\n clippedVerticesItems[s + 23] = dark.a;\n clippedVerticesItems[s + 24] = x3;\n clippedVerticesItems[s + 25] = y3;\n clippedVerticesItems[s + 26] = light.r;\n clippedVerticesItems[s + 27] = light.g;\n clippedVerticesItems[s + 28] = light.b;\n clippedVerticesItems[s + 29] = light.a;\n clippedVerticesItems[s + 30] = u3;\n clippedVerticesItems[s + 31] = v3;\n clippedVerticesItems[s + 32] = dark.r;\n clippedVerticesItems[s + 33] = dark.g;\n clippedVerticesItems[s + 34] = dark.b;\n clippedVerticesItems[s + 35] = dark.a;\n }\n s = clippedTriangles.length;\n let clippedTrianglesItems = Utils.setArraySize(clippedTriangles, s + 3);\n clippedTrianglesItems[s] = index;\n clippedTrianglesItems[s + 1] = (index + 1);\n clippedTrianglesItems[s + 2] = (index + 2);\n index += 3;\n break;\n }\n }\n }\n }\n /** Clips the input triangle against the convex, clockwise clipping area. If the triangle lies entirely within the clipping\n * area, false is returned. The clipping area must duplicate the first vertex at the end of the vertices list. */\n clip(x1, y1, x2, y2, x3, y3, clippingArea, output) {\n let originalOutput = output;\n let clipped = false;\n // Avoid copy at the end.\n let input;\n if (clippingArea.length % 4 >= 2) {\n input = output;\n output = this.scratch;\n }\n else\n input = this.scratch;\n input.length = 0;\n input.push(x1);\n input.push(y1);\n input.push(x2);\n input.push(y2);\n input.push(x3);\n input.push(y3);\n input.push(x1);\n input.push(y1);\n output.length = 0;\n let clippingVerticesLast = clippingArea.length - 4;\n let clippingVertices = clippingArea;\n for (let i = 0;; i += 2) {\n let edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1];\n let ex = edgeX - clippingVertices[i + 2], ey = edgeY - clippingVertices[i + 3];\n let outputStart = output.length;\n let inputVertices = input;\n for (let ii = 0, nn = input.length - 2; ii < nn;) {\n let inputX = inputVertices[ii], inputY = inputVertices[ii + 1];\n ii += 2;\n let inputX2 = inputVertices[ii], inputY2 = inputVertices[ii + 1];\n let s2 = ey * (edgeX - inputX2) > ex * (edgeY - inputY2);\n let s1 = ey * (edgeX - inputX) - ex * (edgeY - inputY);\n if (s1 > 0) {\n if (s2) { // v1 inside, v2 inside\n output.push(inputX2);\n output.push(inputY2);\n continue;\n }\n // v1 inside, v2 outside\n let ix = inputX2 - inputX, iy = inputY2 - inputY, t = s1 / (ix * ey - iy * ex);\n if (t >= 0 && t <= 1) {\n output.push(inputX + ix * t);\n output.push(inputY + iy * t);\n }\n else {\n output.push(inputX2);\n output.push(inputY2);\n continue;\n }\n }\n else if (s2) { // v1 outside, v2 inside\n let ix = inputX2 - inputX, iy = inputY2 - inputY, t = s1 / (ix * ey - iy * ex);\n if (t >= 0 && t <= 1) {\n output.push(inputX + ix * t);\n output.push(inputY + iy * t);\n output.push(inputX2);\n output.push(inputY2);\n }\n else {\n output.push(inputX2);\n output.push(inputY2);\n continue;\n }\n }\n clipped = true;\n }\n if (outputStart == output.length) { // All edges outside.\n originalOutput.length = 0;\n return true;\n }\n output.push(output[0]);\n output.push(output[1]);\n if (i == clippingVerticesLast)\n break;\n let temp = output;\n output = input;\n output.length = 0;\n input = temp;\n }\n if (originalOutput != output) {\n originalOutput.length = 0;\n for (let i = 0, n = output.length - 2; i < n; i++)\n originalOutput[i] = output[i];\n }\n else\n originalOutput.length = originalOutput.length - 2;\n return clipped;\n }\n static makeClockwise(polygon) {\n let vertices = polygon;\n let verticeslength = polygon.length;\n let area = vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], p1x = 0, p1y = 0, p2x = 0, p2y = 0;\n for (let i = 0, n = verticeslength - 3; i < n; i += 2) {\n p1x = vertices[i];\n p1y = vertices[i + 1];\n p2x = vertices[i + 2];\n p2y = vertices[i + 3];\n area += p1x * p2y - p2x * p1y;\n }\n if (area < 0)\n return;\n for (let i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) {\n let x = vertices[i], y = vertices[i + 1];\n let other = lastX - i;\n vertices[i] = vertices[other];\n vertices[i + 1] = vertices[other + 1];\n vertices[other] = x;\n vertices[other + 1] = y;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25DbGlwcGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ta2VsZXRvbkNsaXBwaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUkvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLEtBQUssRUFBMEIsTUFBTSxZQUFZLENBQUM7QUFFM0QsTUFBTSxPQUFPLGdCQUFnQjtJQUNwQixZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNsQyxlQUFlLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztJQUN0QyxVQUFVLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztJQUN6QyxlQUFlLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztJQUN0QyxnQkFBZ0IsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBQy9CLE9BQU8sR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO0lBRTlCLGNBQWMsR0FBOEIsSUFBSSxDQUFDO0lBQ2pELGdCQUFnQixHQUFnQyxJQUFJLENBQUM7SUFFN0QsU0FBUyxDQUFFLElBQVUsRUFBRSxJQUF3QjtRQUM5QyxJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFM0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ2pDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMs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RyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUNyQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDdEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBRXRDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2xDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2xDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNsQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO3dCQUNsQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDdEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7d0JBQ3RDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFFdEMs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","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { Animation, 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, PhysicsConstraintResetTimeline, PhysicsConstraintInertiaTimeline, PhysicsConstraintStrengthTimeline, PhysicsConstraintDampingTimeline, PhysicsConstraintMassTimeline, PhysicsConstraintWindTimeline, PhysicsConstraintGravityTimeline, PhysicsConstraintMixTimeline } from \"./Animation.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 } from \"./Utils.js\";\nimport { Sequence, SequenceMode } from \"./attachments/Sequence.js\";\nimport { SequenceTimeline } from \"./Animation.js\";\nimport { PhysicsConstraintData } from \"./PhysicsConstraintData.js\";\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 attachmentLoader;\n /** Scales bone positions, image sizes, and translations as they are loaded. This allows different size images to be used at\n * runtime than were used in Spine.\n *\n * See [Scaling](http://esotericsoftware.com/spine-loading-skeleton-data#Scaling) in the Spine Runtimes Guide. */\n scale = 1;\n linkedMeshes = new Array();\n constructor(attachmentLoader) {\n this.attachmentLoader = attachmentLoader;\n }\n readSkeletonData(json) {\n let scale = this.scale;\n let skeletonData = new SkeletonData();\n let root = typeof (json) === \"string\" ? JSON.parse(json) : json;\n // Skeleton\n let skeletonMap = root.skeleton;\n if (skeletonMap) {\n skeletonData.hash = skeletonMap.hash;\n skeletonData.version = skeletonMap.spine;\n skeletonData.x = skeletonMap.x;\n skeletonData.y = skeletonMap.y;\n skeletonData.width = skeletonMap.width;\n skeletonData.height = skeletonMap.height;\n skeletonData.referenceScale = getValue(skeletonMap, \"referenceScale\", 100) * scale;\n skeletonData.fps = skeletonMap.fps;\n skeletonData.imagesPath = skeletonMap.images ?? null;\n skeletonData.audioPath = skeletonMap.audio ?? null;\n }\n // Bones\n if (root.bones) {\n for (let i = 0; i < root.bones.length; i++) {\n let boneMap = root.bones[i];\n let parent = null;\n let parentName = getValue(boneMap, \"parent\", null);\n if (parentName)\n parent = skeletonData.findBone(parentName);\n let data = new BoneData(skeletonData.bones.length, boneMap.name, parent);\n data.length = getValue(boneMap, \"length\", 0) * scale;\n data.x = getValue(boneMap, \"x\", 0) * scale;\n data.y = getValue(boneMap, \"y\", 0) * scale;\n data.rotation = getValue(boneMap, \"rotation\", 0);\n data.scaleX = getValue(boneMap, \"scaleX\", 1);\n data.scaleY = getValue(boneMap, \"scaleY\", 1);\n data.shearX = getValue(boneMap, \"shearX\", 0);\n data.shearY = getValue(boneMap, \"shearY\", 0);\n data.inherit = Utils.enumValue(Inherit, getValue(boneMap, \"inherit\", \"Normal\"));\n data.skinRequired = getValue(boneMap, \"skin\", false);\n let color = getValue(boneMap, \"color\", null);\n if (color)\n data.color.setFromString(color);\n skeletonData.bones.push(data);\n }\n }\n // Slots.\n if (root.slots) {\n for (let i = 0; i < root.slots.length; i++) {\n let slotMap = root.slots[i];\n let slotName = slotMap.name;\n let boneData = skeletonData.findBone(slotMap.bone);\n if (!boneData)\n throw new Error(`Couldn't find bone ${slotMap.bone} for slot ${slotName}`);\n let data = new SlotData(skeletonData.slots.length, slotName, boneData);\n let color = getValue(slotMap, \"color\", null);\n if (color)\n data.color.setFromString(color);\n let dark = getValue(slotMap, \"dark\", null);\n if (dark)\n data.darkColor = Color.fromString(dark);\n data.attachmentName = getValue(slotMap, \"attachment\", null);\n data.blendMode = Utils.enumValue(BlendMode, getValue(slotMap, \"blend\", \"normal\"));\n data.visible = getValue(slotMap, \"visible\", true);\n skeletonData.slots.push(data);\n }\n }\n // IK constraints\n if (root.ik) {\n for (let i = 0; i < root.ik.length; i++) {\n let constraintMap = root.ik[i];\n let data = new IkConstraintData(constraintMap.name);\n data.order = getValue(constraintMap, \"order\", 0);\n data.skinRequired = getValue(constraintMap, \"skin\", false);\n for (let ii = 0; ii < constraintMap.bones.length; ii++) {\n let bone = skeletonData.findBone(constraintMap.bones[ii]);\n if (!bone)\n throw new Error(`Couldn't find bone ${constraintMap.bones[ii]} for IK constraint ${constraintMap.name}.`);\n data.bones.push(bone);\n }\n let target = skeletonData.findBone(constraintMap.target);\n ;\n if (!target)\n throw new Error(`Couldn't find target bone ${constraintMap.target} for IK constraint ${constraintMap.name}.`);\n data.target = target;\n data.mix = getValue(constraintMap, \"mix\", 1);\n data.softness = getValue(constraintMap, \"softness\", 0) * scale;\n data.bendDirection = getValue(constraintMap, \"bendPositive\", true) ? 1 : -1;\n data.compress = getValue(constraintMap, \"compress\", false);\n data.stretch = getValue(constraintMap, \"stretch\", false);\n data.uniform = getValue(constraintMap, \"uniform\", false);\n skeletonData.ikConstraints.push(data);\n }\n }\n // Transform constraints.\n if (root.transform) {\n for (let i = 0; i < root.transform.length; i++) {\n let constraintMap = root.transform[i];\n let data = new TransformConstraintData(constraintMap.name);\n data.order = getValue(constraintMap, \"order\", 0);\n data.skinRequired = getValue(constraintMap, \"skin\", false);\n for (let ii = 0; ii < constraintMap.bones.length; ii++) {\n let boneName = constraintMap.bones[ii];\n let bone = skeletonData.findBone(boneName);\n if (!bone)\n throw new Error(`Couldn't find bone ${boneName} for transform constraint ${constraintMap.name}.`);\n data.bones.push(bone);\n }\n let targetName = constraintMap.target;\n let target = skeletonData.findBone(targetName);\n if (!target)\n throw new Error(`Couldn't find target bone ${targetName} for transform constraint ${constraintMap.name}.`);\n data.target = target;\n data.local = getValue(constraintMap, \"local\", false);\n data.relative = getValue(constraintMap, \"relative\", false);\n data.offsetRotation = getValue(constraintMap, \"rotation\", 0);\n data.offsetX = getValue(constraintMap, \"x\", 0) * scale;\n data.offsetY = getValue(constraintMap, \"y\", 0) * scale;\n data.offsetScaleX = getValue(constraintMap, \"scaleX\", 0);\n data.offsetScaleY = getValue(constraintMap, \"scaleY\", 0);\n data.offsetShearY = getValue(constraintMap, \"shearY\", 0);\n data.mixRotate = getValue(constraintMap, \"mixRotate\", 1);\n data.mixX = getValue(constraintMap, \"mixX\", 1);\n data.mixY = getValue(constraintMap, \"mixY\", data.mixX);\n data.mixScaleX = getValue(constraintMap, \"mixScaleX\", 1);\n data.mixScaleY = getValue(constraintMap, \"mixScaleY\", data.mixScaleX);\n data.mixShearY = getValue(constraintMap, \"mixShearY\", 1);\n skeletonData.transformConstraints.push(data);\n }\n }\n // Path constraints.\n if (root.path) {\n for (let i = 0; i < root.path.length; i++) {\n let constraintMap = root.path[i];\n let data = new PathConstraintData(constraintMap.name);\n data.order = getValue(constraintMap, \"order\", 0);\n data.skinRequired = getValue(constraintMap, \"skin\", false);\n for (let ii = 0; ii < constraintMap.bones.length; ii++) {\n let boneName = constraintMap.bones[ii];\n let bone = skeletonData.findBone(boneName);\n if (!bone)\n throw new Error(`Couldn't find bone ${boneName} for path constraint ${constraintMap.name}.`);\n data.bones.push(bone);\n }\n let targetName = constraintMap.target;\n let target = skeletonData.findSlot(targetName);\n if (!target)\n throw new Error(`Couldn't find target slot ${targetName} for path constraint ${constraintMap.name}.`);\n data.target = target;\n data.positionMode = Utils.enumValue(PositionMode, getValue(constraintMap, \"positionMode\", \"Percent\"));\n data.spacingMode = Utils.enumValue(SpacingMode, getValue(constraintMap, \"spacingMode\", \"Length\"));\n data.rotateMode = Utils.enumValue(RotateMode, getValue(constraintMap, \"rotateMode\", \"Tangent\"));\n data.offsetRotation = getValue(constraintMap, \"rotation\", 0);\n data.position = getValue(constraintMap, \"position\", 0);\n if (data.positionMode == PositionMode.Fixed)\n data.position *= scale;\n data.spacing = getValue(constraintMap, \"spacing\", 0);\n if (data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed)\n data.spacing *= scale;\n data.mixRotate = getValue(constraintMap, \"mixRotate\", 1);\n data.mixX = getValue(constraintMap, \"mixX\", 1);\n data.mixY = getValue(constraintMap, \"mixY\", data.mixX);\n skeletonData.pathConstraints.push(data);\n }\n }\n // Physics constraints.\n if (root.physics) {\n for (let i = 0; i < root.physics.length; i++) {\n const constraintMap = root.physics[i];\n const data = new PhysicsConstraintData(constraintMap.name);\n data.order = getValue(constraintMap, \"order\", 0);\n data.skinRequired = getValue(constraintMap, \"skin\", false);\n const boneName = constraintMap.bone;\n const bone = skeletonData.findBone(boneName);\n if (bone == null)\n throw new Error(\"Physics bone not found: \" + boneName);\n data.bone = bone;\n data.x = getValue(constraintMap, \"x\", 0);\n data.y = getValue(constraintMap, \"y\", 0);\n data.rotate = getValue(constraintMap, \"rotate\", 0);\n data.scaleX = getValue(constraintMap, \"scaleX\", 0);\n data.shearX = getValue(constraintMap, \"shearX\", 0);\n data.limit = getValue(constraintMap, \"limit\", 5000) * scale;\n data.step = 1 / getValue(constraintMap, \"fps\", 60);\n data.inertia = getValue(constraintMap, \"inertia\", 1);\n data.strength = getValue(constraintMap, \"strength\", 100);\n data.damping = getValue(constraintMap, \"damping\", 1);\n data.massInverse = 1 / getValue(constraintMap, \"mass\", 1);\n data.wind = getValue(constraintMap, \"wind\", 0);\n data.gravity = getValue(constraintMap, \"gravity\", 0);\n data.mix = getValue(constraintMap, \"mix\", 1);\n data.inertiaGlobal = getValue(constraintMap, \"inertiaGlobal\", false);\n data.strengthGlobal = getValue(constraintMap, \"strengthGlobal\", false);\n data.dampingGlobal = getValue(constraintMap, \"dampingGlobal\", false);\n data.massGlobal = getValue(constraintMap, \"massGlobal\", false);\n data.windGlobal = getValue(constraintMap, \"windGlobal\", false);\n data.gravityGlobal = getValue(constraintMap, \"gravityGlobal\", false);\n data.mixGlobal = getValue(constraintMap, \"mixGlobal\", false);\n skeletonData.physicsConstraints.push(data);\n }\n }\n // Skins.\n if (root.skins) {\n for (let i = 0; i < root.skins.length; i++) {\n let skinMap = root.skins[i];\n let skin = new Skin(skinMap.name);\n if (skinMap.bones) {\n for (let ii = 0; ii < skinMap.bones.length; ii++) {\n let boneName = skinMap.bones[ii];\n let bone = skeletonData.findBone(boneName);\n if (!bone)\n throw new Error(`Couldn't find bone ${boneName} for skin ${skinMap.name}.`);\n skin.bones.push(bone);\n }\n }\n if (skinMap.ik) {\n for (let ii = 0; ii < skinMap.ik.length; ii++) {\n let constraintName = skinMap.ik[ii];\n let constraint = skeletonData.findIkConstraint(constraintName);\n if (!constraint)\n throw new Error(`Couldn't find IK constraint ${constraintName} for skin ${skinMap.name}.`);\n skin.constraints.push(constraint);\n }\n }\n if (skinMap.transform) {\n for (let ii = 0; ii < skinMap.transform.length; ii++) {\n let constraintName = skinMap.transform[ii];\n let constraint = skeletonData.findTransformConstraint(constraintName);\n if (!constraint)\n throw new Error(`Couldn't find transform constraint ${constraintName} for skin ${skinMap.name}.`);\n skin.constraints.push(constraint);\n }\n }\n if (skinMap.path) {\n for (let ii = 0; ii < skinMap.path.length; ii++) {\n let constraintName = skinMap.path[ii];\n let constraint = skeletonData.findPathConstraint(constraintName);\n if (!constraint)\n throw new Error(`Couldn't find path constraint ${constraintName} for skin ${skinMap.name}.`);\n skin.constraints.push(constraint);\n }\n }\n if (skinMap.physics) {\n for (let ii = 0; ii < skinMap.physics.length; ii++) {\n let constraintName = skinMap.physics[ii];\n let constraint = skeletonData.findPhysicsConstraint(constraintName);\n if (!constraint)\n throw new Error(`Couldn't find physics constraint ${constraintName} for skin ${skinMap.name}.`);\n skin.constraints.push(constraint);\n }\n }\n for (let slotName in skinMap.attachments) {\n let slot = skeletonData.findSlot(slotName);\n if (!slot)\n throw new Error(`Couldn't find slot ${slotName} for skin ${skinMap.name}.`);\n let slotMap = skinMap.attachments[slotName];\n for (let entryName in slotMap) {\n let attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData);\n if (attachment)\n skin.setAttachment(slot.index, entryName, attachment);\n }\n }\n skeletonData.skins.push(skin);\n if (skin.name == \"default\")\n skeletonData.defaultSkin = skin;\n }\n }\n // Linked meshes.\n for (let i = 0, n = this.linkedMeshes.length; i < n; i++) {\n let linkedMesh = this.linkedMeshes[i];\n let skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin);\n if (!skin)\n throw new Error(`Skin not found: ${linkedMesh.skin}`);\n let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent);\n if (!parent)\n throw new Error(`Parent mesh not found: ${linkedMesh.parent}`);\n linkedMesh.mesh.timelineAttachment = linkedMesh.inheritTimeline ? parent : linkedMesh.mesh;\n linkedMesh.mesh.setParentMesh(parent);\n if (linkedMesh.mesh.region != null)\n linkedMesh.mesh.updateRegion();\n }\n this.linkedMeshes.length = 0;\n // Events.\n if (root.events) {\n for (let eventName in root.events) {\n let eventMap = root.events[eventName];\n let data = new EventData(eventName);\n data.intValue = getValue(eventMap, \"int\", 0);\n data.floatValue = getValue(eventMap, \"float\", 0);\n data.stringValue = getValue(eventMap, \"string\", \"\");\n data.audioPath = getValue(eventMap, \"audio\", null);\n if (data.audioPath) {\n data.volume = getValue(eventMap, \"volume\", 1);\n data.balance = getValue(eventMap, \"balance\", 0);\n }\n skeletonData.events.push(data);\n }\n }\n // Animations.\n if (root.animations) {\n for (let animationName in root.animations) {\n let animationMap = root.animations[animationName];\n this.readAnimation(animationMap, animationName, skeletonData);\n }\n }\n return skeletonData;\n }\n readAttachment(map, skin, slotIndex, name, skeletonData) {\n let scale = this.scale;\n name = getValue(map, \"name\", name);\n switch (getValue(map, \"type\", \"region\")) {\n case \"region\": {\n let path = getValue(map, \"path\", name);\n let sequence = this.readSequence(getValue(map, \"sequence\", null));\n let region = this.attachmentLoader.newRegionAttachment(skin, name, path, sequence);\n if (!region)\n return null;\n region.path = path;\n region.x = getValue(map, \"x\", 0) * scale;\n region.y = getValue(map, \"y\", 0) * scale;\n region.scaleX = getValue(map, \"scaleX\", 1);\n region.scaleY = getValue(map, \"scaleY\", 1);\n region.rotation = getValue(map, \"rotation\", 0);\n region.width = map.width * scale;\n region.height = map.height * scale;\n region.sequence = sequence;\n let color = getValue(map, \"color\", null);\n if (color)\n region.color.setFromString(color);\n if (region.region != null)\n region.updateRegion();\n return region;\n }\n case \"boundingbox\": {\n let box = this.attachmentLoader.newBoundingBoxAttachment(skin, name);\n if (!box)\n return null;\n this.readVertices(map, box, map.vertexCount << 1);\n let color = getValue(map, \"color\", null);\n if (color)\n box.color.setFromString(color);\n return box;\n }\n case \"mesh\":\n case \"linkedmesh\": {\n let path = getValue(map, \"path\", name);\n let sequence = this.readSequence(getValue(map, \"sequence\", null));\n let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path, sequence);\n if (!mesh)\n return null;\n mesh.path = path;\n let color = getValue(map, \"color\", null);\n if (color)\n mesh.color.setFromString(color);\n mesh.width = getValue(map, \"width\", 0) * scale;\n mesh.height = getValue(map, \"height\", 0) * scale;\n mesh.sequence = sequence;\n let parent = getValue(map, \"parent\", null);\n if (parent) {\n this.linkedMeshes.push(new LinkedMesh(mesh, getValue(map, \"skin\", null), slotIndex, parent, getValue(map, \"timelines\", true)));\n return mesh;\n }\n let uvs = map.uvs;\n this.readVertices(map, mesh, uvs.length);\n mesh.triangles = map.triangles;\n mesh.regionUVs = uvs;\n if (mesh.region != null)\n mesh.updateRegion();\n mesh.edges = getValue(map, \"edges\", null);\n mesh.hullLength = getValue(map, \"hull\", 0) * 2;\n return mesh;\n }\n case \"path\": {\n let path = this.attachmentLoader.newPathAttachment(skin, name);\n if (!path)\n return null;\n path.closed = getValue(map, \"closed\", false);\n path.constantSpeed = getValue(map, \"constantSpeed\", true);\n let vertexCount = map.vertexCount;\n this.readVertices(map, path, vertexCount << 1);\n let lengths = Utils.newArray(vertexCount / 3, 0);\n for (let i = 0; i < map.lengths.length; i++)\n lengths[i] = map.lengths[i] * scale;\n path.lengths = lengths;\n let color = getValue(map, \"color\", null);\n if (color)\n path.color.setFromString(color);\n return path;\n }\n case \"point\": {\n let point = this.attachmentLoader.newPointAttachment(skin, name);\n if (!point)\n return null;\n point.x = getValue(map, \"x\", 0) * scale;\n point.y = getValue(map, \"y\", 0) * scale;\n point.rotation = getValue(map, \"rotation\", 0);\n let color = getValue(map, \"color\", null);\n if (color)\n point.color.setFromString(color);\n return point;\n }\n case \"clipping\": {\n let clip = this.attachmentLoader.newClippingAttachment(skin, name);\n if (!clip)\n return null;\n let end = getValue(map, \"end\", null);\n if (end)\n clip.endSlot = skeletonData.findSlot(end);\n let vertexCount = map.vertexCount;\n this.readVertices(map, clip, vertexCount << 1);\n let color = getValue(map, \"color\", null);\n if (color)\n clip.color.setFromString(color);\n return clip;\n }\n }\n return null;\n }\n readSequence(map) {\n if (map == null)\n return null;\n let sequence = new Sequence(getValue(map, \"count\", 0));\n sequence.start = getValue(map, \"start\", 1);\n sequence.digits = getValue(map, \"digits\", 0);\n sequence.setupIndex = getValue(map, \"setup\", 0);\n return sequence;\n }\n readVertices(map, attachment, verticesLength) {\n let scale = this.scale;\n attachment.worldVerticesLength = verticesLength;\n let vertices = map.vertices;\n if (verticesLength == vertices.length) {\n let scaledVertices = Utils.toFloatArray(vertices);\n if (scale != 1) {\n for (let i = 0, n = vertices.length; i < n; i++)\n scaledVertices[i] *= scale;\n }\n attachment.vertices = scaledVertices;\n return;\n }\n let weights = new Array();\n let bones = new Array();\n for (let i = 0, n = vertices.length; i < n;) {\n let boneCount = vertices[i++];\n bones.push(boneCount);\n for (let nn = i + boneCount * 4; i < nn; i += 4) {\n bones.push(vertices[i]);\n weights.push(vertices[i + 1] * scale);\n weights.push(vertices[i + 2] * scale);\n weights.push(vertices[i + 3]);\n }\n }\n attachment.bones = bones;\n attachment.vertices = Utils.toFloatArray(weights);\n }\n readAnimation(map, name, skeletonData) {\n let scale = this.scale;\n let timelines = new Array();\n // Slot timelines.\n if (map.slots) {\n for (let slotName in map.slots) {\n let slotMap = map.slots[slotName];\n let slot = skeletonData.findSlot(slotName);\n if (!slot)\n throw new Error(\"Slot not found: \" + slotName);\n let slotIndex = slot.index;\n for (let timelineName in slotMap) {\n let timelineMap = slotMap[timelineName];\n if (!timelineMap)\n continue;\n let frames = timelineMap.length;\n if (timelineName == \"attachment\") {\n let timeline = new AttachmentTimeline(frames, slotIndex);\n for (let frame = 0; frame < frames; frame++) {\n let keyMap = timelineMap[frame];\n timeline.setFrame(frame, getValue(keyMap, \"time\", 0), getValue(keyMap, \"name\", null));\n }\n timelines.push(timeline);\n }\n else if (timelineName == \"rgba\") {\n let timeline = new RGBATimeline(frames, frames << 2, slotIndex);\n let keyMap = timelineMap[0];\n let time = getValue(keyMap, \"time\", 0);\n let color = Color.fromString(keyMap.color);\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, color.r, color.g, color.b, color.a);\n let nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n let time2 = getValue(nextMap, \"time\", 0);\n let newColor = Color.fromString(nextMap.color);\n let curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);\n }\n time = time2;\n color = newColor;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n else if (timelineName == \"rgb\") {\n let timeline = new RGBTimeline(frames, frames * 3, slotIndex);\n let keyMap = timelineMap[0];\n let time = getValue(keyMap, \"time\", 0);\n let color = Color.fromString(keyMap.color);\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, color.r, color.g, color.b);\n let nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n let time2 = getValue(nextMap, \"time\", 0);\n let newColor = Color.fromString(nextMap.color);\n let curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n }\n time = time2;\n color = newColor;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n else if (timelineName == \"alpha\") {\n timelines.push(readTimeline1(timelineMap, new AlphaTimeline(frames, frames, slotIndex), 0, 1));\n }\n else if (timelineName == \"rgba2\") {\n let timeline = new RGBA2Timeline(frames, frames * 7, slotIndex);\n let keyMap = timelineMap[0];\n let time = getValue(keyMap, \"time\", 0);\n let color = Color.fromString(keyMap.light);\n let color2 = Color.fromString(keyMap.dark);\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b);\n let nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n let time2 = getValue(nextMap, \"time\", 0);\n let newColor = Color.fromString(nextMap.light);\n let newColor2 = Color.fromString(nextMap.dark);\n let curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.r, newColor2.r, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.g, newColor2.g, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 6, time, time2, color2.b, newColor2.b, 1);\n }\n time = time2;\n color = newColor;\n color2 = newColor2;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n else if (timelineName == \"rgb2\") {\n let timeline = new RGB2Timeline(frames, frames * 6, slotIndex);\n let keyMap = timelineMap[0];\n let time = getValue(keyMap, \"time\", 0);\n let color = Color.fromString(keyMap.light);\n let color2 = Color.fromString(keyMap.dark);\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, color.r, color.g, color.b, color2.r, color2.g, color2.b);\n let nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n let time2 = getValue(nextMap, \"time\", 0);\n let newColor = Color.fromString(nextMap.light);\n let newColor2 = Color.fromString(nextMap.dark);\n let curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.r, newColor2.r, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.g, newColor2.g, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.b, newColor2.b, 1);\n }\n time = time2;\n color = newColor;\n color2 = newColor2;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n }\n }\n }\n // Bone timelines.\n if (map.bones) {\n for (let boneName in map.bones) {\n let boneMap = map.bones[boneName];\n let bone = skeletonData.findBone(boneName);\n if (!bone)\n throw new Error(\"Bone not found: \" + boneName);\n let boneIndex = bone.index;\n for (let timelineName in boneMap) {\n let timelineMap = boneMap[timelineName];\n let frames = timelineMap.length;\n if (frames == 0)\n continue;\n if (timelineName === \"rotate\") {\n timelines.push(readTimeline1(timelineMap, new RotateTimeline(frames, frames, boneIndex), 0, 1));\n }\n else if (timelineName === \"translate\") {\n let timeline = new TranslateTimeline(frames, frames << 1, boneIndex);\n timelines.push(readTimeline2(timelineMap, timeline, \"x\", \"y\", 0, scale));\n }\n else if (timelineName === \"translatex\") {\n let timeline = new TranslateXTimeline(frames, frames, boneIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 0, scale));\n }\n else if (timelineName === \"translatey\") {\n let timeline = new TranslateYTimeline(frames, frames, boneIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 0, scale));\n }\n else if (timelineName === \"scale\") {\n let timeline = new ScaleTimeline(frames, frames << 1, boneIndex);\n timelines.push(readTimeline2(timelineMap, timeline, \"x\", \"y\", 1, 1));\n }\n else if (timelineName === \"scalex\") {\n let timeline = new ScaleXTimeline(frames, frames, boneIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 1, 1));\n }\n else if (timelineName === \"scaley\") {\n let timeline = new ScaleYTimeline(frames, frames, boneIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 1, 1));\n }\n else if (timelineName === \"shear\") {\n let timeline = new ShearTimeline(frames, frames << 1, boneIndex);\n timelines.push(readTimeline2(timelineMap, timeline, \"x\", \"y\", 0, 1));\n }\n else if (timelineName === \"shearx\") {\n let timeline = new ShearXTimeline(frames, frames, boneIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 0, 1));\n }\n else if (timelineName === \"sheary\") {\n let timeline = new ShearYTimeline(frames, frames, boneIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 0, 1));\n }\n else if (timelineName === \"inherit\") {\n let timeline = new InheritTimeline(frames, bone.index);\n for (let frame = 0; frame < timelineMap.length; frame++) {\n let aFrame = timelineMap[frame];\n timeline.setFrame(frame, getValue(aFrame, \"time\", 0), Utils.enumValue(Inherit, getValue(aFrame, \"inherit\", \"Normal\")));\n }\n timelines.push(timeline);\n }\n }\n }\n }\n // IK constraint timelines.\n if (map.ik) {\n for (let constraintName in map.ik) {\n let constraintMap = map.ik[constraintName];\n let keyMap = constraintMap[0];\n if (!keyMap)\n continue;\n let constraint = skeletonData.findIkConstraint(constraintName);\n if (!constraint)\n throw new Error(\"IK Constraint not found: \" + constraintName);\n let constraintIndex = skeletonData.ikConstraints.indexOf(constraint);\n let timeline = new IkConstraintTimeline(constraintMap.length, constraintMap.length << 1, constraintIndex);\n let time = getValue(keyMap, \"time\", 0);\n let mix = getValue(keyMap, \"mix\", 1);\n let softness = getValue(keyMap, \"softness\", 0) * scale;\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, mix, softness, getValue(keyMap, \"bendPositive\", true) ? 1 : -1, getValue(keyMap, \"compress\", false), getValue(keyMap, \"stretch\", false));\n let nextMap = constraintMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n let time2 = getValue(nextMap, \"time\", 0);\n let mix2 = getValue(nextMap, \"mix\", 1);\n let softness2 = getValue(nextMap, \"softness\", 0) * scale;\n let curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mix, mix2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, softness, softness2, scale);\n }\n time = time2;\n mix = mix2;\n softness = softness2;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n }\n // Transform constraint timelines.\n if (map.transform) {\n for (let constraintName in map.transform) {\n let timelineMap = map.transform[constraintName];\n let keyMap = timelineMap[0];\n if (!keyMap)\n continue;\n let constraint = skeletonData.findTransformConstraint(constraintName);\n if (!constraint)\n throw new Error(\"Transform constraint not found: \" + constraintName);\n let constraintIndex = skeletonData.transformConstraints.indexOf(constraint);\n let timeline = new TransformConstraintTimeline(timelineMap.length, timelineMap.length * 6, constraintIndex);\n let time = getValue(keyMap, \"time\", 0);\n let mixRotate = getValue(keyMap, \"mixRotate\", 1);\n let mixX = getValue(keyMap, \"mixX\", 1);\n let mixY = getValue(keyMap, \"mixY\", mixX);\n let mixScaleX = getValue(keyMap, \"mixScaleX\", 1);\n let mixScaleY = getValue(keyMap, \"mixScaleY\", mixScaleX);\n let mixShearY = getValue(keyMap, \"mixShearY\", 1);\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY);\n let nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n let time2 = getValue(nextMap, \"time\", 0);\n let mixRotate2 = getValue(nextMap, \"mixRotate\", 1);\n let mixX2 = getValue(nextMap, \"mixX\", 1);\n let mixY2 = getValue(nextMap, \"mixY\", mixX2);\n let mixScaleX2 = getValue(nextMap, \"mixScaleX\", 1);\n let mixScaleY2 = getValue(nextMap, \"mixScaleY\", mixScaleX2);\n let mixShearY2 = getValue(nextMap, \"mixShearY\", 1);\n let curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1);\n }\n time = time2;\n mixRotate = mixRotate2;\n mixX = mixX2;\n mixY = mixY2;\n mixScaleX = mixScaleX2;\n mixScaleY = mixScaleY2;\n mixScaleX = mixScaleX2;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n }\n // Path constraint timelines.\n if (map.path) {\n for (let constraintName in map.path) {\n let constraintMap = map.path[constraintName];\n let constraint = skeletonData.findPathConstraint(constraintName);\n if (!constraint)\n throw new Error(\"Path constraint not found: \" + constraintName);\n let constraintIndex = skeletonData.pathConstraints.indexOf(constraint);\n for (let timelineName in constraintMap) {\n let timelineMap = constraintMap[timelineName];\n let keyMap = timelineMap[0];\n if (!keyMap)\n continue;\n let frames = timelineMap.length;\n if (timelineName === \"position\") {\n let timeline = new PathConstraintPositionTimeline(frames, frames, constraintIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 0, constraint.positionMode == PositionMode.Fixed ? scale : 1));\n }\n else if (timelineName === \"spacing\") {\n let timeline = new PathConstraintSpacingTimeline(frames, frames, constraintIndex);\n timelines.push(readTimeline1(timelineMap, timeline, 0, constraint.spacingMode == SpacingMode.Length || constraint.spacingMode == SpacingMode.Fixed ? scale : 1));\n }\n else if (timelineName === \"mix\") {\n let timeline = new PathConstraintMixTimeline(frames, frames * 3, constraintIndex);\n let time = getValue(keyMap, \"time\", 0);\n let mixRotate = getValue(keyMap, \"mixRotate\", 1);\n let mixX = getValue(keyMap, \"mixX\", 1);\n let mixY = getValue(keyMap, \"mixY\", mixX);\n for (let frame = 0, bezier = 0;; frame++) {\n timeline.setFrame(frame, time, mixRotate, mixX, mixY);\n let nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n let time2 = getValue(nextMap, \"time\", 0);\n let mixRotate2 = getValue(nextMap, \"mixRotate\", 1);\n let mixX2 = getValue(nextMap, \"mixX\", 1);\n let mixY2 = getValue(nextMap, \"mixY\", mixX2);\n let curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1);\n bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1);\n }\n time = time2;\n mixRotate = mixRotate2;\n mixX = mixX2;\n mixY = mixY2;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n }\n }\n }\n // Physics constraint timelines.\n if (map.physics) {\n for (let constraintName in map.physics) {\n let constraintMap = map.physics[constraintName];\n let constraintIndex = -1;\n if (constraintName.length > 0) {\n let constraint = skeletonData.findPhysicsConstraint(constraintName);\n if (!constraint)\n throw new Error(\"Physics constraint not found: \" + constraintName);\n constraintIndex = skeletonData.physicsConstraints.indexOf(constraint);\n }\n for (let timelineName in constraintMap) {\n let timelineMap = constraintMap[timelineName];\n let keyMap = timelineMap[0];\n if (!keyMap)\n continue;\n let frames = timelineMap.length;\n if (timelineName == \"reset\") {\n const timeline = new PhysicsConstraintResetTimeline(frames, constraintIndex);\n for (let frame = 0; keyMap != null; keyMap = timelineMap[frame + 1], frame++)\n timeline.setFrame(frame, getValue(keyMap, \"time\", 0));\n timelines.push(timeline);\n continue;\n }\n let timeline;\n if (timelineName == \"inertia\")\n timeline = new PhysicsConstraintInertiaTimeline(frames, frames, constraintIndex);\n else if (timelineName == \"strength\")\n timeline = new PhysicsConstraintStrengthTimeline(frames, frames, constraintIndex);\n else if (timelineName == \"damping\")\n timeline = new PhysicsConstraintDampingTimeline(frames, frames, constraintIndex);\n else if (timelineName == \"mass\")\n timeline = new PhysicsConstraintMassTimeline(frames, frames, constraintIndex);\n else if (timelineName == \"wind\")\n timeline = new PhysicsConstraintWindTimeline(frames, frames, constraintIndex);\n else if (timelineName == \"gravity\")\n timeline = new PhysicsConstraintGravityTimeline(frames, frames, constraintIndex);\n else if (timelineName == \"mix\") //\n timeline = new PhysicsConstraintMixTimeline(frames, frames, constraintIndex);\n else\n continue;\n timelines.push(readTimeline1(timelineMap, timeline, 0, 1));\n }\n }\n }\n // Attachment timelines.\n if (map.attachments) {\n for (let attachmentsName in map.attachments) {\n let attachmentsMap = map.attachments[attachmentsName];\n let skin = skeletonData.findSkin(attachmentsName);\n if (!skin)\n throw new Error(\"Skin not found: \" + attachmentsName);\n for (let slotMapName in attachmentsMap) {\n let slotMap = attachmentsMap[slotMapName];\n let slot = skeletonData.findSlot(slotMapName);\n if (!slot)\n throw new Error(\"Slot not found: \" + slotMapName);\n let slotIndex = slot.index;\n for (let attachmentMapName in slotMap) {\n let attachmentMap = slotMap[attachmentMapName];\n let attachment = skin.getAttachment(slotIndex, attachmentMapName);\n for (let timelineMapName in attachmentMap) {\n let timelineMap = attachmentMap[timelineMapName];\n let keyMap = timelineMap[0];\n if (!keyMap)\n continue;\n if (timelineMapName == \"deform\") {\n let weighted = attachment.bones;\n let vertices = attachment.vertices;\n let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length;\n let timeline = new DeformTimeline(timelineMap.length, timelineMap.length, slotIndex, attachment);\n let time = getValue(keyMap, \"time\", 0);\n for (let frame = 0, bezier = 0;; frame++) {\n let deform;\n let verticesValue = getValue(keyMap, \"vertices\", null);\n if (!verticesValue)\n deform = weighted ? Utils.newFloatArray(deformLength) : vertices;\n else {\n deform = Utils.newFloatArray(deformLength);\n let start = getValue(keyMap, \"offset\", 0);\n Utils.arrayCopy(verticesValue, 0, deform, start, verticesValue.length);\n if (scale != 1) {\n for (let i = start, n = i + verticesValue.length; i < n; i++)\n deform[i] *= scale;\n }\n if (!weighted) {\n for (let i = 0; i < deformLength; i++)\n deform[i] += vertices[i];\n }\n }\n timeline.setFrame(frame, time, deform);\n let nextMap = timelineMap[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n break;\n }\n let time2 = getValue(nextMap, \"time\", 0);\n let curve = keyMap.curve;\n if (curve)\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1);\n time = time2;\n keyMap = nextMap;\n }\n timelines.push(timeline);\n }\n else if (timelineMapName == \"sequence\") {\n let timeline = new SequenceTimeline(timelineMap.length, slotIndex, attachment);\n let lastDelay = 0;\n for (let frame = 0; frame < timelineMap.length; frame++) {\n let delay = getValue(keyMap, \"delay\", lastDelay);\n let time = getValue(keyMap, \"time\", 0);\n let mode = SequenceMode[getValue(keyMap, \"mode\", \"hold\")];\n let index = getValue(keyMap, \"index\", 0);\n timeline.setFrame(frame, time, mode, index, delay);\n lastDelay = delay;\n keyMap = timelineMap[frame + 1];\n }\n timelines.push(timeline);\n }\n }\n }\n }\n }\n }\n // Draw order timelines.\n if (map.drawOrder) {\n let timeline = new DrawOrderTimeline(map.drawOrder.length);\n let slotCount = skeletonData.slots.length;\n let frame = 0;\n for (let i = 0; i < map.drawOrder.length; i++, frame++) {\n let drawOrderMap = map.drawOrder[i];\n let drawOrder = null;\n let offsets = getValue(drawOrderMap, \"offsets\", null);\n if (offsets) {\n drawOrder = Utils.newArray(slotCount, -1);\n let unchanged = Utils.newArray(slotCount - offsets.length, 0);\n let originalIndex = 0, unchangedIndex = 0;\n for (let ii = 0; ii < offsets.length; ii++) {\n let offsetMap = offsets[ii];\n let slot = skeletonData.findSlot(offsetMap.slot);\n if (!slot)\n throw new Error(\"Slot not found: \" + slot);\n let slotIndex = slot.index;\n // Collect unchanged items.\n while (originalIndex != slotIndex)\n unchanged[unchangedIndex++] = originalIndex++;\n // Set changed items.\n drawOrder[originalIndex + offsetMap.offset] = originalIndex++;\n }\n // Collect remaining unchanged items.\n while (originalIndex < slotCount)\n unchanged[unchangedIndex++] = originalIndex++;\n // Fill in unchanged items.\n for (let ii = slotCount - 1; ii >= 0; ii--)\n if (drawOrder[ii] == -1)\n drawOrder[ii] = unchanged[--unchangedIndex];\n }\n timeline.setFrame(frame, getValue(drawOrderMap, \"time\", 0), drawOrder);\n }\n timelines.push(timeline);\n }\n // Event timelines.\n if (map.events) {\n let timeline = new EventTimeline(map.events.length);\n let frame = 0;\n for (let i = 0; i < map.events.length; i++, frame++) {\n let eventMap = map.events[i];\n let eventData = skeletonData.findEvent(eventMap.name);\n if (!eventData)\n throw new Error(\"Event not found: \" + eventMap.name);\n let event = new Event(Utils.toSinglePrecision(getValue(eventMap, \"time\", 0)), eventData);\n event.intValue = getValue(eventMap, \"int\", eventData.intValue);\n event.floatValue = getValue(eventMap, \"float\", eventData.floatValue);\n event.stringValue = getValue(eventMap, \"string\", eventData.stringValue);\n if (event.data.audioPath) {\n event.volume = getValue(eventMap, \"volume\", 1);\n event.balance = getValue(eventMap, \"balance\", 0);\n }\n timeline.setFrame(frame, event);\n }\n timelines.push(timeline);\n }\n let duration = 0;\n for (let i = 0, n = timelines.length; i < n; i++)\n duration = Math.max(duration, timelines[i].getDuration());\n skeletonData.animations.push(new Animation(name, timelines, duration));\n }\n}\nclass LinkedMesh {\n parent;\n skin;\n slotIndex;\n mesh;\n inheritTimeline;\n constructor(mesh, skin, slotIndex, parent, inheritDeform) {\n this.mesh = mesh;\n this.skin = skin;\n this.slotIndex = slotIndex;\n this.parent = parent;\n this.inheritTimeline = inheritDeform;\n }\n}\nfunction readTimeline1(keys, timeline, defaultValue, scale) {\n let keyMap = keys[0];\n let time = getValue(keyMap, \"time\", 0);\n let value = getValue(keyMap, \"value\", defaultValue) * scale;\n let bezier = 0;\n for (let frame = 0;; frame++) {\n timeline.setFrame(frame, time, value);\n let nextMap = keys[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n return timeline;\n }\n let time2 = getValue(nextMap, \"time\", 0);\n let value2 = getValue(nextMap, \"value\", defaultValue) * scale;\n if (keyMap.curve)\n bezier = readCurve(keyMap.curve, timeline, bezier, frame, 0, time, time2, value, value2, scale);\n time = time2;\n value = value2;\n keyMap = nextMap;\n }\n}\nfunction readTimeline2(keys, timeline, name1, name2, defaultValue, scale) {\n let keyMap = keys[0];\n let time = getValue(keyMap, \"time\", 0);\n let value1 = getValue(keyMap, name1, defaultValue) * scale;\n let value2 = getValue(keyMap, name2, defaultValue) * scale;\n let bezier = 0;\n for (let frame = 0;; frame++) {\n timeline.setFrame(frame, time, value1, value2);\n let nextMap = keys[frame + 1];\n if (!nextMap) {\n timeline.shrink(bezier);\n return timeline;\n }\n let time2 = getValue(nextMap, \"time\", 0);\n let nvalue1 = getValue(nextMap, name1, defaultValue) * scale;\n let nvalue2 = getValue(nextMap, name2, defaultValue) * scale;\n let curve = keyMap.curve;\n if (curve) {\n bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale);\n bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale);\n }\n time = time2;\n value1 = nvalue1;\n value2 = nvalue2;\n keyMap = nextMap;\n }\n}\nfunction readCurve(curve, timeline, bezier, frame, value, time1, time2, value1, value2, scale) {\n if (curve == \"stepped\") {\n timeline.setStepped(frame);\n return bezier;\n }\n let i = value << 2;\n let cx1 = curve[i];\n let cy1 = curve[i + 1] * scale;\n let cx2 = curve[i + 2];\n let cy2 = curve[i + 3] * scale;\n timeline.setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2);\n return bezier + 1;\n}\nfunction getValue(map, property, defaultValue) {\n return map[property] !== undefined ? map[property] : defaultValue;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25Kc29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NrZWxldG9uSnNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLFNBQVMsRUFBWSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsMkJBQTJCLEVBQUUsOEJBQThCLEVBQUUsNkJBQTZCLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBaUQsOEJBQThCLEVBQUUsZ0NBQWdDLEVBQUUsaUNBQWlDLEVBQUUsZ0NBQWdDLEVBQUUsNkJBQTZCLEVBQUUsNkJBQTZCLEVBQUUsZ0NBQWdDLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk3ekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENB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VyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUU7NEJBQzNFLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3pCLFNBQVM7cUJBQ1Q7b0JBRUQsSUFBSSxRQUFRLENBQUM7b0JBQ2IsSUFBSSxZQUFZLElBQUksU0FBUzt3QkFDNUIsUUFBUSxHQUFHLElBQUksZ0NBQWdDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQzt5QkFDN0UsSUFBSSxZQUFZLElBQUksVUFBVTt3QkFDbEMsUUFBUSxHQUFHLElBQUksaUNBQWlDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQzt5QkFDOUUsSUFBSSxZQUFZLElBQUksU0FBUzt3QkFDakMsUUFBUSxHQUFHLElBQUksZ0NBQWdDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQzt5QkFDN0UsSUFBSSxZQUFZLElBQUksTUFBTTt3QkFDOUIsUUFBUSxHQUFHLElBQUksNkJBQTZCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQzt5QkFDMUUsSUFBSSxZQUFZLElBQUksTUFBTTt3QkFDOUIsUUFBUSxHQUFHLElBQUksNkJBQTZCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQzt5QkFDMUUsSUFBSSxZQUFZLElBQUksU0FBUzt3QkFDakMsUUFBUSxHQUFHLElBQUksZ0NBQWdDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQzt5QkFDN0UsSUFBSSxZQUFZLElBQUksS0FBSyxFQUFFLEVBQUU7d0JBQ2pDLFFBQVEsR0FBRyxJQUFJLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7O3dCQUU3RSxTQUFTO29CQUNWLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzNEO2FBQ0Q7U0FDRDtRQUVELHdCQUF3QjtRQUN4QixJQUFJLEdBQUcsQ0FBQyxXQUFXLEVBQUU7WUFDcEIsS0FBSyxJQUFJLGVBQWUsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFO2dCQUM1QyxJQUFJLGNBQWMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLElBQUksR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsSUFBSTtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyxDQUFDO2dCQUNqRSxLQUFLLElBQUksV0FBVyxJQUFJLGNBQWMsRUFBRTtvQkFDdkMsSUFBSSxPQUFPLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUMxQyxJQUFJLElBQUksR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUM5QyxJQUFJLENBQUMsSUFBSTt3QkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxDQUFDO29CQUM3RCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUMzQixLQUFLLElBQUksaUJBQWlCLElBQUksT0FBTyxFQUFFO3dCQUN0QyxJQUFJLGFBQWEsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQzt3QkFDL0MsSUFBSSxVQUFVLEdBQXFCLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUM7d0JBRXBGLEtBQUssSUFBSSxlQUFlLElBQUksYUFBYSxFQUFFOzRCQUMxQyxJQUFJLFdBQVcsR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7NEJBQ2pELElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDNUIsSUFBSSxDQUFDLE1BQU07Z0NBQUUsU0FBUzs0QkFFdEIsSUFBSSxlQUFlLElBQUksUUFBUSxFQUFFO2dDQUNoQyxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDO2dDQUNoQyxJQUFJLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO2dDQUNuQyxJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQ0FFeEUsSUFBSSxRQUFRLEdBQUcsSUFBSSxjQUFjLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztnQ0FDakcsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBQ3ZDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEdBQUksS0FBSyxFQUFFLEVBQUU7b0NBQzFDLElBQUksTUFBdUIsQ0FBQztvQ0FDNUIsSUFBSSxhQUFhLEdBQWtCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO29DQUN0RSxJQUFJLENBQUMsYUFBYTt3Q0FDakIsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO3lDQUM3RDt3Q0FDSixNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQzt3Q0FDM0MsSUFBSSxLQUFLLEdBQVcsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0NBQ2xELEtBQUssQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3Q0FDdkUsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFOzRDQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtnREFDM0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQzt5Q0FDcEI7d0NBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRTs0Q0FDZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRTtnREFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5Q0FDMUI7cUNBQ0Q7b0NBRUQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29DQUN2QyxJQUFJLE9BQU8sR0FBRyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO29DQUNyQyxJQUFJLENBQUMsT0FBTyxFQUFFO3dDQUNiLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0NBQ3hCLE1BQU07cUNBQ047b0NBQ0QsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0NBQ3pDLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7b0NBQ3pCLElBQUksS0FBSzt3Q0FBRSxNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29DQUN2RixJQUFJLEdBQUcsS0FBSyxDQUFDO29DQUNiLE1BQU0sR0FBRyxPQUFPLENBQUM7aUNBQ2pCO2dDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7NkJBQ3pCO2lDQUFNLElBQUksZUFBZSxJQUFJLFVBQVUsRUFBRTtnQ0FDekMsSUFBSSxRQUFRLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUF5QyxDQUFDLENBQUM7Z0NBQzlHLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztnQ0FDbEIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0NBQ3hELElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO29DQUNqRCxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztvQ0FDdkMsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFzQixDQUFDO29DQUMvRSxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztvQ0FDekMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7b0NBQ25ELFNBQVMsR0FBRyxLQUFLLENBQUM7b0NBQ2xCLE1BQU0sR0FBRyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lDQUNoQztnQ0FDRCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzZCQUN6Qjt5QkFDRDtxQkFDRDtpQkFDRDthQUNEO1NBQ0Q7UUFFRCx3QkFBd0I7UUFDeEIsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksUUFBUSxHQUFHLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzRCxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUMxQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksWUFBWSxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksU0FBUyxHQUF5QixJQUFJLENBQUM7Z0JBQzNDLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLE9BQU8sRUFBRTtvQkFDWixTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBUyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBUyxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDdEUsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFLGNBQWMsR0FBRyxDQUFDLENBQUM7b0JBQzFDLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFO3dCQUMzQyxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQzVCLElBQUksSUFBSSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNqRCxJQUFJLENBQUMsSUFBSTs0QkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFDO3dCQUN0RCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUMzQiwyQkFBMkI7d0JBQzNCLE9BQU8sYUFBYSxJQUFJLFNBQVM7NEJBQ2hDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDO3dCQUMvQyxxQkFBcUI7d0JBQ3JCLFNBQVMsQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDO3FCQUM5RDtvQkFDRCxxQ0FBcUM7b0JBQ3JDLE9BQU8sYUFBYSxHQUFHLFNBQVM7d0JBQy9CLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDO29CQUMvQywyQkFBMkI7b0JBQzNCLEtBQUssSUFBSSxFQUFFLEdBQUcsU0FBUyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRTt3QkFDekMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztpQkFDdEU7Z0JBQ0QsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDdkU7WUFDRCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3pCO1FBRUQsbUJBQW1CO1FBQ25CLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUNmLElBQUksUUFBUSxHQUFHLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNwRCxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxDQUFDLFNBQVM7b0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3JFLElBQUksS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN6RixLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDL0QsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3JFLEtBQUssQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUN6QixLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUMvQyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNqRDtnQkFDRCxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUNoQztZQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDekI7UUFFRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDL0MsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzNELFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0NBQ0Q7QUFFRCxNQUFNLFVBQVU7SUFDZixNQUFNLENBQVM7SUFBQyxJQUFJLENBQVM7SUFDN0IsU0FBUyxDQUFTO0lBQ2xCLElBQUksQ0FBaUI7SUFDckIsZUFBZSxDQUFVO0lBRXpCLFlBQWEsSUFBb0IsRUFBRSxJQUFZLEVBQUUsU0FBaUIsRUFBRSxNQUFjLEVBQUUsYUFBc0I7UUFDekcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxhQUFhLENBQUM7SUFDdEMsQ0FBQztDQUNEO0FBRUQsU0FBUyxhQUFhLENBQUUsSUFBVyxFQUFFLFFBQXdCLEVBQUUsWUFBb0IsRUFBRSxLQUFhO0lBQ2pHLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQixJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDNUQsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2YsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUksS0FBSyxFQUFFLEVBQUU7UUFDOUIsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNiLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsT0FBTyxRQUFRLENBQUM7U0FDaEI7UUFDRCxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6QyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUQsSUFBSSxNQUFNLENBQUMsS0FBSztZQUFFLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xILElBQUksR0FBRyxLQUFLLENBQUM7UUFDYixLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ2YsTUFBTSxHQUFHLE9BQU8sQ0FBQztLQUNqQjtBQUNGLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBRSxJQUFXLEVBQUUsUUFBd0IsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLFlBQW9CLEVBQUUsS0FBYTtJQUMvSCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzNELElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMzRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsR0FBSSxLQUFLLEVBQUUsRUFBRTtRQUM5QixRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNiLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsT0FBTyxRQUFRLENBQUM7U0FDaEI7UUFDRCxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6QyxJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDN0QsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzdELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDekIsSUFBSSxLQUFLLEVBQUU7WUFDVixNQUFNLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNGLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0Y7UUFDRCxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2IsTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUNqQixNQUFNLEdBQUcsT0FBTyxDQUFDO1FBQ2pCLE1BQU0sR0FBRyxPQUFPLENBQUM7S0FDakI7QUFDRixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUUsS0FBVSxFQUFFLFFBQXVCLEVBQUUsTUFBYyxFQUFFLEtBQWEsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLEtBQWEsRUFDbEksTUFBYyxFQUFFLE1BQWMsRUFBRSxLQUFhO0lBQzdDLElBQUksS0FBSyxJQUFJLFNBQVMsRUFBRTtRQUN2QixRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7SUFDRCxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ25CLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMvQixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQy9CLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNGLE9BQU8sTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUUsR0FBUSxFQUFFLFFBQWdCLEVBQUUsWUFBaUI7SUFDL0QsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztBQUNuRSxDQUFDIn0=","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\n(() => {\n if (typeof Math.fround === \"undefined\") {\n Math.fround = (function (array) {\n return function (x) {\n return array[0] = x, array[0];\n };\n })(new Float32Array(1));\n }\n})();\nexport {};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWZpbGxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BvbHlmaWxscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsQ0FBQyxHQUFHLEVBQUU7SUFDTCxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLFVBQVUsS0FBSztZQUM3QixPQUFPLFVBQVUsQ0FBUztnQkFDekIsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ3hCO0FBQ0YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyJ9","import { \n AssetPromise, \n Engine, \n request, \n Texture2D, \n AssetType,\n TextureFilterMode,\n TextureWrapMode,\n} from \"@galacean/engine\";\nimport { \n TextureAtlas, \n AtlasAttachmentLoader,\n SkeletonJson,\n SkeletonBinary,\n SkeletonData,\n Texture,\n TextureFilter,\n TextureWrap,\n} from \"@esotericsoftware/spine-core\";\nimport { SpineAssetBundle } from \"./SpineLoader\";\n\nexport async function loadAndCreateSpineSkeletonData(\n bundle: SpineAssetBundle,\n engine: Engine,\n): Promise<SkeletonData> {\n const { skeletonPath, atlasPath, imagePaths, skeletonExtension, imageExtensions } = bundle;\n const skeletonLoadFunc = skeletonExtension === 'json' ? loadText : loadBinary;\n let skeletonTextData: string | ArrayBuffer;\n let textureAtlas: TextureAtlas;\n if (imagePaths.length > 0) {\n let atlasText: string;\n let textures: Texture2D[];\n const loadQueue: AssetPromise<any>[] = [\n skeletonLoadFunc(skeletonPath),\n loadText(atlasPath),\n ];\n const texturePromises: AssetPromise<any>[] = imagePaths.map((imagePath, index) => {\n const ext = imageExtensions[index];\n let imageLoaderType = AssetType.Texture2D;\n if (ext === 'ktx') imageLoaderType = AssetType.KTX;\n if (ext === 'ktx2') imageLoaderType = AssetType.KTX2;\n return loadTexture(imagePath, engine, imageLoaderType);\n });\n loadQueue.push(AssetPromise.all(texturePromises));\n try {\n [skeletonTextData, atlasText, textures] = await Promise.all(loadQueue);\n textureAtlas = new TextureAtlas(atlasText);\n let i = 0;\n for (let page of textureAtlas.pages) {\n if (textures[i]) {\n const texture = createAdaptiveTexture(textures[i]);\n page.setTexture(texture);\n i++;\n }\n }\n } catch (error) {\n throw error;\n }\n } else {\n try {\n [skeletonTextData, textureAtlas] = await Promise.all([\n skeletonLoadFunc(skeletonPath),\n loadTextureAtlas(atlasPath, engine),\n ]);\n } catch(error) {\n throw error;\n }\n }\n const atlasLoader = new AtlasAttachmentLoader(textureAtlas);\n if (skeletonExtension === 'json') {\n return new SkeletonJson(atlasLoader).readSkeletonData(skeletonTextData);\n } else {\n return new SkeletonBinary(atlasLoader).readSkeletonData(new Uint8Array(skeletonTextData as ArrayBuffer));\n }\n}\n\nfunction loadText(url: string): AssetPromise<string> {\n return request(url, { type: \"text\" });\n}\n\nfunction loadBinary(url: string): AssetPromise<ArrayBuffer> {\n return request(url, { type: \"arraybuffer\" });\n}\n\nfunction loadTexture(\n url: string, \n engine: Engine,\n imageLoaderType: string = AssetType.Texture2D\n): AssetPromise<Texture2D> {\n return engine.resourceManager.load<Texture2D>({ url, type: imageLoaderType });\n}\n\nasync function loadTextureAtlas(\n url: string, \n engine: Engine,\n): Promise<TextureAtlas> {\n const baseUrl = getBaseUrl(url);\n let atlasData: string;\n let textures: Texture2D[];\n const textureMap: { [key: string]: Texture2D } = {};\n try {\n atlasData = await loadText(url);\n } catch (err) {\n throw new Error(`Spine Atlas: ${url} load error: ${err}`); \n }\n const textureAtlas = new TextureAtlas(atlasData);\n const loadTexturePromises = [];\n for (let page of textureAtlas.pages) {\n const textureUrl = baseUrl + page.name;\n loadTexturePromises.push(loadTexture(textureUrl, engine));\n }\n try {\n textures = await Promise.all(loadTexturePromises);\n } catch (err) {\n throw new Error(`Spine Texture: ${url} load error: ${err}`);\n }\n for (let i = 0; i < textures.length; i += 1) {\n const texture = textures[i];\n const textureUrl = baseUrl + texture.name;\n textureMap[textureUrl] = texture;\n }\n for (let page of textureAtlas.pages) {\n const textureUrl = baseUrl + page.name;\n const texture = createAdaptiveTexture(textureMap[textureUrl]);\n page.setTexture(texture);\n }\n return textureAtlas;\n}\n\nexport function generateTextureAtlas(atlasText: string, textureMap: Record<string, Texture2D>) {\n const textureAtlas = new TextureAtlas(atlasText);\n for (let page of textureAtlas.pages) {\n const texture = createAdaptiveTexture(textureMap[page.name]);\n page.setTexture(texture);\n }\n return textureAtlas;\n}\n\nfunction createAdaptiveTexture(texture: Texture2D) {\n return new AdaptiveTexture(new Image(), texture);\n}\n\nexport function getBaseUrl(url: string): string {\n const parsedUrl = new URL(url);\n const basePath = parsedUrl.origin + parsedUrl.pathname;\n return basePath.endsWith('/') ? basePath : basePath.substring(0, basePath.lastIndexOf('/') + 1);\n}\n\nexport class AdaptiveTexture extends Texture {\n texture: Texture2D;\n constructor(image: HTMLImageElement | ImageBitmap, texture: Texture2D) {\n super(image);\n this.texture = texture;\n this.texture.generateMipmaps();\n }\n\n // rewrite getImage function, return galacean texture2D, then attachment can get size of texture\n getImage(): any {\n return this.texture;\n }\n\n setFilters(minFilter: TextureFilter, magFilter: TextureFilter) {\n if (minFilter === TextureFilter.Nearest) {\n this.texture.filterMode = TextureFilterMode.Point;\n } else if (magFilter === TextureFilter.MipMapLinearLinear) {\n this.texture.filterMode = TextureFilterMode.Trilinear;\n } else {\n this.texture.filterMode = TextureFilterMode.Bilinear;\n }\n }\n\n setWraps(uWrap: TextureWrap, vWrap: TextureWrap) {\n this.texture.wrapModeU = this._convertWrapMode(uWrap);\n this.texture.wrapModeV = this._convertWrapMode(vWrap);\n }\n\n dispose() {}\n\n private _convertWrapMode(wrap: TextureWrap): TextureWrapMode {\n switch (wrap) {\n case TextureWrap.ClampToEdge:\n return TextureWrapMode.Clamp;\n case TextureWrap.Repeat:\n return TextureWrapMode.Repeat;\n case TextureWrap.MirroredRepeat:\n return TextureWrapMode.Mirror;\n default:\n throw new Error(\"Unsupported texture wrap mode.\");\n }\n }\n}\n\nexport function getUrlExtension(url: string, fileExtension: string): string | null {\n if (fileExtension) {\n return fileExtension;\n }\n const regex = /\\/([^\\/?#]+)\\.([a-zA-Z0-9]+)(\\?|#|$)|\\?[^#]*\\.([a-zA-Z0-9]+)(\\?|#|$)/;\n const match = url.match(regex);\n if (match) {\n return match[2] || match[4];\n }\n return null;\n}\n","import {\n AssetPromise,\n Loader,\n LoadItem,\n resourceLoader,\n ResourceManager,\n} from \"@galacean/engine\";\nimport { SkeletonData } from \"@esotericsoftware/spine-core\";\nimport { getUrlExtension, loadAndCreateSpineSkeletonData } from \"./LoaderUtils\";\n\nexport type SpineAssetBundle = {\n skeletonPath: string;\n skeletonExtension: string;\n atlasPath: string;\n imagePaths: string[];\n imageExtensions: string[];\n}\n\ntype SpineLoaderParams = {\n fileExtensions?: string | string[];\n}\n\ntype SpineLoadItem = LoadItem & { params?: SpineLoaderParams };\n\n@resourceLoader(\"spine\", [\"json\", \"bin\", \"skel\"])\nclass SpineLoader extends Loader<SkeletonData> {\n static imageExtensions = [\"png\", \"jpg\", \"webp\", \"jpeg\", \"ktx\", \"ktx2\"];\n static skeletonExtensions = [\"skel\", \"json\", \"bin\"];\n load(\n item: SpineLoadItem,\n resourceManager: ResourceManager\n ): AssetPromise<SkeletonData> {\n return new AssetPromise((resolve, reject) => {\n\n let spineAssetBundle: SpineAssetBundle = {\n skeletonPath: '',\n skeletonExtension: '',\n atlasPath: '',\n imagePaths: [],\n imageExtensions: [],\n };\n let { fileExtensions } = item.params || {};\n if (item.urls) {\n // multiple resource \n fileExtensions = verifyFileExtensions(fileExtensions, true);\n for (let i = 0; i < item.urls.length; i += 1) {\n const url = item.urls[i];\n const extension = fileExtensions && fileExtensions[i] || null;\n parseAndAssignSpineAsset(url, extension, spineAssetBundle);\n }\n } else {\n // single resource\n const fileExtension = verifyFileExtensions(fileExtensions, false);\n deriveAndAssignSpineAsset(item.url, fileExtension as string, spineAssetBundle);\n }\n const { skeletonPath, atlasPath } = spineAssetBundle;\n if (!skeletonPath || !atlasPath) {\n reject('Failed to load spine assets. Please check the file path and ensure the file extension is included.');\n return;\n }\n loadAndCreateSpineSkeletonData(spineAssetBundle, resourceManager.engine)\n .then((skeletonData) => {\n resolve(skeletonData);\n })\n .catch((err) => {\n reject(err);\n })\n });\n }\n}\n\nfunction parseAndAssignSpineAsset(url: string, fileExtension: string | null, bundle: SpineAssetBundle) {\n const imageExtension = SpineLoader.imageExtensions;\n const skeletonExtension = SpineLoader.skeletonExtensions;\n const ext = getUrlExtension(url, fileExtension);\n if (!ext) return;\n\n if (skeletonExtension.includes(ext)) {\n bundle.skeletonPath = url;\n bundle.skeletonExtension = ext;\n }\n if (ext === 'atlas') {\n bundle.atlasPath = url;\n }\n if (imageExtension.includes(ext)) {\n bundle.imagePaths.push(url);\n bundle.imageExtensions.push(ext);\n }\n}\n\nfunction deriveAndAssignSpineAsset(url: string, fileExtension: string | null, bundle: SpineAssetBundle) {\n const ext = getUrlExtension(url, fileExtension);\n if (!ext) return;\n bundle.skeletonPath = url;\n bundle.skeletonExtension = ext;\n const extensionPattern: RegExp = /(\\.(json|bin|skel))$/;\n let baseUrl;\n if (extensionPattern.test(url)) {\n baseUrl = url.replace(extensionPattern, '');\n }\n if (baseUrl) {\n const atlasUrl = baseUrl + '.atlas';\n bundle.atlasPath = atlasUrl;\n }\n}\n\nfunction verifyFileExtensions(fileExtensions: string | string[], expectArray: boolean): string | string[] | null {\n if (!fileExtensions) return null;\n if (expectArray && !Array.isArray(fileExtensions)) {\n console.error('Expect fileExtensions to be an array.');\n return [];\n } else if (!expectArray && typeof fileExtensions !== 'string') {\n console.error('Expect fileExtensions to be a string.');\n return null;\n }\n return fileExtensions;\n}\n\nexport { SpineLoader };\n","export class BufferReader {\n private _dataView: DataView;\n private _position: number;\n constructor(\n public data: Uint8Array,\n byteOffset: number = 0,\n byteLength?: number,\n ) {\n this._dataView = new DataView(\n data.buffer,\n data.byteOffset + byteOffset,\n byteLength ?? data.byteLength - byteOffset\n );\n this._position = 0;\n }\n\n nextUint16() {\n const value = this._dataView.getUint16(this._position, true);\n this._position += 2;\n return value;\n }\n\n nextStr(): string {\n const strByteLength = this.nextUint16();\n const uint8Array = new Uint8Array(this.data.buffer, this._position + this._dataView.byteOffset, strByteLength);\n this._position += strByteLength;\n return decodeText(uint8Array);\n }\n\n nextImageData(): Uint8Array {\n return new Uint8Array(this.data.buffer, this.data.byteOffset + this._position);\n }\n}\n\nfunction decodeText(array: Uint8Array): string {\n if (typeof TextDecoder !== \"undefined\") {\n return new TextDecoder().decode(array);\n }\n let s = \"\";\n for (let i = 0, il = array.length; i < il; i++) {\n s += String.fromCharCode(array[i]);\n }\n return decodeURIComponent(encodeURIComponent(s));\n}\n","import {\n AssetPromise,\n ColorSpace,\n Loader,\n LoadItem,\n resourceLoader,\n ResourceManager,\n} from \"@galacean/engine\";\nimport { \n SkeletonData,\n SkeletonJson,\n SkeletonBinary,\n AtlasAttachmentLoader,\n} from \"@esotericsoftware/spine-core\";\nimport { BufferReader } from \"./BufferReader\";\n\nconsole.log('regist EditorSkeletonData loader');\n\n@resourceLoader(\"EditorSkeletonData\", [\"json\", \"skel\"])\nclass EditorSkeletonDataLoader extends Loader<SkeletonData> {\n load(\n item: LoadItem,\n resourceManager: ResourceManager\n ): AssetPromise<SkeletonData> {\n return new AssetPromise(async (resolve) => {\n let skeletonRawData: ArrayBuffer | string;\n let atlasRefId: string;\n const buffer: any = await this.request(item.url, { type: 'arraybuffer' });\n const reader = new BufferReader(new Uint8Array(buffer));\n const text = reader.nextStr();\n if (text.startsWith('data')) { // json\n const decoder = new TextDecoder('utf-8');\n const text = decoder.decode(new Uint8Array(buffer));\n const { data, atlas } = JSON.parse(text);\n atlasRefId = atlas.refId;\n skeletonRawData = data;\n } else {\n atlasRefId = text;\n skeletonRawData = reader.nextImageData();\n }\n // @ts-ignore\n const textureAtlas = await resourceManager.getResourceByRef({ refId: atlasRefId });\n const atlasLoader = new AtlasAttachmentLoader(textureAtlas);\n let skeletonData: SkeletonData;\n if (typeof skeletonRawData === 'string') {\n skeletonData = new SkeletonJson(atlasLoader).readSkeletonData(skeletonRawData);\n } else {\n skeletonData = new SkeletonBinary(atlasLoader).readSkeletonData(new Uint8Array(skeletonRawData));\n }\n resolve(skeletonData);\n });\n }\n}\n\nexport { EditorSkeletonDataLoader };\n","import {\n AssetPromise,\n Loader,\n resourceLoader,\n ResourceManager,\n LoadItem,\n} from \"@galacean/engine\";\nimport { TextureAtlas } from \"@esotericsoftware/spine-core\";\nimport { generateTextureAtlas } from \"./LoaderUtils\";\n\nconsole.log('regist EditorSpineAtlas loader');\n\n@resourceLoader(\"EditorSpineAtlas\", [\"atlas\"])\nclass EditorSpineAtlasLoader extends Loader<TextureAtlas> {\n load(\n item: LoadItem,\n resourceManager: ResourceManager\n ): AssetPromise<TextureAtlas> {\n return new AssetPromise(async (resolve) => {\n const text = await this.request<string>(item.url, { type: \"text\" });\n const { data: atlasText, textures: textureRefs } = JSON.parse(text);\n const textureMap = {};\n // @ts-ignore\n const promises = textureRefs.map(refItem => resourceManager.getResourceByRef({ refId: refItem.refId }));\n const textures = await Promise.all(promises);\n textures.forEach((texture) => {\n textureMap[texture.name] = texture;\n });\n const textureAtlas = generateTextureAtlas(atlasText, textureMap);\n resolve(textureAtlas);\n });\n }\n}\n\nexport { EditorSpineAtlasLoader };\n","import {\n BufferMesh,\n Engine,\n Buffer,\n VertexElement,\n VertexElementFormat,\n BufferBindFlag,\n IndexFormat,\n BufferUsage,\n Primitive,\n MeshTopology,\n VertexBufferBinding,\n IndexBufferBinding,\n} from '@galacean/engine';\nimport { SpineGenerator } from './SpineGenerator';\n\nexport class SubPrimitive {\n /** Start drawing offset. */\n start: number;\n /** Drawing count. */\n count: number;\n /** Drawing topology. */\n topology?: MeshTopology = MeshTopology.Triangles;\n}\n\nexport class SpinePrimitive {\n private _primitive: Primitive;\n private _subPrimitive: SubPrimitive[] = [];\n\n private _indexBuffer: Buffer;\n private _vertexBuffer: Buffer;\n\n get primitive() {\n return this._primitive;\n }\n\n get subPrimitive() {\n return this._subPrimitive;\n }\n\n get indexBuffer() {\n return this._indexBuffer;\n }\n\n get vertexBuffer() {\n return this._vertexBuffer;\n }\n\n initialize(engine: Engine, vertexCount: number) {\n const primitive = new Primitive(engine);\n this._primitive = primitive;\n primitive.addVertexElement(new VertexElement('POSITION', 0, VertexElementFormat.Vector3, 0));\n primitive.addVertexElement(new VertexElement('COLOR_0', 12, VertexElementFormat.Vector4, 0));\n primitive.addVertexElement(new VertexElement('TEXCOORD_0', 28, VertexElementFormat.Vector2, 0));\n const vertexStride = (SpineGenerator.VERTEX_STRIDE) * 4; // position + color + uv * Float32 byteLen\n const byteLength = vertexStride * vertexCount;\n const vertexBuffer = new Buffer(\n engine,\n BufferBindFlag.VertexBuffer,\n byteLength,\n BufferUsage.Dynamic\n );\n const indexBuffer = new Buffer(\n engine,\n BufferBindFlag.IndexBuffer,\n vertexCount * 2,\n BufferUsage.Dynamic\n );\n this._indexBuffer = indexBuffer;\n this._vertexBuffer = vertexBuffer;\n const vertexBufferBinding = new VertexBufferBinding(vertexBuffer, vertexStride);\n primitive.setVertexBufferBinding(0, vertexBufferBinding);\n const indexBufferBinding = new IndexBufferBinding(indexBuffer, IndexFormat.UInt16);\n primitive.setIndexBufferBinding(indexBufferBinding);\n const subPrimitive = new SubPrimitive();\n subPrimitive.start = 0;\n subPrimitive.count = vertexCount;\n this.addSubPrimitive(subPrimitive);\n }\n\n addSubPrimitive(subPrimitive: SubPrimitive) {\n this._subPrimitive.push(subPrimitive);\n }\n\n clearSubPrimitive() {\n this._subPrimitive.length = 0;\n }\n\n changeBuffer(engine: Engine, vertexCount: number) {\n const vertexStride = (SpineGenerator.VERTEX_STRIDE) * 4; // position + color + uv * Float32 byteLen\n const byteLength = vertexStride * vertexCount;\n const vertexBuffer = new Buffer(\n engine,\n BufferBindFlag.VertexBuffer,\n byteLength,\n BufferUsage.Dynamic\n );\n\n const indexBuffer = new Buffer(\n engine,\n BufferBindFlag.IndexBuffer,\n vertexCount * 2,\n BufferUsage.Dynamic\n );\n const primitive = this._primitive;\n this._indexBuffer = indexBuffer;\n this._vertexBuffer = vertexBuffer;\n const vertexBufferBinding = new VertexBufferBinding(vertexBuffer, vertexStride);\n primitive.setVertexBufferBinding(0, vertexBufferBinding);\n const indexBufferBinding = new IndexBufferBinding(indexBuffer, IndexFormat.UInt16);\n primitive.setIndexBufferBinding(indexBufferBinding);\n }\n}\n","import {\n BlendFactor,\n BlendOperation,\n Engine,\n Material,\n Texture2D,\n} from \"@galacean/engine\";\nimport {\n Skeleton,\n SkeletonData,\n SkeletonClipping,\n RegionAttachment,\n MeshAttachment,\n ClippingAttachment,\n ArrayLike,\n Color,\n BlendMode,\n} from \"@esotericsoftware/spine-core\";\nimport { SpinePrimitive, SubPrimitive } from \"./SpinePrimitive\";\nimport { SpineRenderSetting } from \"../types\";\nimport { AdaptiveTexture } from \"../loader/LoaderUtils\";\nimport { SpineAnimation } from \"../SpineAnimation\";\n\n\ntype subRenderItems = {\n subPrimitive: SubPrimitive;\n blendMode: BlendMode;\n texture: any;\n slotName?: string;\n};\n\nexport class SpineGenerator {\n static QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];\n static VERTEX_SIZE = 8; // 2 2 4 position without z, uv, color\n static VERTEX_STRIDE = 9; // 3 2 4 position with z, uv, color\n static tempColor: Color = new Color();\n static tempDark: Color = new Color();\n static tempBlendMode: BlendMode | null = null;\n static tempTexture: AdaptiveTexture | null = null;\n\n private _setting: SpineRenderSetting;\n private _engine: Engine;\n private _clipper: SkeletonClipping = new SkeletonClipping();\n private _spinePrimitive: SpinePrimitive = new SpinePrimitive();\n private _renderer: SpineAnimation;\n\n private _vertexCount: number;\n private _vertices: Float32Array;\n private _verticesWithZ: Float32Array;\n private _indices: Uint16Array;\n private _needResize: boolean = false;\n private _subRenderItems: subRenderItems[] = [];\n readonly separateSlots: string[] = [];\n readonly separateSlotTextureMap: Map<string, Texture2D> = new Map();\n\n\n get subRenderItems() {\n return this._subRenderItems;\n }\n\n constructor(engine: Engine, renderer: SpineAnimation) {\n this._engine = engine;\n this._renderer = renderer;\n }\n\n initialize(skeletonData: SkeletonData, setting?: SpineRenderSetting) {\n if (setting) {\n this._setting = setting;\n }\n // Prepare buffer by using all attachment data but clippingAttachment\n const {\n defaultSkin: { attachments },\n } = skeletonData;\n let vertexCount: number = 0;\n const QUAD_TRIANGLE_LENGTH = SpineGenerator.QUAD_TRIANGLES.length;\n for (let i = 0, n = attachments.length; i < n; i++) {\n const slotAttachment = attachments[i];\n for (let key in slotAttachment) {\n const attachment = slotAttachment[key];\n if (!attachment) {\n continue;\n } else if (attachment instanceof RegionAttachment) {\n vertexCount += QUAD_TRIANGLE_LENGTH;\n } else if (attachment instanceof MeshAttachment) {\n let mesh = attachment;\n vertexCount += mesh.triangles.length;\n } else continue;\n }\n }\n this._vertexCount = vertexCount;\n this._prepareBufferData(this._vertexCount);\n const { _spinePrimitive } = this;\n _spinePrimitive.initialize(this._engine, this._vertexCount);\n this._renderer._primitive = _spinePrimitive.primitive;\n }\n\n buildPrimitive(skeleton: Skeleton) {\n const { useClipping = true, zSpacing = 0.01 } = this._setting || {};\n\n let verticesLength = 0;\n let indicesLength = 0;\n\n const drawOrder = skeleton.drawOrder;\n const maxSlotCount = drawOrder.length;\n const { _clipper, _spinePrimitive } = this;\n const subRenderItems = this._subRenderItems;\n subRenderItems.length = 0;\n let vertices: ArrayLike<number> = this._vertices;\n let triangles: Array<number>;\n let uvs: ArrayLike<number>;\n // 记录当前\n let start = 0;\n let count = 0;\n let blend = BlendMode.Normal;\n let texture = null;\n SpineGenerator.tempBlendMode = null;\n SpineGenerator.tempTexture = null;\n for (let slotIndex = 0; slotIndex < maxSlotCount; ++slotIndex) {\n const slot = drawOrder[slotIndex];\n if (!slot.bone.active) {\n _clipper.clipEndWithSlot(slot);\n continue;\n }\n const attachment = slot.getAttachment();\n let attachmentColor: Color = null;\n const z = zSpacing * slotIndex;\n let numFloats = 0;\n const isClipping = _clipper.isClipping();\n let vertexSize = isClipping ? 2 : SpineGenerator.VERTEX_SIZE;\n if (attachment instanceof RegionAttachment) {\n let regionAttachment = <RegionAttachment>attachment;\n attachmentColor = regionAttachment.color;\n numFloats = vertexSize * 4;\n regionAttachment.computeWorldVertices(\n slot,\n vertices,\n 0,\n vertexSize,\n );\n triangles = SpineGenerator.QUAD_TRIANGLES;\n uvs = regionAttachment.uvs;\n texture = regionAttachment.region.texture;\n } else if (attachment instanceof MeshAttachment) {\n let meshAttachment = <MeshAttachment>attachment;\n attachmentColor = meshAttachment.color;\n numFloats = (meshAttachment.worldVerticesLength >> 1) * vertexSize;\n if (numFloats > vertices.length) {\n vertices = this._vertices = new Float32Array(numFloats);\n }\n meshAttachment.computeWorldVertices(\n slot,\n 0,\n meshAttachment.worldVerticesLength,\n vertices,\n 0,\n vertexSize,\n );\n triangles = meshAttachment.triangles;\n uvs = meshAttachment.uvs;\n texture = meshAttachment.region.texture;\n } else if (attachment instanceof ClippingAttachment) {\n if (useClipping) {\n let clip = <ClippingAttachment>attachment;\n _clipper.clipStart(slot, clip);\n continue;\n }\n } else if (useClipping) {\n // attachment might be null or BoundingBoxAttachment\n _clipper.clipEndWithSlot(slot);\n continue;\n }\n\n if (texture != null) {\n let finalVertices: ArrayLike<number>;\n let finalVerticesLength: number;\n let finalIndices: ArrayLike<number>;\n let finalIndicesLength: number;\n\n let skeleton = slot.bone.skeleton;\n let skeletonColor = skeleton.color;\n let slotColor = slot.color;\n let alpha = skeletonColor.a * slotColor.a * attachmentColor.a;\n let color = SpineGenerator.tempColor;\n let dark = SpineGenerator.tempDark;\n color.set(\n skeletonColor.r * slotColor.r * attachmentColor.r,\n skeletonColor.g * slotColor.g * attachmentColor.g,\n skeletonColor.b * slotColor.b * attachmentColor.b,\n alpha\n );\n\n if (isClipping) {\n _clipper.clipTriangles(\n vertices,\n triangles,\n triangles.length,\n uvs,\n color,\n dark,\n false,\n );\n let clippedVertices = _clipper.clippedVertices;\n let clippedTriangles = _clipper.clippedTriangles;\n finalVertices = clippedVertices;\n finalVerticesLength = clippedVertices.length;\n finalIndices = clippedTriangles;\n finalIndicesLength = clippedTriangles.length;\n } else {\n let verts = vertices;\n const { r, g, b, a } = color;\n for (\n let v = 2, u = 0, n = numFloats;\n v < n;\n v += vertexSize, u += 2\n ) {\n verts[v] = r;\n verts[v + 1] = g;\n verts[v + 2] = b;\n verts[v + 3] = a;\n verts[v + 4] = uvs[u];\n verts[v + 5] = uvs[u + 1];\n }\n finalVertices = vertices;\n finalVerticesLength = numFloats;\n finalIndices = triangles;\n finalIndicesLength = triangles.length;\n }\n\n if (finalVerticesLength == 0 || finalIndicesLength == 0) {\n\t\t\t\t\t_clipper.clipEndWithSlot(slot);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n let indexStart = verticesLength / SpineGenerator.VERTEX_STRIDE;\n let verticesWithZ = this._verticesWithZ;\n let i = verticesLength;\n let j = 0;\n for (; j < finalVerticesLength; ) {\n verticesWithZ[i++] = finalVertices[j++];\n verticesWithZ[i++] = finalVertices[j++];\n verticesWithZ[i++] = z;\n verticesWithZ[i++] = finalVertices[j++];\n verticesWithZ[i++] = finalVertices[j++];\n verticesWithZ[i++] = finalVertices[j++];\n verticesWithZ[i++] = finalVertices[j++];\n verticesWithZ[i++] = finalVertices[j++];\n verticesWithZ[i++] = finalVertices[j++];\n }\n verticesLength = i;\n\n let indicesArray = this._indices;\n for (i = indicesLength, j = 0; j < finalIndicesLength; i++, j++) {\n indicesArray[i] = finalIndices[j] + indexStart;\n }\n indicesLength += finalIndicesLength;\n\n const slotData = slot.data;\n const slotName = slotData.name;\n blend = slotData.blendMode;\n const blendModeChanged = SpineGenerator.tempBlendMode !== null &&\n SpineGenerator.tempBlendMode !== slotData.blendMode;\n const textureChanged = SpineGenerator.tempTexture !== null && \n SpineGenerator.tempTexture !== texture;\n const slotNeedSeparate = this.separateSlots.includes(slotName);\n \n if (slotNeedSeparate || blendModeChanged || textureChanged) {\n // Finish accumulated count first\n if (count > 0) {\n const subPrimitive = new SubPrimitive();\n subPrimitive.start = start;\n subPrimitive.count = count;\n subRenderItems.push({\n subPrimitive,\n texture: SpineGenerator.tempTexture,\n blendMode: SpineGenerator.tempBlendMode,\n });\n start += count;\n count = 0;\n }\n if (slotNeedSeparate) {\n // If separatedTexture exist, set texture params\n const separateTexture = this.separateSlotTextureMap.get(slotName);\n if (separateTexture) {\n const oldTexture = texture.texture;\n separateTexture.filterMode = oldTexture.filterMode;\n separateTexture.wrapModeU = oldTexture.wrapModeU;\n separateTexture.wrapModeV = oldTexture.wrapModeV;\n }\n const subPrimitive = new SubPrimitive();\n subPrimitive.start = start;\n subPrimitive.count = finalIndicesLength;\n subRenderItems.push({\n blendMode: blend,\n subPrimitive,\n texture,\n slotName,\n });\n start += finalIndicesLength;\n count = 0;\n } else {\n count += finalIndicesLength;\n }\n } else {\n count += finalIndicesLength;\n }\n SpineGenerator.tempBlendMode = blend;\n SpineGenerator.tempTexture = texture;\n }\n\n _clipper.clipEndWithSlot(slot);\n } // slot traverse end\n\n // add reset sub primitive\n if (count > 0) {\n const subPrimitive = new SubPrimitive();\n subPrimitive.start = start;\n subPrimitive.count = count;\n subRenderItems.push({\n blendMode: blend,\n subPrimitive,\n texture,\n });\n count = 0;\n }\n\n _clipper.clipEnd();\n\n // sort sub primitive\n subRenderItems.sort((a, b) => a.subPrimitive.start - b.subPrimitive.start);\n\n // update buffer when vertex count change\n if (indicesLength > 0 && indicesLength !== this._vertexCount) {\n if (indicesLength > this._vertexCount) {\n this._vertexCount = indicesLength;\n this._prepareBufferData(this._vertexCount);\n this._needResize = true;\n return;\n }\n }\n\n // update sub primitive\n _spinePrimitive.clearSubPrimitive();\n const renderer = this._renderer;\n for (let i = 0, l = subRenderItems.length; i < l; ++i) {\n const item = subRenderItems[i];\n const { slotName, blendMode, texture } = item;\n _spinePrimitive.addSubPrimitive(item.subPrimitive);\n let material = renderer.getMaterial(i);\n if (!material) {\n material = SpineAnimation.getDefaultMaterial(this._engine);\n }\n let subTexture = texture.texture;\n if (this.separateSlotTextureMap.has(slotName)) {\n subTexture = this.separateSlotTextureMap.get(slotName);\n }\n material.shaderData.setTexture(\"material_SpineTexture\", subTexture);\n this.setBlendMode(material, blendMode);\n renderer.setMaterial(i, material);\n }\n this._renderer._subPrimitives = _spinePrimitive.subPrimitive;\n\n if (this._needResize) {\n _spinePrimitive.changeBuffer(this._engine, this._vertexCount);\n this._needResize = false;\n }\n _spinePrimitive.vertexBuffer.setData(this._verticesWithZ);\n _spinePrimitive.indexBuffer.setData(this._indices);\n }\n\n addSeparateSlot(slotName: string) {\n this.separateSlots.push(slotName);\n }\n\n addSeparateSlotTexture(slotName: string, texture: Texture2D) {\n this.separateSlotTextureMap.set(slotName, texture);\n }\n\n private _prepareBufferData(vertexCount: number) {\n this._vertices = new Float32Array(vertexCount * SpineGenerator.VERTEX_SIZE);\n this._verticesWithZ = new Float32Array(\n vertexCount * SpineGenerator.VERTEX_STRIDE\n );\n this._indices = new Uint16Array(vertexCount);\n }\n\n private setBlendMode(material: Material, blendMode: BlendMode) {\n const target = material.renderState.blendState.targetBlendState;\n switch (blendMode) {\n case BlendMode.Additive:\n target.sourceColorBlendFactor = BlendFactor.SourceAlpha;\n target.destinationColorBlendFactor = BlendFactor.One;\n target.sourceAlphaBlendFactor = BlendFactor.One;\n target.destinationAlphaBlendFactor = BlendFactor.One;\n target.colorBlendOperation = target.alphaBlendOperation =\n BlendOperation.Add;\n break;\n case BlendMode.Multiply:\n target.sourceColorBlendFactor = BlendFactor.DestinationColor;\n target.destinationColorBlendFactor = BlendFactor.Zero;\n target.sourceAlphaBlendFactor = BlendFactor.One;\n target.destinationAlphaBlendFactor = BlendFactor.Zero;\n target.colorBlendOperation = target.alphaBlendOperation =\n BlendOperation.Add;\n break;\n case BlendMode.Screen:\n target.sourceColorBlendFactor = BlendFactor.One;\n target.destinationColorBlendFactor = BlendFactor.OneMinusSourceColor;\n target.sourceAlphaBlendFactor = BlendFactor.One;\n target.destinationAlphaBlendFactor = BlendFactor.OneMinusSourceColor;\n target.colorBlendOperation = target.alphaBlendOperation =\n BlendOperation.Add;\n break;\n default: // Normal 混合模式,还不支持的混合模式都走这个\n target.sourceColorBlendFactor = BlendFactor.SourceAlpha;\n target.destinationColorBlendFactor = BlendFactor.OneMinusSourceAlpha;\n target.sourceAlphaBlendFactor = BlendFactor.One;\n target.destinationAlphaBlendFactor = BlendFactor.OneMinusSourceAlpha;\n target.colorBlendOperation = target.alphaBlendOperation =\n BlendOperation.Add;\n break;\n }\n }\n}\n","import {\n BlendFactor,\n BlendOperation,\n CullMode,\n Engine,\n Material,\n RenderQueueType,\n Shader,\n} from \"@galacean/engine\";\n\nexport class SpineMaterial extends Material {\n private static _spineVS = `\n uniform mat4 renderer_MVPMat;\n\n attribute vec3 POSITION;\n attribute vec2 TEXCOORD_0;\n attribute vec4 COLOR_0;\n \n varying vec2 v_uv;\n varying vec4 v_color;\n \n void main()\n {\n gl_Position = renderer_MVPMat * vec4(POSITION, 1.0);\n \n v_uv = TEXCOORD_0;\n v_color = COLOR_0;\n }\n `;\n\n private static _spineFS = `\n uniform sampler2D material_SpineTexture;\n\n varying vec2 v_uv;\n varying vec4 v_color;\n \n void main()\n {\n vec4 baseColor = texture2D(material_SpineTexture, v_uv);\n gl_FragColor = baseColor * v_color;\n }\n `;\n constructor(engine: Engine) {\n const shader =\n Shader.find(\"galacean-spine-shader\") ||\n Shader.create(\n \"galacean-spine-shader\",\n SpineMaterial._spineVS,\n SpineMaterial._spineFS\n );\n super(engine, shader);\n const renderState = this.renderState;\n const target = renderState.blendState.targetBlendState;\n target.enabled = true;\n target.sourceColorBlendFactor = BlendFactor.SourceAlpha;\n target.destinationColorBlendFactor = BlendFactor.OneMinusSourceAlpha;\n target.sourceAlphaBlendFactor = BlendFactor.One;\n target.destinationAlphaBlendFactor = BlendFactor.OneMinusSourceAlpha;\n target.colorBlendOperation = target.alphaBlendOperation =\n BlendOperation.Add;\n renderState.depthState.writeEnabled = false;\n renderState.rasterState.cullMode = CullMode.Off;\n renderState.renderQueueType = RenderQueueType.Transparent;\n }\n}\n","import { Skeleton, SkeletonData, AnimationState, AnimationStateData, Physics, Vector2 } from \"@esotericsoftware/spine-core\";\nimport { SpineGenerator } from \"./core/SpineGenerator\";\nimport { SpineRenderSetting } from \"./types\";\nimport {\n Renderer,\n Entity,\n ignoreClone,\n Material,\n Engine,\n BoundingBox,\n ShaderMacro,\n Primitive,\n} from \"@galacean/engine\";\nimport { SpineMaterial } from \"./SpineMaterial\";\nimport { SubPrimitive } from \"./core/SpinePrimitive\";\n\ninterface InitialState {\n animationName: string;\n skinName: string;\n loop: boolean;\n scale: number;\n}\n\nexport class SpineAnimation extends Renderer {\n private static _defaultMaterial: Material;\n private static _uvMacro = ShaderMacro.getByName(\"RENDERER_HAS_UV\");\n private static _enableVertexColorMacro = ShaderMacro.getByName(\"RENDERER_ENABLE_VERTEXCOLOR\");\n private static _tempOffset: Vector2 = new Vector2();\n private static _tempSize: Vector2 = new Vector2();\n private static _tempArray: Array<number> = [0, 0];\n\n static getDefaultMaterial(engine: Engine): Material {\n let defaultMaterial = this._defaultMaterial;\n if (defaultMaterial) {\n if (defaultMaterial.engine === engine) {\n return defaultMaterial.clone();\n } else {\n defaultMaterial.destroy(true);\n defaultMaterial = null;\n }\n }\n defaultMaterial = new SpineMaterial(engine);\n defaultMaterial.isGCIgnored = true;\n this._defaultMaterial = defaultMaterial;\n return defaultMaterial.clone();\n }\n\n @ignoreClone\n setting: SpineRenderSetting;\n @ignoreClone\n initialState: InitialState = {\n scale: 1,\n loop: false,\n animationName: null,\n skinName: 'default',\n };\n /* @internal */\n @ignoreClone\n _primitive: Primitive;\n /* @internal */\n @ignoreClone\n _subPrimitives: SubPrimitive[];\n @ignoreClone\n protected _skeleton: Skeleton;\n @ignoreClone\n protected _state: AnimationState;\n @ignoreClone\n protected _spineGenerator: SpineGenerator;\n\n set skeletonData(value: SkeletonData) {\n if (!value) {\n this._skeleton = null;\n this._state = null;\n this._spineGenerator = null;\n return;\n }\n this._skeleton = new Skeleton(value);\n const animationData = new AnimationStateData(value);\n this._state = new AnimationState(animationData);\n this._spineGenerator.initialize(value, this.setting);\n }\n\n get state() {\n return this._state;\n }\n\n get skeleton() {\n return this._skeleton;\n }\n\n constructor(entity: Entity) {\n super(entity);\n this._spineGenerator = new SpineGenerator(this.engine, this);\n }\n\n /**\n * @internal\n */\n // @ts-ignore\n override _onAwake() {\n console.log('on awake');\n const { skeleton, state } = this;\n if (skeleton && state) {\n const { animationName, skinName, loop, scale } = this.initialState;\n skeleton.scaleX = scale;\n skeleton.scaleY = scale;\n if (skinName !== 'default') {\n skeleton.setSkinByName(skinName);\n skeleton.setToSetupPose();\n state.apply(skeleton);\n }\n if (animationName) {\n state.setAnimation(0, animationName, loop);\n }\n }\n }\n\n /**\n * Separate slot by slot name. This will add a new sub primitive, and new materials.\n */\n addSeparateSlot(slotName: string) {\n if (!this._skeleton) {\n console.error(\"Skeleton not found!\");\n }\n const slot = this._skeleton.findSlot(slotName);\n if (slot) {\n this._spineGenerator.addSeparateSlot(slotName);\n } else {\n console.warn(`Slot: ${slotName} not find.`);\n }\n }\n\n /**\n * @internal\n */\n override update(delta: number): void {\n if (!this._skeleton || !this._state) return;\n const state = this._state;\n const skeleton = this._skeleton;\n state.update(delta);\n state.apply(skeleton);\n skeleton.update(delta);\n skeleton.updateWorldTransform(Physics.update);\n }\n\n /**\n * @internal\n */\n override _updateRendererShaderData(context: any): void {\n super._updateRendererShaderData(context);\n if (this._skeleton) {\n this._spineGenerator.buildPrimitive(this._skeleton);\n }\n }\n\n /**\n * @internal\n */\n // @ts-ignore\n protected override _render(context: any): void {\n const primitive = this._primitive;\n const subPrimitives = this._subPrimitives;\n if (this._dirtyUpdateFlag & SpineAnimationUpdateFlags.VertexElementMacro) {\n const shaderData = this.shaderData;\n const vertexElements = primitive.vertexElements;\n\n shaderData.disableMacro(SpineAnimation._uvMacro);\n shaderData.disableMacro(SpineAnimation._enableVertexColorMacro);\n\n for (let i = 0, n = vertexElements.length; i < n; i++) {\n switch (vertexElements[i].attribute) {\n case \"TEXCOORD_0\":\n shaderData.enableMacro(SpineAnimation._uvMacro);\n break;\n case \"COLOR_0\":\n shaderData.enableMacro(SpineAnimation._enableVertexColorMacro);\n break;\n }\n }\n this._dirtyUpdateFlag &= ~SpineAnimationUpdateFlags.VertexElementMacro;\n }\n\n const { _materials: materials, _engine: engine } = this;\n // @ts-ignore\n const renderElement = engine._renderElementPool.get();\n // @ts-ignore\n renderElement.set(this.priority, this._distanceForSort);\n // @ts-ignore\n const subRenderElementPool = engine._subRenderElementPool;\n if (!subPrimitives) return;\n for (let i = 0, n = subPrimitives.length; i < n; i++) {\n let material = materials[i];\n if (!material) {\n continue;\n }\n if (material.destroyed || material.shader.destroyed) {\n // @ts-ignore\n material = this.engine._meshMagentaMaterial;\n }\n\n const subRenderElement = subRenderElementPool.get();\n // @ts-ignore\n subRenderElement.set(this, material, primitive, subPrimitives[i]);\n renderElement.addSubRenderElement(subRenderElement);\n }\n // @ts-ignore\n context.camera._renderPipeline.pushRenderElement(context, renderElement);\n }\n\n /**\n * @internal\n */\n // @ts-ignore\n protected override _updateBounds(worldBounds: BoundingBox): void {\n const bounds = worldBounds;\n const offset = SpineAnimation._tempOffset;\n const size = SpineAnimation._tempSize;\n const temp = SpineAnimation._tempArray;\n const zSpacing = this.setting?.zSpacing || 0.01;\n const skeleton = this._skeleton;\n skeleton.getBounds(offset, size, temp);\n const { x, y } = offset;\n bounds.min.set(x, y, 0);\n bounds.max.set(x + size.x, y + size.y, skeleton.drawOrder.length * zSpacing);\n BoundingBox.transform(\n bounds,\n this.entity.transform.worldMatrix,\n bounds,\n );\n }\n\n /**\n * @internal\n */\n // @ts-ignore\n override _cloneTo(target: SpineAnimation, srcRoot: Entity, targetRoot: Entity): void {\n // @ts-ignore\n super._cloneTo(target, srcRoot, targetRoot);\n target.skeletonData = this.skeletonData;\n const _cloneSetting = { ...this.setting };\n target.setting = _cloneSetting;\n }\n\n /**\n * @internal\n */\n protected override _onDestroy(): void {\n const primitive = this._primitive;\n const subPrimitives = this._subPrimitives;\n if (primitive) {\n primitive.destroyed || this._addResourceReferCount(primitive, -1);\n this._primitive = null;\n }\n if (subPrimitives) {\n this._subPrimitives.length = 0;\n }\n this.skeletonData = null;\n this._skeleton = null;\n this._spineGenerator = null;\n this.setting = null;\n super._onDestroy();\n }\n}\n\n/**\n * @remarks Extends `RendererUpdateFlag`.\n */\nenum SpineAnimationUpdateFlags {\n /** VertexElementMacro. */\n VertexElementMacro = 0x2,\n}\n","import \"./loader/SpineLoader\";\nimport \"./loader/EditorSkeletonDataLoader\";\nimport \"./loader/EditorSpineAtlasLoader\";\nexport { SpineAnimation } from \"./SpineAnimation\";\nexport * from \"@esotericsoftware/spine-core\";\nexport { generateTextureAtlas } from \"./loader/LoaderUtils\";\nexport const version = `__buildVersion`;\n\nconsole.log(`Galacean spine version: ${version}`);\n","/******************************************************************************\n * Spine Runtimes License Agreement\n * Last updated July 28, 2023. Replaces all prior versions.\n *\n * Copyright (c) 2013-2023, 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 or\n * 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 THE\n * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *****************************************************************************/\nimport { BoundingBoxAttachment } from \"./attachments/BoundingBoxAttachment.js\";\nimport { Pool, Utils } from \"./Utils.js\";\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 /** The left edge of the axis aligned bounding box. */\n minX = 0;\n /** The bottom edge of the axis aligned bounding box. */\n minY = 0;\n /** The right edge of the axis aligned bounding box. */\n maxX = 0;\n /** The top edge of the axis aligned bounding box. */\n maxY = 0;\n /** The visible bounding boxes. */\n boundingBoxes = new Array();\n /** The world vertices for the bounding box polygons. */\n polygons = new Array();\n polygonPool = new Pool(() => {\n return Utils.newFloatArray(16);\n });\n /** Clears any previous polygons, finds all visible bounding box attachments, and computes the world vertices for each bounding\n * box's polygon.\n * @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the\n * SkeletonBounds AABB methods will always return true. */\n update(skeleton, updateAabb) {\n if (!skeleton)\n throw new Error(\"skeleton cannot be null.\");\n let boundingBoxes = this.boundingBoxes;\n let polygons = this.polygons;\n let polygonPool = this.polygonPool;\n let slots = skeleton.slots;\n let slotCount = slots.length;\n boundingBoxes.length = 0;\n polygonPool.freeAll(polygons);\n polygons.length = 0;\n for (let i = 0; i < slotCount; i++) {\n let slot = slots[i];\n if (!slot.bone.active)\n continue;\n let attachment = slot.getAttachment();\n if (attachment instanceof BoundingBoxAttachment) {\n let boundingBox = attachment;\n boundingBoxes.push(boundingBox);\n let polygon = polygonPool.obtain();\n if (polygon.length != boundingBox.worldVerticesLength) {\n polygon = Utils.newFloatArray(boundingBox.worldVerticesLength);\n }\n polygons.push(polygon);\n boundingBox.computeWorldVertices(slot, 0, boundingBox.worldVerticesLength, polygon, 0, 2);\n }\n }\n if (updateAabb) {\n this.aabbCompute();\n }\n else {\n this.minX = Number.POSITIVE_INFINITY;\n this.minY = Number.POSITIVE_INFINITY;\n this.maxX = Number.NEGATIVE_INFINITY;\n this.maxY = Number.NEGATIVE_INFINITY;\n }\n }\n aabbCompute() {\n let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY;\n let polygons = this.polygons;\n for (let i = 0, n = polygons.length; i < n; i++) {\n let polygon = polygons[i];\n let vertices = polygon;\n for (let ii = 0, nn = polygon.length; ii < nn; ii += 2) {\n let x = vertices[ii];\n let y = vertices[ii + 1];\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n }\n /** Returns true if the axis aligned bounding box contains the point. */\n aabbContainsPoint(x, y) {\n return x >= this.minX && x <= this.maxX && y >= this.minY && y <= this.maxY;\n }\n /** Returns true if the axis aligned bounding box intersects the line segment. */\n aabbIntersectsSegment(x1, y1, x2, y2) {\n let minX = this.minX;\n let minY = this.minY;\n let maxX = this.maxX;\n let maxY = this.maxY;\n if ((x1 <= minX && x2 <= minX) || (y1 <= minY && y2 <= minY) || (x1 >= maxX && x2 >= maxX) || (y1 >= maxY && y2 >= maxY))\n return false;\n let m = (y2 - y1) / (x2 - x1);\n let y = m * (minX - x1) + y1;\n if (y > minY && y < maxY)\n return true;\n y = m * (maxX - x1) + y1;\n if (y > minY && y < maxY)\n return true;\n let x = (minY - y1) / m + x1;\n if (x > minX && x < maxX)\n return true;\n x = (maxY - y1) / m + x1;\n if (x > minX && x < maxX)\n return true;\n return false;\n }\n /** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */\n aabbIntersectsSkeleton(bounds) {\n return this.minX < bounds.maxX && this.maxX > bounds.minX && this.minY < bounds.maxY && this.maxY > bounds.minY;\n }\n /** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more\n * efficient to only call this method if {@link #aabbContainsPoint(float, float)} returns true. */\n containsPoint(x, y) {\n let polygons = this.polygons;\n for (let i = 0, n = polygons.length; i < n; i++)\n if (this.containsPointPolygon(polygons[i], x, y))\n return this.boundingBoxes[i];\n return null;\n }\n /** Returns true if the polygon contains the point. */\n containsPointPolygon(polygon, x, y) {\n let vertices = polygon;\n let nn = polygon.length;\n let prevIndex = nn - 2;\n let inside = false;\n for (let ii = 0; ii < nn; ii += 2) {\n let vertexY = vertices[ii + 1];\n let prevY = vertices[prevIndex + 1];\n if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) {\n let vertexX = vertices[ii];\n if (vertexX + (y - vertexY) / (prevY - vertexY) * (vertices[prevIndex] - vertexX) < x)\n inside = !inside;\n }\n prevIndex = ii;\n }\n return inside;\n }\n /** Returns the first bounding box attachment that contains any part of the line segment, or null. When doing many checks, it\n * is usually more efficient to only call this method if {@link #aabbIntersectsSegment()} returns\n * true. */\n intersectsSegment(x1, y1, x2, y2) {\n let polygons = this.polygons;\n for (let i = 0, n = polygons.length; i < n; i++)\n if (this.intersectsSegmentPolygon(polygons[i], x1, y1, x2, y2))\n return this.boundingBoxes[i];\n return null;\n }\n /** Returns true if the polygon contains any part of the line segment. */\n intersectsSegmentPolygon(polygon, x1, y1, x2, y2) {\n let vertices = polygon;\n let nn = polygon.length;\n let width12 = x1 - x2, height12 = y1 - y2;\n let det1 = x1 * y2 - y1 * x2;\n let x3 = vertices[nn - 2], y3 = vertices[nn - 1];\n for (let ii = 0; ii < nn; ii += 2) {\n let x4 = vertices[ii], y4 = vertices[ii + 1];\n let det2 = x3 * y4 - y3 * x4;\n let width34 = x3 - x4, height34 = y3 - y4;\n let det3 = width12 * height34 - height12 * width34;\n let x = (det1 * width34 - width12 * det2) / det3;\n if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) {\n let y = (det1 * height34 - height12 * det2) / det3;\n if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1)))\n return true;\n }\n x3 = x4;\n y3 = y4;\n }\n return false;\n }\n /** Returns the polygon for the specified bounding box, or null. */\n getPolygon(boundingBox) {\n if (!boundingBox)\n throw new Error(\"boundingBox cannot be null.\");\n let index = this.boundingBoxes.indexOf(boundingBox);\n return index == -1 ? null : this.polygons[index];\n }\n /** The width of the axis aligned bounding box. */\n getWidth() {\n return this.maxX - this.minX;\n }\n /** The height of the axis aligned bounding box. */\n getHeight() {\n return this.maxY - this.minY;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tlbGV0b25Cb3VuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU2tlbGV0b25Cb3VuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEyQitFO0FBRS9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRS9FLE9BQU8sRUFBbUIsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUxRDtzRUFDc0U7QUFDdEUsTUFBTSxPQUFPLGNBQWM7SUFFMUIsc0RBQXNEO0lBQ3RELElBQUksR0FBRyxDQUFDLENBQUM7SUFFVCx3REFBd0Q7SUFDeEQsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUVULHVEQUF1RDtJQUN2RCxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRVQscURBQXFEO0lBQ3JELElBQUksR0FBRyxDQUFDLENBQUM7SUFFVCxrQ0FBa0M7SUFDbEMsYUFBYSxHQUFHLElBQUksS0FBSyxFQUF5QixDQUFDO0lBRW5ELHdEQUF3RDtJQUN4RCxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQW1CLENBQUM7SUFFaEMsV0FBVyxHQUFHLElBQUksSUFBSSxDQUFrQixHQUFHLEVBQUU7UUFDcEQsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBRUg7Ozt3RUFHb0U7SUFDcEUsTUFBTSxDQUFFLFFBQWtCLEVBQUUsVUFBbUI7UUFDOUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDM0QsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN2QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzdCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbkMsSUFBSSxLQUFLLEdB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QUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pELEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNsQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0MsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQzdCLElBQUksT0FBTyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsUUFBUSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDMUMsSUFBSSxJQUFJLEdBQUcsT0FBTyxHQUFHLFFBQVEsR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE9BQU8sR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2pELElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFO2dCQUNyRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxRQUFRLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDbkQsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUFFLE9BQU8sSUFBSSxDQUFDO2FBQ2xIO1lBQ0QsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNSLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDUjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2QsQ0FBQztJQUVELG1FQUFtRTtJQUNuRSxVQUFVLENBQUUsV0FBa0M7UUFDN0MsSUFBSSxDQUFDLFdBQVc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDakUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELFFBQVE7UUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQsbURBQW1EO0lBQ25ELFNBQVM7UUFDUixPQUFPLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM5QixDQUFDO0NBQ0QifQ=="],"names":["SequenceMode","__decorate","decorators","target","key","desc","d","c","arguments","length","r","Object","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","SuppressedError","StringSet","entries","size","add","value","contains","this","addAll","values","oldSize","n","clear","Color","g","b","a","static","constructor","set","clamp","setFromColor","setFromString","hex","charAt","substr","parseInt","rgba8888ToColor","color","rgb888ToColor","toRgb888","x","toString","slice","Number","fromString","MathUtils","PI","PI2","radiansToDegrees","degreesToRadians","min","max","cosDeg","degrees","Math","cos","degRad","sinDeg","sin","atan2Deg","y","atan2","signum","toInt","floor","ceil","cbrt","pow","abs","randomTriangular","randomTriangularWith","mode","u","random","sqrt","isPowerOfTwo","Interpolation","apply","start","end","applyInternal","Pow","power","super","Utils","arrayCopy","source","sourceStart","dest","destStart","numElements","j","arrayFill","array","fromIndex","toIndex","setArraySize","ensureArrayCapacity","newArray","defaultValue","Array","newFloatArray","SUPPORTS_TYPED_ARRAYS","Float32Array","newShortArray","Int16Array","toFloatArray","toSinglePrecision","fround","webkit602BugfixHelper","alpha","blend","element","identity","enumValue","type","name","toUpperCase","Pool","items","instantiator","obtain","pop","free","item","reset","push","freeAll","Vector2","normalize","len","Attachment","Error","VertexAttachment","id","nextID","bones","vertices","worldVerticesLength","timelineAttachment","computeWorldVertices","slot","count","worldVertices","offset","stride","skeleton","bone","deformArray","deform","worldX","worldY","v","w","vx","vy","skip","skeletonBones","wx","wy","weight","f","copyTo","attachment","Sequence","regions","digits","setupIndex","copy","index","sequenceIndex","region","updateRegion","getPath","basePath","result","frame","_nextID","SequenceModeValues","hold","once","loop","pingpong","onceReverse","loopReverse","pingpongReverse","Animation","timelines","timelineIds","duration","setTimelines","getPropertyIds","hasTimeline","ids","lastTime","time","events","direction","MixBlend","MixDirection","Property","rotate","scaleX","scaleY","shearX","shearY","inherit","rgb","rgb2","event","drawOrder","ikConstraint","transformConstraint","pathConstraintPosition","pathConstraintSpacing","pathConstraintMix","physicsConstraintInertia","physicsConstraintStrength","physicsConstraintDamping","physicsConstraintMass","physicsConstraintWind","physicsConstraintGravity","physicsConstraintMix","physicsConstraintReset","sequence","Timeline","propertyIds","frames","frameCount","getFrameEntries","getFrameCount","getDuration","search1","search","step","CurveTimeline","curves","bezierCount","setLinear","setStepped","shrink","newCurves","setBezier","bezier","time1","value1","cx1","cy1","cx2","cy2","time2","value2","tmpx","tmpy","dddx","dddy","ddx","ddy","dx","dy","getBezierValue","frameIndex","valueOffset","CurveTimeline1","propertyId","setFrame","getCurveValue","ii","curveType","before","getRelativeValue","current","setup","first","replace","getAbsoluteValue","getAbsoluteValue2","getScaleValue","mixOut","s","CurveTimeline2","propertyId1","propertyId2","RotateTimeline","boneIndex","active","rotation","data","TranslateTimeline","t","TranslateXTimeline","TranslateYTimeline","ScaleTimeline","bx","by","ScaleXTimeline","ScaleYTimeline","ShearTimeline","ShearXTimeline","ShearYTimeline","InheritTimeline","RGBATimeline","slotIndex","slots","RGBTimeline","AlphaTimeline","RGBA2Timeline","r2","g2","b2","light","dark","darkColor","setupLight","setupDark","RGB2Timeline","AttachmentTimeline","attachmentNames","attachmentName","setAttachment","getAttachment","DeformTimeline","getCurvePercent","firedEvents","slotAttachment","vertexCount","vertexAttachment","setupVertices","lastVertices","percent","prevVertices","nextVertices","prev","EventTimeline","MAX_VALUE","frameTime","DrawOrderTimeline","drawOrders","idx","drawOrderToSetupIndex","IkConstraintTimeline","constraintIndex","ikConstraintIndex","mix","softness","bendDirection","compress","stretch","constraint","ikConstraints","mixIn","TransformConstraintTimeline","transformConstraintIndex","mixRotate","mixX","mixY","mixScaleX","mixScaleY","mixShearY","transformConstraints","PathConstraintPositionTimeline","pathConstraintIndex","pathConstraints","position","PathConstraintSpacingTimeline","spacing","PathConstraintMixTimeline","PhysicsConstraintTimeline","physicsConstraintIndex","property","physicsConstraints","global","get","PhysicsConstraintInertiaTimeline","inertia","inertiaGlobal","PhysicsConstraintStrengthTimeline","strength","strengthGlobal","PhysicsConstraintDampingTimeline","damping","dampingGlobal","PhysicsConstraintMassTimeline","massInverse","massGlobal","PhysicsConstraintWindTimeline","wind","windGlobal","PhysicsConstraintGravityTimeline","gravity","gravityGlobal","PhysicsConstraintMixTimeline","mixGlobal","PhysicsConstraintResetTimeline","SequenceTimeline","ENTRIES","getSlotIndex","delay","MODE","DELAY","modeAndIndex","AnimationState","emptyAnimation","_emptyAnimation","tracks","timeScale","unkeyedState","listeners","queue","EventQueue","propertyIDs","animationsChanged","trackEntryPool","TrackEntry","update","delta","animationLast","nextAnimationLast","trackLast","nextTrackLast","currentDelta","next","nextTime","trackTime","setCurrent","mixingFrom","mixTime","trackEnd","clearNext","updateMixingFrom","from","mixingTo","drain","to","finished","mixDuration","totalAlpha","interruptAlpha","_animationsChanged","applied","mixBlend","applyMixingFrom","attachments","alphaAttachmentThreshold","animationTime","getAnimationTime","applyTime","applyEvents","reverse","animation","timelineCount","timeline","applyAttachmentTimeline","timelineMode","shortestRotation","firstFrame","timelinesRotation","timelineBlend","SUBSEQUENT","applyRotateTimeline","queueEvents","setupState","SETUP","attachmentState","mixAttachmentThreshold","mixDrawOrderThreshold","alphaHold","alphaMix","eventThreshold","timelineHoldMix","FIRST","HOLD_SUBSEQUENT","HOLD_FIRST","holdMix","CURRENT","r1","total","diff","lastTotal","lastDiff","loops","dir","entry","animationStart","animationEnd","trackLastWrapped","complete","cycles","clearTracks","oldDrainDisabled","drainDisabled","clearTrack","trackIndex","interrupt","expandToIndex","previous","setAnimation","animationName","skeletonData","findAnimation","setAnimationWith","trackEntry","addAnimation","addAnimationWith","last","getTrackComplete","setEmptyAnimation","addEmptyAnimation","setEmptyAnimations","holdPrevious","getMix","dispose","computeHold","timelinesCount","outer","HOLD_MIX","getCurrent","addListener","listener","removeListener","indexOf","splice","clearListeners","clearListenerNotifications","_mixDuration","setMixDurationWithDelay","setAnimationLast","isComplete","resetRotationDirections","wasApplied","isNextReady","objects","animState","EventType","AnimationStateData","animationToMixTime","defaultMix","setMix","fromName","toName","setMixWith","undefined","BoundingBoxAttachment","ClippingAttachment","endSlot","Texture","_image","image","getImage","TextureFilter","TextureWrap","Inherit","PositionMode","SpacingMode","RotateMode","Physics","BlendMode","AttachmentType","TextureRegion","texture","u2","v2","width","height","offsetX","offsetY","originalWidth","originalHeight","TextureAtlas","pages","atlasText","reader","TextureAtlasReader","pageFields","page","minFilter","magFilter","uWrap","Repeat","vWrap","pma","regionFields","line","readLine","trim","readEntry","names","TextureAtlasRegion","field","entryValues","TextureAtlasPage","findRegion","setTextures","assetManager","pathPrefix","setTexture","lines","text","split","colon","lastMatch","comma","Nearest","ClampToEdge","setFilters","setWraps","MeshAttachment","path","regionUVs","uvs","triangles","hullLength","edges","parentMesh","tempColor","textureWidth","textureHeight","getParentMesh","setParentMesh","newLinkedMesh","PathAttachment","lengths","closed","constantSpeed","PointAttachment","computeWorldPosition","point","computeWorldRotation","RegionAttachment","regionScaleX","regionScaleY","localX","localY","localX2","localY2","radians","localXCos","localXSin","localYCos","localYSin","localX2Cos","localX2Sin","localY2Cos","localY2Sin","vertexOffset","AtlasAttachmentLoader","atlas","loadSequence","newRegionAttachment","skin","newMeshAttachment","newBoundingBoxAttachment","newPathAttachment","newPointAttachment","newClippingAttachment","BoneData","parent","Normal","skinRequired","icon","visible","Bone","children","ax","ay","arotation","ascaleX","ascaleY","ashearX","ashearY","sorted","setToSetupPose","isActive","physics","updateWorldTransformWith","updateWorldTransform","sx","sy","rx","ry","pa","pb","pc","pd","la","lb","lc","ld","OnlyTranslation","NoRotationOrReflection","prx","radDeg","NoScale","NoScaleOrReflection","za","zc","zb","zd","updateAppliedTransform","ra","rb","rc","rd","pid","ia","ib","ic","sa","det","getWorldRotationX","getWorldRotationY","getWorldScaleX","getWorldScaleY","worldToLocal","world","invDet","localToWorld","local","worldToParent","parentToWorld","worldToLocalRotation","worldRotation","localToWorldRotation","localRotation","rotateWorld","ConstraintData","order","Downloader","callbacks","rawDataUris","dataUriToString","dataUri","startsWith","base64Idx","atob","base64ToUint8Array","base64","binary_string","window","bytes","Uint8Array","charCodeAt","dataUriToUint8Array","downloadText","url","success","error","finish","e","JSON","stringify","request","XMLHttpRequest","overrideMimeType","open","done","status","responseText","onload","onerror","send","downloadJson","parse","downloadBinary","responseType","response","args","Event","intValue","floatValue","stringValue","volume","balance","EventData","audioPath","IkConstraint","findBone","apply1","uniform","apply2","targetX","targetY","p","rotationIK","tx","ty","sc","dd","child","bendDir","px","py","psx","psy","csx","os1","os2","s2","cx","cy","cwx","cwy","pp","a1","a2","l1","l2","td","sd","acos","aa","bb","ta","c1","c2","q","r0","minAngle","minX","minDist","minY","maxAngle","maxX","maxDist","maxY","os","IkConstraintData","_target","boneData","PathConstraintData","slotData","positionMode","Fixed","spacingMode","rotateMode","Chain","offsetRotation","PathConstraint","spaces","positions","segments","findSlot","tangents","Tangent","scale","ChainScale","boneCount","spacesCount","Percent","setupLength","Proportional","sum","epsilon","lengthSpacing","Length","computeWorldPositions","boneX","boneY","tip","out","verticesLength","curveCount","prevCurve","NONE","multiplier","pathLength","o","curve","space","BEFORE","addBeforePosition","AFTER","addAfterPosition","addCurvePosition","x1","y1","x2","y2","dddfx","dddfy","ddfx","ddfy","dfx","dfy","curveLength","segment","temp","isNaN","tt","ttt","uu","uuu","ut","ut3","uut3","utt3","PhysicsConstraint","_bone","_reset","ux","uy","xOffset","xVelocity","yOffset","yVelocity","rotateOffset","rotateVelocity","scaleOffset","scaleVelocity","remaining","rotateOrShearX","l","none","limit","referenceScale","m","Skeleton","yDown","ca","mr","invPI2","h","pose","translate","Slot","getSkeleton","TransformConstraint","relative","applyRelativeLocal","applyAbsoluteLocal","applyRelativeWorld","applyAbsoluteWorld","tb","tc","degRadReflect","offsetShearY","offsetScaleX","offsetScaleY","_updateCache","_scaleY","ikConstraintData","transformConstraintData","pathConstraintData","physicsConstraintData","updateCache","skinBones","ikCount","transformCount","pathCount","physicsCount","constraintCount","sortIkConstraint","sortTransformConstraint","sortPathConstraint","sortPhysicsConstraint","sortBone","constraints","constrained","sortReset","slotBone","sortPathConstraintAttachment","defaultSkin","skins","sortPathConstraintAttachmentWith","pathBones","nn","rootBone","getRootBone","updatable","setBonesToSetupPose","setSlotsToSetupPose","boneName","slotName","setSkinByName","skinName","findSkin","setSkin","newSkin","attachAll","getAttachmentByName","findIkConstraint","constraintName","find","findTransformConstraint","findPathConstraint","findPhysicsConstraint","getBoundsRect","getBounds","clipper","POSITIVE_INFINITY","NEGATIVE_INFINITY","quadTriangles","mesh","clipStart","isClipping","clipTriangles","clippedVertices","clipEndWithSlot","clipEnd","physicsTranslate","physicsRotate","PhysicsConstraintData","SkeletonData","animations","version","hash","fps","imagesPath","findEvent","eventDataName","SkinEntry","Skin","addSkin","contained","getAttachments","copySkin","dictionary","removeAttachment","slotAttachments","getAttachmentsForSlot","oldSkin","SlotData","blendMode","TransformConstraintData","SkeletonBinary","attachmentLoader","linkedMeshes","readSkeletonData","binary","input","BinaryInput","lowHash","readInt32","highHash","readString","readFloat","nonessential","readBoolean","readInt","str","strings","readByte","readStringRef","flags","readUnsignedByte","readSkin","linkedMesh","skinIndex","inheritTimeline","eventName","readAnimation","slotCount","readAttachment","Region","readSequence","BoundingBox","readVertices","box","Mesh","readFloatArray","readShortArray","LinkedMesh","inheritTimelines","Path","Point","Clipping","endSlotIndex","clip","weighted","Vertices","weights","bonesArray","timelineType","frameLast","SLOT_ATTACHMENT","SLOT_RGBA","CURVE_STEPPED","CURVE_BEZIER","SLOT_RGB","SLOT_RGBA2","nr","ng","nb","na","nr2","ng2","nb2","SLOT_RGB2","SLOT_ALPHA","BONE_INHERIT","BONE_ROTATE","readTimeline1","BONE_TRANSLATE","readTimeline2","BONE_TRANSLATEX","BONE_TRANSLATEY","BONE_SCALE","BONE_SCALEX","BONE_SCALEY","BONE_SHEAR","BONE_SHEARX","BONE_SHEARY","mix2","softness2","mixRotate2","mixX2","mixY2","mixScaleX2","mixScaleY2","mixShearY2","PATH_POSITION","PATH_SPACING","PATH_MIX","PHYSICS_RESET","PHYSICS_INERTIA","PHYSICS_STRENGTH","PHYSICS_DAMPING","PHYSICS_MASS","PHYSICS_WIND","PHYSICS_GRAVITY","PHYSICS_MIX","iii","nnn","ATTACHMENT_DEFORM","deformLength","vn","ATTACHMENT_SEQUENCE","drawOrderCount","offsetCount","unchanged","originalIndex","unchangedIndex","eventCount","eventData","buffer","DataView","getInt8","getUint8","readShort","getInt16","getInt32","optimizePositive","byteCount","chars","String","fromCharCode","getFloat32","inheritDeform","nvalue1","nvalue2","Triangulator","convexPolygons","convexPolygonsIndices","indicesArray","isConcaveArray","polygonPool","polygonIndicesPool","triangulate","verticesArray","indices","isConcave","p1","p2","p3","p1x","p1y","p2x","p2y","p3x","p3y","positiveArea","previousIndex","nextIndex","decompose","polygonIndices","polygon","fanBaseIndex","lastWinding","t1","t2","t3","x3","y3","merged","winding1","winding","winding2","firstIndex","lastIndex","prevPrevX","prevPrevY","prevX","prevY","firstX","firstY","secondX","secondY","otherIndices","otherFirstIndex","otherSecondIndex","otherLastIndex","otherPoly","SkeletonClipping","triangulator","clippingPolygon","clipOutput","clippedTriangles","scratch","clipAttachment","clippingPolygons","makeClockwise","trianglesLength","twoColor","clipTrianglesRender","clipTrianglesNoRender","polygons","polygonsCount","clippedVerticesItems","clippedTrianglesItems","clipOutputLength","clipOutputCount","clipOutputItems","vertexSize","u1","v1","u3","v3","d0","d1","d2","d4","c0","clippingArea","output","originalOutput","clipped","clippingVerticesLast","clippingVertices","edgeX","edgeY","ex","ey","outputStart","inputVertices","inputX","inputY","inputX2","inputY2","s1","ix","iy","verticeslength","area","lastX","other","SkeletonJson","json","root","skeletonMap","spine","getValue","images","audio","boneMap","parentName","slotMap","ik","constraintMap","transform","targetName","skinMap","entryName","eventMap","animationMap","map","scaledVertices","timelineName","timelineMap","keyMap","nextMap","newColor","readCurve","color2","newColor2","aFrame","attachmentsName","attachmentsMap","slotMapName","attachmentMapName","attachmentMap","timelineMapName","verticesValue","lastDelay","drawOrderMap","offsets","offsetMap","keys","name1","name2","loadText","loadBinary","loadTexture","engine","imageLoaderType","AssetType","Texture2D","resourceManager","load","async","loadTextureAtlas","baseUrl","parsedUrl","URL","origin","pathname","endsWith","substring","lastIndexOf","getBaseUrl","atlasData","textures","textureMap","err","textureAtlas","loadTexturePromises","textureUrl","Promise","all","createAdaptiveTexture","generateTextureAtlas","AdaptiveTexture","Image","generateMipmaps","filterMode","TextureFilterMode","MipMapLinearLinear","Trilinear","Bilinear","wrapModeU","_convertWrapMode","wrapModeV","wrap","TextureWrapMode","Clamp","MirroredRepeat","Mirror","getUrlExtension","fileExtension","match","SpineLoader","Loader","imageExtensions","skeletonExtensions","AssetPromise","resolve","reject","spineAssetBundle","skeletonPath","skeletonExtension","atlasPath","imagePaths","fileExtensions","params","urls","verifyFileExtensions","parseAndAssignSpineAsset","bundle","ext","extensionPattern","test","atlasUrl","deriveAndAssignSpineAsset","skeletonLoadFunc","skeletonTextData","loadQueue","texturePromises","imagePath","KTX","KTX2","atlasLoader","loadAndCreateSpineSkeletonData","then","catch","imageExtension","includes","expectArray","isArray","console","BufferReader","byteOffset","byteLength","_dataView","_position","nextUint16","getUint16","nextStr","strByteLength","uint8Array","TextDecoder","decode","il","decodeURIComponent","encodeURIComponent","decodeText","nextImageData","log","EditorSkeletonDataLoader","skeletonRawData","atlasRefId","refId","getResourceByRef","EditorSpineAtlasLoader","textureRefs","promises","refItem","forEach","SubPrimitive","topology","MeshTopology","Triangles","SpinePrimitive","primitive","_primitive","subPrimitive","_subPrimitive","indexBuffer","_indexBuffer","vertexBuffer","_vertexBuffer","initialize","Primitive","addVertexElement","VertexElement","VertexElementFormat","Vector3","Vector4","vertexStride","SpineGenerator","VERTEX_STRIDE","Buffer","BufferBindFlag","VertexBuffer","BufferUsage","Dynamic","IndexBuffer","vertexBufferBinding","VertexBufferBinding","setVertexBufferBinding","indexBufferBinding","IndexBufferBinding","IndexFormat","UInt16","setIndexBufferBinding","addSubPrimitive","clearSubPrimitive","changeBuffer","QUAD_TRIANGLES","VERTEX_SIZE","tempDark","tempBlendMode","tempTexture","subRenderItems","_subRenderItems","renderer","_clipper","_spinePrimitive","_needResize","separateSlots","separateSlotTextureMap","Map","_engine","_renderer","setting","_setting","QUAD_TRIANGLE_LENGTH","_vertexCount","_prepareBufferData","buildPrimitive","useClipping","zSpacing","indicesLength","maxSlotCount","_vertices","attachmentColor","z","numFloats","regionAttachment","meshAttachment","finalVertices","finalVerticesLength","finalIndices","finalIndicesLength","skeletonColor","slotColor","verts","indexStart","verticesWithZ","_verticesWithZ","_indices","blendModeChanged","textureChanged","slotNeedSeparate","separateTexture","oldTexture","sort","material","getMaterial","SpineAnimation","getDefaultMaterial","subTexture","has","shaderData","setBlendMode","setMaterial","_subPrimitives","setData","addSeparateSlot","addSeparateSlotTexture","Uint16Array","renderState","blendState","targetBlendState","Additive","sourceColorBlendFactor","BlendFactor","SourceAlpha","destinationColorBlendFactor","One","sourceAlphaBlendFactor","destinationAlphaBlendFactor","colorBlendOperation","alphaBlendOperation","BlendOperation","Add","Multiply","DestinationColor","Zero","Screen","OneMinusSourceColor","OneMinusSourceAlpha","SpineMaterial","Material","_spineVS","_spineFS","Shader","create","enabled","depthState","writeEnabled","rasterState","cullMode","CullMode","Off","renderQueueType","RenderQueueType","Transparent","Renderer","_uvMacro","ShaderMacro","getByName","_enableVertexColorMacro","_tempOffset","_tempSize","_tempArray","defaultMaterial","_defaultMaterial","clone","destroy","isGCIgnored","_skeleton","_state","_spineGenerator","animationData","state","entity","initialState","_onAwake","warn","_updateRendererShaderData","context","_render","subPrimitives","_dirtyUpdateFlag","vertexElements","disableMacro","attribute","enableMacro","_materials","materials","renderElement","_renderElementPool","priority","_distanceForSort","subRenderElementPool","_subRenderElementPool","destroyed","shader","_meshMagentaMaterial","subRenderElement","addSubRenderElement","camera","_renderPipeline","pushRenderElement","_updateBounds","worldBounds","bounds","worldMatrix","_cloneTo","srcRoot","targetRoot","_cloneSetting","_onDestroy","_addResourceReferCount","SpineAnimationUpdateFlags","textureLoader","downloader","assets","errors","toLoad","loaded","callback","asset","message","loadAll","check","isLoadingComplete","hasErrors","requestAnimationFrame","setRawDataURI","loadJson","navigator","document","fetch","ok","blob","createImageBitmap","premultiplyAlpha","colorSpaceConversion","bitmap","crossOrigin","src","fileAlias","abort","require","remove","removeAll","getToLoad","getLoaded","getErrors","logBones","boundingBoxes","updateAabb","boundingBox","aabbCompute","aabbContainsPoint","aabbIntersectsSegment","aabbIntersectsSkeleton","containsPoint","containsPointPolygon","prevIndex","inside","vertexY","vertexX","intersectsSegment","intersectsSegmentPolygon","width12","height12","det1","x4","y4","det2","width34","height34","det3","getPolygon","getWidth","getHeight","maxDelta","framesPerSecond","totalTime","Date","now","addedValues","lastValue","mean","dirty","windowSize","hasEnoughData","addValue","getMean"],"mappings":"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"}
|