UNPKG

@pixi-spine/runtime-3.8

Version:

Pixi runtime for spine 3.8 models

1 lines 12.4 kB
{"version":3,"file":"Skin.mjs","sources":["../../src/core/Skin.ts"],"sourcesContent":["import { Attachment, MeshAttachment } from './attachments';\nimport type { BoneData } from './BoneData';\nimport type { ConstraintData } from './Constraint';\nimport type { Skeleton } from './Skeleton';\n\nimport type { Map, ISkin } from '@pixi-spine/base';\n\n/**\n * @public\n */\nexport class SkinEntry {\n constructor(public slotIndex: number, public name: string, public attachment: Attachment) {}\n}\n\n/**\n * @public\n */\nexport class Skin implements ISkin {\n name: string;\n attachments = new Array<Map<Attachment>>();\n bones = Array<BoneData>();\n constraints = new Array<ConstraintData>();\n\n constructor(name: string) {\n if (name == null) throw new Error('name cannot be null.');\n this.name = name;\n }\n\n setAttachment(slotIndex: number, name: string, attachment: Attachment) {\n if (attachment == null) throw new Error('attachment cannot be null.');\n const attachments = this.attachments;\n\n if (slotIndex >= attachments.length) attachments.length = slotIndex + 1;\n if (!attachments[slotIndex]) attachments[slotIndex] = {};\n attachments[slotIndex][name] = attachment;\n }\n\n addSkin(skin: Skin) {\n for (let i = 0; i < skin.bones.length; i++) {\n const bone = skin.bones[i];\n let contained = false;\n\n for (let j = 0; j < this.bones.length; j++) {\n if (this.bones[j] == bone) {\n contained = true;\n break;\n }\n }\n if (!contained) this.bones.push(bone);\n }\n\n for (let i = 0; i < skin.constraints.length; i++) {\n const constraint = skin.constraints[i];\n let contained = false;\n\n for (let j = 0; j < this.constraints.length; j++) {\n if (this.constraints[j] == constraint) {\n contained = true;\n break;\n }\n }\n if (!contained) this.constraints.push(constraint);\n }\n\n const attachments = skin.getAttachments();\n\n for (let i = 0; i < attachments.length; i++) {\n const attachment = attachments[i];\n\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n }\n\n copySkin(skin: Skin) {\n for (let i = 0; i < skin.bones.length; i++) {\n const bone = skin.bones[i];\n let contained = false;\n\n for (let j = 0; j < this.bones.length; j++) {\n if (this.bones[j] == bone) {\n contained = true;\n break;\n }\n }\n if (!contained) this.bones.push(bone);\n }\n\n for (let i = 0; i < skin.constraints.length; i++) {\n const constraint = skin.constraints[i];\n let contained = false;\n\n for (let j = 0; j < this.constraints.length; j++) {\n if (this.constraints[j] == constraint) {\n contained = true;\n break;\n }\n }\n if (!contained) this.constraints.push(constraint);\n }\n\n const attachments = skin.getAttachments();\n\n for (let i = 0; i < attachments.length; i++) {\n const attachment = attachments[i];\n\n if (attachment.attachment == null) continue;\n if (attachment.attachment instanceof MeshAttachment) {\n attachment.attachment = attachment.attachment.newLinkedMesh();\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n } else {\n attachment.attachment = attachment.attachment.copy();\n this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment);\n }\n }\n }\n\n /** @return May be null. */\n getAttachment(slotIndex: number, name: string): Attachment {\n const dictionary = this.attachments[slotIndex];\n\n return dictionary ? dictionary[name] : null;\n }\n\n removeAttachment(slotIndex: number, name: string) {\n const dictionary = this.attachments[slotIndex];\n\n if (dictionary) dictionary[name] = null;\n }\n\n getAttachments(): Array<SkinEntry> {\n const entries = new Array<SkinEntry>();\n\n for (let i = 0; i < this.attachments.length; i++) {\n const slotAttachments = this.attachments[i];\n\n if (slotAttachments) {\n for (const name in slotAttachments) {\n const attachment = slotAttachments[name];\n\n if (attachment) entries.push(new SkinEntry(i, name, attachment));\n }\n }\n }\n\n return entries;\n }\n\n getAttachmentsForSlot(slotIndex: number, attachments: Array<SkinEntry>) {\n const slotAttachments = this.attachments[slotIndex];\n\n if (slotAttachments) {\n for (const name in slotAttachments) {\n const attachment = slotAttachments[name];\n\n if (attachment) attachments.push(new SkinEntry(slotIndex, name, attachment));\n }\n }\n }\n\n clear() {\n this.attachments.length = 0;\n this.bones.length = 0;\n this.constraints.length = 0;\n }\n\n /** Attach each attachment in this skin if the corresponding attachment in the old skin is currently attached. */\n attachAll(skeleton: Skeleton, oldSkin: Skin) {\n let slotIndex = 0;\n\n for (let i = 0; i < skeleton.slots.length; i++) {\n const slot = skeleton.slots[i];\n const slotAttachment = slot.getAttachment();\n\n if (slotAttachment && slotIndex < oldSkin.attachments.length) {\n const dictionary = oldSkin.attachments[slotIndex];\n\n for (const key in dictionary) {\n const skinAttachment: Attachment = dictionary[key];\n\n if (slotAttachment == skinAttachment) {\n const attachment = this.getAttachment(slotIndex, key);\n\n if (attachment != null) slot.setAttachment(attachment);\n break;\n }\n }\n }\n slotIndex++;\n }\n }\n}\n"],"names":[],"mappings":"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"}