UNPKG

@pixi-spine/runtime-3.7

Version:

Pixi runtime for spine 3.7 models

1 lines 40.2 kB
{"version":3,"file":"Skeleton.mjs","sources":["../../src/core/Skeleton.ts"],"sourcesContent":["import { Attachment, RegionAttachment, MeshAttachment, PathAttachment } from './attachments';\nimport { Bone } from './Bone';\nimport { Slot } from './Slot';\nimport type { Updatable } from './Updatable';\nimport type { SkeletonData } from './SkeletonData';\nimport { IkConstraint } from './IkConstraint';\nimport { TransformConstraint } from './TransformConstraint';\nimport { PathConstraint } from './PathConstraint';\nimport type { Skin } from './Skin';\nimport { Color, Utils, Vector2, ISkeleton } from '@pixi-spine/base';\n\n/**\n * @public\n */\nexport class Skeleton implements ISkeleton<SkeletonData, Bone, Slot, Skin> {\n data: SkeletonData;\n bones: Array<Bone>;\n slots: Array<Slot>;\n drawOrder: Array<Slot>;\n ikConstraints: Array<IkConstraint>;\n transformConstraints: Array<TransformConstraint>;\n pathConstraints: Array<PathConstraint>;\n _updateCache = new Array<Updatable>();\n updateCacheReset = new Array<Updatable>();\n skin: Skin;\n color: Color;\n time = 0;\n scaleX = 1;\n scaleY = 1;\n x = 0;\n y = 0;\n\n constructor(data: SkeletonData) {\n if (data == null) throw new Error('data cannot be null.');\n this.data = data;\n\n this.bones = new Array<Bone>();\n for (let i = 0; i < data.bones.length; i++) {\n const boneData = data.bones[i];\n let bone: Bone;\n\n if (boneData.parent == null) bone = new Bone(boneData, this, null);\n else {\n const parent = this.bones[boneData.parent.index];\n\n bone = new Bone(boneData, this, parent);\n parent.children.push(bone);\n }\n this.bones.push(bone);\n }\n\n this.slots = new Array<Slot>();\n this.drawOrder = new Array<Slot>();\n for (let i = 0; i < data.slots.length; i++) {\n const slotData = data.slots[i];\n const bone = this.bones[slotData.boneData.index];\n const slot = new Slot(slotData, bone);\n\n this.slots.push(slot);\n this.drawOrder.push(slot);\n }\n\n this.ikConstraints = new Array<IkConstraint>();\n for (let i = 0; i < data.ikConstraints.length; i++) {\n const ikConstraintData = data.ikConstraints[i];\n\n this.ikConstraints.push(new IkConstraint(ikConstraintData, this));\n }\n\n this.transformConstraints = new Array<TransformConstraint>();\n for (let i = 0; i < data.transformConstraints.length; i++) {\n const transformConstraintData = data.transformConstraints[i];\n\n this.transformConstraints.push(new TransformConstraint(transformConstraintData, this));\n }\n\n this.pathConstraints = new Array<PathConstraint>();\n for (let i = 0; i < data.pathConstraints.length; i++) {\n const pathConstraintData = data.pathConstraints[i];\n\n this.pathConstraints.push(new PathConstraint(pathConstraintData, this));\n }\n\n this.color = new Color(1, 1, 1, 1);\n this.updateCache();\n }\n\n updateCache() {\n const updateCache = this._updateCache;\n\n updateCache.length = 0;\n this.updateCacheReset.length = 0;\n\n const bones = this.bones;\n\n for (let i = 0, n = bones.length; i < n; i++) bones[i].sorted = false;\n\n // IK first, lowest hierarchy depth first.\n const ikConstraints = this.ikConstraints;\n const transformConstraints = this.transformConstraints;\n const pathConstraints = this.pathConstraints;\n const ikCount = ikConstraints.length;\n const transformCount = transformConstraints.length;\n const pathCount = pathConstraints.length;\n const constraintCount = ikCount + transformCount + pathCount;\n\n // eslint-disable-next-line no-restricted-syntax, no-labels\n outer: for (let i = 0; i < constraintCount; i++) {\n for (let ii = 0; ii < ikCount; ii++) {\n const constraint = ikConstraints[ii];\n\n if (constraint.data.order == i) {\n this.sortIkConstraint(constraint);\n // eslint-disable-next-line no-labels\n continue outer;\n }\n }\n for (let ii = 0; ii < transformCount; ii++) {\n const constraint = transformConstraints[ii];\n\n if (constraint.data.order == i) {\n this.sortTransformConstraint(constraint);\n // eslint-disable-next-line no-labels\n continue outer;\n }\n }\n for (let ii = 0; ii < pathCount; ii++) {\n const constraint = pathConstraints[ii];\n\n if (constraint.data.order == i) {\n this.sortPathConstraint(constraint);\n // eslint-disable-next-line no-labels\n continue outer;\n }\n }\n }\n\n for (let i = 0, n = bones.length; i < n; i++) this.sortBone(bones[i]);\n }\n\n sortIkConstraint(constraint: IkConstraint) {\n const target = constraint.target;\n\n this.sortBone(target);\n\n const constrained = constraint.bones;\n const parent = constrained[0];\n\n this.sortBone(parent);\n\n if (constrained.length > 1) {\n const child = constrained[constrained.length - 1];\n\n if (!(this._updateCache.indexOf(child) > -1)) this.updateCacheReset.push(child);\n }\n\n this._updateCache.push(constraint);\n\n this.sortReset(parent.children);\n constrained[constrained.length - 1].sorted = true;\n }\n\n sortPathConstraint(constraint: PathConstraint) {\n const slot = constraint.target;\n const slotIndex = slot.data.index;\n const slotBone = slot.bone;\n\n if (this.skin != null) this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone);\n if (this.data.defaultSkin != null && this.data.defaultSkin != this.skin) this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone);\n for (let i = 0, n = this.data.skins.length; i < n; i++) this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone);\n\n const attachment = slot.getAttachment();\n\n if (attachment instanceof PathAttachment) this.sortPathConstraintAttachmentWith(attachment, slotBone);\n\n const constrained = constraint.bones;\n const boneCount = constrained.length;\n\n for (let i = 0; i < boneCount; i++) this.sortBone(constrained[i]);\n\n this._updateCache.push(constraint);\n\n for (let i = 0; i < boneCount; i++) this.sortReset(constrained[i].children);\n for (let i = 0; i < boneCount; i++) constrained[i].sorted = true;\n }\n\n sortTransformConstraint(constraint: TransformConstraint) {\n this.sortBone(constraint.target);\n\n const constrained = constraint.bones;\n const boneCount = constrained.length;\n\n if (constraint.data.local) {\n for (let i = 0; i < boneCount; i++) {\n const child = constrained[i];\n\n this.sortBone(child.parent);\n if (!(this._updateCache.indexOf(child) > -1)) this.updateCacheReset.push(child);\n }\n } else {\n for (let i = 0; i < boneCount; i++) {\n this.sortBone(constrained[i]);\n }\n }\n\n this._updateCache.push(constraint);\n\n for (let ii = 0; ii < boneCount; ii++) this.sortReset(constrained[ii].children);\n for (let ii = 0; ii < boneCount; ii++) constrained[ii].sorted = true;\n }\n\n sortPathConstraintAttachment(skin: Skin, slotIndex: number, slotBone: Bone) {\n const attachments = skin.attachments[slotIndex];\n\n if (!attachments) return;\n for (const key in attachments) {\n this.sortPathConstraintAttachmentWith(attachments[key], slotBone);\n }\n }\n\n sortPathConstraintAttachmentWith(attachment: Attachment, slotBone: Bone) {\n if (!(attachment instanceof PathAttachment)) return;\n const pathBones = (<PathAttachment>attachment).bones;\n\n if (pathBones == null) this.sortBone(slotBone);\n else {\n const bones = this.bones;\n let i = 0;\n\n while (i < pathBones.length) {\n const boneCount = pathBones[i++];\n\n for (let n = i + boneCount; i < n; i++) {\n const boneIndex = pathBones[i];\n\n this.sortBone(bones[boneIndex]);\n }\n }\n }\n }\n\n sortBone(bone: Bone) {\n if (bone.sorted) return;\n const parent = bone.parent;\n\n if (parent != null) this.sortBone(parent);\n bone.sorted = true;\n this._updateCache.push(bone);\n }\n\n sortReset(bones: Array<Bone>) {\n for (let i = 0, n = bones.length; i < n; i++) {\n const bone = bones[i];\n\n if (bone.sorted) this.sortReset(bone.children);\n bone.sorted = false;\n }\n }\n\n /** Updates the world transform for each bone and applies constraints. */\n updateWorldTransform() {\n const updateCacheReset = this.updateCacheReset;\n\n for (let i = 0, n = updateCacheReset.length; i < n; i++) {\n const bone = updateCacheReset[i] as Bone;\n\n bone.ax = bone.x;\n bone.ay = bone.y;\n bone.arotation = bone.rotation;\n bone.ascaleX = bone.scaleX;\n bone.ascaleY = bone.scaleY;\n bone.ashearX = bone.shearX;\n bone.ashearY = bone.shearY;\n bone.appliedValid = true;\n }\n const updateCache = this._updateCache;\n\n for (let i = 0, n = updateCache.length; i < n; i++) updateCache[i].update();\n }\n\n /** Sets the bones, constraints, and slots to their setup pose values. */\n setToSetupPose() {\n this.setBonesToSetupPose();\n this.setSlotsToSetupPose();\n }\n\n /** Sets the bones and constraints to their setup pose values. */\n setBonesToSetupPose() {\n const bones = this.bones;\n\n for (let i = 0, n = bones.length; i < n; i++) bones[i].setToSetupPose();\n\n const ikConstraints = this.ikConstraints;\n\n for (let i = 0, n = ikConstraints.length; i < n; i++) {\n const constraint = ikConstraints[i];\n\n constraint.bendDirection = constraint.data.bendDirection;\n constraint.mix = constraint.data.mix;\n }\n\n const transformConstraints = this.transformConstraints;\n\n for (let i = 0, n = transformConstraints.length; i < n; i++) {\n const constraint = transformConstraints[i];\n const data = constraint.data;\n\n constraint.rotateMix = data.rotateMix;\n constraint.translateMix = data.translateMix;\n constraint.scaleMix = data.scaleMix;\n constraint.shearMix = data.shearMix;\n }\n\n const pathConstraints = this.pathConstraints;\n\n for (let i = 0, n = pathConstraints.length; i < n; i++) {\n const constraint = pathConstraints[i];\n const data = constraint.data;\n\n constraint.position = data.position;\n constraint.spacing = data.spacing;\n constraint.rotateMix = data.rotateMix;\n constraint.translateMix = data.translateMix;\n }\n }\n\n setSlotsToSetupPose() {\n const slots = this.slots;\n\n Utils.arrayCopy(slots, 0, this.drawOrder, 0, slots.length);\n for (let i = 0, n = slots.length; i < n; i++) slots[i].setToSetupPose();\n }\n\n /** @return May return null. */\n getRootBone() {\n if (this.bones.length == 0) return null;\n\n return this.bones[0];\n }\n\n /** @return May be null. */\n findBone(boneName: string) {\n if (boneName == null) throw new Error('boneName cannot be null.');\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.data.name == boneName) return bone;\n }\n\n return null;\n }\n\n /** @return -1 if the bone was not found. */\n findBoneIndex(boneName: string) {\n if (boneName == null) throw new Error('boneName cannot be null.');\n const bones = this.bones;\n\n for (let i = 0, n = bones.length; i < n; i++) if (bones[i].data.name == boneName) return i;\n\n return -1;\n }\n\n /** @return May be null. */\n findSlot(slotName: string) {\n if (slotName == null) throw new Error('slotName cannot be null.');\n const slots = this.slots;\n\n for (let i = 0, n = slots.length; i < n; i++) {\n const slot = slots[i];\n\n if (slot.data.name == slotName) return slot;\n }\n\n return null;\n }\n\n /** @return -1 if the bone was not found. */\n findSlotIndex(slotName: string) {\n if (slotName == null) throw new Error('slotName cannot be null.');\n const slots = this.slots;\n\n for (let i = 0, n = slots.length; i < n; i++) if (slots[i].data.name == slotName) return i;\n\n return -1;\n }\n\n /** Sets a skin by name.\n * @see #setSkin(Skin) */\n setSkinByName(skinName: string) {\n const skin = this.data.findSkin(skinName);\n\n if (skin == null) throw new Error(`Skin not found: ${skinName}`);\n this.setSkin(skin);\n }\n\n /** Sets the skin used to look up attachments before looking in the {@link SkeletonData#getDefaultSkin() default skin}.\n * Attachments from the new skin are attached if the corresponding attachment from the old skin was attached. If there was no\n * old skin, each slot's setup mode attachment is attached from the new skin.\n * @param newSkin May be null. */\n setSkin(newSkin: Skin | null) {\n if (newSkin != null) {\n if (this.skin != null) newSkin.attachAll(this, this.skin);\n else {\n const slots = this.slots;\n\n for (let i = 0, n = slots.length; i < n; i++) {\n const slot = slots[i];\n const name = slot.data.attachmentName;\n\n if (name != null) {\n const attachment: Attachment = newSkin.getAttachment(i, name);\n\n if (attachment != null) slot.setAttachment(attachment);\n }\n }\n }\n }\n this.skin = newSkin;\n }\n\n /** @return May be null. */\n getAttachmentByName(slotName: string, attachmentName: string): Attachment {\n return this.getAttachment(this.data.findSlotIndex(slotName), attachmentName);\n }\n\n /** @return May be null. */\n getAttachment(slotIndex: number, attachmentName: string): Attachment {\n if (attachmentName == null) throw new Error('attachmentName cannot be null.');\n if (this.skin != null) {\n const attachment: Attachment = this.skin.getAttachment(slotIndex, attachmentName);\n\n if (attachment != null) return attachment;\n }\n if (this.data.defaultSkin != null) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);\n\n return null;\n }\n\n /** @param attachmentName May be null. */\n setAttachment(slotName: string, attachmentName: string) {\n if (slotName == null) throw new Error('slotName cannot be null.');\n const slots = this.slots;\n\n for (let i = 0, n = slots.length; i < n; i++) {\n const slot = slots[i];\n\n if (slot.data.name == slotName) {\n let attachment: Attachment = null;\n\n if (attachmentName != null) {\n attachment = this.getAttachment(i, attachmentName);\n if (attachment == null) throw new Error(`Attachment not found: ${attachmentName}, for slot: ${slotName}`);\n }\n slot.setAttachment(attachment);\n\n return;\n }\n }\n throw new Error(`Slot not found: ${slotName}`);\n }\n\n /** @return May be null. */\n findIkConstraint(constraintName: string) {\n if (constraintName == null) throw new Error('constraintName cannot be null.');\n const ikConstraints = this.ikConstraints;\n\n for (let i = 0, n = ikConstraints.length; i < n; i++) {\n const ikConstraint = ikConstraints[i];\n\n if (ikConstraint.data.name == constraintName) return ikConstraint;\n }\n\n return null;\n }\n\n /** @return May be null. */\n findTransformConstraint(constraintName: string) {\n if (constraintName == null) throw new Error('constraintName cannot be null.');\n const transformConstraints = this.transformConstraints;\n\n for (let i = 0, n = transformConstraints.length; i < n; i++) {\n const constraint = transformConstraints[i];\n\n if (constraint.data.name == constraintName) return constraint;\n }\n\n return null;\n }\n\n /** @return May be null. */\n findPathConstraint(constraintName: string) {\n if (constraintName == null) throw new Error('constraintName cannot be null.');\n const pathConstraints = this.pathConstraints;\n\n for (let i = 0, n = pathConstraints.length; i < n; i++) {\n const constraint = pathConstraints[i];\n\n if (constraint.data.name == constraintName) return constraint;\n }\n\n return null;\n }\n\n /** Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose.\n * @param offset The distance from the skeleton origin to the bottom left corner of the AABB.\n * @param size The width and height of the AABB.\n * @param temp Working memory */\n getBounds(offset: Vector2, size: Vector2, temp: Array<number>) {\n if (offset == null) throw new Error('offset cannot be null.');\n if (size == null) throw new Error('size cannot be null.');\n const drawOrder = this.drawOrder;\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n\n for (let i = 0, n = drawOrder.length; i < n; i++) {\n const slot = drawOrder[i];\n let verticesLength = 0;\n let vertices: ArrayLike<number> = null;\n const attachment = slot.getAttachment();\n\n if (attachment instanceof RegionAttachment) {\n verticesLength = 8;\n vertices = Utils.setArraySize(temp, verticesLength, 0);\n (<RegionAttachment>attachment).computeWorldVertices(slot.bone, vertices, 0, 2);\n } else if (attachment instanceof MeshAttachment) {\n const mesh = <MeshAttachment>attachment;\n\n verticesLength = mesh.worldVerticesLength;\n vertices = Utils.setArraySize(temp, verticesLength, 0);\n mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2);\n }\n if (vertices != null) {\n for (let ii = 0, nn = vertices.length; ii < nn; ii += 2) {\n const x = vertices[ii];\n const y = vertices[ii + 1];\n\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n }\n }\n offset.set(minX, minY);\n size.set(maxX - minX, maxY - minY);\n }\n\n update(delta: number) {\n this.time += delta;\n }\n\n get flipX(): boolean {\n return this.scaleX == -1;\n }\n\n set flipX(value: boolean) {\n if (!Skeleton.deprecatedWarning1) {\n Skeleton.deprecatedWarning1 = true;\n console.warn('Spine Deprecation Warning: `Skeleton.flipX/flipY` was deprecated, please use scaleX/scaleY');\n }\n this.scaleX = value ? 1.0 : -1.0;\n }\n\n get flipY(): boolean {\n return this.scaleY == -1;\n }\n\n set flipY(value: boolean) {\n if (!Skeleton.deprecatedWarning1) {\n Skeleton.deprecatedWarning1 = true;\n console.warn('Spine Deprecation Warning: `Skeleton.flipX/flipY` was deprecated, please use scaleX/scaleY');\n }\n this.scaleY = value ? 1.0 : -1.0;\n }\n\n private static deprecatedWarning1 = false;\n}\n"],"names":[],"mappings":"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"}