{"version":3,"file":"SpineBase.mjs","sources":["../src/SpineBase.ts"],"sourcesContent":["import { AttachmentType } from './core/AttachmentType';\nimport { TextureRegion } from './core/TextureRegion';\nimport { MathUtils } from './core/Utils';\nimport type { IAnimationState, IAnimationStateData } from './core/IAnimation';\nimport type { IAttachment, IClippingAttachment, IMeshAttachment, IRegionAttachment, ISkeleton, ISkeletonData, ISlot, IVertexAttachment } from './core/ISkeleton';\nimport { DRAW_MODES, Rectangle, Polygon, Transform, Texture, utils } from '@pixi/core';\nimport { Container, DisplayObject } from '@pixi/display';\nimport { Sprite } from '@pixi/sprite';\nimport { SimpleMesh } from '@pixi/mesh-extras';\nimport { Graphics } from '@pixi/graphics';\nimport { settings } from './settings';\nimport type { ISpineDebugRenderer } from './SpineDebugRenderer';\n\nconst tempRgb = [0, 0, 0];\n\n/**\n * @public\n */\nexport interface ISpineDisplayObject extends DisplayObject {\n    region?: TextureRegion;\n    attachment?: IAttachment;\n}\n\n/**\n * @public\n */\nexport class SpineSprite extends Sprite implements ISpineDisplayObject {\n    region?: TextureRegion = null;\n    attachment?: IAttachment = null;\n}\n\n/**\n * @public\n */\nexport class SpineMesh extends SimpleMesh implements ISpineDisplayObject {\n    region?: TextureRegion = null;\n    attachment?: IAttachment = null;\n\n    constructor(texture: Texture, vertices?: Float32Array, uvs?: Float32Array, indices?: Uint16Array, drawMode?: number) {\n        super(texture, vertices, uvs, indices, drawMode);\n    }\n}\n\n/**\n * A class that enables the you to import and run your spine animations in pixi.\n * The Spine animation data needs to be loaded using either the Loader or a SpineLoader before it can be used by this class\n * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\n *\n * ```js\n * let spineAnimation = new spine(spineData);\n * ```\n *\n * @public\n * @class\n * @extends Container\n * @memberof spine\n * @param spineData {object} The spine data loaded from a spine atlas.\n */\nexport abstract class SpineBase<\n        Skeleton extends ISkeleton,\n        SkeletonData extends ISkeletonData,\n        AnimationState extends IAnimationState,\n        AnimationStateData extends IAnimationStateData\n    >\n    extends Container\n    implements GlobalMixins.Spine\n{\n    tintRgb: ArrayLike<number>;\n    spineData: SkeletonData;\n    skeleton: Skeleton;\n    stateData: AnimationStateData;\n    state: AnimationState;\n    slotContainers: Array<Container>;\n    tempClipContainers: Array<Container>;\n    localDelayLimit: number;\n    private _autoUpdate: boolean;\n    protected _visible: boolean;\n    private _debug: ISpineDebugRenderer;\n    public get debug(): ISpineDebugRenderer {\n        return this._debug;\n    }\n    public set debug(value: ISpineDebugRenderer) {\n        if (value == this._debug) {\n            // soft equality allows null == undefined\n            return;\n        }\n        this._debug?.unregisterSpine(this);\n        value?.registerSpine(this);\n        this._debug = value;\n    }\n\n    abstract createSkeleton(spineData: ISkeletonData);\n\n    constructor(spineData: SkeletonData) {\n        super();\n\n        if (!spineData) {\n            throw new Error('The spineData param is required.');\n        }\n\n        if (typeof spineData === 'string') {\n            throw new Error('spineData param cant be string. Please use spine.Spine.fromAtlas(\"YOUR_RESOURCE_NAME\") from now on.');\n        }\n\n        /**\n         * The spineData object\n         *\n         * @member {object}\n         */\n        this.spineData = spineData;\n\n        /**\n         * A spine Skeleton object\n         *\n         * @member {object}\n         */\n        this.createSkeleton(spineData);\n\n        /**\n         * An array of containers\n         *\n         * @member {Container[]}\n         */\n        this.slotContainers = [];\n\n        this.tempClipContainers = [];\n\n        for (let i = 0, n = this.skeleton.slots.length; i < n; i++) {\n            const slot = this.skeleton.slots[i];\n            const attachment: any = slot.getAttachment();\n            const slotContainer = this.newContainer();\n\n            this.slotContainers.push(slotContainer);\n            this.addChild(slotContainer);\n            this.tempClipContainers.push(null);\n\n            if (!attachment) {\n                continue;\n            }\n            if (attachment.type === AttachmentType.Region) {\n                const spriteName = attachment.name;\n                const sprite = this.createSprite(slot, attachment as IRegionAttachment, spriteName);\n\n                slot.currentSprite = sprite;\n                slot.currentSpriteName = spriteName;\n                slotContainer.addChild(sprite);\n            } else if (attachment.type === AttachmentType.Mesh) {\n                const mesh = this.createMesh(slot, attachment);\n\n                slot.currentMesh = mesh;\n                slot.currentMeshId = attachment.id;\n                slot.currentMeshName = attachment.name;\n                slotContainer.addChild(mesh);\n            } else if (attachment.type === AttachmentType.Clipping) {\n                this.createGraphics(slot, attachment);\n                slotContainer.addChild(slot.clippingContainer);\n                slotContainer.addChild(slot.currentGraphics);\n            }\n        }\n\n        /**\n         * The tint applied to all spine slots. This is a [r,g,b] value. A value of [1,1,1] will remove any tint effect.\n         *\n         * @member {number}\n         * @memberof spine.Spine#\n         */\n        this.tintRgb = new Float32Array([1, 1, 1]);\n\n        this.autoUpdate = true;\n        this.visible = true;\n    }\n\n    /**\n     * If this flag is set to true, the spine animation will be automatically updated every\n     * time the object id drawn. The down side of this approach is that the delta time is\n     * automatically calculated and you could miss out on cool effects like slow motion,\n     * pause, skip ahead and the sorts. Most of these effects can be achieved even with\n     * autoUpdate enabled but are harder to achieve.\n     *\n     * @member {boolean}\n     * @memberof spine.Spine#\n     * @default true\n     */\n    get autoUpdate(): boolean {\n        return this._autoUpdate;\n    }\n\n    set autoUpdate(value: boolean) {\n        if (value !== this._autoUpdate) {\n            this._autoUpdate = value;\n            this.updateTransform = value ? SpineBase.prototype.autoUpdateTransform : Container.prototype.updateTransform;\n        }\n    }\n\n    /**\n     * The tint applied to the spine object. This is a hex value. A value of 0xFFFFFF will remove any tint effect.\n     *\n     * @member {number}\n     * @memberof spine.Spine#\n     * @default 0xFFFFFF\n     */\n    get tint(): number {\n        return utils.rgb2hex(this.tintRgb as any);\n    }\n\n    set tint(value: number) {\n        this.tintRgb = utils.hex2rgb(value, this.tintRgb as any);\n    }\n\n    /**\n     * Limit value for the update dt with Spine.globalDelayLimit\n     * that can be overridden with localDelayLimit\n     * @return {number} - Maximum processed dt value for the update\n     */\n    get delayLimit(): number {\n        const limit = typeof this.localDelayLimit !== 'undefined' ? this.localDelayLimit : settings.GLOBAL_DELAY_LIMIT;\n\n        // If limit is 0, this means there is no limit for the delay\n        return limit || Number.MAX_VALUE;\n    }\n\n    /**\n     * Update the spine skeleton and its animations by delta time (dt)\n     *\n     * @param dt {number} Delta time. Time by which the animation should be updated\n     */\n    update(dt: number) {\n        // Limit delta value to avoid animation jumps\n        const delayLimit = this.delayLimit;\n\n        if (dt > delayLimit) dt = delayLimit;\n\n        this.state.update(dt);\n        this.state.apply(this.skeleton);\n\n        // check we haven't been destroyed via a spine event callback in state update\n        if (!this.skeleton) {\n            return;\n        }\n\n        this.skeleton.updateWorldTransform();\n\n        const slots = this.skeleton.slots;\n\n        // in case pixi has double tint\n        const globalClr = (this as any).color;\n        let light: ArrayLike<number> = null;\n        let dark: ArrayLike<number> = null;\n\n        if (globalClr) {\n            light = globalClr.light;\n            dark = globalClr.dark;\n        } else {\n            light = this.tintRgb;\n        }\n\n        // let thack = false;\n\n        for (let i = 0, n = slots.length; i < n; i++) {\n            const slot = slots[i];\n            const attachment = slot.getAttachment();\n            const slotContainer = this.slotContainers[i];\n\n            if (!attachment) {\n                slotContainer.visible = false;\n                continue;\n            }\n\n            let spriteColor: any = null;\n\n            if (attachment.sequence) {\n                attachment.sequence.apply(slot, attachment as any);\n            }\n            let region = (attachment as IRegionAttachment).region;\n\n            const attColor = (attachment as any).color;\n\n            switch (attachment != null && attachment.type) {\n                case AttachmentType.Region:\n                    const transform = slotContainer.transform;\n\n                    transform.setFromMatrix(slot.bone.matrix);\n\n                    region = (attachment as IRegionAttachment).region;\n                    if (slot.currentMesh) {\n                        slot.currentMesh.visible = false;\n                        slot.currentMesh = null;\n                        slot.currentMeshId = undefined;\n                        slot.currentMeshName = undefined;\n                    }\n                    if (!region) {\n                        if (slot.currentSprite) {\n                            slot.currentSprite.renderable = false;\n                        }\n                        break;\n                    }\n                    if (!slot.currentSpriteName || slot.currentSpriteName !== attachment.name) {\n                        const spriteName = attachment.name;\n\n                        if (slot.currentSprite) {\n                            slot.currentSprite.visible = false;\n                        }\n                        slot.sprites = slot.sprites || {};\n                        if (slot.sprites[spriteName] !== undefined) {\n                            slot.sprites[spriteName].visible = true;\n                        } else {\n                            const sprite = this.createSprite(slot, attachment as IRegionAttachment, spriteName);\n\n                            slotContainer.addChild(sprite);\n                        }\n                        slot.currentSprite = slot.sprites[spriteName];\n                        slot.currentSpriteName = spriteName;\n\n                        // force sprite update when attachment name is same.\n                        // issues https://github.com/pixijs/pixi-spine/issues/318\n                    }\n                    slot.currentSprite.renderable = true;\n                    if (!slot.hackRegion) {\n                        this.setSpriteRegion(attachment as IRegionAttachment, slot.currentSprite, region);\n                    }\n                    if (slot.currentSprite.color) {\n                        // YAY! double - tint!\n                        spriteColor = slot.currentSprite.color;\n                    } else {\n                        tempRgb[0] = light[0] * slot.color.r * attColor.r;\n                        tempRgb[1] = light[1] * slot.color.g * attColor.g;\n                        tempRgb[2] = light[2] * slot.color.b * attColor.b;\n                        slot.currentSprite.tint = utils.rgb2hex(tempRgb);\n                    }\n                    slot.currentSprite.blendMode = slot.blendMode;\n                    break;\n\n                case AttachmentType.Mesh:\n                    if (slot.currentSprite) {\n                        // TODO: refactor this thing, switch it on and off for container\n                        slot.currentSprite.visible = false;\n                        slot.currentSprite = null;\n                        slot.currentSpriteName = undefined;\n\n                        // TODO: refactor this shit\n                        const transform = new Transform();\n\n                        (transform as any)._parentID = -1;\n                        (transform as any)._worldID = (slotContainer.transform as any)._worldID;\n                        slotContainer.transform = transform;\n                    }\n                    if (!region) {\n                        if (slot.currentMesh) {\n                            slot.currentMesh.renderable = false;\n                        }\n                        break;\n                    }\n\n                    const id = (attachment as IVertexAttachment).id;\n\n                    if (slot.currentMeshId === undefined || slot.currentMeshId !== id) {\n                        const meshId = id;\n\n                        if (slot.currentMesh) {\n                            slot.currentMesh.visible = false;\n                        }\n\n                        slot.meshes = slot.meshes || {};\n\n                        if (slot.meshes[meshId] !== undefined) {\n                            slot.meshes[meshId].visible = true;\n                        } else {\n                            const mesh = this.createMesh(slot, attachment as IMeshAttachment);\n\n                            slotContainer.addChild(mesh);\n                        }\n\n                        slot.currentMesh = slot.meshes[meshId];\n                        slot.currentMeshName = attachment.name;\n                        slot.currentMeshId = meshId;\n                    }\n                    slot.currentMesh.renderable = true;\n                    (attachment as IVertexAttachment).computeWorldVerticesOld(slot, slot.currentMesh.vertices);\n                    if (slot.currentMesh.color) {\n                        // pixi-heaven\n                        spriteColor = slot.currentMesh.color;\n                    } else {\n                        tempRgb[0] = light[0] * slot.color.r * attColor.r;\n                        tempRgb[1] = light[1] * slot.color.g * attColor.g;\n                        tempRgb[2] = light[2] * slot.color.b * attColor.b;\n                        slot.currentMesh.tint = utils.rgb2hex(tempRgb);\n                    }\n                    slot.currentMesh.blendMode = slot.blendMode;\n                    if (!slot.hackRegion) {\n                        this.setMeshRegion(attachment as IMeshAttachment, slot.currentMesh, region);\n                    }\n                    break;\n                case AttachmentType.Clipping:\n                    if (!slot.currentGraphics) {\n                        this.createGraphics(slot, attachment as IClippingAttachment);\n                        slotContainer.addChild(slot.clippingContainer);\n                        slotContainer.addChild(slot.currentGraphics);\n                    }\n                    this.updateGraphics(slot, attachment as IClippingAttachment);\n                    slotContainer.alpha = 1.0;\n                    slotContainer.visible = true;\n                    continue;\n                default:\n                    slotContainer.visible = false;\n                    continue;\n            }\n            slotContainer.visible = true;\n\n            // pixi has double tint\n            if (spriteColor) {\n                let r0 = slot.color.r * attColor.r;\n                let g0 = slot.color.g * attColor.g;\n                let b0 = slot.color.b * attColor.b;\n\n                // YAY! double-tint!\n                spriteColor.setLight(light[0] * r0 + dark[0] * (1.0 - r0), light[1] * g0 + dark[1] * (1.0 - g0), light[2] * b0 + dark[2] * (1.0 - b0));\n                if (slot.darkColor) {\n                    r0 = slot.darkColor.r;\n                    g0 = slot.darkColor.g;\n                    b0 = slot.darkColor.b;\n                } else {\n                    r0 = 0.0;\n                    g0 = 0.0;\n                    b0 = 0.0;\n                }\n                spriteColor.setDark(light[0] * r0 + dark[0] * (1 - r0), light[1] * g0 + dark[1] * (1 - g0), light[2] * b0 + dark[2] * (1 - b0));\n            }\n\n            slotContainer.alpha = slot.color.a;\n        }\n\n        // == this is clipping implementation ===\n        // TODO: remove parent hacks when pixi masks allow it\n        const drawOrder = this.skeleton.drawOrder;\n        let clippingAttachment: IClippingAttachment = null;\n        let clippingContainer: Container = null;\n\n        for (let i = 0, n = drawOrder.length; i < n; i++) {\n            const slot = slots[drawOrder[i].data.index];\n            const slotContainer = this.slotContainers[drawOrder[i].data.index];\n\n            if (!clippingContainer) {\n                // Adding null check as it is possible for slotContainer.parent to be null in the event of a spine being disposed off in its loop callback\n                if (slotContainer.parent !== null && slotContainer.parent !== this) {\n                    slotContainer.parent.removeChild(slotContainer);\n                    // silend add hack\n                    (slotContainer as any).parent = this;\n                }\n            }\n            if (slot.currentGraphics && slot.getAttachment()) {\n                clippingContainer = slot.clippingContainer;\n                clippingAttachment = slot.getAttachment() as IClippingAttachment;\n                clippingContainer.children.length = 0;\n                this.children[i] = slotContainer;\n\n                if (clippingAttachment.endSlot === slot.data) {\n                    clippingAttachment.endSlot = null;\n                }\n            } else if (clippingContainer) {\n                let c = this.tempClipContainers[i];\n\n                if (!c) {\n                    c = this.tempClipContainers[i] = this.newContainer();\n                    c.visible = false;\n                }\n                this.children[i] = c;\n\n                // silent remove hack\n                (slotContainer as any).parent = null;\n                clippingContainer.addChild(slotContainer);\n                if (clippingAttachment.endSlot == slot.data) {\n                    clippingContainer.renderable = true;\n                    clippingContainer = null;\n                    clippingAttachment = null;\n                }\n            } else {\n                this.children[i] = slotContainer;\n            }\n        }\n\n        // if you can debug, then debug!\n        this._debug?.renderDebug(this);\n    }\n\n    private setSpriteRegion(attachment: IRegionAttachment, sprite: SpineSprite, region: TextureRegion) {\n        // prevent setters calling when attachment and region is same\n        if (sprite.attachment === attachment && sprite.region === region) {\n            return;\n        }\n\n        sprite.region = region;\n        sprite.attachment = attachment;\n\n        sprite.texture = region.texture;\n        sprite.rotation = attachment.rotation * MathUtils.degRad;\n        sprite.position.x = attachment.x;\n        sprite.position.y = attachment.y;\n        sprite.alpha = attachment.color.a;\n\n        if (!region.size) {\n            sprite.scale.x = (attachment.scaleX * attachment.width) / region.originalWidth;\n            sprite.scale.y = (-attachment.scaleY * attachment.height) / region.originalHeight;\n        } else {\n            // hacked!\n            sprite.scale.x = region.size.width / region.originalWidth;\n            sprite.scale.y = -region.size.height / region.originalHeight;\n        }\n    }\n\n    private setMeshRegion(attachment: IMeshAttachment, mesh: SpineMesh, region: TextureRegion) {\n        if (mesh.attachment === attachment && mesh.region === region) {\n            return;\n        }\n\n        mesh.region = region;\n        mesh.attachment = attachment;\n        mesh.texture = region.texture;\n        region.texture.updateUvs();\n        mesh.uvBuffer.update(attachment.regionUVs);\n    }\n\n    protected lastTime: number;\n\n    /**\n     * When autoupdate is set to yes this function is used as pixi's updateTransform function\n     *\n     * @private\n     */\n    autoUpdateTransform() {\n        if (settings.GLOBAL_AUTO_UPDATE) {\n            this.lastTime = this.lastTime || Date.now();\n            const timeDelta = (Date.now() - this.lastTime) * 0.001;\n\n            this.lastTime = Date.now();\n            this.update(timeDelta);\n        } else {\n            this.lastTime = 0;\n        }\n\n        Container.prototype.updateTransform.call(this);\n    }\n\n    /**\n     * Create a new sprite to be used with core.RegionAttachment\n     *\n     * @param slot {spine.Slot} The slot to which the attachment is parented\n     * @param attachment {spine.RegionAttachment} The attachment that the sprite will represent\n     * @private\n     */\n    createSprite(slot: ISlot, attachment: IRegionAttachment, defName: string) {\n        let region = attachment.region;\n\n        if (slot.hackAttachment === attachment) {\n            region = slot.hackRegion;\n        }\n        const texture = region ? region.texture : null;\n        const sprite = this.newSprite(texture);\n\n        sprite.anchor.set(0.5);\n        if (region) {\n            this.setSpriteRegion(attachment, sprite, attachment.region);\n        }\n\n        slot.sprites = slot.sprites || {};\n        slot.sprites[defName] = sprite;\n\n        return sprite;\n    }\n\n    /**\n     * Creates a Strip from the spine data\n     * @param slot {spine.Slot} The slot to which the attachment is parented\n     * @param attachment {spine.RegionAttachment} The attachment that the sprite will represent\n     * @private\n     */\n    createMesh(slot: ISlot, attachment: IMeshAttachment) {\n        if (!attachment.region && attachment.sequence) {\n            attachment.sequence.apply(slot, attachment as any);\n        }\n        let region = attachment.region;\n\n        if (slot.hackAttachment === attachment) {\n            region = slot.hackRegion;\n            slot.hackAttachment = null;\n            slot.hackRegion = null;\n        }\n        const strip = this.newMesh(\n            region ? region.texture : null,\n            new Float32Array(attachment.regionUVs.length),\n            attachment.regionUVs,\n            new Uint16Array(attachment.triangles),\n            DRAW_MODES.TRIANGLES\n        );\n\n        if (typeof (strip as any)._canvasPadding !== 'undefined') {\n            (strip as any)._canvasPadding = 1.5;\n        }\n\n        strip.alpha = attachment.color.a;\n\n        strip.region = attachment.region;\n        if (region) {\n            this.setMeshRegion(attachment, strip, region);\n        }\n\n        slot.meshes = slot.meshes || {};\n        slot.meshes[attachment.id] = strip;\n\n        return strip;\n    }\n\n    static clippingPolygon: Array<number> = [];\n\n    // @ts-ignore\n    createGraphics(slot: ISlot, clip: IClippingAttachment) {\n        const graphics = this.newGraphics();\n        const poly = new Polygon([]);\n\n        graphics.clear();\n        graphics.beginFill(0xffffff, 1);\n        graphics.drawPolygon(poly as any);\n        graphics.renderable = false;\n        slot.currentGraphics = graphics;\n        slot.clippingContainer = this.newContainer();\n        slot.clippingContainer.mask = slot.currentGraphics;\n\n        return graphics;\n    }\n\n    updateGraphics(slot: ISlot, clip: IClippingAttachment) {\n        const geom = slot.currentGraphics.geometry;\n        const vertices = (geom.graphicsData[0].shape as Polygon).points;\n        const n = clip.worldVerticesLength;\n\n        vertices.length = n;\n        clip.computeWorldVertices(slot, 0, n, vertices, 0, 2);\n        geom.invalidate();\n    }\n\n    /**\n     * Changes texture in attachment in specific slot.\n     *\n     * PIXI runtime feature, it was made to satisfy our users.\n     *\n     * @param slotIndex {number}\n     * @param [texture = null] {PIXI.Texture} If null, take default (original) texture\n     * @param [size = null] {PIXI.Point} sometimes we need new size for region attachment, you can pass 'texture.orig' there\n     * @returns {boolean} Success flag\n     */\n    hackTextureBySlotIndex(slotIndex: number, texture: Texture = null, size: Rectangle = null) {\n        const slot = this.skeleton.slots[slotIndex];\n\n        if (!slot) {\n            return false;\n        }\n        const attachment: any = slot.getAttachment();\n        let region: TextureRegion = attachment.region;\n\n        if (texture) {\n            region = new TextureRegion();\n            region.texture = texture;\n            region.size = size;\n            slot.hackRegion = region;\n            slot.hackAttachment = attachment;\n        } else {\n            slot.hackRegion = null;\n            slot.hackAttachment = null;\n        }\n        if (slot.currentSprite) {\n            this.setSpriteRegion(attachment, slot.currentSprite, region);\n        } else if (slot.currentMesh) {\n            this.setMeshRegion(attachment, slot.currentMesh, region);\n        }\n\n        return true;\n    }\n\n    /**\n     * Changes texture in attachment in specific slot.\n     *\n     * PIXI runtime feature, it was made to satisfy our users.\n     *\n     * @param slotName {string}\n     * @param [texture = null] {PIXI.Texture} If null, take default (original) texture\n     * @param [size = null] {PIXI.Point} sometimes we need new size for region attachment, you can pass 'texture.orig' there\n     * @returns {boolean} Success flag\n     */\n    hackTextureBySlotName(slotName: string, texture: Texture = null, size: Rectangle = null) {\n        const index = this.skeleton.findSlotIndex(slotName);\n\n        if (index == -1) {\n            return false;\n        }\n\n        return this.hackTextureBySlotIndex(index, texture, size);\n    }\n\n    /**\n     * Changes texture of an attachment\n     *\n     * PIXI runtime feature, it was made to satisfy our users.\n     *\n     * @param slotName {string}\n     * @param attachmentName {string}\n     * @param [texture = null] {PIXI.Texture} If null, take default (original) texture\n     * @param [size = null] {PIXI.Point} sometimes we need new size for region attachment, you can pass 'texture.orig' there\n     * @returns {boolean} Success flag\n     */\n    hackTextureAttachment(slotName: string, attachmentName: string, texture, size: Rectangle = null) {\n        // changes the texture of an attachment at the skeleton level\n        const slotIndex = this.skeleton.findSlotIndex(slotName);\n        const attachment: any = this.skeleton.getAttachmentByName(slotName, attachmentName);\n\n        attachment.region.texture = texture;\n\n        const slot = this.skeleton.slots[slotIndex];\n\n        if (!slot) {\n            return false;\n        }\n\n        // gets the currently active attachment in this slot\n        const currentAttachment: any = slot.getAttachment();\n\n        if (attachmentName === currentAttachment.name) {\n            // if the attachment we are changing is currently active, change the the live texture\n            let region: TextureRegion = attachment.region;\n\n            if (texture) {\n                region = new TextureRegion();\n                region.texture = texture;\n                region.size = size;\n                slot.hackRegion = region;\n                slot.hackAttachment = currentAttachment;\n            } else {\n                slot.hackRegion = null;\n                slot.hackAttachment = null;\n            }\n            if (slot.currentSprite && slot.currentSprite.region != region) {\n                this.setSpriteRegion(currentAttachment, slot.currentSprite, region);\n                slot.currentSprite.region = region;\n            } else if (slot.currentMesh && slot.currentMesh.region != region) {\n                this.setMeshRegion(currentAttachment, slot.currentMesh, region);\n            }\n\n            return true;\n        }\n\n        return false;\n    }\n\n    // those methods can be overriden to spawn different classes\n    newContainer() {\n        return new Container();\n    }\n\n    newSprite(tex: Texture) {\n        return new SpineSprite(tex);\n    }\n\n    newGraphics() {\n        return new Graphics();\n    }\n\n    newMesh(texture: Texture, vertices?: Float32Array, uvs?: Float32Array, indices?: Uint16Array, drawMode?: number) {\n        return new SpineMesh(texture, vertices, uvs, indices, drawMode);\n    }\n\n    transformHack() {\n        return 1;\n    }\n\n    /**\n     * Hack for pixi-display and pixi-lights. Every attachment name ending with a suffix will be added to different layer\n     * @param nameSuffix\n     * @param group\n     * @param outGroup\n     */\n    hackAttachmentGroups(nameSuffix: string, group: any, outGroup: any) {\n        if (!nameSuffix) {\n            return undefined;\n        }\n        const list_d = [];\n        const list_n = [];\n\n        for (let i = 0, len = this.skeleton.slots.length; i < len; i++) {\n            const slot = this.skeleton.slots[i];\n            const name = slot.currentSpriteName || slot.currentMeshName || '';\n            const target = slot.currentSprite || slot.currentMesh;\n\n            if (name.endsWith(nameSuffix)) {\n                target.parentGroup = group;\n                list_n.push(target);\n            } else if (outGroup && target) {\n                target.parentGroup = outGroup;\n                list_d.push(target);\n            }\n        }\n\n        return [list_d, list_n];\n    }\n\n    destroy(options?: any): void {\n        this.debug = null; // setter will do the cleanup\n\n        for (let i = 0, n = this.skeleton.slots.length; i < n; i++) {\n            const slot = this.skeleton.slots[i];\n\n            for (const name in slot.meshes) {\n                slot.meshes[name].destroy(options);\n            }\n            slot.meshes = null;\n\n            for (const name in slot.sprites) {\n                slot.sprites[name].destroy(options);\n            }\n            slot.sprites = null;\n        }\n\n        for (let i = 0, n = this.slotContainers.length; i < n; i++) {\n            this.slotContainers[i].destroy(options);\n        }\n        this.spineData = null;\n        this.skeleton = null;\n        this.slotContainers = null;\n        this.stateData = null;\n        this.state = null;\n        this.tempClipContainers = null;\n\n        super.destroy(options);\n    }\n}\n\n/**\n * The visibility of the spine object. If false the object will not be drawn,\n * the updateTransform function will not be called, and the spine will not be automatically updated.\n *\n * @member {boolean}\n * @memberof spine.Spine#\n * @default true\n */\nObject.defineProperty(SpineBase.prototype, 'visible', {\n    get() {\n        return this._visible;\n    },\n    set(value: boolean) {\n        if (value !== this._visible) {\n            this._visible = value;\n            if (value) {\n                this.lastTime = 0;\n            }\n        }\n    },\n});\n"],"names":["transform"],"mappings":"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"}