@pixi-spine/runtime-3.7
Version:
Pixi runtime for spine 3.7 models
1 lines • 25.9 kB
Source Map (JSON)
{"version":3,"file":"Bone.mjs","sources":["../../src/core/Bone.ts"],"sourcesContent":["import { Matrix } from '@pixi/core';\nimport type { Updatable } from './Updatable';\nimport type { BoneData } from './BoneData';\nimport type { Skeleton } from './Skeleton';\nimport { IBone, MathUtils, settings, TransformMode, Vector2 } from '@pixi-spine/base';\n\n/**\n * @public\n */\nexport class Bone implements Updatable, IBone {\n // be careful! Spine b,c is c,b in pixi matrix\n matrix = new Matrix();\n\n get worldX(): number {\n return this.matrix.tx;\n }\n\n get worldY(): number {\n return this.matrix.ty;\n }\n\n data: BoneData;\n skeleton: Skeleton;\n parent: Bone;\n children = new Array<Bone>();\n x = 0;\n y = 0;\n rotation = 0;\n scaleX = 0;\n scaleY = 0;\n shearX = 0;\n shearY = 0;\n ax = 0;\n ay = 0;\n arotation = 0;\n ascaleX = 0;\n ascaleY = 0;\n ashearX = 0;\n ashearY = 0;\n appliedValid = false;\n\n sorted = false;\n\n /** @param parent May be null. */\n constructor(data: BoneData, skeleton: Skeleton, parent: Bone) {\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.skeleton = skeleton;\n this.parent = parent;\n this.setToSetupPose();\n }\n\n /** NOT USED IN 3.7. Needed for the debug graph code */\n active = true;\n\n /** Same as {@link #updateWorldTransform()}. This method exists for Bone to implement {@link Updatable}. */\n update() {\n this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);\n }\n\n /** Computes the world transform using the parent bone and this bone's local transform. */\n updateWorldTransform() {\n this.updateWorldTransformWith(this.x, this.y, this.rotation, this.scaleX, this.scaleY, this.shearX, this.shearY);\n }\n\n /** Computes the world transform using the parent bone and the specified local transform. */\n updateWorldTransformWith(x: number, y: number, rotation: number, scaleX: number, scaleY: number, shearX: number, shearY: number) {\n this.ax = x;\n this.ay = y;\n this.arotation = rotation;\n this.ascaleX = scaleX;\n this.ascaleY = scaleY;\n this.ashearX = shearX;\n this.ashearY = shearY;\n this.appliedValid = true;\n\n const parent = this.parent;\n const m = this.matrix;\n\n const sx = this.skeleton.scaleX;\n const sy = settings.yDown ? -this.skeleton.scaleY : this.skeleton.scaleY;\n\n if (parent == null) {\n // Root bone.\n const skeleton = this.skeleton;\n const rotationY = rotation + 90 + shearY;\n\n m.a = MathUtils.cosDeg(rotation + shearX) * scaleX * sx;\n m.c = MathUtils.cosDeg(rotationY) * scaleY * sx;\n m.b = MathUtils.sinDeg(rotation + shearX) * scaleX * sy;\n m.d = MathUtils.sinDeg(rotationY) * scaleY * sy;\n m.tx = x * sx + skeleton.x;\n m.ty = y * sy + skeleton.y;\n\n return;\n }\n\n let pa = parent.matrix.a;\n let pb = parent.matrix.c;\n let pc = parent.matrix.b;\n let pd = parent.matrix.d;\n\n m.tx = pa * x + pb * y + parent.matrix.tx;\n m.ty = pc * x + pd * y + parent.matrix.ty;\n switch (this.data.transformMode) {\n case TransformMode.Normal: {\n const rotationY = rotation + 90 + shearY;\n const la = MathUtils.cosDeg(rotation + shearX) * scaleX;\n const lb = MathUtils.cosDeg(rotationY) * scaleY;\n const lc = MathUtils.sinDeg(rotation + shearX) * scaleX;\n const ld = MathUtils.sinDeg(rotationY) * scaleY;\n\n m.a = pa * la + pb * lc;\n m.c = pa * lb + pb * ld;\n m.b = pc * la + pd * lc;\n m.d = pc * lb + pd * ld;\n\n return;\n }\n case TransformMode.OnlyTranslation: {\n const rotationY = rotation + 90 + shearY;\n\n m.a = MathUtils.cosDeg(rotation + shearX) * scaleX;\n m.c = MathUtils.cosDeg(rotationY) * scaleY;\n m.b = MathUtils.sinDeg(rotation + shearX) * scaleX;\n m.d = MathUtils.sinDeg(rotationY) * scaleY;\n break;\n }\n case TransformMode.NoRotationOrReflection: {\n let s = pa * pa + pc * pc;\n let prx = 0;\n\n if (s > 0.0001) {\n s = Math.abs(pa * pd - pb * pc) / s;\n pb = pc * s;\n pd = pa * s;\n prx = Math.atan2(pc, pa) * MathUtils.radDeg;\n } else {\n pa = 0;\n pc = 0;\n prx = 90 - Math.atan2(pd, pb) * MathUtils.radDeg;\n }\n const rx = rotation + shearX - prx;\n const ry = rotation + shearY - prx + 90;\n const la = MathUtils.cosDeg(rx) * scaleX;\n const lb = MathUtils.cosDeg(ry) * scaleY;\n const lc = MathUtils.sinDeg(rx) * scaleX;\n const ld = MathUtils.sinDeg(ry) * scaleY;\n\n m.a = pa * la - pb * lc;\n m.c = pa * lb - pb * ld;\n m.b = pc * la + pd * lc;\n m.d = pc * lb + pd * ld;\n break;\n }\n case TransformMode.NoScale:\n case TransformMode.NoScaleOrReflection: {\n const cos = MathUtils.cosDeg(rotation);\n const sin = MathUtils.sinDeg(rotation);\n let za = (pa * cos + pb * sin) / sx;\n let zc = (pc * cos + pd * sin) / sy;\n let s = Math.sqrt(za * za + zc * zc);\n\n if (s > 0.00001) s = 1 / s;\n za *= s;\n zc *= s;\n s = Math.sqrt(za * za + zc * zc);\n if (\n this.data.transformMode == TransformMode.NoScale &&\n pa * pd - pb * pc < 0 != (settings.yDown ? this.skeleton.scaleX < 0 != this.skeleton.scaleY > 0 : this.skeleton.scaleX < 0 != this.skeleton.scaleY < 0)\n )\n s = -s;\n const r = Math.PI / 2 + Math.atan2(zc, za);\n const zb = Math.cos(r) * s;\n const zd = Math.sin(r) * s;\n const la = MathUtils.cosDeg(shearX) * scaleX;\n const lb = MathUtils.cosDeg(90 + shearY) * scaleY;\n const lc = MathUtils.sinDeg(shearX) * scaleX;\n const ld = MathUtils.sinDeg(90 + shearY) * scaleY;\n\n m.a = za * la + zb * lc;\n m.c = za * lb + zb * ld;\n m.b = zc * la + zd * lc;\n m.d = zc * lb + zd * ld;\n break;\n }\n }\n m.a *= sx;\n m.c *= sx;\n m.b *= sy;\n m.d *= sy;\n }\n\n setToSetupPose() {\n const data = this.data;\n\n this.x = data.x;\n this.y = data.y;\n this.rotation = data.rotation;\n this.scaleX = data.scaleX;\n this.scaleY = data.scaleY;\n this.shearX = data.shearX;\n this.shearY = data.shearY;\n }\n\n getWorldRotationX() {\n return Math.atan2(this.matrix.b, this.matrix.a) * MathUtils.radDeg;\n }\n\n getWorldRotationY() {\n return Math.atan2(this.matrix.d, this.matrix.c) * MathUtils.radDeg;\n }\n\n getWorldScaleX() {\n const m = this.matrix;\n\n return Math.sqrt(m.a * m.a + m.c * m.c);\n }\n\n getWorldScaleY() {\n const m = this.matrix;\n\n return Math.sqrt(m.b * m.b + m.d * m.d);\n }\n\n /** Computes the individual applied transform values from the world transform. This can be useful to perform processing using\n * the applied transform after the world transform has been modified directly (eg, by a constraint).\n * <p>\n * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. */\n updateAppliedTransform() {\n this.appliedValid = true;\n const parent = this.parent;\n const m = this.matrix;\n\n if (parent == null) {\n this.ax = m.tx;\n this.ay = m.ty;\n this.arotation = Math.atan2(m.b, m.a) * MathUtils.radDeg;\n this.ascaleX = Math.sqrt(m.a * m.a + m.b * m.b);\n this.ascaleY = Math.sqrt(m.c * m.c + m.d * m.d);\n this.ashearX = 0;\n this.ashearY = Math.atan2(m.a * m.c + m.b * m.d, m.a * m.d - m.b * m.c) * MathUtils.radDeg;\n\n return;\n }\n const pm = parent.matrix;\n const pid = 1 / (pm.a * pm.d - pm.b * pm.c);\n const dx = m.tx - pm.tx;\n const dy = m.ty - pm.ty;\n\n this.ax = dx * pm.d * pid - dy * pm.c * pid;\n this.ay = dy * pm.a * pid - dx * pm.b * pid;\n const ia = pid * pm.d;\n const id = pid * pm.a;\n const ib = pid * pm.c;\n const ic = pid * pm.b;\n const ra = ia * m.a - ib * m.b;\n const rb = ia * m.c - ib * m.d;\n const rc = id * m.b - ic * m.a;\n const rd = id * m.d - ic * m.c;\n\n this.ashearX = 0;\n this.ascaleX = Math.sqrt(ra * ra + rc * rc);\n if (this.ascaleX > 0.0001) {\n const det = ra * rd - rb * rc;\n\n this.ascaleY = det / this.ascaleX;\n this.ashearY = Math.atan2(ra * rb + rc * rd, det) * MathUtils.radDeg;\n this.arotation = Math.atan2(rc, ra) * MathUtils.radDeg;\n } else {\n this.ascaleX = 0;\n this.ascaleY = Math.sqrt(rb * rb + rd * rd);\n this.ashearY = 0;\n this.arotation = 90 - Math.atan2(rd, rb) * MathUtils.radDeg;\n }\n }\n\n worldToLocal(world: Vector2) {\n const m = this.matrix;\n const a = m.a;\n const b = m.c;\n const c = m.b;\n const d = m.d;\n const invDet = 1 / (a * d - b * c);\n const x = world.x - m.tx;\n const y = world.y - m.ty;\n\n world.x = x * d * invDet - y * b * invDet;\n world.y = y * a * invDet - x * c * invDet;\n\n return world;\n }\n\n localToWorld(local: Vector2) {\n const m = this.matrix;\n const x = local.x;\n const y = local.y;\n\n local.x = x * m.a + y * m.c + m.tx;\n local.y = x * m.b + y * m.d + m.ty;\n\n return local;\n }\n\n worldToLocalRotation(worldRotation: number) {\n const sin = MathUtils.sinDeg(worldRotation);\n const cos = MathUtils.cosDeg(worldRotation);\n const mat = this.matrix;\n\n return Math.atan2(mat.a * sin - mat.b * cos, mat.d * cos - mat.c * sin) * MathUtils.radDeg;\n }\n\n localToWorldRotation(localRotation: number) {\n const sin = MathUtils.sinDeg(localRotation);\n const cos = MathUtils.cosDeg(localRotation);\n const mat = this.matrix;\n\n return Math.atan2(cos * mat.b + sin * mat.d, cos * mat.a + sin * mat.c) * MathUtils.radDeg;\n }\n\n rotateWorld(degrees: number) {\n const mat = this.matrix;\n const a = mat.a;\n const b = mat.c;\n const c = mat.b;\n const d = mat.d;\n const cos = MathUtils.cosDeg(degrees);\n const sin = MathUtils.sinDeg(degrees);\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 this.appliedValid = false;\n }\n}\n"],"names":[],"mappings":"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"}