{"version":3,"file":"SpineDebugRenderer.mjs","sources":["../src/SpineDebugRenderer.ts"],"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 *****************************************************************************/\n\nimport { Container, Graphics, Text } from 'pixi.js';\nimport { Spine } from './Spine';\nimport {\n    ClippingAttachment,\n    MeshAttachment,\n    PathAttachment,\n    RegionAttachment,\n    SkeletonBounds\n} from '@esotericsoftware/spine-core';\n\nimport type { AnimationStateListener } from '@esotericsoftware/spine-core';\n\n/**\n * Make a class that extends from this interface to create your own debug renderer.\n * @public\n */\nexport interface ISpineDebugRenderer\n{\n    /**\n     * This will be called every frame, after the spine has been updated.\n     */\n    renderDebug: (spine: Spine) => void;\n\n    /**\n     *  This is called when the `spine.debug` object is set to null or when the spine is destroyed.\n     */\n    unregisterSpine: (spine: Spine) => void;\n\n    /**\n     * This is called when the `spine.debug` object is set to a new instance of a debug renderer.\n     */\n    registerSpine: (spine: Spine) => void;\n}\n\ntype DebugDisplayObjects = {\n    bones: Container;\n    skeletonXY: Graphics;\n    regionAttachmentsShape: Graphics;\n    meshTrianglesLine: Graphics;\n    meshHullLine: Graphics;\n    clippingPolygon: Graphics;\n    boundingBoxesRect: Graphics;\n    boundingBoxesCircle: Graphics;\n    boundingBoxesPolygon: Graphics;\n    pathsCurve: Graphics;\n    pathsLine: Graphics;\n    parentDebugContainer: Container;\n    eventText: Container;\n    eventCallback: AnimationStateListener;\n};\n\n/**\n * This is a debug renderer that uses PixiJS Graphics under the hood.\n * @public\n */\nexport class SpineDebugRenderer implements ISpineDebugRenderer\n{\n    private readonly registeredSpines: Map<Spine, DebugDisplayObjects> = new Map();\n\n    public drawMeshHull = true;\n    public drawMeshTriangles = true;\n    public drawBones = true;\n    public drawPaths = true;\n    public drawBoundingBoxes = true;\n    public drawClipping = true;\n    public drawRegionAttachments = true;\n    public drawEvents = true;\n\n    public lineWidth = 1;\n    public regionAttachmentsColor = 0x0078ff;\n    public meshHullColor = 0x0078ff;\n    public meshTrianglesColor = 0xffcc00;\n    public clippingPolygonColor = 0xff00ff;\n    public boundingBoxesRectColor = 0x00ff00;\n    public boundingBoxesPolygonColor = 0x00ff00;\n    public boundingBoxesCircleColor = 0x00ff00;\n    public pathsCurveColor = 0xff0000;\n    public pathsLineColor = 0xff00ff;\n    public skeletonXYColor = 0xff0000;\n    public bonesColor = 0x00eecc;\n    public eventFontSize = 24;\n    public eventFontColor = 0x0;\n\n    /**\n     * The debug is attached by force to each spine object.\n     * So we need to create it inside the spine when we get the first update\n     */\n    public registerSpine(spine: Spine): void\n    {\n        if (this.registeredSpines.has(spine))\n        {\n            console.warn('SpineDebugRenderer.registerSpine() - this spine is already registered!', spine);\n\n            return;\n        }\n        const debugDisplayObjects: DebugDisplayObjects = {\n            parentDebugContainer: new Container(),\n            bones: new Container(),\n            skeletonXY: new Graphics(),\n            regionAttachmentsShape: new Graphics(),\n            meshTrianglesLine: new Graphics(),\n            meshHullLine: new Graphics(),\n            clippingPolygon: new Graphics(),\n            boundingBoxesRect: new Graphics(),\n            boundingBoxesCircle: new Graphics(),\n            boundingBoxesPolygon: new Graphics(),\n            pathsCurve: new Graphics(),\n            pathsLine: new Graphics(),\n            eventText: new Container(),\n            eventCallback: {\n                event: (_, event) =>\n                {\n                    if (this.drawEvents)\n                    {\n                        const scale = Math.abs(spine.scale.x || spine.scale.y || 1);\n                        const text = new Text({\n                            text: event.data.name,\n                            style: {\n                                fontSize: this.eventFontSize / scale,\n                                fill: this.eventFontColor,\n                                fontFamily: 'monospace'\n                            }\n                        });\n\n                        text.scale.x = Math.sign(spine.scale.x);\n                        text.anchor.set(0.5);\n                        debugDisplayObjects.eventText.addChild(text);\n                        setTimeout(() =>\n                        {\n                            if (!text.destroyed)\n                            {\n                                text.destroy();\n                            }\n                        }, 250);\n                    }\n                },\n            },\n        };\n\n        debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.bones);\n        debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.skeletonXY);\n        debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.regionAttachmentsShape);\n        debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshTrianglesLine);\n        debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.meshHullLine);\n        debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.clippingPolygon);\n        debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesRect);\n        debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesCircle);\n        debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.boundingBoxesPolygon);\n        debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsCurve);\n        debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.pathsLine);\n        debugDisplayObjects.parentDebugContainer.addChild(debugDisplayObjects.eventText);\n\n        (debugDisplayObjects.parentDebugContainer as any).zIndex = 9999999;\n\n        // Disable screen reader and mouse input on debug objects.\n        (debugDisplayObjects.parentDebugContainer as any).accessibleChildren = false;\n        (debugDisplayObjects.parentDebugContainer as any).eventMode = 'none';\n        (debugDisplayObjects.parentDebugContainer as any).interactiveChildren = false;\n\n        spine.addChild(debugDisplayObjects.parentDebugContainer);\n\n        spine.state.addListener(debugDisplayObjects.eventCallback);\n\n        this.registeredSpines.set(spine, debugDisplayObjects);\n    }\n\n    public renderDebug(spine: Spine): void\n    {\n        if (!this.registeredSpines.has(spine))\n        {\n            // This should never happen. Spines are registered when you assign spine.debug\n            this.registerSpine(spine);\n        }\n\n        const debugDisplayObjects = this.registeredSpines.get(spine);\n\n        if (!debugDisplayObjects)\n        {\n            return;\n        }\n        spine.addChild(debugDisplayObjects.parentDebugContainer);\n\n        debugDisplayObjects.skeletonXY.clear();\n        debugDisplayObjects.regionAttachmentsShape.clear();\n        debugDisplayObjects.meshTrianglesLine.clear();\n        debugDisplayObjects.meshHullLine.clear();\n        debugDisplayObjects.clippingPolygon.clear();\n        debugDisplayObjects.boundingBoxesRect.clear();\n        debugDisplayObjects.boundingBoxesCircle.clear();\n        debugDisplayObjects.boundingBoxesPolygon.clear();\n        debugDisplayObjects.pathsCurve.clear();\n        debugDisplayObjects.pathsLine.clear();\n\n        for (let len = debugDisplayObjects.bones.children.length; len > 0; len--)\n        {\n            debugDisplayObjects.bones.children[len - 1].destroy({ children: true, texture: true, textureSource: true });\n        }\n\n        const scale = Math.abs(spine.scale.x || spine.scale.y || 1);\n        const lineWidth = this.lineWidth / scale;\n\n        if (this.drawBones)\n        {\n            this.drawBonesFunc(spine, debugDisplayObjects, lineWidth, scale);\n        }\n\n        if (this.drawPaths)\n        {\n            this.drawPathsFunc(spine, debugDisplayObjects, lineWidth);\n        }\n\n        if (this.drawBoundingBoxes)\n        {\n            this.drawBoundingBoxesFunc(spine, debugDisplayObjects, lineWidth);\n        }\n\n        if (this.drawClipping)\n        {\n            this.drawClippingFunc(spine, debugDisplayObjects, lineWidth);\n        }\n\n        if (this.drawMeshHull || this.drawMeshTriangles)\n        {\n            this.drawMeshHullAndMeshTriangles(spine, debugDisplayObjects, lineWidth);\n        }\n\n        if (this.drawRegionAttachments)\n        {\n            this.drawRegionAttachmentsFunc(spine, debugDisplayObjects, lineWidth);\n        }\n\n        if (this.drawEvents)\n        {\n            for (const child of debugDisplayObjects.eventText.children)\n            {\n                child.alpha -= 0.05;\n                child.y -= 2;\n            }\n        }\n    }\n\n    private drawBonesFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number, scale: number): void\n    {\n        const skeleton = spine.skeleton;\n        const skeletonX = skeleton.x;\n        const skeletonY = skeleton.y;\n        const bones = skeleton.bones;\n\n        debugDisplayObjects.skeletonXY.strokeStyle = { width: lineWidth, color: this.skeletonXYColor };\n\n        for (let i = 0, len = bones.length; i < len; i++)\n        {\n            const bone = bones[i];\n            const boneLen = bone.data.length;\n            const starX = skeletonX + bone.worldX;\n            const starY = skeletonY + bone.worldY;\n            const endX = skeletonX + (boneLen * bone.a) + bone.worldX;\n            const endY = skeletonY + (boneLen * bone.b) + bone.worldY;\n\n            if (bone.data.name === 'root' || bone.data.parent === null)\n            {\n                continue;\n            }\n\n            const w = Math.abs(starX - endX);\n            const h = Math.abs(starY - endY);\n            // a = w, // side length a\n            const a2 = Math.pow(w, 2); // square root of side length a\n            const b = h; // side length b\n            const b2 = Math.pow(h, 2); // square root of side length b\n            const c = Math.sqrt(a2 + b2); // side length c\n            const c2 = Math.pow(c, 2); // square root of side length c\n            const rad = Math.PI / 180;\n            // A = Math.acos([a2 + c2 - b2] / [2 * a * c]) || 0, // Angle A\n            // C = Math.acos([a2 + b2 - c2] / [2 * a * b]) || 0, // C angle\n            const B = Math.acos((c2 + b2 - a2) / (2 * b * c)) || 0; // angle of corner B\n\n            if (c === 0)\n            {\n                continue;\n            }\n\n            const gp = new Graphics();\n\n            debugDisplayObjects.bones.addChild(gp);\n\n            // draw bone\n            const refRation = c / 50 / scale;\n\n            gp.context\n                .poly([0, 0, 0 - refRation, c - (refRation * 3), 0, c - refRation, 0 + refRation, c - (refRation * 3)])\n                .fill(this.bonesColor);\n            gp.x = starX;\n            gp.y = starY;\n            gp.pivot.y = c;\n\n            // Calculate bone rotation angle\n            let rotation = 0;\n\n            if (starX < endX && starY < endY)\n            {\n                // bottom right\n                rotation = -B + (180 * rad);\n            }\n            else if (starX > endX && starY < endY)\n            {\n                // bottom left\n                rotation = 180 * (rad + B);\n            }\n            else if (starX > endX && starY > endY)\n            {\n                // top left\n                rotation = -B;\n            }\n            else if (starX < endX && starY > endY)\n            {\n                // bottom left\n                rotation = B;\n            }\n            else if (starY === endY && starX < endX)\n            {\n                // To the right\n                rotation = 90 * rad;\n            }\n            else if (starY === endY && starX > endX)\n            {\n                // go left\n                rotation = -90 * rad;\n            }\n            else if (starX === endX && starY < endY)\n            {\n                // down\n                rotation = 180 * rad;\n            }\n            else if (starX === endX && starY > endY)\n            {\n                // up\n                rotation = 0;\n            }\n            gp.rotation = rotation;\n\n            // Draw the starting rotation point of the bone\n            gp.circle(0, c, refRation * 1.2)\n                .fill({ color: 0x000000, alpha: 0.6 })\n                .stroke({ width: lineWidth, color: this.skeletonXYColor });\n        }\n\n        // Draw the skeleton starting point \"X\" form\n        const startDotSize = lineWidth * 3;\n\n        debugDisplayObjects.skeletonXY.context\n            .moveTo(skeletonX - startDotSize, skeletonY - startDotSize)\n            .lineTo(skeletonX + startDotSize, skeletonY + startDotSize)\n            .moveTo(skeletonX + startDotSize, skeletonY - startDotSize)\n            .lineTo(skeletonX - startDotSize, skeletonY + startDotSize)\n            .stroke();\n    }\n\n    private drawRegionAttachmentsFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n    {\n        const skeleton = spine.skeleton;\n        const slots = skeleton.slots;\n\n        for (let i = 0, len = slots.length; i < len; i++)\n        {\n            const slot = slots[i];\n            const attachment = slot.getAttachment();\n\n            if (attachment === null || !(attachment instanceof RegionAttachment))\n            {\n                continue;\n            }\n\n            const regionAttachment = attachment;\n\n            const vertices = new Float32Array(8);\n\n            regionAttachment.computeWorldVertices(slot, vertices, 0, 2);\n\n            debugDisplayObjects.regionAttachmentsShape.poly(Array.from(vertices.slice(0, 8)));\n        }\n\n        debugDisplayObjects.regionAttachmentsShape.stroke({\n            color: this.regionAttachmentsColor,\n            width: lineWidth\n        });\n    }\n\n    private drawMeshHullAndMeshTriangles(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n    {\n        const skeleton = spine.skeleton;\n        const slots = skeleton.slots;\n\n        for (let i = 0, len = slots.length; i < len; i++)\n        {\n            const slot = slots[i];\n\n            if (!slot.bone.active)\n            {\n                continue;\n            }\n            const attachment = slot.getAttachment();\n\n            if (attachment === null || !(attachment instanceof MeshAttachment))\n            {\n                continue;\n            }\n\n            const meshAttachment = attachment;\n\n            const vertices = new Float32Array(meshAttachment.worldVerticesLength);\n            const triangles = meshAttachment.triangles;\n            let hullLength = meshAttachment.hullLength;\n\n            meshAttachment.computeWorldVertices(slot, 0, meshAttachment.worldVerticesLength, vertices, 0, 2);\n            // draw the skinned mesh (triangle)\n            if (this.drawMeshTriangles)\n            {\n                for (let i = 0, len = triangles.length; i < len; i += 3)\n                {\n                    const v1 = triangles[i] * 2;\n                    const v2 = triangles[i + 1] * 2;\n                    const v3 = triangles[i + 2] * 2;\n\n                    debugDisplayObjects.meshTrianglesLine.context\n                        .moveTo(vertices[v1], vertices[v1 + 1])\n                        .lineTo(vertices[v2], vertices[v2 + 1])\n                        .lineTo(vertices[v3], vertices[v3 + 1]);\n                }\n            }\n\n            // draw skin border\n            if (this.drawMeshHull && hullLength > 0)\n            {\n                hullLength = (hullLength >> 1) * 2;\n                let lastX = vertices[hullLength - 2];\n                let lastY = vertices[hullLength - 1];\n\n                for (let i = 0, len = hullLength; i < len; i += 2)\n                {\n                    const x = vertices[i];\n                    const y = vertices[i + 1];\n\n                    debugDisplayObjects.meshHullLine.context\n                        .moveTo(x, y)\n                        .lineTo(lastX, lastY);\n                    lastX = x;\n                    lastY = y;\n                }\n            }\n        }\n\n        debugDisplayObjects.meshHullLine.stroke({ width: lineWidth, color: this.meshHullColor });\n        debugDisplayObjects.meshTrianglesLine.stroke({ width: lineWidth, color: this.meshTrianglesColor });\n    }\n\n    drawClippingFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n    {\n        const skeleton = spine.skeleton;\n        const slots = skeleton.slots;\n\n        for (let i = 0, len = slots.length; i < len; i++)\n        {\n            const slot = slots[i];\n\n            if (!slot.bone.active)\n            {\n                continue;\n            }\n            const attachment = slot.getAttachment();\n\n            if (attachment === null || !(attachment instanceof ClippingAttachment))\n            {\n                continue;\n            }\n\n            const clippingAttachment = attachment;\n\n            const nn = clippingAttachment.worldVerticesLength;\n            const world = new Float32Array(nn);\n\n            clippingAttachment.computeWorldVertices(slot, 0, nn, world, 0, 2);\n            debugDisplayObjects.clippingPolygon.poly(Array.from(world));\n        }\n\n        debugDisplayObjects.clippingPolygon.stroke({\n            width: lineWidth, color: this.clippingPolygonColor, alpha: 1\n        });\n    }\n\n    drawBoundingBoxesFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n    {\n        // draw the total outline of the bounding box\n        debugDisplayObjects.boundingBoxesRect.lineStyle(lineWidth, this.boundingBoxesRectColor, 5);\n\n        const bounds = new SkeletonBounds();\n\n        bounds.update(spine.skeleton, true);\n\n        debugDisplayObjects.boundingBoxesRect\n            .rect(bounds.minX, bounds.minY, bounds.getWidth(), bounds.getHeight())\n            .stroke({ width: lineWidth, color: this.boundingBoxesRectColor });\n\n        const polygons = bounds.polygons;\n        const drawPolygon = (polygonVertices: ArrayLike<number>, _offset: unknown, count: number): void =>\n        {\n            if (count < 3)\n            {\n                throw new Error('Polygon must contain at least 3 vertices');\n            }\n            const paths:number[] = [];\n            const dotSize = lineWidth * 2;\n\n            for (let i = 0, len = polygonVertices.length; i < len; i += 2)\n            {\n                const x1 = polygonVertices[i];\n                const y1 = polygonVertices[i + 1];\n\n                // draw the bounding box node\n                debugDisplayObjects.boundingBoxesCircle.beginFill(this.boundingBoxesCircleColor);\n                debugDisplayObjects.boundingBoxesCircle.drawCircle(x1, y1, dotSize);\n                debugDisplayObjects.boundingBoxesCircle.fill(0);\n\n                paths.push(x1, y1);\n            }\n\n            // draw the bounding box area\n            debugDisplayObjects.boundingBoxesPolygon\n                .poly(paths)\n                .fill({\n                    color: this.boundingBoxesPolygonColor,\n                    alpha: 0.1\n                })\n                .stroke({\n                    width: lineWidth,\n                    color: this.boundingBoxesPolygonColor\n                });\n        };\n\n        for (let i = 0, len = polygons.length; i < len; i++)\n        {\n            const polygon = polygons[i];\n\n            drawPolygon(polygon, 0, polygon.length);\n        }\n    }\n\n    private drawPathsFunc(spine: Spine, debugDisplayObjects: DebugDisplayObjects, lineWidth: number): void\n    {\n        const skeleton = spine.skeleton;\n        const slots = skeleton.slots;\n\n        for (let i = 0, len = slots.length; i < len; i++)\n        {\n            const slot = slots[i];\n\n            if (!slot.bone.active)\n            {\n                continue;\n            }\n            const attachment = slot.getAttachment();\n\n            if (attachment === null || !(attachment instanceof PathAttachment))\n            {\n                continue;\n            }\n\n            const pathAttachment = attachment;\n            let nn = pathAttachment.worldVerticesLength;\n            const world = new Float32Array(nn);\n\n            pathAttachment.computeWorldVertices(slot, 0, nn, world, 0, 2);\n            let x1 = world[2];\n            let y1 = world[3];\n            let x2 = 0;\n            let y2 = 0;\n\n            if (pathAttachment.closed)\n            {\n                const cx1 = world[0];\n                const cy1 = world[1];\n                const cx2 = world[nn - 2];\n                const cy2 = world[nn - 1];\n\n                x2 = world[nn - 4];\n                y2 = world[nn - 3];\n\n                // curve\n                debugDisplayObjects.pathsCurve.moveTo(x1, y1);\n                debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2);\n\n                // handle\n                debugDisplayObjects.pathsLine.moveTo(x1, y1);\n                debugDisplayObjects.pathsLine.lineTo(cx1, cy1);\n                debugDisplayObjects.pathsLine.moveTo(x2, y2);\n                debugDisplayObjects.pathsLine.lineTo(cx2, cy2);\n            }\n            nn -= 4;\n            for (let ii = 4; ii < nn; ii += 6)\n            {\n                const cx1 = world[ii];\n                const cy1 = world[ii + 1];\n                const cx2 = world[ii + 2];\n                const cy2 = world[ii + 3];\n\n                x2 = world[ii + 4];\n                y2 = world[ii + 5];\n                // curve\n                debugDisplayObjects.pathsCurve.moveTo(x1, y1);\n                debugDisplayObjects.pathsCurve.bezierCurveTo(cx1, cy1, cx2, cy2, x2, y2);\n\n                // handle\n                debugDisplayObjects.pathsLine.moveTo(x1, y1);\n                debugDisplayObjects.pathsLine.lineTo(cx1, cy1);\n                debugDisplayObjects.pathsLine.moveTo(x2, y2);\n                debugDisplayObjects.pathsLine.lineTo(cx2, cy2);\n                x1 = x2;\n                y1 = y2;\n            }\n        }\n\n        debugDisplayObjects.pathsCurve.stroke({ width: lineWidth, color: this.pathsCurveColor });\n        debugDisplayObjects.pathsLine.stroke({ width: lineWidth, color: this.pathsLineColor });\n    }\n\n    public unregisterSpine(spine: Spine): void\n    {\n        if (!this.registeredSpines.has(spine))\n        {\n            console.warn('SpineDebugRenderer.unregisterSpine() - spine is not registered, can\\'t unregister!', spine);\n        }\n        const debugDisplayObjects = this.registeredSpines.get(spine);\n\n        if (!debugDisplayObjects)\n        {\n            return;\n        }\n\n        spine.state.removeListener(debugDisplayObjects.eventCallback);\n\n        debugDisplayObjects.parentDebugContainer.destroy({ textureSource: true, children: true, texture: true });\n        this.registeredSpines.delete(spine);\n    }\n}\n"],"names":["i","len"],"mappings":"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"}