@pixi-spine/runtime-3.8
Version:
Pixi runtime for spine 3.8 models
1 lines • 37 kB
Source Map (JSON)
{"version":3,"file":"PathConstraint.mjs","sources":["../../src/core/PathConstraint.ts"],"sourcesContent":["import { PathAttachment } from './attachments';\nimport type { Updatable } from './Updatable';\nimport { PathConstraintData, SpacingMode } from './PathConstraintData';\nimport type { Bone } from './Bone';\nimport type { Slot } from './Slot';\nimport type { Skeleton } from './Skeleton';\nimport { MathUtils, PositionMode, RotateMode, Utils } from '@pixi-spine/base';\n/**\n * @public\n */\nexport class PathConstraint implements Updatable {\n static NONE = -1;\n static BEFORE = -2;\n static AFTER = -3;\n static epsilon = 0.00001;\n\n data: PathConstraintData;\n bones: Array<Bone>;\n target: Slot;\n position = 0;\n spacing = 0;\n rotateMix = 0;\n translateMix = 0;\n\n spaces = new Array<number>();\n positions = new Array<number>();\n world = new Array<number>();\n curves = new Array<number>();\n lengths = new Array<number>();\n segments = new Array<number>();\n\n active = false;\n\n constructor(data: PathConstraintData, 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.bones = new Array<Bone>();\n for (let i = 0, n = data.bones.length; i < n; i++) this.bones.push(skeleton.findBone(data.bones[i].name));\n this.target = skeleton.findSlot(data.target.name);\n this.position = data.position;\n this.spacing = data.spacing;\n this.rotateMix = data.rotateMix;\n this.translateMix = data.translateMix;\n }\n\n isActive() {\n return this.active;\n }\n\n apply() {\n this.update();\n }\n\n update() {\n const attachment = this.target.getAttachment();\n\n if (!(attachment instanceof PathAttachment)) return;\n\n const rotateMix = this.rotateMix;\n const translateMix = this.translateMix;\n const translate = translateMix > 0;\n const rotate = rotateMix > 0;\n\n if (!translate && !rotate) return;\n\n const data = this.data;\n const spacingMode = data.spacingMode;\n const lengthSpacing = spacingMode == SpacingMode.Length;\n const rotateMode = data.rotateMode;\n const tangents = rotateMode == RotateMode.Tangent;\n const scale = rotateMode == RotateMode.ChainScale;\n const boneCount = this.bones.length;\n const spacesCount = tangents ? boneCount : boneCount + 1;\n const bones = this.bones;\n const spaces = Utils.setArraySize(this.spaces, spacesCount);\n let lengths: Array<number> = null;\n const spacing = this.spacing;\n\n if (scale || lengthSpacing) {\n if (scale) lengths = Utils.setArraySize(this.lengths, boneCount);\n for (let i = 0, n = spacesCount - 1; i < n; ) {\n const bone = bones[i];\n const setupLength = bone.data.length;\n\n if (setupLength < PathConstraint.epsilon) {\n if (scale) lengths[i] = 0;\n spaces[++i] = 0;\n } else {\n const x = setupLength * bone.matrix.a;\n const y = setupLength * bone.matrix.b;\n const length = Math.sqrt(x * x + y * y);\n\n if (scale) lengths[i] = length;\n spaces[++i] = ((lengthSpacing ? setupLength + spacing : spacing) * length) / setupLength;\n }\n }\n } else {\n for (let i = 1; i < spacesCount; i++) spaces[i] = spacing;\n }\n\n const positions = this.computeWorldPositions(\n <PathAttachment>attachment,\n spacesCount,\n tangents,\n data.positionMode == PositionMode.Percent,\n spacingMode == SpacingMode.Percent\n );\n let boneX = positions[0];\n let boneY = positions[1];\n let offsetRotation = data.offsetRotation;\n let tip = false;\n\n if (offsetRotation == 0) tip = rotateMode == RotateMode.Chain;\n else {\n tip = false;\n const p = this.target.bone.matrix;\n\n offsetRotation *= p.a * p.d - p.b * p.c > 0 ? MathUtils.degRad : -MathUtils.degRad;\n }\n for (let i = 0, p = 3; i < boneCount; i++, p += 3) {\n const bone = bones[i];\n const mat = bone.matrix;\n\n mat.tx += (boneX - mat.tx) * translateMix;\n mat.ty += (boneY - mat.ty) * translateMix;\n const x = positions[p];\n const y = positions[p + 1];\n const dx = x - boneX;\n const dy = y - boneY;\n\n if (scale) {\n const length = lengths[i];\n\n if (length != 0) {\n const s = (Math.sqrt(dx * dx + dy * dy) / length - 1) * rotateMix + 1;\n\n mat.a *= s;\n mat.b *= s;\n }\n }\n boneX = x;\n boneY = y;\n if (rotate) {\n const a = mat.a;\n const b = mat.c;\n const c = mat.b;\n const d = mat.d;\n let r = 0;\n let cos = 0;\n let sin = 0;\n\n if (tangents)\n if (tangents) r = positions[p - 1];\n else if (spaces[i + 1] == 0) r = positions[p + 2];\n else r = Math.atan2(dy, dx);\n r -= Math.atan2(c, a);\n if (tip) {\n cos = Math.cos(r);\n sin = Math.sin(r);\n const length = bone.data.length;\n\n boneX += (length * (cos * a - sin * c) - dx) * rotateMix;\n boneY += (length * (sin * a + cos * c) - dy) * rotateMix;\n } else {\n r += offsetRotation;\n }\n if (r > MathUtils.PI) r -= MathUtils.PI2;\n else if (r < -MathUtils.PI)\n //\n r += MathUtils.PI2;\n r *= rotateMix;\n cos = Math.cos(r);\n sin = Math.sin(r);\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 bone.appliedValid = false;\n }\n }\n\n computeWorldPositions(path: PathAttachment, spacesCount: number, tangents: boolean, percentPosition: boolean, percentSpacing: boolean) {\n const target = this.target;\n let position = this.position;\n const spaces = this.spaces;\n const out = Utils.setArraySize(this.positions, spacesCount * 3 + 2);\n let world: Array<number> = null;\n const closed = path.closed;\n let verticesLength = path.worldVerticesLength;\n let curveCount = verticesLength / 6;\n let prevCurve = PathConstraint.NONE;\n\n if (!path.constantSpeed) {\n const lengths = path.lengths;\n\n curveCount -= closed ? 1 : 2;\n const pathLength = lengths[curveCount];\n\n if (percentPosition) position *= pathLength;\n if (percentSpacing) {\n for (let i = 0; i < spacesCount; i++) spaces[i] *= pathLength;\n }\n world = Utils.setArraySize(this.world, 8);\n for (let i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) {\n const space = spaces[i];\n\n position += space;\n let p = position;\n\n if (closed) {\n p %= pathLength;\n if (p < 0) p += pathLength;\n curve = 0;\n } else if (p < 0) {\n if (prevCurve != PathConstraint.BEFORE) {\n prevCurve = PathConstraint.BEFORE;\n path.computeWorldVertices(target, 2, 4, world, 0, 2);\n }\n this.addBeforePosition(p, world, 0, out, o);\n continue;\n } else if (p > pathLength) {\n if (prevCurve != PathConstraint.AFTER) {\n prevCurve = PathConstraint.AFTER;\n path.computeWorldVertices(target, verticesLength - 6, 4, world, 0, 2);\n }\n this.addAfterPosition(p - pathLength, world, 0, out, o);\n continue;\n }\n\n // Determine curve containing position.\n for (; ; curve++) {\n const length = lengths[curve];\n\n if (p > length) continue;\n if (curve == 0) p /= length;\n else {\n const prev = lengths[curve - 1];\n\n p = (p - prev) / (length - prev);\n }\n break;\n }\n if (curve != prevCurve) {\n prevCurve = curve;\n if (closed && curve == curveCount) {\n path.computeWorldVertices(target, verticesLength - 4, 4, world, 0, 2);\n path.computeWorldVertices(target, 0, 4, world, 4, 2);\n } else path.computeWorldVertices(target, curve * 6 + 2, 8, world, 0, 2);\n }\n this.addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, tangents || (i > 0 && space == 0));\n }\n\n return out;\n }\n\n // World vertices.\n if (closed) {\n verticesLength += 2;\n world = Utils.setArraySize(this.world, verticesLength);\n path.computeWorldVertices(target, 2, verticesLength - 4, world, 0, 2);\n path.computeWorldVertices(target, 0, 2, world, verticesLength - 4, 2);\n world[verticesLength - 2] = world[0];\n world[verticesLength - 1] = world[1];\n } else {\n curveCount--;\n verticesLength -= 4;\n world = Utils.setArraySize(this.world, verticesLength);\n path.computeWorldVertices(target, 2, verticesLength, world, 0, 2);\n }\n\n // Curve lengths.\n const curves = Utils.setArraySize(this.curves, curveCount);\n let pathLength = 0;\n let x1 = world[0];\n let y1 = world[1];\n let cx1 = 0;\n let cy1 = 0;\n let cx2 = 0;\n let cy2 = 0;\n let x2 = 0;\n let y2 = 0;\n let tmpx = 0;\n let tmpy = 0;\n let dddfx = 0;\n let dddfy = 0;\n let ddfx = 0;\n let ddfy = 0;\n let dfx = 0;\n let dfy = 0;\n\n for (let i = 0, w = 2; i < curveCount; i++, w += 6) {\n cx1 = world[w];\n cy1 = world[w + 1];\n cx2 = world[w + 2];\n cy2 = world[w + 3];\n x2 = world[w + 4];\n y2 = world[w + 5];\n tmpx = (x1 - cx1 * 2 + cx2) * 0.1875;\n tmpy = (y1 - cy1 * 2 + cy2) * 0.1875;\n dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375;\n dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375;\n ddfx = tmpx * 2 + dddfx;\n ddfy = tmpy * 2 + dddfy;\n dfx = (cx1 - x1) * 0.75 + tmpx + dddfx * 0.16666667;\n dfy = (cy1 - y1) * 0.75 + tmpy + dddfy * 0.16666667;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx;\n dfy += ddfy;\n ddfx += dddfx;\n ddfy += dddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx;\n dfy += ddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n dfx += ddfx + dddfx;\n dfy += ddfy + dddfy;\n pathLength += Math.sqrt(dfx * dfx + dfy * dfy);\n curves[i] = pathLength;\n x1 = x2;\n y1 = y2;\n }\n if (percentPosition) position *= pathLength;\n if (percentSpacing) {\n for (let i = 0; i < spacesCount; i++) spaces[i] *= pathLength;\n }\n\n const segments = this.segments;\n let curveLength = 0;\n\n for (let i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) {\n const space = spaces[i];\n\n position += space;\n let p = position;\n\n if (closed) {\n p %= pathLength;\n if (p < 0) p += pathLength;\n curve = 0;\n } else if (p < 0) {\n this.addBeforePosition(p, world, 0, out, o);\n continue;\n } else if (p > pathLength) {\n this.addAfterPosition(p - pathLength, world, verticesLength - 4, out, o);\n continue;\n }\n\n // Determine curve containing position.\n for (; ; curve++) {\n const length = curves[curve];\n\n if (p > length) continue;\n if (curve == 0) p /= length;\n else {\n const prev = curves[curve - 1];\n\n p = (p - prev) / (length - prev);\n }\n break;\n }\n\n // Curve segment lengths.\n if (curve != prevCurve) {\n prevCurve = curve;\n let ii = curve * 6;\n\n x1 = world[ii];\n y1 = world[ii + 1];\n cx1 = world[ii + 2];\n cy1 = world[ii + 3];\n cx2 = world[ii + 4];\n cy2 = world[ii + 5];\n x2 = world[ii + 6];\n y2 = world[ii + 7];\n tmpx = (x1 - cx1 * 2 + cx2) * 0.03;\n tmpy = (y1 - cy1 * 2 + cy2) * 0.03;\n dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006;\n dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006;\n ddfx = tmpx * 2 + dddfx;\n ddfy = tmpy * 2 + dddfy;\n dfx = (cx1 - x1) * 0.3 + tmpx + dddfx * 0.16666667;\n dfy = (cy1 - y1) * 0.3 + tmpy + dddfy * 0.16666667;\n curveLength = Math.sqrt(dfx * dfx + dfy * dfy);\n segments[0] = curveLength;\n for (ii = 1; ii < 8; ii++) {\n dfx += ddfx;\n dfy += ddfy;\n ddfx += dddfx;\n ddfy += dddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[ii] = curveLength;\n }\n dfx += ddfx;\n dfy += ddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[8] = curveLength;\n dfx += ddfx + dddfx;\n dfy += ddfy + dddfy;\n curveLength += Math.sqrt(dfx * dfx + dfy * dfy);\n segments[9] = curveLength;\n segment = 0;\n }\n\n // Weight by segment length.\n p *= curveLength;\n for (; ; segment++) {\n const length = segments[segment];\n\n if (p > length) continue;\n if (segment == 0) p /= length;\n else {\n const prev = segments[segment - 1];\n\n p = segment + (p - prev) / (length - prev);\n }\n break;\n }\n this.addCurvePosition(p * 0.1, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0));\n }\n\n return out;\n }\n\n addBeforePosition(p: number, temp: Array<number>, i: number, out: Array<number>, o: number) {\n const x1 = temp[i];\n const y1 = temp[i + 1];\n const dx = temp[i + 2] - x1;\n const dy = temp[i + 3] - y1;\n const r = Math.atan2(dy, dx);\n\n out[o] = x1 + p * Math.cos(r);\n out[o + 1] = y1 + p * Math.sin(r);\n out[o + 2] = r;\n }\n\n addAfterPosition(p: number, temp: Array<number>, i: number, out: Array<number>, o: number) {\n const x1 = temp[i + 2];\n const y1 = temp[i + 3];\n const dx = x1 - temp[i];\n const dy = y1 - temp[i + 1];\n const r = Math.atan2(dy, dx);\n\n out[o] = x1 + p * Math.cos(r);\n out[o + 1] = y1 + p * Math.sin(r);\n out[o + 2] = r;\n }\n\n addCurvePosition(\n p: number,\n x1: number,\n y1: number,\n cx1: number,\n cy1: number,\n cx2: number,\n cy2: number,\n x2: number,\n y2: number,\n out: Array<number>,\n o: number,\n tangents: boolean\n ) {\n if (p == 0 || isNaN(p)) p = 0.0001;\n const tt = p * p;\n const ttt = tt * p;\n const u = 1 - p;\n const uu = u * u;\n const uuu = uu * u;\n const ut = u * p;\n const ut3 = ut * 3;\n const uut3 = u * ut3;\n const utt3 = ut3 * p;\n const x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt;\n const y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt;\n\n out[o] = x;\n out[o + 1] = y;\n if (tangents) out[o + 2] = Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt));\n }\n}\n"],"names":["pathLength"],"mappings":"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"}