{"version":3,"file":"TransformConstraint.mjs","sources":["../../src/core/TransformConstraint.ts"],"sourcesContent":["import type { Updatable } from './Updatable';\nimport type { TransformConstraintData } from './TransformConstraintData';\nimport type { Bone } from './Bone';\nimport { MathUtils, Vector2 } from '@pixi-spine/base';\nimport type { Skeleton } from './Skeleton';\n\n/** Stores the current pose for a transform constraint. A transform constraint adjusts the world transform of the constrained\n * bones to match that of the target bone.\n *\n * See [Transform constraints](http://esotericsoftware.com/spine-transform-constraints) in the Spine User Guide.\n * @public\n * */\nexport class TransformConstraint implements Updatable {\n    /** The transform constraint's setup pose data. */\n    data: TransformConstraintData;\n\n    /** The bones that will be modified by this transform constraint. */\n    bones: Array<Bone>;\n\n    /** The target bone whose world transform will be copied to the constrained bones. */\n    target: Bone;\n\n    mixRotate = 0;\n    mixX = 0;\n    mixY = 0;\n    mixScaleX = 0;\n    mixScaleY = 0;\n    mixShearY = 0;\n\n    temp = new Vector2();\n    active = false;\n\n    constructor(data: TransformConstraintData, skeleton: Skeleton) {\n        if (!data) throw new Error('data cannot be null.');\n        if (!skeleton) throw new Error('skeleton cannot be null.');\n        this.data = 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        this.bones = new Array<Bone>();\n        for (let i = 0; i < data.bones.length; i++) {\n            const bone = skeleton.findBone(data.bones[i].name);\n\n            if (!bone) throw new Error(`Couldn't find bone ${data.bones[i].name}.`);\n            this.bones.push(bone);\n        }\n        const target = skeleton.findBone(data.target.name);\n\n        if (!target) throw new Error(`Couldn't find target bone ${data.target.name}.`);\n        this.target = target;\n    }\n\n    isActive() {\n        return this.active;\n    }\n\n    update() {\n        if (this.mixRotate == 0 && this.mixX == 0 && this.mixY == 0 && this.mixScaleX == 0 && this.mixScaleX == 0 && this.mixShearY == 0) return;\n\n        if (this.data.local) {\n            if (this.data.relative) this.applyRelativeLocal();\n            else this.applyAbsoluteLocal();\n        } else if (this.data.relative) this.applyRelativeWorld();\n        else this.applyAbsoluteWorld();\n    }\n\n    applyAbsoluteWorld() {\n        const mixRotate = this.mixRotate;\n        const mixX = this.mixX;\n        const mixY = this.mixY;\n        const mixScaleX = this.mixScaleX;\n        const mixScaleY = this.mixScaleY;\n        const mixShearY = this.mixShearY;\n        const translate = mixX != 0 || mixY != 0;\n\n        const target = this.target;\n        const targetMat = target.matrix;\n        const ta = targetMat.a;\n        const tb = targetMat.c;\n        const tc = targetMat.b;\n        const td = targetMat.d;\n        const degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad;\n        const offsetRotation = this.data.offsetRotation * degRadReflect;\n        const offsetShearY = this.data.offsetShearY * degRadReflect;\n\n        const bones = this.bones;\n\n        for (let i = 0, n = bones.length; i < n; i++) {\n            const bone = bones[i];\n            const mat = bone.matrix;\n\n            if (mixRotate != 0) {\n                const a = mat.a;\n                const b = mat.c;\n                const c = mat.b;\n                const d = mat.d;\n                let r = Math.atan2(tc, ta) - Math.atan2(c, a) + offsetRotation;\n\n                if (r > MathUtils.PI) r -= MathUtils.PI2;\n                else if (r < -MathUtils.PI)\n                    //\n                    r += MathUtils.PI2;\n                r *= mixRotate;\n                const cos = Math.cos(r);\n                const sin = Math.sin(r);\n\n                mat.a = cos * a - sin * c;\n                mat.c = cos * b - sin * d;\n                mat.b = sin * a + cos * c;\n                mat.d = sin * b + cos * d;\n            }\n\n            if (translate) {\n                const temp = this.temp;\n\n                target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n                mat.tx += (temp.x - mat.tx) * mixX;\n                mat.ty += (temp.y - mat.ty) * mixY;\n            }\n\n            if (mixScaleX != 0) {\n                let s = Math.sqrt(mat.a * mat.a + mat.b * mat.b);\n\n                if (s != 0) s = (s + (Math.sqrt(ta * ta + tc * tc) - s + this.data.offsetScaleX) * mixScaleX) / s;\n                mat.a *= s;\n                mat.b *= s;\n            }\n            if (mixScaleY != 0) {\n                let s = Math.sqrt(mat.c * mat.c + mat.d * mat.d);\n\n                if (s != 0) s = (s + (Math.sqrt(tb * tb + td * td) - s + this.data.offsetScaleY) * mixScaleY) / s;\n                mat.c *= s;\n                mat.d *= s;\n            }\n\n            if (mixShearY > 0) {\n                const b = mat.c;\n                const d = mat.d;\n                const by = Math.atan2(d, b);\n                let r = Math.atan2(td, tb) - Math.atan2(tc, ta) - (by - Math.atan2(mat.b, mat.a));\n\n                if (r > MathUtils.PI) r -= MathUtils.PI2;\n                else if (r < -MathUtils.PI)\n                    //\n                    r += MathUtils.PI2;\n                r = by + (r + offsetShearY) * mixShearY;\n                const s = Math.sqrt(b * b + d * d);\n\n                mat.c = Math.cos(r) * s;\n                mat.d = Math.sin(r) * s;\n            }\n\n            bone.updateAppliedTransform();\n        }\n    }\n\n    applyRelativeWorld() {\n        const mixRotate = this.mixRotate;\n        const mixX = this.mixX;\n        const mixY = this.mixY;\n        const mixScaleX = this.mixScaleX;\n        const mixScaleY = this.mixScaleY;\n        const mixShearY = this.mixShearY;\n        const translate = mixX != 0 || mixY != 0;\n\n        const target = this.target;\n        const targetMat = target.matrix;\n        const ta = targetMat.a;\n        const tb = targetMat.c;\n        const tc = targetMat.b;\n        const td = targetMat.d;\n        const degRadReflect = ta * td - tb * tc > 0 ? MathUtils.degRad : -MathUtils.degRad;\n        const offsetRotation = this.data.offsetRotation * degRadReflect;\n        const offsetShearY = this.data.offsetShearY * degRadReflect;\n\n        const bones = this.bones;\n\n        for (let i = 0, n = bones.length; i < n; i++) {\n            const bone = bones[i];\n            const mat = bone.matrix;\n\n            if (mixRotate != 0) {\n                const a = mat.a;\n                const b = mat.c;\n                const c = mat.b;\n                const d = mat.d;\n                let r = Math.atan2(tc, ta) + offsetRotation;\n\n                if (r > MathUtils.PI) r -= MathUtils.PI2;\n                else if (r < -MathUtils.PI)\n                    //\n                    r += MathUtils.PI2;\n                r *= mixRotate;\n                const cos = Math.cos(r);\n                const sin = Math.sin(r);\n\n                mat.a = cos * a - sin * c;\n                mat.c = cos * b - sin * d;\n                mat.b = sin * a + cos * c;\n                mat.d = sin * b + cos * d;\n            }\n\n            if (translate) {\n                const temp = this.temp;\n\n                target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n                mat.tx += temp.x * mixX;\n                mat.ty += temp.y * mixY;\n            }\n\n            if (mixScaleX != 0) {\n                const s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * mixScaleX + 1;\n\n                mat.a *= s;\n                mat.b *= s;\n            }\n            if (mixScaleY != 0) {\n                const s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * mixScaleY + 1;\n\n                mat.c *= s;\n                mat.d *= s;\n            }\n\n            if (mixShearY > 0) {\n                let r = Math.atan2(td, tb) - Math.atan2(tc, ta);\n\n                if (r > MathUtils.PI) r -= MathUtils.PI2;\n                else if (r < -MathUtils.PI)\n                    //\n                    r += MathUtils.PI2;\n                const b = mat.c;\n                const d = mat.d;\n\n                r = Math.atan2(d, b) + (r - MathUtils.PI / 2 + offsetShearY) * mixShearY;\n                const s = Math.sqrt(b * b + d * d);\n\n                mat.c = Math.cos(r) * s;\n                mat.d = Math.sin(r) * s;\n            }\n\n            bone.updateAppliedTransform();\n        }\n    }\n\n    applyAbsoluteLocal() {\n        const mixRotate = this.mixRotate;\n        const mixX = this.mixX;\n        const mixY = this.mixY;\n        const mixScaleX = this.mixScaleX;\n        const mixScaleY = this.mixScaleY;\n        const mixShearY = this.mixShearY;\n\n        const target = this.target;\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            let rotation = bone.arotation;\n\n            if (mixRotate != 0) {\n                let r = target.arotation - rotation + this.data.offsetRotation;\n\n                r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n                rotation += r * mixRotate;\n            }\n\n            let x = bone.ax;\n            let y = bone.ay;\n\n            x += (target.ax - x + this.data.offsetX) * mixX;\n            y += (target.ay - y + this.data.offsetY) * mixY;\n\n            let scaleX = bone.ascaleX;\n            let scaleY = bone.ascaleY;\n\n            if (mixScaleX != 0 && scaleX != 0) scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * mixScaleX) / scaleX;\n            if (mixScaleY != 0 && scaleY != 0) scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * mixScaleY) / scaleY;\n\n            let shearY = bone.ashearY;\n\n            if (mixShearY != 0) {\n                let r = target.ashearY - shearY + this.data.offsetShearY;\n\n                r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n                shearY += r * mixShearY;\n            }\n\n            bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n        }\n    }\n\n    applyRelativeLocal() {\n        const mixRotate = this.mixRotate;\n        const mixX = this.mixX;\n        const mixY = this.mixY;\n        const mixScaleX = this.mixScaleX;\n        const mixScaleY = this.mixScaleY;\n        const mixShearY = this.mixShearY;\n\n        const target = this.target;\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            const rotation = bone.arotation + (target.arotation + this.data.offsetRotation) * mixRotate;\n            const x = bone.ax + (target.ax + this.data.offsetX) * mixX;\n            const y = bone.ay + (target.ay + this.data.offsetY) * mixY;\n            const scaleX = bone.ascaleX * ((target.ascaleX - 1 + this.data.offsetScaleX) * mixScaleX + 1);\n            const scaleY = bone.ascaleY * ((target.ascaleY - 1 + this.data.offsetScaleY) * mixScaleY + 1);\n            const shearY = bone.ashearY + (target.ashearY + this.data.offsetShearY) * mixShearY;\n\n            bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n        }\n    }\n}\n"],"names":[],"mappings":"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"}