{"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, Utils, Vector2, ISkeleton } from '@pixi-spine/base';\n\n/**\n * @public\n */\nexport class Skeleton implements ISkeleton<SkeletonData, Bone, Slot, Skin> {\n    data: SkeletonData;\n    bones: Array<Bone>;\n    slots: Array<Slot>;\n    drawOrder: Array<Slot>;\n    ikConstraints: Array<IkConstraint>;\n    transformConstraints: Array<TransformConstraint>;\n    pathConstraints: Array<PathConstraint>;\n    _updateCache = new Array<Updatable>();\n    updateCacheReset = new Array<Updatable>();\n    skin: Skin;\n    color: Color;\n    time = 0;\n    scaleX = 1;\n    scaleY = 1;\n    x = 0;\n    y = 0;\n\n    constructor(data: SkeletonData) {\n        if (data == null) 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 == null) 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    updateCache() {\n        const updateCache = this._updateCache;\n\n        updateCache.length = 0;\n        this.updateCacheReset.length = 0;\n\n        const bones = this.bones;\n\n        for (let i = 0, n = bones.length; i < n; i++) bones[i].sorted = false;\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        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            const child = constrained[constrained.length - 1];\n\n            if (!(this._updateCache.indexOf(child) > -1)) this.updateCacheReset.push(child);\n        }\n\n        this._updateCache.push(constraint);\n\n        this.sortReset(parent.children);\n        constrained[constrained.length - 1].sorted = true;\n    }\n\n    sortPathConstraint(constraint: PathConstraint) {\n        const slot = constraint.target;\n        const slotIndex = slot.data.index;\n        const slotBone = slot.bone;\n\n        if (this.skin != null) this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);\n        if (this.data.defaultSkin != null && 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        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                if (!(this._updateCache.indexOf(child) > -1)) this.updateCacheReset.push(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 ii = 0; ii < boneCount; ii++) this.sortReset(constrained[ii].children);\n        for (let ii = 0; ii < boneCount; ii++) constrained[ii].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 == null) this.sortBone(slotBone);\n        else {\n            const bones = this.bones;\n            let i = 0;\n\n            while (i < pathBones.length) {\n                const boneCount = pathBones[i++];\n\n                for (let n = i + boneCount; i < n; i++) {\n                    const boneIndex = pathBones[i];\n\n                    this.sortBone(bones[boneIndex]);\n                }\n            }\n        }\n    }\n\n    sortBone(bone: Bone) {\n        if (bone.sorted) return;\n        const parent = bone.parent;\n\n        if (parent != null) 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.sorted) this.sortReset(bone.children);\n            bone.sorted = false;\n        }\n    }\n\n    /** Updates the world transform for each bone and applies constraints. */\n    updateWorldTransform() {\n        const updateCacheReset = this.updateCacheReset;\n\n        for (let i = 0, n = updateCacheReset.length; i < n; i++) {\n            const bone = updateCacheReset[i] as Bone;\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            bone.appliedValid = true;\n        }\n        const updateCache = this._updateCache;\n\n        for (let i = 0, n = updateCache.length; i < n; i++) updateCache[i].update();\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.bendDirection = constraint.data.bendDirection;\n            constraint.mix = constraint.data.mix;\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.rotateMix = data.rotateMix;\n            constraint.translateMix = data.translateMix;\n            constraint.scaleMix = data.scaleMix;\n            constraint.shearMix = data.shearMix;\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.rotateMix = data.rotateMix;\n            constraint.translateMix = data.translateMix;\n        }\n    }\n\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    /** @return May return null. */\n    getRootBone() {\n        if (this.bones.length == 0) return null;\n\n        return this.bones[0];\n    }\n\n    /** @return May be null. */\n    findBone(boneName: string) {\n        if (boneName == null) 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    /** @return -1 if the bone was not found. */\n    findBoneIndex(boneName: string) {\n        if (boneName == null) 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    /** @return May be null. */\n    findSlot(slotName: string) {\n        if (slotName == null) 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    /** @return -1 if the bone was not found. */\n    findSlotIndex(slotName: string) {\n        if (slotName == null) 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     * @see #setSkin(Skin) */\n    setSkinByName(skinName: string) {\n        const skin = this.data.findSkin(skinName);\n\n        if (skin == null) 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#getDefaultSkin() default skin}.\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     * @param newSkin May be null. */\n    setSkin(newSkin: Skin | null) {\n        if (newSkin != null) {\n            if (this.skin != null) 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 != null) {\n                        const attachment: Attachment = newSkin.getAttachment(i, name);\n\n                        if (attachment != null) slot.setAttachment(attachment);\n                    }\n                }\n            }\n        }\n        this.skin = newSkin;\n    }\n\n    /** @return May be null. */\n    getAttachmentByName(slotName: string, attachmentName: string): Attachment {\n        return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName);\n    }\n\n    /** @return May be null. */\n    getAttachment(slotIndex: number, attachmentName: string): Attachment {\n        if (attachmentName == null) throw new Error('attachmentName cannot be null.');\n        if (this.skin != null) {\n            const attachment: Attachment = this.skin.getAttachment(slotIndex, attachmentName);\n\n            if (attachment != null) return attachment;\n        }\n        if (this.data.defaultSkin != null) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);\n\n        return null;\n    }\n\n    /** @param attachmentName May be null. */\n    setAttachment(slotName: string, attachmentName: string) {\n        if (slotName == null) 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;\n\n                if (attachmentName != null) {\n                    attachment = this.getAttachment(i, attachmentName);\n                    if (attachment == null) 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    /** @return May be null. */\n    findIkConstraint(constraintName: string) {\n        if (constraintName == null) 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    /** @return May be null. */\n    findTransformConstraint(constraintName: string) {\n        if (constraintName == null) 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    /** @return May be null. */\n    findPathConstraint(constraintName: string) {\n        if (constraintName == null) 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.\n     * @param offset The distance from the skeleton origin to the bottom left corner of the AABB.\n     * @param size The width and height of the AABB.\n     * @param temp Working memory */\n    getBounds(offset: Vector2, size: Vector2, temp: Array<number>) {\n        if (offset == null) throw new Error('offset cannot be null.');\n        if (size == null) 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            let verticesLength = 0;\n            let vertices: ArrayLike<number> = 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.bone, 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 != null) {\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    update(delta: number) {\n        this.time += delta;\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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"}