{"version":3,"file":"Skeleton.mjs","sources":["../../src/core/Skeleton.ts"],"sourcesContent":["import { Attachment, RegionAttachment, MeshAttachment, PathAttachment } from './attachments';\nimport { Bone } from './Bone';\nimport { Slot } from './Slot';\nimport type { Updatable } from './Updatable';\nimport type { SkeletonData } from './SkeletonData';\nimport { IkConstraint } from './IkConstraint';\nimport { TransformConstraint } from './TransformConstraint';\nimport { PathConstraint } from './PathConstraint';\nimport type { Skin } from './Skin';\nimport { Color, MathUtils, NumberArrayLike, settings, Utils, Vector2, ISkeleton } from '@pixi-spine/base';\n\n/** Stores the current pose for a skeleton.\n *\n * See [Instance objects](http://esotericsoftware.com/spine-runtime-architecture#Instance-objects) in the Spine Runtimes Guide.\n * @public\n * */\nexport class Skeleton implements ISkeleton<SkeletonData, Bone, Slot, Skin> {\n    /** The skeleton's setup pose data. */\n    data: SkeletonData;\n\n    /** The skeleton's bones, sorted parent first. The root bone is always the first bone. */\n    bones: Array<Bone>;\n\n    /** The skeleton's slots. */\n    slots: Array<Slot>;\n\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: Array<Slot>;\n\n    /** The skeleton's IK constraints. */\n    ikConstraints: Array<IkConstraint>;\n\n    /** The skeleton's transform constraints. */\n    transformConstraints: Array<TransformConstraint>;\n\n    /** The skeleton's path constraints. */\n    pathConstraints: Array<PathConstraint>;\n\n    /** The list of bones and constraints, sorted in the order they should be updated, as computed by {@link #updateCache()}. */\n    _updateCache = new Array<Updatable>();\n\n    /** The skeleton's current skin. May be null. */\n    skin: Skin | null = null;\n\n    /** The color to tint all the skeleton's attachments. */\n    color: Color;\n\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\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\n    /** Sets the skeleton X position, which is added to the root bone worldX position. */\n    x = 0;\n\n    /** Sets the skeleton Y position, which is added to the root bone worldY position. */\n    y = 0;\n\n    constructor(data: SkeletonData) {\n        if (!data) throw new Error('data cannot be null.');\n        this.data = data;\n\n        this.bones = new Array<Bone>();\n        for (let i = 0; i < data.bones.length; i++) {\n            const boneData = data.bones[i];\n            let bone: Bone;\n\n            if (!boneData.parent) bone = new Bone(boneData, this, null);\n            else {\n                const parent = this.bones[boneData.parent.index];\n\n                bone = new Bone(boneData, this, parent);\n                parent.children.push(bone);\n            }\n            this.bones.push(bone);\n        }\n\n        this.slots = new Array<Slot>();\n        this.drawOrder = new Array<Slot>();\n        for (let i = 0; i < data.slots.length; i++) {\n            const slotData = data.slots[i];\n            const bone = this.bones[slotData.boneData.index];\n            const slot = new Slot(slotData, bone);\n\n            this.slots.push(slot);\n            this.drawOrder.push(slot);\n        }\n\n        this.ikConstraints = new Array<IkConstraint>();\n        for (let i = 0; i < data.ikConstraints.length; i++) {\n            const ikConstraintData = data.ikConstraints[i];\n\n            this.ikConstraints.push(new IkConstraint(ikConstraintData, this));\n        }\n\n        this.transformConstraints = new Array<TransformConstraint>();\n        for (let i = 0; i < data.transformConstraints.length; i++) {\n            const transformConstraintData = data.transformConstraints[i];\n\n            this.transformConstraints.push(new TransformConstraint(transformConstraintData, this));\n        }\n\n        this.pathConstraints = new Array<PathConstraint>();\n        for (let i = 0; i < data.pathConstraints.length; i++) {\n            const pathConstraintData = data.pathConstraints[i];\n\n            this.pathConstraints.push(new PathConstraint(pathConstraintData, this));\n        }\n\n        this.color = new Color(1, 1, 1, 1);\n        this.updateCache();\n    }\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        const updateCache = this._updateCache;\n\n        updateCache.length = 0;\n\n        const bones = this.bones;\n\n        for (let i = 0, n = bones.length; i < n; i++) {\n            const bone = bones[i];\n\n            bone.sorted = bone.data.skinRequired;\n            bone.active = !bone.sorted;\n        }\n\n        if (this.skin) {\n            const skinBones = this.skin.bones;\n\n            for (let i = 0, n = this.skin.bones.length; i < n; i++) {\n                let bone: Bone | null = this.bones[skinBones[i].index];\n\n                do {\n                    bone.sorted = false;\n                    bone.active = true;\n                    bone = bone.parent;\n                } while (bone);\n            }\n        }\n\n        // IK first, lowest hierarchy depth first.\n        const ikConstraints = this.ikConstraints;\n        const transformConstraints = this.transformConstraints;\n        const pathConstraints = this.pathConstraints;\n        const ikCount = ikConstraints.length;\n        const transformCount = transformConstraints.length;\n        const pathCount = pathConstraints.length;\n        const constraintCount = ikCount + transformCount + pathCount;\n\n        // eslint-disable-next-line no-restricted-syntax, no-labels\n        outer: for (let i = 0; i < constraintCount; i++) {\n            for (let ii = 0; ii < ikCount; ii++) {\n                const constraint = ikConstraints[ii];\n\n                if (constraint.data.order == i) {\n                    this.sortIkConstraint(constraint);\n                    // eslint-disable-next-line no-labels\n                    continue outer;\n                }\n            }\n            for (let ii = 0; ii < transformCount; ii++) {\n                const constraint = transformConstraints[ii];\n\n                if (constraint.data.order == i) {\n                    this.sortTransformConstraint(constraint);\n                    // eslint-disable-next-line no-labels\n                    continue outer;\n                }\n            }\n            for (let ii = 0; ii < pathCount; ii++) {\n                const constraint = pathConstraints[ii];\n\n                if (constraint.data.order == i) {\n                    this.sortPathConstraint(constraint);\n                    // eslint-disable-next-line no-labels\n                    continue outer;\n                }\n            }\n        }\n\n        for (let i = 0, n = bones.length; i < n; i++) this.sortBone(bones[i]);\n    }\n\n    sortIkConstraint(constraint: IkConstraint) {\n        constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));\n        if (!constraint.active) return;\n\n        const target = constraint.target;\n\n        this.sortBone(target);\n\n        const constrained = constraint.bones;\n        const parent = constrained[0];\n\n        this.sortBone(parent);\n\n        if (constrained.length == 1) {\n            this._updateCache.push(constraint);\n            this.sortReset(parent.children);\n        } else {\n            const child = constrained[constrained.length - 1];\n\n            this.sortBone(child);\n\n            this._updateCache.push(constraint);\n\n            this.sortReset(parent.children);\n            child.sorted = true;\n        }\n    }\n\n    sortPathConstraint(constraint: PathConstraint) {\n        constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));\n        if (!constraint.active) return;\n\n        const slot = constraint.target;\n        const slotIndex = slot.data.index;\n        const slotBone = slot.bone;\n\n        if (this.skin) this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);\n        if (this.data.defaultSkin && this.data.defaultSkin != this.skin) this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);\n        for (let i = 0, n = this.data.skins.length; i < n; i++) this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);\n\n        const attachment = slot.getAttachment();\n\n        if (attachment instanceof PathAttachment) this.sortPathConstraintAttachmentWith(attachment, slotBone);\n\n        const constrained = constraint.bones;\n        const boneCount = constrained.length;\n\n        for (let i = 0; i < boneCount; i++) this.sortBone(constrained[i]);\n\n        this._updateCache.push(constraint);\n\n        for (let i = 0; i < boneCount; i++) this.sortReset(constrained[i].children);\n        for (let i = 0; i < boneCount; i++) constrained[i].sorted = true;\n    }\n\n    sortTransformConstraint(constraint: TransformConstraint) {\n        constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true)));\n        if (!constraint.active) return;\n\n        this.sortBone(constraint.target);\n\n        const constrained = constraint.bones;\n        const boneCount = constrained.length;\n\n        if (constraint.data.local) {\n            for (let i = 0; i < boneCount; i++) {\n                const child = constrained[i];\n\n                this.sortBone(child.parent);\n                this.sortBone(child);\n            }\n        } else {\n            for (let i = 0; i < boneCount; i++) {\n                this.sortBone(constrained[i]);\n            }\n        }\n\n        this._updateCache.push(constraint);\n\n        for (let i = 0; i < boneCount; i++) this.sortReset(constrained[i].children);\n        for (let i = 0; i < boneCount; i++) constrained[i].sorted = true;\n    }\n\n    sortPathConstraintAttachment(skin: Skin, slotIndex: number, slotBone: Bone) {\n        const attachments = skin.attachments[slotIndex];\n\n        if (!attachments) return;\n        for (const key in attachments) {\n            this.sortPathConstraintAttachmentWith(attachments[key], slotBone);\n        }\n    }\n\n    sortPathConstraintAttachmentWith(attachment: Attachment, slotBone: Bone) {\n        if (!(attachment instanceof PathAttachment)) return;\n        const pathBones = (<PathAttachment>attachment).bones;\n\n        if (!pathBones) this.sortBone(slotBone);\n        else {\n            const bones = this.bones;\n\n            for (let i = 0, n = pathBones.length; i < n; ) {\n                let nn = pathBones[i++];\n\n                nn += i;\n                while (i < nn) this.sortBone(bones[pathBones[i++]]);\n            }\n        }\n    }\n\n    sortBone(bone: Bone) {\n        if (!bone) return;\n        if (bone.sorted) return;\n        const parent = bone.parent;\n\n        if (parent) this.sortBone(parent);\n        bone.sorted = true;\n        this._updateCache.push(bone);\n    }\n\n    sortReset(bones: Array<Bone>) {\n        for (let i = 0, n = bones.length; i < n; i++) {\n            const bone = bones[i];\n\n            if (!bone.active) continue;\n            if (bone.sorted) this.sortReset(bone.children);\n            bone.sorted = false;\n        }\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() {\n        const bones = this.bones;\n\n        for (let i = 0, n = bones.length; i < n; i++) {\n            const bone = bones[i];\n\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\n        const updateCache = this._updateCache;\n\n        for (let i = 0, n = updateCache.length; i < n; i++) updateCache[i].update();\n    }\n\n    updateWorldTransformWith(parent: Bone) {\n        // Apply the parent bone transform to the root bone. The root bone always inherits scale, rotation and reflection.\n        const rootBone = this.getRootBone();\n        const pa = parent.matrix.a;\n        const pb = parent.matrix.c;\n        const pc = parent.matrix.b;\n        const pd = parent.matrix.d;\n\n        rootBone.matrix.tx = pa * this.x + pb * this.y + parent.worldX;\n        rootBone.matrix.ty = pc * this.x + pd * this.y + parent.worldY;\n\n        const rotationY = rootBone.rotation + 90 + rootBone.shearY;\n        const la = MathUtils.cosDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;\n        const lb = MathUtils.cosDeg(rotationY) * rootBone.scaleY;\n        const lc = MathUtils.sinDeg(rootBone.rotation + rootBone.shearX) * rootBone.scaleX;\n        const ld = MathUtils.sinDeg(rotationY) * rootBone.scaleY;\n\n        const sx = this.scaleX;\n        const sy = settings.yDown ? -this.scaleY : this.scaleY;\n\n        rootBone.matrix.a = (pa * la + pb * lc) * sx;\n        rootBone.matrix.c = (pa * lb + pb * ld) * sx;\n        rootBone.matrix.b = (pc * la + pd * lc) * sy;\n        rootBone.matrix.d = (pc * lb + pd * ld) * sy;\n\n        // Update everything except root bone.\n        const updateCache = this._updateCache;\n\n        for (let i = 0, n = updateCache.length; i < n; i++) {\n            const updatable = updateCache[i];\n\n            if (updatable != rootBone) updatable.update();\n        }\n    }\n\n    /** Sets the bones, constraints, and slots to their setup pose values. */\n    setToSetupPose() {\n        this.setBonesToSetupPose();\n        this.setSlotsToSetupPose();\n    }\n\n    /** Sets the bones and constraints to their setup pose values. */\n    setBonesToSetupPose() {\n        const bones = this.bones;\n\n        for (let i = 0, n = bones.length; i < n; i++) bones[i].setToSetupPose();\n\n        const ikConstraints = this.ikConstraints;\n\n        for (let i = 0, n = ikConstraints.length; i < n; i++) {\n            const constraint = ikConstraints[i];\n\n            constraint.mix = constraint.data.mix;\n            constraint.softness = constraint.data.softness;\n            constraint.bendDirection = constraint.data.bendDirection;\n            constraint.compress = constraint.data.compress;\n            constraint.stretch = constraint.data.stretch;\n        }\n\n        const transformConstraints = this.transformConstraints;\n\n        for (let i = 0, n = transformConstraints.length; i < n; i++) {\n            const constraint = transformConstraints[i];\n            const data = constraint.data;\n\n            constraint.mixRotate = data.mixRotate;\n            constraint.mixX = data.mixX;\n            constraint.mixY = data.mixY;\n            constraint.mixScaleX = data.mixScaleX;\n            constraint.mixScaleY = data.mixScaleY;\n            constraint.mixShearY = data.mixShearY;\n        }\n\n        const pathConstraints = this.pathConstraints;\n\n        for (let i = 0, n = pathConstraints.length; i < n; i++) {\n            const constraint = pathConstraints[i];\n            const data = constraint.data;\n\n            constraint.position = data.position;\n            constraint.spacing = data.spacing;\n            constraint.mixRotate = data.mixRotate;\n            constraint.mixX = data.mixX;\n            constraint.mixY = data.mixY;\n        }\n    }\n\n    /** Sets the slots and draw order to their setup pose values. */\n    setSlotsToSetupPose() {\n        const slots = this.slots;\n\n        Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);\n        for (let i = 0, n = slots.length; i < n; i++) slots[i].setToSetupPose();\n    }\n\n    /** @returns May return null. */\n    getRootBone() {\n        if (this.bones.length == 0) return null;\n\n        return this.bones[0];\n    }\n\n    /** @returns May be null. */\n    findBone(boneName: string) {\n        if (!boneName) throw new Error('boneName cannot be null.');\n        const bones = this.bones;\n\n        for (let i = 0, n = bones.length; i < n; i++) {\n            const bone = bones[i];\n\n            if (bone.data.name == boneName) return bone;\n        }\n\n        return null;\n    }\n\n    /** @returns -1 if the bone was not found. */\n    findBoneIndex(boneName: string) {\n        if (!boneName) throw new Error('boneName cannot be null.');\n        const bones = this.bones;\n\n        for (let i = 0, n = bones.length; i < n; i++) if (bones[i].data.name == boneName) return i;\n\n        return -1;\n    }\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: string) {\n        if (!slotName) throw new Error('slotName cannot be null.');\n        const slots = this.slots;\n\n        for (let i = 0, n = slots.length; i < n; i++) {\n            const slot = slots[i];\n\n            if (slot.data.name == slotName) return slot;\n        }\n\n        return null;\n    }\n\n    /** @returns -1 if the bone was not found. */\n    findSlotIndex(slotName: string) {\n        if (!slotName) throw new Error('slotName cannot be null.');\n        const slots = this.slots;\n\n        for (let i = 0, n = slots.length; i < n; i++) if (slots[i].data.name == slotName) return i;\n\n        return -1;\n    }\n\n    /** Sets a skin by name.\n     *\n     * See {@link #setSkin()}. */\n    setSkinByName(skinName: string) {\n        const skin = this.data.findSkin(skinName);\n\n        if (!skin) throw new Error(`Skin not found: ${skinName}`);\n        this.setSkin(skin);\n    }\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: Skin) {\n        if (newSkin == this.skin) return;\n        if (newSkin) {\n            if (this.skin) newSkin.attachAll(this, this.skin);\n            else {\n                const slots = this.slots;\n\n                for (let i = 0, n = slots.length; i < n; i++) {\n                    const slot = slots[i];\n                    const name = slot.data.attachmentName;\n\n                    if (name) {\n                        const attachment = newSkin.getAttachment(i, name);\n\n                        if (attachment) slot.setAttachment(attachment);\n                    }\n                }\n            }\n        }\n        this.skin = newSkin;\n        this.updateCache();\n    }\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: string, attachmentName: string): Attachment | null {\n        const slot = this.data.findSlot(slotName);\n\n        if (!slot) throw new Error(`Can't find slot with name ${slotName}`);\n\n        return this.getAttachment(slot.index, attachmentName);\n    }\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: number, attachmentName: string): Attachment | null {\n        if (!attachmentName) throw new Error('attachmentName cannot be null.');\n        if (this.skin) {\n            const attachment = this.skin.getAttachment(slotIndex, attachmentName);\n\n            if (attachment) return attachment;\n        }\n        if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);\n\n        return null;\n    }\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: string, attachmentName: string) {\n        if (!slotName) throw new Error('slotName cannot be null.');\n        const slots = this.slots;\n\n        for (let i = 0, n = slots.length; i < n; i++) {\n            const slot = slots[i];\n\n            if (slot.data.name == slotName) {\n                let attachment: Attachment | null = null;\n\n                if (attachmentName) {\n                    attachment = this.getAttachment(i, attachmentName);\n                    if (!attachment) throw new Error(`Attachment not found: ${attachmentName}, for slot: ${slotName}`);\n                }\n                slot.setAttachment(attachment);\n\n                return;\n            }\n        }\n        throw new Error(`Slot not found: ${slotName}`);\n    }\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: string) {\n        if (!constraintName) throw new Error('constraintName cannot be null.');\n        const ikConstraints = this.ikConstraints;\n\n        for (let i = 0, n = ikConstraints.length; i < n; i++) {\n            const ikConstraint = ikConstraints[i];\n\n            if (ikConstraint.data.name == constraintName) return ikConstraint;\n        }\n\n        return null;\n    }\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: string) {\n        if (!constraintName) throw new Error('constraintName cannot be null.');\n        const transformConstraints = this.transformConstraints;\n\n        for (let i = 0, n = transformConstraints.length; i < n; i++) {\n            const constraint = transformConstraints[i];\n\n            if (constraint.data.name == constraintName) return constraint;\n        }\n\n        return null;\n    }\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: string) {\n        if (!constraintName) throw new Error('constraintName cannot be null.');\n        const pathConstraints = this.pathConstraints;\n\n        for (let i = 0, n = pathConstraints.length; i < n; i++) {\n            const constraint = pathConstraints[i];\n\n            if (constraint.data.name == constraintName) return constraint;\n        }\n\n        return null;\n    }\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        const offset = new Vector2();\n        const size = new Vector2();\n\n        this.getBounds(offset, size);\n\n        return { x: offset.x, y: offset.y, width: size.x, height: size.y };\n    }\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    getBounds(offset: Vector2, size: Vector2, temp: Array<number> = new Array<number>(2)) {\n        if (!offset) throw new Error('offset cannot be null.');\n        if (!size) throw new Error('size cannot be null.');\n        const drawOrder = this.drawOrder;\n        let minX = Number.POSITIVE_INFINITY;\n        let minY = Number.POSITIVE_INFINITY;\n        let maxX = Number.NEGATIVE_INFINITY;\n        let maxY = Number.NEGATIVE_INFINITY;\n\n        for (let i = 0, n = drawOrder.length; i < n; i++) {\n            const slot = drawOrder[i];\n\n            if (!slot.bone.active) continue;\n            let verticesLength = 0;\n            let vertices: NumberArrayLike | null = null;\n            const attachment = slot.getAttachment();\n\n            if (attachment instanceof RegionAttachment) {\n                verticesLength = 8;\n                vertices = Utils.setArraySize(temp, verticesLength, 0);\n                (<RegionAttachment>attachment).computeWorldVertices(slot, vertices, 0, 2);\n            } else if (attachment instanceof MeshAttachment) {\n                const mesh = <MeshAttachment>attachment;\n\n                verticesLength = mesh.worldVerticesLength;\n                vertices = Utils.setArraySize(temp, verticesLength, 0);\n                mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);\n            }\n            if (vertices) {\n                for (let ii = 0, nn = vertices.length; ii < nn; ii += 2) {\n                    const x = vertices[ii];\n                    const y = vertices[ii + 1];\n\n                    minX = Math.min(minX, x);\n                    minY = Math.min(minY, y);\n                    maxX = Math.max(maxX, x);\n                    maxY = Math.max(maxY, y);\n                }\n            }\n        }\n        offset.set(minX, minY);\n        size.set(maxX - minX, maxY - minY);\n    }\n\n    get flipX(): boolean {\n        return this.scaleX == -1;\n    }\n\n    set flipX(value: boolean) {\n        if (!Skeleton.deprecatedWarning1) {\n            Skeleton.deprecatedWarning1 = true;\n            console.warn('Spine Deprecation Warning: `Skeleton.flipX/flipY` was deprecated, please use scaleX/scaleY');\n        }\n        this.scaleX = value ? 1.0 : -1.0;\n    }\n\n    get flipY(): boolean {\n        return this.scaleY == -1;\n    }\n\n    set flipY(value: boolean) {\n        if (!Skeleton.deprecatedWarning1) {\n            Skeleton.deprecatedWarning1 = true;\n            console.warn('Spine Deprecation Warning: `Skeleton.flipX/flipY` was deprecated, please use scaleX/scaleY');\n        }\n        this.scaleY = value ? 1.0 : -1.0;\n    }\n\n    private static deprecatedWarning1 = false;\n}\n"],"names":[],"mappings":"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"}