{"version":3,"file":"Attachment.mjs","sources":["../../../src/core/attachments/Attachment.ts"],"sourcesContent":["import { AttachmentType, Utils } from '@pixi-spine/base';\nimport type { IAttachment, ArrayLike } from '@pixi-spine/base';\n\nimport type { Slot } from '../Slot';\n\n/**\n * @public\n */\nexport abstract class Attachment implements IAttachment {\n    name: string;\n    type: AttachmentType;\n\n    constructor(name: string) {\n        if (name == null) throw new Error('name cannot be null.');\n        this.name = name;\n    }\n\n    abstract copy(): Attachment;\n}\n\n/**\n * @public\n */\nexport abstract class VertexAttachment extends Attachment {\n    private static nextID = 0;\n\n    id = (VertexAttachment.nextID++ & 65535) << 11;\n    bones: Array<number>;\n    vertices: ArrayLike<number>;\n    worldVerticesLength = 0;\n    deformAttachment: VertexAttachment = this;\n\n    constructor(name: string) {\n        super(name);\n    }\n\n    computeWorldVerticesOld(slot: Slot, worldVertices: ArrayLike<number>) {\n        this.computeWorldVertices(slot, 0, this.worldVerticesLength, worldVertices, 0, 2);\n    }\n\n    /** Transforms local vertices to world coordinates.\n     * @param start The index of the first local vertex value to transform. Each vertex has 2 values, x and y.\n     * @param count The number of world vertex values to output. Must be <= {@link #getWorldVerticesLength()} - start.\n     * @param worldVertices The output world vertices. Must have a length >= offset + count.\n     * @param offset The worldVertices index to begin writing values. */\n    computeWorldVertices(slot: Slot, start: number, count: number, worldVertices: ArrayLike<number>, offset: number, stride: number) {\n        count = offset + (count >> 1) * stride;\n        const skeleton = slot.bone.skeleton;\n        const deformArray = slot.deform;\n        let vertices = this.vertices;\n        const bones = this.bones;\n\n        if (bones == null) {\n            if (deformArray.length > 0) vertices = deformArray;\n            const mat = slot.bone.matrix;\n            const x = mat.tx;\n            const y = mat.ty;\n            const a = mat.a;\n            const b = mat.c;\n            const c = mat.b;\n            const d = mat.d;\n\n            for (let v = start, w = offset; w < count; v += 2, w += stride) {\n                const vx = vertices[v];\n                const vy = vertices[v + 1];\n\n                worldVertices[w] = vx * a + vy * b + x;\n                worldVertices[w + 1] = vx * c + vy * d + y;\n            }\n\n            return;\n        }\n        let v = 0;\n        let skip = 0;\n\n        for (let i = 0; i < start; i += 2) {\n            const n = bones[v];\n\n            v += n + 1;\n            skip += n;\n        }\n        const skeletonBones = skeleton.bones;\n\n        if (deformArray.length == 0) {\n            for (let w = offset, b = skip * 3; w < count; w += stride) {\n                let wx = 0;\n                let wy = 0;\n                let n = bones[v++];\n\n                n += v;\n                for (; v < n; v++, b += 3) {\n                    const mat = skeletonBones[bones[v]].matrix;\n                    const vx = vertices[b];\n                    const vy = vertices[b + 1];\n                    const weight = vertices[b + 2];\n\n                    wx += (vx * mat.a + vy * mat.c + mat.tx) * weight;\n                    wy += (vx * mat.b + vy * mat.d + mat.ty) * weight;\n                }\n                worldVertices[w] = wx;\n                worldVertices[w + 1] = wy;\n            }\n        } else {\n            const deform = deformArray;\n\n            for (let w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) {\n                let wx = 0;\n                let wy = 0;\n                let n = bones[v++];\n\n                n += v;\n                for (; v < n; v++, b += 3, f += 2) {\n                    const mat = skeletonBones[bones[v]].matrix;\n                    const vx = vertices[b] + deform[f];\n                    const vy = vertices[b + 1] + deform[f + 1];\n                    const weight = vertices[b + 2];\n\n                    wx += (vx * mat.a + vy * mat.c + mat.tx) * weight;\n                    wy += (vx * mat.b + vy * mat.d + mat.ty) * weight;\n                }\n                worldVertices[w] = wx;\n                worldVertices[w + 1] = wy;\n            }\n        }\n    }\n\n    copyTo(attachment: VertexAttachment) {\n        if (this.bones != null) {\n            attachment.bones = new Array<number>(this.bones.length);\n            Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length);\n        } else attachment.bones = null;\n\n        if (this.vertices != null) {\n            attachment.vertices = Utils.newFloatArray(this.vertices.length);\n            Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length);\n        } else attachment.vertices = null;\n\n        attachment.worldVerticesLength = this.worldVerticesLength;\n        attachment.deformAttachment = this.deformAttachment;\n    }\n}\n"],"names":["v"],"mappings":"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"}