{"version":3,"file":"TransformConstraint.mjs","sources":["../../src/core/TransformConstraint.ts"],"sourcesContent":["import type { Constraint } from './Constraint';\nimport type { TransformConstraintData } from './TransformConstraintData';\nimport type { Bone } from './Bone';\nimport { MathUtils, Vector2 } from '@pixi-spine/base';\nimport type { Skeleton } from './Skeleton';\n\n/**\n * @public\n */\nexport class TransformConstraint implements Constraint {\n    data: TransformConstraintData;\n    bones: Array<Bone>;\n    target: Bone;\n    rotateMix = 0;\n    translateMix = 0;\n    scaleMix = 0;\n    shearMix = 0;\n    temp = new Vector2();\n\n    constructor(data: TransformConstraintData, skeleton: Skeleton) {\n        if (data == null) throw new Error('data cannot be null.');\n        if (skeleton == null) throw new Error('skeleton cannot be null.');\n        this.data = data;\n        this.rotateMix = data.rotateMix;\n        this.translateMix = data.translateMix;\n        this.scaleMix = data.scaleMix;\n        this.shearMix = data.shearMix;\n        this.bones = new Array<Bone>();\n        for (let i = 0; i < data.bones.length; i++) this.bones.push(skeleton.findBone(data.bones[i].name));\n        this.target = skeleton.findBone(data.target.name);\n    }\n\n    apply() {\n        this.update();\n    }\n\n    update() {\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 rotateMix = this.rotateMix;\n        const translateMix = this.translateMix;\n        const scaleMix = this.scaleMix;\n        const shearMix = this.shearMix;\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        const bones = this.bones;\n\n        for (let i = 0, n = bones.length; i < n; i++) {\n            const bone = bones[i];\n            let modified = false;\n            const mat = bone.matrix;\n\n            if (rotateMix != 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) r += MathUtils.PI2;\n                r *= rotateMix;\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                modified = true;\n            }\n\n            if (translateMix != 0) {\n                const temp = this.temp;\n\n                target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n                mat.tx += (temp.x - mat.tx) * translateMix;\n                mat.ty += (temp.y - mat.ty) * translateMix;\n                modified = true;\n            }\n\n            if (scaleMix > 0) {\n                let s = Math.sqrt(mat.a * mat.a + mat.b * mat.b);\n                let ts = Math.sqrt(ta * ta + tc * tc);\n\n                if (s > 0.00001) s = (s + (ts - s + this.data.offsetScaleX) * scaleMix) / s;\n                mat.a *= s;\n                mat.b *= s;\n                s = Math.sqrt(mat.c * mat.c + mat.d * mat.d);\n                ts = Math.sqrt(tb * tb + td * td);\n                if (s > 0.00001) s = (s + (ts - s + this.data.offsetScaleY) * scaleMix) / s;\n                mat.c *= s;\n                mat.d *= s;\n                modified = true;\n            }\n\n            if (shearMix > 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) r += MathUtils.PI2;\n                r = by + (r + offsetShearY) * shearMix;\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                modified = true;\n            }\n\n            if (modified) bone.appliedValid = false;\n        }\n    }\n\n    applyRelativeWorld() {\n        const rotateMix = this.rotateMix;\n        const translateMix = this.translateMix;\n        const scaleMix = this.scaleMix;\n        const shearMix = this.shearMix;\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        const bones = this.bones;\n\n        for (let i = 0, n = bones.length; i < n; i++) {\n            const bone = bones[i];\n            let modified = false;\n            const mat = bone.matrix;\n\n            if (rotateMix != 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) r += MathUtils.PI2;\n                r *= rotateMix;\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                modified = true;\n            }\n\n            if (translateMix != 0) {\n                const temp = this.temp;\n\n                target.localToWorld(temp.set(this.data.offsetX, this.data.offsetY));\n                mat.tx += temp.x * translateMix;\n                mat.ty += temp.y * translateMix;\n                modified = true;\n            }\n\n            if (scaleMix > 0) {\n                let s = (Math.sqrt(ta * ta + tc * tc) - 1 + this.data.offsetScaleX) * scaleMix + 1;\n\n                mat.a *= s;\n                mat.b *= s;\n                s = (Math.sqrt(tb * tb + td * td) - 1 + this.data.offsetScaleY) * scaleMix + 1;\n                mat.c *= s;\n                mat.d *= s;\n                modified = true;\n            }\n\n            if (shearMix > 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) 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) * shearMix;\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                modified = true;\n            }\n\n            if (modified) bone.appliedValid = false;\n        }\n    }\n\n    applyAbsoluteLocal() {\n        const rotateMix = this.rotateMix;\n        const translateMix = this.translateMix;\n        const scaleMix = this.scaleMix;\n        const shearMix = this.shearMix;\n        const target = this.target;\n\n        if (!target.appliedValid) target.updateAppliedTransform();\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.appliedValid) bone.updateAppliedTransform();\n\n            let rotation = bone.arotation;\n\n            if (rotateMix != 0) {\n                let r = target.arotation - rotation + this.data.offsetRotation;\n\n                r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n                rotation += r * rotateMix;\n            }\n\n            let x = bone.ax;\n            let y = bone.ay;\n\n            if (translateMix != 0) {\n                x += (target.ax - x + this.data.offsetX) * translateMix;\n                y += (target.ay - y + this.data.offsetY) * translateMix;\n            }\n\n            let scaleX = bone.ascaleX;\n            let scaleY = bone.ascaleY;\n\n            if (scaleMix > 0) {\n                if (scaleX > 0.00001) scaleX = (scaleX + (target.ascaleX - scaleX + this.data.offsetScaleX) * scaleMix) / scaleX;\n                if (scaleY > 0.00001) scaleY = (scaleY + (target.ascaleY - scaleY + this.data.offsetScaleY) * scaleMix) / scaleY;\n            }\n\n            const shearY = bone.ashearY;\n\n            if (shearMix > 0) {\n                let r = target.ashearY - shearY + this.data.offsetShearY;\n\n                r -= (16384 - ((16384.499999999996 - r / 360) | 0)) * 360;\n                bone.shearY += r * shearMix;\n            }\n\n            bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n        }\n    }\n\n    applyRelativeLocal() {\n        const rotateMix = this.rotateMix;\n        const translateMix = this.translateMix;\n        const scaleMix = this.scaleMix;\n        const shearMix = this.shearMix;\n        const target = this.target;\n\n        if (!target.appliedValid) target.updateAppliedTransform();\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.appliedValid) bone.updateAppliedTransform();\n\n            let rotation = bone.arotation;\n\n            if (rotateMix != 0) rotation += (target.arotation + this.data.offsetRotation) * rotateMix;\n\n            let x = bone.ax;\n            let y = bone.ay;\n\n            if (translateMix != 0) {\n                x += (target.ax + this.data.offsetX) * translateMix;\n                y += (target.ay + this.data.offsetY) * translateMix;\n            }\n\n            let scaleX = bone.ascaleX;\n            let scaleY = bone.ascaleY;\n\n            if (scaleMix > 0) {\n                if (scaleX > 0.00001) scaleX *= (target.ascaleX - 1 + this.data.offsetScaleX) * scaleMix + 1;\n                if (scaleY > 0.00001) scaleY *= (target.ascaleY - 1 + this.data.offsetScaleY) * scaleMix + 1;\n            }\n\n            let shearY = bone.ashearY;\n\n            if (shearMix > 0) shearY += (target.ashearY + this.data.offsetShearY) * shearMix;\n\n            bone.updateWorldTransformWith(x, y, rotation, scaleX, scaleY, bone.ashearX, shearY);\n        }\n    }\n\n    getOrder() {\n        return this.data.order;\n    }\n}\n"],"names":[],"mappings":"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"}