@pixi-spine/runtime-3.7
Version:
Pixi runtime for spine 3.7 models
1 lines • 24 kB
Source Map (JSON)
{"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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"}