{"version":3,"file":"pixi-heaven.mjs","sources":["../src/polygonPacking/Spritesheet.ts","../src/animation/AnimationState.ts","../src/twotint/ColorTransform.ts","../src/twotint/sprites/SpriteH.ts","../src/settings.ts","../src/twotint/mesh/DoubleTintMeshMaterial.ts","../src/twotint/mesh/MeshH.ts","../src/twotint/sprites/convert.ts","../node_modules/@pixi/constants/lib/index.mjs","../src/twotint/sprites/HeavenBatchRenderer.ts","../src/twotint/sprites/LoopShaderGenerator.ts","../src/twotint/sprites/MaskedBatchRenderer.ts","../src/twotint/BitmapTextH.ts","../src/twotint/index.ts","../src/spine/SpineH.ts","../src/index.ts"],"sourcesContent":["import { Spritesheet } from '@pixi/spritesheet';\nimport { Rectangle, Texture } from '@pixi/core';\n\nexport class TexturePolygon\n{\n    constructor(public vertices: ArrayLike<number>, public uvs: ArrayLike<number>, public indices: ArrayLike<number>)\n    {\n    }\n}\n\nexport function applySpritesheetMixin(): void\n{\n    (Spritesheet.prototype as any)._processFrames = function _processFramesWithPolygonPacking(initialFrameIndex: number)\n    {\n        const meta = this.data.meta;\n        let frameIndex = initialFrameIndex;\n        const maxFrames = Spritesheet.BATCH_SIZE;\n\n        while (frameIndex - initialFrameIndex < maxFrames && frameIndex < this._frameKeys.length)\n        {\n            const i = this._frameKeys[frameIndex];\n            const data = this._frames[i];\n            const rect = data.frame;\n\n            if (rect)\n            {\n                let frame = null;\n                let trim = null;\n                const sourceSize = data.trimmed !== false && data.sourceSize\n                    ? data.sourceSize : data.frame;\n\n                const orig = new Rectangle(\n                    0,\n                    0,\n                    Math.floor(sourceSize.w) / this.resolution,\n                    Math.floor(sourceSize.h) / this.resolution\n                );\n\n                if (data.rotated)\n                {\n                    frame = new Rectangle(\n                        Math.floor(rect.x) / this.resolution,\n                        Math.floor(rect.y) / this.resolution,\n                        Math.floor(rect.h) / this.resolution,\n                        Math.floor(rect.w) / this.resolution\n                    );\n                }\n                else\n                {\n                    frame = new Rectangle(\n                        Math.floor(rect.x) / this.resolution,\n                        Math.floor(rect.y) / this.resolution,\n                        Math.floor(rect.w) / this.resolution,\n                        Math.floor(rect.h) / this.resolution\n                    );\n                }\n\n                //  Check to see if the sprite is trimmed\n                if (data.trimmed !== false && data.spriteSourceSize)\n                {\n                    trim = new Rectangle(\n                        Math.floor(data.spriteSourceSize.x) / this.resolution,\n                        Math.floor(data.spriteSourceSize.y) / this.resolution,\n                        Math.floor(rect.w) / this.resolution,\n                        Math.floor(rect.h) / this.resolution\n                    );\n                }\n\n                this.textures[i] = new Texture(\n                    this.baseTexture,\n                    frame,\n                    orig,\n                    trim,\n                    data.rotated ? 2 : 0,\n                    data.anchor,\n                    data.borders\n                );\n\n                if (data.vertices)\n                {\n                    const vertices = new Float32Array(data.vertices.length * 2);\n\n                    for (let i = 0; i < data.vertices.length; i++)\n                    {\n                        vertices[i * 2] = Math.floor(data.vertices[i][0]) / this.resolution;\n                        vertices[(i * 2) + 1] = Math.floor(data.vertices[i][1]) / this.resolution;\n                    }\n\n                    const uvs = new Float32Array(data.verticesUV.length * 2);\n\n                    for (let i = 0; i < data.verticesUV.length; i++)\n                    {\n                        uvs[i * 2] = data.verticesUV[i][0] / meta.size.w;\n                        uvs[(i * 2) + 1] = data.verticesUV[i][1] / meta.size.h;\n                    }\n\n                    const indices = new Uint16Array(data.triangles.length * 3);\n\n                    for (let i = 0; i < data.triangles.length; i++)\n                    {\n                        indices[i * 3] = data.triangles[i][0];\n                        indices[(i * 3) + 1] = data.triangles[i][1];\n                        indices[(i * 3) + 2] = data.triangles[i][2];\n                    }\n\n                    (this.textures[i] as any).polygon = new TexturePolygon(vertices, uvs, indices);\n                }\n\n                // lets also add the frame to pixi's global cache for 'from' and 'fromLoader' functions\n                Texture.addToCache(this.textures[i], i);\n            }\n\n            frameIndex++;\n        }\n    };\n}\n","import { Texture } from '@pixi/core';\nimport { Ticker, UPDATE_PRIORITY } from '@pixi/ticker';\n\nexport interface IFrameObject\n{\n    texture: Texture;\n    time: number;\n}\n\nexport interface ITextureAnimationTarget\n{\n    texture: Texture;\n    animState: AnimationState;\n}\n\nexport class AnimationState\n{\n    texture: Texture;\n\n    _textures: Array<Texture> = null;\n    _durations: Array<number> = null;\n    _autoUpdate: boolean;\n    animationSpeed = 1;\n    _target: ITextureAnimationTarget;\n    loop = true;\n    onComplete?: () => void;\n    onFrameChange?: (currentFrame: number) => void;\n    onLoop?: () => void;\n    _currentTime = 0;\n    playing = false;\n\n    constructor(textures: Array<Texture> | Array<IFrameObject>, autoUpdate?: boolean)\n    {\n        this.texture = textures[0] instanceof Texture ? textures[0] as Texture : (textures[0] as IFrameObject).texture;\n\n        this.textures = textures as Array<Texture>;\n\n        this._autoUpdate = autoUpdate !== false;\n    }\n\n    /**\n     * Stops the AnimatedSprite\n     *\n     */\n    stop()\n    {\n        if (!this.playing)\n        {\n            return;\n        }\n\n        this.playing = false;\n        if (this._autoUpdate)\n        {\n            Ticker.shared.remove(this.update, this);\n        }\n    }\n\n    /**\n     * Plays the AnimatedSprite\n     *\n     */\n    play()\n    {\n        if (this.playing)\n        {\n            return;\n        }\n\n        this.playing = true;\n        if (this._autoUpdate)\n        {\n            Ticker.shared.add(this.update, this, UPDATE_PRIORITY.HIGH);\n        }\n    }\n\n    /**\n     * Stops the AnimatedSprite and goes to a specific frame\n     *\n     * @param {number} frameNumber - frame index to stop at\n     */\n    gotoAndStop(frameNumber: number)\n    {\n        this.stop();\n\n        const previousFrame = this.currentFrame;\n\n        this._currentTime = frameNumber;\n\n        if (previousFrame !== this.currentFrame)\n        {\n            this.updateTexture();\n        }\n    }\n\n    /**\n     * Goes to a specific frame and begins playing the AnimatedSprite\n     *\n     * @param {number} frameNumber - frame index to start at\n     */\n    gotoAndPlay(frameNumber: number)\n    {\n        const previousFrame = this.currentFrame;\n\n        this._currentTime = frameNumber;\n\n        if (previousFrame !== this.currentFrame)\n        {\n            this.updateTexture();\n        }\n\n        this.play();\n    }\n\n    /**\n     * Updates the object transform for rendering.\n     *\n     * @private\n     * @param {number} deltaTime - Time since last tick.\n     */\n    update(deltaTime: number)\n    {\n        const elapsed = this.animationSpeed * deltaTime;\n        const previousFrame = this.currentFrame;\n\n        if (this._durations !== null)\n        {\n            let lag = this._currentTime % 1 * this._durations[this.currentFrame];\n\n            lag += elapsed / 60 * 1000;\n\n            while (lag < 0)\n            {\n                this._currentTime--;\n                lag += this._durations[this.currentFrame];\n            }\n\n            let sign = this.animationSpeed * deltaTime;\n\n            if (sign < 0) sign = -1;\n            else if (sign > 0) sign = 1;\n\n            this._currentTime = Math.floor(this._currentTime);\n\n            while (lag >= this._durations[this.currentFrame])\n            {\n                lag -= this._durations[this.currentFrame] * sign;\n                this._currentTime += sign;\n            }\n\n            this._currentTime += lag / this._durations[this.currentFrame];\n        }\n        else\n        {\n            this._currentTime += elapsed;\n        }\n\n        if (this._currentTime < 0 && !this.loop)\n        {\n            this.gotoAndStop(0);\n\n            if (this.onComplete)\n            {\n                this.onComplete();\n            }\n        }\n        else if (this._currentTime >= this._textures.length && !this.loop)\n        {\n            this.gotoAndStop(this._textures.length - 1);\n\n            if (this.onComplete)\n            {\n                this.onComplete();\n            }\n        }\n        else if (previousFrame !== this.currentFrame)\n        {\n            if (this.loop && this.onLoop)\n            {\n                if (this.animationSpeed > 0 && this.currentFrame < previousFrame)\n                {\n                    this.onLoop();\n                }\n                else if (this.animationSpeed < 0 && this.currentFrame > previousFrame)\n                {\n                    this.onLoop();\n                }\n            }\n\n            this.updateTexture();\n        }\n    }\n\n    /**\n     * Updates the displayed texture to match the current frame index\n     *\n     * @private\n     */\n    updateTexture()\n    {\n        this.texture = this._textures[this.currentFrame];\n        if (this._target)\n        {\n            this._target.texture = this.texture;\n        }\n        if (this.onFrameChange)\n        {\n            this.onFrameChange(this.currentFrame);\n        }\n    }\n\n    bind(target: ITextureAnimationTarget)\n    {\n        this._target = target;\n        target.animState = this;\n    }\n\n    /**\n     * A short hand way of creating a movieclip from an array of frame ids\n     *\n     * @static\n     * @param {string[]} frames - The array of frames ids the movieclip will use as its texture frames\n     * @return {AnimatedSprite} The new animated sprite with the specified frames.\n     */\n    static fromFrames(frames: Array<string>)\n    {\n        const textures = [];\n\n        for (let i = 0; i < frames.length; ++i)\n        {\n            textures.push(Texture.from(frames[i]));\n        }\n\n        return new AnimationState(textures);\n    }\n\n    /**\n     * A short hand way of creating a movieclip from an array of image ids\n     *\n     * @static\n     * @param {string[]} images - the array of image urls the movieclip will use as its texture frames\n     * @return {AnimatedSprite} The new animate sprite with the specified images as frames.\n     */\n    static fromImages(images: Array<string>)\n    {\n        const textures = [];\n\n        for (let i = 0; i < images.length; ++i)\n        {\n            textures.push(Texture.from(images[i]));\n        }\n\n        return new AnimationState(textures);\n    }\n\n    /**\n     * totalFrames is the total number of frames in the AnimatedSprite. This is the same as number of textures\n     * assigned to the AnimatedSprite.\n     *\n     * @readonly\n     * @member {number}\n     * @default 0\n     */\n    get totalFrames()\n    {\n        return this._textures.length;\n    }\n\n    /**\n     * The array of textures used for this AnimatedSprite\n     *\n     * @member {Texture[]}\n     */\n    get textures(): Texture[] | IFrameObject[]\n    {\n        return this._textures;\n    }\n\n    set textures(value: Texture[] | IFrameObject[])\n    {\n        if (value[0] instanceof Texture)\n        {\n            this._textures = value as Texture[];\n            this._durations = null;\n        }\n        else\n        {\n            this._textures = [];\n            this._durations = [];\n\n            for (let i = 0; i < value.length; i++)\n            {\n                const val = (value as any)[i];\n\n                this._textures.push(val.texture);\n                this._durations.push(val.time);\n            }\n        }\n        this.gotoAndStop(0);\n        this.updateTexture();\n    }\n\n    get currentFrame()\n    {\n        let currentFrame = Math.floor(this._currentTime) % this._textures.length;\n\n        if (currentFrame < 0)\n        {\n            currentFrame += this._textures.length;\n        }\n\n        return currentFrame;\n    }\n}\n","const whiteRgba = [1.0, 1.0, 1.0, 1.0];\nconst blackRgba = [0.0, 0.0, 0.0, 1.0];\n\nexport class ColorTransform\n{\n    dark = new Float32Array(blackRgba);\n    light = new Float32Array(whiteRgba);\n\n    _updateID = 0;\n    _currentUpdateID = -1;\n\n    darkRgba = 0;\n    lightRgba = -1;\n    hasNoTint = true;\n\n    get darkR()\n    {\n        return this.dark[0];\n    }\n\n    set darkR(value: number)\n    {\n        if (this.dark[0] === value) return;\n        this.dark[0] = value;\n        this._updateID++;\n    }\n\n    get darkG()\n    {\n        return this.dark[1];\n    }\n\n    set darkG(value: number)\n    {\n        if (this.dark[1] === value) return;\n        this.dark[1] = value;\n        this._updateID++;\n    }\n\n    get darkB()\n    {\n        return this.dark[2];\n    }\n\n    set darkB(value: number)\n    {\n        if (this.dark[2] === value) return;\n        this.dark[2] = value;\n        this._updateID++;\n    }\n\n    get lightR()\n    {\n        return this.light[0];\n    }\n\n    set lightR(value: number)\n    {\n        if (this.light[0] === value) return;\n        this.light[0] = value;\n        this._updateID++;\n    }\n\n    get lightG()\n    {\n        return this.light[1];\n    }\n\n    set lightG(value: number)\n    {\n        if (this.light[1] === value) return;\n        this.light[1] = value;\n        this._updateID++;\n    }\n\n    get lightB()\n    {\n        return this.light[2];\n    }\n\n    set lightB(value: number)\n    {\n        if (this.light[2] === value) return;\n        this.light[2] = value;\n        this._updateID++;\n    }\n\n    get alpha()\n    {\n        return this.light[3];\n    }\n\n    set alpha(value: number)\n    {\n        if (this.light[3] === value) return;\n        this.light[3] = value;\n        this._updateID++;\n    }\n\n    get pma()\n    {\n        return this.dark[3] !== 0.0;\n    }\n\n    set pma(value: boolean)\n    {\n        if ((this.dark[3] !== 0.0) !== value) return;\n        this.dark[3] = value ? 1.0 : 0.0;\n        this._updateID++;\n    }\n\n    get tintBGR()\n    {\n        const light = this.light;\n\n        return ((light[0] * 255) << 16) + ((light[1] * 255) << 8) + (light[2] * 255 | 0);\n    }\n\n    set tintBGR(value: number)\n    {\n        this.setLight(\n            ((value >> 16) & 0xff) / 255.0,\n            ((value >> 8) & 0xff) / 255.0,\n            (value & 0xff) / 255.0\n        );\n    }\n\n    setLight(R: number, G: number, B: number)\n    {\n        const color = this.light;\n\n        if (color[0] === R && color[1] === G && color[2] === B)\n        {\n            return;\n        }\n        color[0] = R;\n        color[1] = G;\n        color[2] = B;\n        this._updateID++;\n    }\n\n    setDark(R: number, G: number, B: number)\n    {\n        const color = this.dark;\n\n        if (color[0] === R && color[1] === G && color[2] === B)\n        {\n            return;\n        }\n        color[0] = R;\n        color[1] = G;\n        color[2] = B;\n        this._updateID++;\n    }\n\n    clear()\n    {\n        this.dark[0] = 0.0;\n        this.dark[1] = 0.0;\n        this.dark[2] = 0.0;\n        this.light[0] = 1.0;\n        this.light[1] = 1.0;\n        this.light[2] = 1.0;\n    }\n\n    invalidate()\n    {\n        this._updateID++;\n    }\n\n    updateTransformLocal()\n    {\n        const dark = this.dark; const\n            light = this.light;\n        const la = 255 * (1.0 + ((light[3] - 1.0) * dark[3]));\n\n        this.hasNoTint = dark[0] === 0.0 && dark[1] === 0.0 && dark[2] === 0.0\n            && light[0] === 1.0 && light[1] === 1.0 && light[2] === 1.0;\n        this.darkRgba = (dark[0] * la | 0) + ((dark[1] * la) << 8)\n            + ((dark[2] * la) << 16) + ((dark[3] * 255) << 24);\n        this.lightRgba = (light[0] * la | 0) + ((light[1] * la) << 8)\n            + ((light[2] * la) << 16) + ((light[3] * 255) << 24);\n        this._currentUpdateID = this._updateID;\n    }\n\n    updateTransform()\n    {\n        if (this._currentUpdateID === this._updateID)\n        {\n            return;\n        }\n        this.updateTransformLocal();\n    }\n}\n","import { AnimationState, ITextureAnimationTarget } from '../../animation/AnimationState';\nimport { Matrix } from '@pixi/math';\nimport { ColorTransform } from '../ColorTransform';\nimport { Renderer, Texture, TextureMatrix } from '@pixi/core';\nimport { Sprite } from '@pixi/sprite';\nimport { sign } from '@pixi/utils';\n\nconst tempMat = new Matrix();\n\nconst defIndices = new Uint16Array([0, 1, 2, 0, 2, 3]);\n\nexport class SpriteH extends Sprite implements ITextureAnimationTarget\n{\n    color = new ColorTransform();\n    maskSprite: SpriteH = null;\n    maskVertexData: Float32Array = null;\n    uvs: Float32Array = null;\n    indices: Uint16Array = defIndices;\n    animState: AnimationState = null;\n    // modified by renderer\n    blendAddUnity = false;\n\n    constructor(texture: Texture)\n    {\n        super(texture);\n        this.pluginName = 'batchHeaven';\n        if (this.texture.valid) this._onTextureUpdate();\n    }\n\n    get tint()\n    {\n        return this.color ? this.color.tintBGR : 0xffffff;\n    }\n\n    set tint(value: number)\n    {\n        if (this.color)\n        {\n            this.color.tintBGR = value;\n        }\n    }\n\n    _onTextureUpdate()\n    {\n        const thisAny = this as any;\n\n        thisAny._textureID = -1;\n        thisAny._textureTrimmedID = -1;\n\n        const texture = thisAny._texture;\n\n        if (texture.polygon)\n        {\n            this.uvs = texture.polygon.uvs;\n            this.indices = texture.polygon.indices;\n        }\n        else\n        {\n            this.uvs = texture._uvs.uvsFloat32;\n            this.indices = defIndices;\n        }\n\n        this._cachedTint = 0xFFFFFF;\n        if (this.color)\n        {\n            this.color.pma = thisAny._texture.baseTexture.premultipliedAlpha;\n        }\n\n        // so if _width is 0 then width was not set..\n        if (thisAny._width)\n        {\n            this.scale.x = sign(this.scale.x) * thisAny._width / thisAny._texture.orig.width;\n        }\n\n        if (thisAny._height)\n        {\n            this.scale.y = sign(this.scale.y) * thisAny._height / thisAny._texture.orig.height;\n        }\n    }\n\n    _render(renderer: Renderer)\n    {\n        this.color.alpha = this.worldAlpha;\n        this.color.updateTransform();\n        super._render(renderer);\n    }\n\n    _calculateBounds()\n    {\n        const thisAny = this as any;\n        const polygon = (thisAny as any).polygon;\n        const trim = thisAny.trim;\n        const orig = thisAny.orig;\n\n        // F irst lets check to see if the current texture has a trim..\n        if (!polygon && (!trim || (trim.width === orig.width && trim.height === orig.height)))\n        {\n            // no trim! lets use the usual calculations..\n            this.calculateVertices();\n            this._bounds.addQuad(thisAny.vertexData as any);\n        }\n        else\n        {\n            // lets calculate a special trimmed bounds...\n            this.calculateTrimmedVertices();\n            this._bounds.addQuad(thisAny.vertexTrimmedData as any);\n        }\n    }\n\n    calculateVertices()\n    {\n        const thisAny = this as any;\n        const transform = this.transform as any;\n        const texture = thisAny._texture as any;\n\n        if (thisAny._transformID === transform._worldID && thisAny._textureID === texture._updateID)\n        {\n            return;\n        }\n\n        thisAny._transformID = transform._worldID;\n        thisAny._textureID = texture._updateID;\n\n        // set the vertex data\n\n        const wt = this.transform.worldTransform;\n        const a = wt.a;\n        const b = wt.b;\n        const c = wt.c;\n        const d = wt.d;\n        const tx = wt.tx;\n        const ty = wt.ty;\n        const anchor = thisAny._anchor as any;\n        const orig = texture.orig;\n\n        if (texture.polygon)\n        {\n            const vertices = texture.polygon.vertices;\n            const n = vertices.length;\n\n            if (thisAny.vertexData.length !== n)\n            {\n                thisAny.vertexData = new Float32Array(n);\n            }\n\n            const vertexData = thisAny.vertexData;\n\n            const dx = -(anchor._x * orig.width);\n            const dy = -(anchor._y * orig.height);\n\n            for (let i = 0; i < n; i += 2)\n            {\n                const x = vertices[i] + dx;\n                const y = vertices[i + 1] + dy;\n\n                vertexData[i] = (x * a) + (y * c) + tx;\n                vertexData[i + 1] = (x * b) + (y * d) + ty;\n            }\n        }\n        else\n        {\n            const vertexData = thisAny.vertexData;\n            const trim = texture.trim;\n\n            let w0 = 0;\n            let w1 = 0;\n            let h0 = 0;\n            let h1 = 0;\n\n            if (trim)\n            {\n                // if the sprite is trimmed and is not a tilingsprite then we need to add the extra\n                // space before transforming the sprite coords.\n                w1 = trim.x - (anchor._x * orig.width);\n                w0 = w1 + trim.width;\n\n                h1 = trim.y - (anchor._y * orig.height);\n                h0 = h1 + trim.height;\n            }\n            else\n            {\n                w1 = -anchor._x * orig.width;\n                w0 = w1 + orig.width;\n\n                h1 = -anchor._y * orig.height;\n                h0 = h1 + orig.height;\n            }\n\n            // xy\n            vertexData[0] = (a * w1) + (c * h1) + tx;\n            vertexData[1] = (d * h1) + (b * w1) + ty;\n\n            // xy\n            vertexData[2] = (a * w0) + (c * h1) + tx;\n            vertexData[3] = (d * h1) + (b * w0) + ty;\n\n            // xy\n            vertexData[4] = (a * w0) + (c * h0) + tx;\n            vertexData[5] = (d * h0) + (b * w0) + ty;\n\n            // xy\n            vertexData[6] = (a * w1) + (c * h0) + tx;\n            vertexData[7] = (d * h0) + (b * w1) + ty;\n        }\n    }\n\n    calculateMaskVertices()\n    {\n        // WE HAVE A MASK\n        const maskSprite = this.maskSprite;\n        const tex = maskSprite.texture;\n        const orig = tex.orig;\n        const anchor = maskSprite.anchor;\n\n        if (!tex.valid)\n        {\n            return;\n        }\n        if (!tex.uvMatrix)\n        {\n            // margin = 0.0, let it bleed a bit, shader code becomes easier\n            // assuming that atlas textures were made with 1-pixel padding\n            tex.uvMatrix = new TextureMatrix(tex, 0.0);\n        }\n        tex.uvMatrix.update();\n\n        // same operations as in SpriteMaskFilter\n        maskSprite.transform.worldTransform.copyTo(tempMat);\n        tempMat.invert();\n        tempMat.scale(1.0 / orig.width, 1.0 / orig.height);\n        tempMat.translate(anchor.x, anchor.y);\n        tempMat.prepend(tex.uvMatrix.mapCoord);\n\n        const vertexData = (this as any).vertexData;\n        const n = vertexData.length;\n\n        if (!this.maskVertexData || this.maskVertexData.length !== n)\n        {\n            this.maskVertexData = new Float32Array(n);\n        }\n\n        const maskVertexData = this.maskVertexData;\n\n        for (let i = 0; i < n; i += 2)\n        {\n            maskVertexData[i] = (vertexData[i] * tempMat.a) + (vertexData[i + 1] * tempMat.c) + tempMat.tx;\n            maskVertexData[i + 1] = (vertexData[i] * tempMat.b) + (vertexData[i + 1] * tempMat.d) + tempMat.ty;\n        }\n    }\n\n    destroy(options?: any)\n    {\n        if (this.animState)\n        {\n            this.animState.stop();\n            this.animState = null;\n        }\n        super.destroy(options);\n    }\n}\n\nObject.defineProperty(SpriteH.prototype, '_tintRGB', {\n    get()\n    {\n        this.color.updateTransform();\n\n        return this.color.lightRgba & 0xffffff;\n    },\n    set()\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    {\n\n    }\n});\n","export enum CLAMP_OPTIONS\n    {\n    NEVER = 0,\n    AUTO = 1,\n    ALWAYS = 2\n}\n\nexport interface ISettings\n{\n    MESH_CLAMP: CLAMP_OPTIONS;\n    BLEND_ADD_UNITY: boolean;\n}\n\nexport const settings: ISettings = {\n    MESH_CLAMP: CLAMP_OPTIONS.AUTO,\n    BLEND_ADD_UNITY: false,\n};\n","import { Color, Program, Shader, Texture, TextureMatrix } from '@pixi/core';\nimport { Matrix } from '@pixi/math';\nimport { ColorTransform } from '../ColorTransform';\nimport { CLAMP_OPTIONS, settings } from '../../settings';\n\nconst vertex = `attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\n\nuniform mat3 projectionMatrix;\nuniform mat3 translationMatrix;\nuniform mat3 uTextureMatrix;\n\nvarying vec2 vTextureCoord;\n\nvoid main(void)\n{\n    gl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n\n    vTextureCoord = (uTextureMatrix * vec3(aTextureCoord, 1.0)).xy;\n}`;\n\nconst fragment = `varying vec2 vTextureCoord;\nuniform vec4 uLight, uDark;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\nvec4 texColor = texture2D(uSampler, vTextureCoord);\ngl_FragColor.a = texColor.a * uLight.a;\ngl_FragColor.rgb = ((texColor.a - 1.0) * uDark.a + 1.0 - texColor.rgb) * uDark.rgb + texColor.rgb * uLight.rgb;\n}\n`;\n\nconst fragTrim = `\nvarying vec2 vTextureCoord;\nuniform vec4 uLight, uDark;\nuniform vec4 uClampFrame;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n    vec2 coord = vTextureCoord;\n    if (coord.x < uClampFrame.x || coord.x > uClampFrame.z\n        || coord.y < uClampFrame.y || coord.y > uClampFrame.w)\n            discard;\n    vec4 texColor = texture2D(uSampler, vTextureCoord);\n    gl_FragColor.a = texColor.a * uLight.a;\n    gl_FragColor.rgb = ((texColor.a - 1.0) * uDark.a + 1.0 - texColor.rgb) * uDark.rgb + texColor.rgb * uLight.rgb;\n}\n`;\n\nconst tmpClr = new Color();\n\nexport class DoubleTintMeshMaterial extends Shader\n{\n    uvMatrix: TextureMatrix;\n    batchable: boolean;\n    readonly allowTrim: boolean;\n    pluginName: string;\n    color: ColorTransform;\n    _colorId: number;\n\n    constructor(uSampler: Texture, options?: any)\n    {\n        const uniforms = {\n            uSampler,\n            uTextureMatrix: Matrix.IDENTITY,\n            uDark: new Float32Array([0, 0, 0, 1]),\n            uLight: new Float32Array([1, 1, 1, 1]),\n        };\n\n        // Set defaults\n        options = (Object as any).assign({\n            pluginName: 'batchHeaven',\n        }, options);\n\n        let allowTrim = options.allowTrim;\n\n        if (!allowTrim)\n        {\n            if (settings.MESH_CLAMP === CLAMP_OPTIONS.AUTO)\n            {\n                allowTrim = uSampler.trim\n                    && (uSampler.trim.width < uSampler.orig.width || uSampler.trim.height < uSampler.orig.height);\n            }\n            else if (settings.MESH_CLAMP === CLAMP_OPTIONS.ALWAYS)\n            {\n                allowTrim = true;\n            }\n        }\n\n        if (options.uniforms)\n        {\n            (Object as any).assign(uniforms, options.uniforms);\n        }\n\n        super(options.program || Program.from(vertex, allowTrim ? fragTrim : fragment), uniforms);\n\n        this.allowTrim = allowTrim;\n\n        /**\n         * TextureMatrix instance for this Mesh, used to track Texture changes\n         *\n         * @member {TextureMatrix}\n         * @readonly\n         */\n        this.uvMatrix = new TextureMatrix(uSampler);\n\n        /**\n         * `true` if shader can be batch with the renderer's batch system.\n         * @member {boolean}\n         * @default true\n         */\n        this.batchable = options.program === undefined && !this.allowTrim;\n\n        /**\n         * Renderer plugin for batching\n         *\n         * @member {string}\n         * @default 'batch'\n         */\n        this.pluginName = options.pluginName;\n\n        this.color = options.color || new ColorTransform();\n\n        this._colorId = -1;\n    }\n\n    /**\n     * Reference to the texture being rendered.\n     * @member {Texture}\n     */\n    get texture()\n    {\n        return this.uniforms.uSampler;\n    }\n\n    set texture(value)\n    {\n        if (this.uniforms.uSampler !== value)\n        {\n            this.uniforms.uSampler = value;\n            this.uvMatrix.texture = value;\n            this.color.pma = value.baseTexture.premultiplyAlpha;\n        }\n    }\n\n    /**\n     * This gets automatically set by the object using this.\n     *\n     * @default 1\n     * @member {number}\n     */\n    set alpha(value)\n    {\n        this.color.alpha = value;\n    }\n\n    get alpha()\n    {\n        return this.color.alpha;\n    }\n\n    /**\n     * Multiply tint for the material.\n     * @member {number}\n     * @default 0xFFFFFF\n     */\n    set tint(value)\n    {\n        this.color.tintBGR = value;\n    }\n\n    get tint()\n    {\n        return this.color.tintBGR;\n    }\n\n    /**\n     * Gets called automatically by the Mesh. Intended to be overridden for custom\n     * MeshMaterial objects.\n     */\n    update()\n    {\n        this.color.updateTransform();\n        if (this._colorId !== this.color._updateID)\n        {\n            this._colorId = this.color._updateID;\n            const { color, uniforms } = this;\n\n            tmpClr.setValue(color.light).premultiply(color.light[3], color.dark[3] > 0.0).toArray(uniforms.uLight);\n            tmpClr.setValue(color.dark).premultiply(color.light[3], color.dark[3] > 0.0).toArray(uniforms.uDark);\n        }\n\n        if (this.uvMatrix.update())\n        {\n            this.uniforms.uTextureMatrix = this.uvMatrix.mapCoord;\n            if (this.allowTrim)\n            {\n                this.uniforms.uClampFrame = this.uvMatrix.uClampFrame;\n            }\n        }\n    }\n}\n","import { ColorTransform } from '../ColorTransform';\nimport { Mesh as MeshBase, MeshGeometry } from '@pixi/mesh';\nimport { SpriteH } from '../sprites/SpriteH';\nimport { Geometry, Renderer, State, Texture } from '@pixi/core';\nimport { DoubleTintMeshMaterial } from './DoubleTintMeshMaterial';\n\nexport class MeshH extends MeshBase\n{\n    color: ColorTransform = null;\n    maskSprite: SpriteH = null;\n    maskVertexData: Float32Array = null;\n    useSpriteMask = false;\n\n    constructor(geometry: Geometry, shader: DoubleTintMeshMaterial, state: State, drawMode?: number)\n    {\n        super(geometry, shader as any, state, drawMode);\n        this.color = shader.color;\n    }\n\n    _renderDefault(renderer: Renderer)\n    {\n        const shader = this.shader as any as DoubleTintMeshMaterial;\n\n        shader.color.alpha = this.worldAlpha;\n        if (shader.update)\n        {\n            shader.update();\n        }\n\n        renderer.batch.flush();\n\n        shader.uniforms.translationMatrix = this.worldTransform.toArray(true);\n\n        // bind and sync uniforms..\n        renderer.shader.bind(shader, false);\n\n        // set state..\n        renderer.state.set(this.state);\n\n        // bind the geometry...\n        renderer.geometry.bind(this.geometry, shader);\n\n        // then render it\n        renderer.geometry.draw(this.drawMode, this.size, this.start, (this.geometry as any).instanceCount);\n    }\n\n    _render(renderer: Renderer)\n    {\n        // part of SimpleMesh\n        if (this.maskSprite)\n        {\n            this.useSpriteMask = true;\n        }\n        if (this.useSpriteMask)\n        {\n            (this.material as any).pluginName = 'batchMasked';\n            this._renderToBatch(renderer);\n        }\n        else\n        {\n            super._render(renderer);\n        }\n    }\n\n    _renderToBatch(renderer: Renderer)\n    {\n        this.color.updateTransform();\n        super._renderToBatch(renderer);\n    }\n\n    calculateMaskVertices()\n    {\n        SpriteH.prototype.calculateMaskVertices.call(this);\n    }\n}\n\nexport class SimpleMeshH extends MeshH\n{\n    constructor(texture: Texture, vertices?: Float32Array, uvs?: Float32Array,\n        indices?: Uint16Array, drawMode?: number)\n    {\n        super(new MeshGeometry(vertices, uvs, indices),\n            new DoubleTintMeshMaterial(texture),\n            null,\n            drawMode);\n\n        (this.geometry.getBuffer('aVertexPosition') as any).static = false;\n    }\n\n    autoUpdate = true;\n\n    get vertices()\n    {\n        return this.geometry.getBuffer('aVertexPosition').data as Float32Array;\n    }\n\n    set vertices(value)\n    {\n        this.geometry.getBuffer('aVertexPosition').data = value;\n    }\n\n    _render(renderer: Renderer)\n    {\n        if (this.autoUpdate)\n        {\n            this.geometry.getBuffer('aVertexPosition').update();\n        }\n\n        (super._render as any)(renderer);\n    }\n}\n","import { Container } from '@pixi/display';\nimport { Sprite } from '@pixi/sprite';\nimport { SpriteH } from './SpriteH';\nimport { ColorTransform } from '../ColorTransform';\n\nexport function applyConvertMixins()\n{\n    function tintGet()\n    {\n        return this.color.tintBGR;\n    }\n\n    function tintSet(value: number)\n    {\n        this.color.tintBGR = value;\n    }\n\n    function tintRGBGet()\n    {\n        this.color.updateTransform();\n\n        return this.color.lightRgba & 0xffffff;\n    }\n\n    const SpriteProto = SpriteH.prototype as any;\n\n    Sprite.prototype.convertToHeaven = function convertSpriteToHeaven()\n    {\n        if (this.color)\n        {\n            return this;\n        }\n\n        Object.defineProperty(this, 'tint', {\n            get: tintGet,\n            set: tintSet,\n            enumerable: true,\n            configurable: true\n        });\n        Object.defineProperty(this, '_tintRGB', {\n            get: tintRGBGet,\n            enumerable: true,\n            configurable: true\n        });\n        this._onTextureUpdate = SpriteProto._onTextureUpdate;\n        this._render = SpriteProto._render;\n        this._calculateBounds = SpriteProto._calculateBounds;\n        this.calculateVertices = SpriteProto.calculateVertices;\n        this._onTextureUpdate = SpriteProto._onTextureUpdate;\n        this.calculateMaskVertices = SpriteProto.calculateMaskVertices;\n        this.destroy = SpriteH.prototype.destroy;\n        this.color = new ColorTransform();\n        this.pluginName = 'batchHeaven';\n\n        if (this._texture.valid)\n        {\n            this._onTextureUpdate();\n        }\n        else\n        {\n            this._texture.off('update', this._onTextureUpdate);\n            this._texture.on('update', this._onTextureUpdate, this);\n        }\n\n        return this;\n    };\n\n    Container.prototype.convertSubtreeToHeaven = function convertSubtreeToHeaven()\n    {\n        if (this.convertToHeaven)\n        {\n            this.convertToHeaven();\n        }\n        for (let i = 0; i < this.children.length; i++)\n        {\n            this.children[i].convertSubtreeToHeaven();\n        }\n    };\n}\n","var ENV = /* @__PURE__ */ ((ENV2) => {\n  ENV2[ENV2[\"WEBGL_LEGACY\"] = 0] = \"WEBGL_LEGACY\";\n  ENV2[ENV2[\"WEBGL\"] = 1] = \"WEBGL\";\n  ENV2[ENV2[\"WEBGL2\"] = 2] = \"WEBGL2\";\n  return ENV2;\n})(ENV || {});\nvar RENDERER_TYPE = /* @__PURE__ */ ((RENDERER_TYPE2) => {\n  RENDERER_TYPE2[RENDERER_TYPE2[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n  RENDERER_TYPE2[RENDERER_TYPE2[\"WEBGL\"] = 1] = \"WEBGL\";\n  RENDERER_TYPE2[RENDERER_TYPE2[\"CANVAS\"] = 2] = \"CANVAS\";\n  return RENDERER_TYPE2;\n})(RENDERER_TYPE || {});\nvar BUFFER_BITS = /* @__PURE__ */ ((BUFFER_BITS2) => {\n  BUFFER_BITS2[BUFFER_BITS2[\"COLOR\"] = 16384] = \"COLOR\";\n  BUFFER_BITS2[BUFFER_BITS2[\"DEPTH\"] = 256] = \"DEPTH\";\n  BUFFER_BITS2[BUFFER_BITS2[\"STENCIL\"] = 1024] = \"STENCIL\";\n  return BUFFER_BITS2;\n})(BUFFER_BITS || {});\nvar BLEND_MODES = /* @__PURE__ */ ((BLEND_MODES2) => {\n  BLEND_MODES2[BLEND_MODES2[\"NORMAL\"] = 0] = \"NORMAL\";\n  BLEND_MODES2[BLEND_MODES2[\"ADD\"] = 1] = \"ADD\";\n  BLEND_MODES2[BLEND_MODES2[\"MULTIPLY\"] = 2] = \"MULTIPLY\";\n  BLEND_MODES2[BLEND_MODES2[\"SCREEN\"] = 3] = \"SCREEN\";\n  BLEND_MODES2[BLEND_MODES2[\"OVERLAY\"] = 4] = \"OVERLAY\";\n  BLEND_MODES2[BLEND_MODES2[\"DARKEN\"] = 5] = \"DARKEN\";\n  BLEND_MODES2[BLEND_MODES2[\"LIGHTEN\"] = 6] = \"LIGHTEN\";\n  BLEND_MODES2[BLEND_MODES2[\"COLOR_DODGE\"] = 7] = \"COLOR_DODGE\";\n  BLEND_MODES2[BLEND_MODES2[\"COLOR_BURN\"] = 8] = \"COLOR_BURN\";\n  BLEND_MODES2[BLEND_MODES2[\"HARD_LIGHT\"] = 9] = \"HARD_LIGHT\";\n  BLEND_MODES2[BLEND_MODES2[\"SOFT_LIGHT\"] = 10] = \"SOFT_LIGHT\";\n  BLEND_MODES2[BLEND_MODES2[\"DIFFERENCE\"] = 11] = \"DIFFERENCE\";\n  BLEND_MODES2[BLEND_MODES2[\"EXCLUSION\"] = 12] = \"EXCLUSION\";\n  BLEND_MODES2[BLEND_MODES2[\"HUE\"] = 13] = \"HUE\";\n  BLEND_MODES2[BLEND_MODES2[\"SATURATION\"] = 14] = \"SATURATION\";\n  BLEND_MODES2[BLEND_MODES2[\"COLOR\"] = 15] = \"COLOR\";\n  BLEND_MODES2[BLEND_MODES2[\"LUMINOSITY\"] = 16] = \"LUMINOSITY\";\n  BLEND_MODES2[BLEND_MODES2[\"NORMAL_NPM\"] = 17] = \"NORMAL_NPM\";\n  BLEND_MODES2[BLEND_MODES2[\"ADD_NPM\"] = 18] = \"ADD_NPM\";\n  BLEND_MODES2[BLEND_MODES2[\"SCREEN_NPM\"] = 19] = \"SCREEN_NPM\";\n  BLEND_MODES2[BLEND_MODES2[\"NONE\"] = 20] = \"NONE\";\n  BLEND_MODES2[BLEND_MODES2[\"SRC_OVER\"] = 0] = \"SRC_OVER\";\n  BLEND_MODES2[BLEND_MODES2[\"SRC_IN\"] = 21] = \"SRC_IN\";\n  BLEND_MODES2[BLEND_MODES2[\"SRC_OUT\"] = 22] = \"SRC_OUT\";\n  BLEND_MODES2[BLEND_MODES2[\"SRC_ATOP\"] = 23] = \"SRC_ATOP\";\n  BLEND_MODES2[BLEND_MODES2[\"DST_OVER\"] = 24] = \"DST_OVER\";\n  BLEND_MODES2[BLEND_MODES2[\"DST_IN\"] = 25] = \"DST_IN\";\n  BLEND_MODES2[BLEND_MODES2[\"DST_OUT\"] = 26] = \"DST_OUT\";\n  BLEND_MODES2[BLEND_MODES2[\"DST_ATOP\"] = 27] = \"DST_ATOP\";\n  BLEND_MODES2[BLEND_MODES2[\"ERASE\"] = 26] = \"ERASE\";\n  BLEND_MODES2[BLEND_MODES2[\"SUBTRACT\"] = 28] = \"SUBTRACT\";\n  BLEND_MODES2[BLEND_MODES2[\"XOR\"] = 29] = \"XOR\";\n  return BLEND_MODES2;\n})(BLEND_MODES || {});\nvar DRAW_MODES = /* @__PURE__ */ ((DRAW_MODES2) => {\n  DRAW_MODES2[DRAW_MODES2[\"POINTS\"] = 0] = \"POINTS\";\n  DRAW_MODES2[DRAW_MODES2[\"LINES\"] = 1] = \"LINES\";\n  DRAW_MODES2[DRAW_MODES2[\"LINE_LOOP\"] = 2] = \"LINE_LOOP\";\n  DRAW_MODES2[DRAW_MODES2[\"LINE_STRIP\"] = 3] = \"LINE_STRIP\";\n  DRAW_MODES2[DRAW_MODES2[\"TRIANGLES\"] = 4] = \"TRIANGLES\";\n  DRAW_MODES2[DRAW_MODES2[\"TRIANGLE_STRIP\"] = 5] = \"TRIANGLE_STRIP\";\n  DRAW_MODES2[DRAW_MODES2[\"TRIANGLE_FAN\"] = 6] = \"TRIANGLE_FAN\";\n  return DRAW_MODES2;\n})(DRAW_MODES || {});\nvar FORMATS = /* @__PURE__ */ ((FORMATS2) => {\n  FORMATS2[FORMATS2[\"RGBA\"] = 6408] = \"RGBA\";\n  FORMATS2[FORMATS2[\"RGB\"] = 6407] = \"RGB\";\n  FORMATS2[FORMATS2[\"RG\"] = 33319] = \"RG\";\n  FORMATS2[FORMATS2[\"RED\"] = 6403] = \"RED\";\n  FORMATS2[FORMATS2[\"RGBA_INTEGER\"] = 36249] = \"RGBA_INTEGER\";\n  FORMATS2[FORMATS2[\"RGB_INTEGER\"] = 36248] = \"RGB_INTEGER\";\n  FORMATS2[FORMATS2[\"RG_INTEGER\"] = 33320] = \"RG_INTEGER\";\n  FORMATS2[FORMATS2[\"RED_INTEGER\"] = 36244] = \"RED_INTEGER\";\n  FORMATS2[FORMATS2[\"ALPHA\"] = 6406] = \"ALPHA\";\n  FORMATS2[FORMATS2[\"LUMINANCE\"] = 6409] = \"LUMINANCE\";\n  FORMATS2[FORMATS2[\"LUMINANCE_ALPHA\"] = 6410] = \"LUMINANCE_ALPHA\";\n  FORMATS2[FORMATS2[\"DEPTH_COMPONENT\"] = 6402] = \"DEPTH_COMPONENT\";\n  FORMATS2[FORMATS2[\"DEPTH_STENCIL\"] = 34041] = \"DEPTH_STENCIL\";\n  return FORMATS2;\n})(FORMATS || {});\nvar TARGETS = /* @__PURE__ */ ((TARGETS2) => {\n  TARGETS2[TARGETS2[\"TEXTURE_2D\"] = 3553] = \"TEXTURE_2D\";\n  TARGETS2[TARGETS2[\"TEXTURE_CUBE_MAP\"] = 34067] = \"TEXTURE_CUBE_MAP\";\n  TARGETS2[TARGETS2[\"TEXTURE_2D_ARRAY\"] = 35866] = \"TEXTURE_2D_ARRAY\";\n  TARGETS2[TARGETS2[\"TEXTURE_CUBE_MAP_POSITIVE_X\"] = 34069] = \"TEXTURE_CUBE_MAP_POSITIVE_X\";\n  TARGETS2[TARGETS2[\"TEXTURE_CUBE_MAP_NEGATIVE_X\"] = 34070] = \"TEXTURE_CUBE_MAP_NEGATIVE_X\";\n  TARGETS2[TARGETS2[\"TEXTURE_CUBE_MAP_POSITIVE_Y\"] = 34071] = \"TEXTURE_CUBE_MAP_POSITIVE_Y\";\n  TARGETS2[TARGETS2[\"TEXTURE_CUBE_MAP_NEGATIVE_Y\"] = 34072] = \"TEXTURE_CUBE_MAP_NEGATIVE_Y\";\n  TARGETS2[TARGETS2[\"TEXTURE_CUBE_MAP_POSITIVE_Z\"] = 34073] = \"TEXTURE_CUBE_MAP_POSITIVE_Z\";\n  TARGETS2[TARGETS2[\"TEXTURE_CUBE_MAP_NEGATIVE_Z\"] = 34074] = \"TEXTURE_CUBE_MAP_NEGATIVE_Z\";\n  return TARGETS2;\n})(TARGETS || {});\nvar TYPES = /* @__PURE__ */ ((TYPES2) => {\n  TYPES2[TYPES2[\"UNSIGNED_BYTE\"] = 5121] = \"UNSIGNED_BYTE\";\n  TYPES2[TYPES2[\"UNSIGNED_SHORT\"] = 5123] = \"UNSIGNED_SHORT\";\n  TYPES2[TYPES2[\"UNSIGNED_SHORT_5_6_5\"] = 33635] = \"UNSIGNED_SHORT_5_6_5\";\n  TYPES2[TYPES2[\"UNSIGNED_SHORT_4_4_4_4\"] = 32819] = \"UNSIGNED_SHORT_4_4_4_4\";\n  TYPES2[TYPES2[\"UNSIGNED_SHORT_5_5_5_1\"] = 32820] = \"UNSIGNED_SHORT_5_5_5_1\";\n  TYPES2[TYPES2[\"UNSIGNED_INT\"] = 5125] = \"UNSIGNED_INT\";\n  TYPES2[TYPES2[\"UNSIGNED_INT_10F_11F_11F_REV\"] = 35899] = \"UNSIGNED_INT_10F_11F_11F_REV\";\n  TYPES2[TYPES2[\"UNSIGNED_INT_2_10_10_10_REV\"] = 33640] = \"UNSIGNED_INT_2_10_10_10_REV\";\n  TYPES2[TYPES2[\"UNSIGNED_INT_24_8\"] = 34042] = \"UNSIGNED_INT_24_8\";\n  TYPES2[TYPES2[\"UNSIGNED_INT_5_9_9_9_REV\"] = 35902] = \"UNSIGNED_INT_5_9_9_9_REV\";\n  TYPES2[TYPES2[\"BYTE\"] = 5120] = \"BYTE\";\n  TYPES2[TYPES2[\"SHORT\"] = 5122] = \"SHORT\";\n  TYPES2[TYPES2[\"INT\"] = 5124] = \"INT\";\n  TYPES2[TYPES2[\"FLOAT\"] = 5126] = \"FLOAT\";\n  TYPES2[TYPES2[\"FLOAT_32_UNSIGNED_INT_24_8_REV\"] = 36269] = \"FLOAT_32_UNSIGNED_INT_24_8_REV\";\n  TYPES2[TYPES2[\"HALF_FLOAT\"] = 36193] = \"HALF_FLOAT\";\n  return TYPES2;\n})(TYPES || {});\nvar SAMPLER_TYPES = /* @__PURE__ */ ((SAMPLER_TYPES2) => {\n  SAMPLER_TYPES2[SAMPLER_TYPES2[\"FLOAT\"] = 0] = \"FLOAT\";\n  SAMPLER_TYPES2[SAMPLER_TYPES2[\"INT\"] = 1] = \"INT\";\n  SAMPLER_TYPES2[SAMPLER_TYPES2[\"UINT\"] = 2] = \"UINT\";\n  return SAMPLER_TYPES2;\n})(SAMPLER_TYPES || {});\nvar SCALE_MODES = /* @__PURE__ */ ((SCALE_MODES2) => {\n  SCALE_MODES2[SCALE_MODES2[\"NEAREST\"] = 0] = \"NEAREST\";\n  SCALE_MODES2[SCALE_MODES2[\"LINEAR\"] = 1] = \"LINEAR\";\n  return SCALE_MODES2;\n})(SCALE_MODES || {});\nvar WRAP_MODES = /* @__PURE__ */ ((WRAP_MODES2) => {\n  WRAP_MODES2[WRAP_MODES2[\"CLAMP\"] = 33071] = \"CLAMP\";\n  WRAP_MODES2[WRAP_MODES2[\"REPEAT\"] = 10497] = \"REPEAT\";\n  WRAP_MODES2[WRAP_MODES2[\"MIRRORED_REPEAT\"] = 33648] = \"MIRRORED_REPEAT\";\n  return WRAP_MODES2;\n})(WRAP_MODES || {});\nvar MIPMAP_MODES = /* @__PURE__ */ ((MIPMAP_MODES2) => {\n  MIPMAP_MODES2[MIPMAP_MODES2[\"OFF\"] = 0] = \"OFF\";\n  MIPMAP_MODES2[MIPMAP_MODES2[\"POW2\"] = 1] = \"POW2\";\n  MIPMAP_MODES2[MIPMAP_MODES2[\"ON\"] = 2] = \"ON\";\n  MIPMAP_MODES2[MIPMAP_MODES2[\"ON_MANUAL\"] = 3] = \"ON_MANUAL\";\n  return MIPMAP_MODES2;\n})(MIPMAP_MODES || {});\nvar ALPHA_MODES = /* @__PURE__ */ ((ALPHA_MODES2) => {\n  ALPHA_MODES2[ALPHA_MODES2[\"NPM\"] = 0] = \"NPM\";\n  ALPHA_MODES2[ALPHA_MODES2[\"UNPACK\"] = 1] = \"UNPACK\";\n  ALPHA_MODES2[ALPHA_MODES2[\"PMA\"] = 2] = \"PMA\";\n  ALPHA_MODES2[ALPHA_MODES2[\"NO_PREMULTIPLIED_ALPHA\"] = 0] = \"NO_PREMULTIPLIED_ALPHA\";\n  ALPHA_MODES2[ALPHA_MODES2[\"PREMULTIPLY_ON_UPLOAD\"] = 1] = \"PREMULTIPLY_ON_UPLOAD\";\n  ALPHA_MODES2[ALPHA_MODES2[\"PREMULTIPLIED_ALPHA\"] = 2] = \"PREMULTIPLIED_ALPHA\";\n  return ALPHA_MODES2;\n})(ALPHA_MODES || {});\nvar CLEAR_MODES = /* @__PURE__ */ ((CLEAR_MODES2) => {\n  CLEAR_MODES2[CLEAR_MODES2[\"NO\"] = 0] = \"NO\";\n  CLEAR_MODES2[CLEAR_MODES2[\"YES\"] = 1] = \"YES\";\n  CLEAR_MODES2[CLEAR_MODES2[\"AUTO\"] = 2] = \"AUTO\";\n  CLEAR_MODES2[CLEAR_MODES2[\"BLEND\"] = 0] = \"BLEND\";\n  CLEAR_MODES2[CLEAR_MODES2[\"CLEAR\"] = 1] = \"CLEAR\";\n  CLEAR_MODES2[CLEAR_MODES2[\"BLIT\"] = 2] = \"BLIT\";\n  return CLEAR_MODES2;\n})(CLEAR_MODES || {});\nvar GC_MODES = /* @__PURE__ */ ((GC_MODES2) => {\n  GC_MODES2[GC_MODES2[\"AUTO\"] = 0] = \"AUTO\";\n  GC_MODES2[GC_MODES2[\"MANUAL\"] = 1] = \"MANUAL\";\n  return GC_MODES2;\n})(GC_MODES || {});\nvar PRECISION = /* @__PURE__ */ ((PRECISION2) => {\n  PRECISION2[\"LOW\"] = \"lowp\";\n  PRECISION2[\"MEDIUM\"] = \"mediump\";\n  PRECISION2[\"HIGH\"] = \"highp\";\n  return PRECISION2;\n})(PRECISION || {});\nvar MASK_TYPES = /* @__PURE__ */ ((MASK_TYPES2) => {\n  MASK_TYPES2[MASK_TYPES2[\"NONE\"] = 0] = \"NONE\";\n  MASK_TYPES2[MASK_TYPES2[\"SCISSOR\"] = 1] = \"SCISSOR\";\n  MASK_TYPES2[MASK_TYPES2[\"STENCIL\"] = 2] = \"STENCIL\";\n  MASK_TYPES2[MASK_TYPES2[\"SPRITE\"] = 3] = \"SPRITE\";\n  MASK_TYPES2[MASK_TYPES2[\"COLOR\"] = 4] = \"COLOR\";\n  return MASK_TYPES2;\n})(MASK_TYPES || {});\nvar COLOR_MASK_BITS = /* @__PURE__ */ ((COLOR_MASK_BITS2) => {\n  COLOR_MASK_BITS2[COLOR_MASK_BITS2[\"RED\"] = 1] = \"RED\";\n  COLOR_MASK_BITS2[COLOR_MASK_BITS2[\"GREEN\"] = 2] = \"GREEN\";\n  COLOR_MASK_BITS2[COLOR_MASK_BITS2[\"BLUE\"] = 4] = \"BLUE\";\n  COLOR_MASK_BITS2[COLOR_MASK_BITS2[\"ALPHA\"] = 8] = \"ALPHA\";\n  return COLOR_MASK_BITS2;\n})(COLOR_MASK_BITS || {});\nvar MSAA_QUALITY = /* @__PURE__ */ ((MSAA_QUALITY2) => {\n  MSAA_QUALITY2[MSAA_QUALITY2[\"NONE\"] = 0] = \"NONE\";\n  MSAA_QUALITY2[MSAA_QUALITY2[\"LOW\"] = 2] = \"LOW\";\n  MSAA_QUALITY2[MSAA_QUALITY2[\"MEDIUM\"] = 4] = \"MEDIUM\";\n  MSAA_QUALITY2[MSAA_QUALITY2[\"HIGH\"] = 8] = \"HIGH\";\n  return MSAA_QUALITY2;\n})(MSAA_QUALITY || {});\nvar BUFFER_TYPE = /* @__PURE__ */ ((BUFFER_TYPE2) => {\n  BUFFER_TYPE2[BUFFER_TYPE2[\"ELEMENT_ARRAY_BUFFER\"] = 34963] = \"ELEMENT_ARRAY_BUFFER\";\n  BUFFER_TYPE2[BUFFER_TYPE2[\"ARRAY_BUFFER\"] = 34962] = \"ARRAY_BUFFER\";\n  BUFFER_TYPE2[BUFFER_TYPE2[\"UNIFORM_BUFFER\"] = 35345] = \"UNIFORM_BUFFER\";\n  return BUFFER_TYPE2;\n})(BUFFER_TYPE || {});\n\nexport { ALPHA_MODES, BLEND_MODES, BUFFER_BITS, BUFFER_TYPE, CLEAR_MODES, COLOR_MASK_BITS, DRAW_MODES, ENV, FORMATS, GC_MODES, MASK_TYPES, MIPMAP_MODES, MSAA_QUALITY, PRECISION, RENDERER_TYPE, SAMPLER_TYPES, SCALE_MODES, TARGETS, TYPES, WRAP_MODES };\n//# sourceMappingURL=index.mjs.map\n","import {\n    BatchRenderer,\n    BatchTextureArray,\n    Buffer, Color, ExtensionType,\n    Geometry, Renderer,\n    ViewableBuffer\n} from '@pixi/core';\nimport { premultiplyBlendMode, premultiplyTint } from '@pixi/utils';\nimport { BLEND_MODES, TYPES } from '@pixi/constants';\nimport { settings } from '../../settings';\n\nconst shaderVert\n= `precision highp float;\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aLight, aDark;\nattribute float aTextureId;\n\nuniform mat3 projectionMatrix;\nuniform mat3 translationMatrix;\nuniform vec4 tint;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vLight, vDark;\nvarying float vTextureId;\n\nvoid main(void){\ngl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n\nvTextureCoord = aTextureCoord;\nvTextureId = aTextureId;\nvLight = aLight * tint;\nvDark = vec4(aDark.rgb * tint.rgb, aDark.a);\n}\n`;\nconst shaderFrag = `\nvarying vec2 vTextureCoord;\nvarying vec4 vLight, vDark;\nvarying float vTextureId;\nuniform sampler2D uSamplers[%count%];\n\nvoid main(void) {\nvec4 color;\nfloat textureId = floor(vTextureId+0.5);\n%forloop%\ngl_FragColor.a = color.a * vLight.a;\ngl_FragColor.rgb = ((color.a - 1.0) * vDark.a + 1.0 - color.rgb) * vDark.rgb + color.rgb * vLight.rgb;\n}`;\n\nexport class DarkLightGeometry extends Geometry\n{\n    _buffer: Buffer;\n    _indexBuffer : Buffer;\n\n    constructor(_static = false)\n    {\n        super();\n\n        this._buffer = new Buffer(null, _static, false);\n\n        this._indexBuffer = new Buffer(null, _static, true);\n\n        this.addAttribute('aVertexPosition', this._buffer, 2, false, TYPES.FLOAT)\n            .addAttribute('aTextureCoord', this._buffer, 2, false, TYPES.FLOAT)\n            .addAttribute('aLight', this._buffer, 4, true, TYPES.UNSIGNED_BYTE)\n            .addAttribute('aDark', this._buffer, 4, true, TYPES.UNSIGNED_BYTE)\n            .addAttribute('aTextureId', this._buffer, 1, true, TYPES.FLOAT)\n            .addIndex(this._indexBuffer);\n    }\n}\n\nexport class HeavenBatchRenderer extends BatchRenderer\n{\n    static extension = {\n        name: 'batchHeaven',\n        type: ExtensionType.RendererPlugin\n    };\n\n    constructor(renderer: Renderer)\n    {\n        super(renderer);\n        this.geometryClass = DarkLightGeometry;\n        this.vertexSize = 7;\n    }\n\n    setShaderGenerator({ vertex = shaderVert, fragment = shaderFrag } = {})\n    {\n        super.setShaderGenerator({ vertex, fragment });\n    }\n\n    packInterleavedGeometry(element: any, attributeBuffer: ViewableBuffer, indexBuffer: Uint16Array,\n        aIndex: number, iIndex: number)\n    {\n        const {\n            uint32View,\n            float32View,\n        } = attributeBuffer;\n\n        let lightRgba = -1;\n        let darkRgba = 0;\n\n        if (element.color)\n        {\n            lightRgba = element.color.lightRgba;\n            darkRgba = element.color.darkRgba;\n        }\n        else\n        {\n            const alpha = Math.min(element.worldAlpha, 1.0);\n\n            lightRgba = Color.shared\n                .setValue(element._tintRGB)\n                .toPremultiplied(alpha, element._texture.baseTexture.alphaMode > 0);\n        }\n\n        if (settings.BLEND_ADD_UNITY && element.blendAddUnity)\n        {\n            lightRgba = lightRgba & 0xffffff;\n        }\n\n        const p = aIndex / this.vertexSize;\n        const uvs = element.uvs;\n        const indices = element.indices;\n        const vertexData = element.vertexData;\n        const textureId = element._texture.baseTexture._batchLocation;\n\n        for (let i = 0; i < vertexData.length; i += 2)\n        {\n            float32View[aIndex++] = vertexData[i];\n            float32View[aIndex++] = vertexData[i + 1];\n            float32View[aIndex++] = uvs[i];\n            float32View[aIndex++] = uvs[i + 1];\n            uint32View[aIndex++] = lightRgba;\n            uint32View[aIndex++] = darkRgba;\n            float32View[aIndex++] = textureId;\n        }\n\n        for (let i = 0; i < indices.length; i++)\n        {\n            indexBuffer[iIndex++] = p + indices[i];\n        }\n    }\n\n    /**\n     * I override this method because of special alpha case that can be batched and work with any masks\n     * @param texArray\n     * @param start\n     * @param finish\n     */\n    buildDrawCalls(texArray: BatchTextureArray, start: number, finish: number): void\n    {\n        const thisAny = this as any;\n        const {\n            _bufferedElements: elements,\n            _attributeBuffer,\n            _indexBuffer,\n            vertexSize,\n        } = thisAny;\n        const drawCalls = BatchRenderer._drawCallPool;\n\n        let dcIndex = thisAny._dcIndex;\n        let aIndex = thisAny._aIndex;\n        let iIndex = thisAny._iIndex;\n\n        let drawCall = drawCalls[dcIndex] as any;\n\n        drawCall.start = thisAny._iIndex;\n        drawCall.texArray = texArray;\n\n        for (let i = start; i < finish; ++i)\n        {\n            const sprite = elements[i];\n            const tex = sprite._texture.baseTexture;\n            let spriteBlendMode = premultiplyBlendMode[\n                tex.alphaMode ? 1 : 0][sprite.blendMode];\n\n            if (settings.BLEND_ADD_UNITY)\n            {\n                sprite.blendAddUnity = (spriteBlendMode === BLEND_MODES.ADD && tex.alphaMode);\n                if (sprite.blendAddUnity)\n                {\n                    spriteBlendMode = BLEND_MODES.NORMAL;\n                }\n            }\n\n            elements[i] = null;\n\n            if (start < i && drawCall.blend !== spriteBlendMode)\n            {\n                drawCall.size = iIndex - drawCall.start;\n                start = i;\n                drawCall = drawCalls[++dcIndex];\n                drawCall.texArray = texArray;\n                drawCall.start = iIndex;\n            }\n\n            this.packInterleavedGeometry(sprite, _attributeBuffer, _indexBuffer, aIndex, iIndex);\n            aIndex += sprite.vertexData.length / 2 * vertexSize;\n            iIndex += sprite.indices.length;\n\n            drawCall.blend = spriteBlendMode;\n        }\n\n        if (start < finish)\n        {\n            drawCall.size = iIndex - drawCall.start;\n            ++dcIndex;\n        }\n\n        thisAny._dcIndex = dcIndex;\n        thisAny._aIndex = aIndex;\n        thisAny._iIndex = iIndex;\n    }\n}\n","import { Program, Shader, UniformGroup } from '@pixi/core';\nimport { Matrix } from '@pixi/math';\n\nexport interface ILoopDescriptor\n{\n    loopLabel: string\n    inTex: string\n    inCoord: string\n    outColor: string\n}\n\nexport class LoopShaderGenerator\n{\n    programCache: {[key: number]: Program} = {};\n    defaultGroupCache: {[key: number]: UniformGroup} = {};\n\n    constructor(public vertexSrc: string, public fragTemplate: string, public loops: Array<ILoopDescriptor>)\n    {\n        if (fragTemplate.indexOf('%count%') < 0)\n        {\n            throw new Error('Fragment template must contain \"%count%\".');\n        }\n        for (let i = 0; i < loops.length; i++)\n        {\n            if (fragTemplate.indexOf(loops[i].loopLabel) < 0)\n            {\n                throw new Error(`Fragment template must contain \"${loops[i].loopLabel}\".`);\n            }\n        }\n    }\n\n    generateShader(maxTextures: number): Shader\n    {\n        if (!this.programCache[maxTextures])\n        {\n            const sampleValues = new Int32Array(maxTextures);\n            const { loops } = this;\n\n            for (let i = 0; i < maxTextures; i++)\n            {\n                sampleValues[i] = i;\n            }\n\n            this.defaultGroupCache[maxTextures] = new UniformGroup({ uSamplers: sampleValues }, true);\n\n            let fragmentSrc = this.fragTemplate;\n\n            for (let i = 0; i < loops.length; i++)\n            {\n                fragmentSrc = fragmentSrc.replace(/%count%/gi, `${maxTextures}`);\n                fragmentSrc = fragmentSrc.replace(new RegExp(loops[i].loopLabel, 'gi'),\n                    this.generateSampleSrc(maxTextures, loops[i]));\n            }\n\n            this.programCache[maxTextures] = new Program(this.vertexSrc, fragmentSrc);\n        }\n\n        // TODO: move this to generator parameters\n        const uniforms = {\n            tint: new Float32Array([1, 1, 1, 1]),\n            translationMatrix: new Matrix(),\n            default: this.defaultGroupCache[maxTextures],\n        };\n\n        return new Shader(this.programCache[maxTextures], uniforms);\n    }\n\n    generateSampleSrc(maxTextures: number, loop: ILoopDescriptor): string\n    {\n        let src = '';\n\n        src += '\\n';\n        src += '\\n';\n\n        for (let i = 0; i < maxTextures; i++)\n        {\n            if (i > 0)\n            {\n                src += '\\nelse ';\n            }\n\n            if (i < maxTextures - 1)\n            {\n                src += `if(${loop.inTex} < ${i}.5)`;\n            }\n\n            src += '\\n{';\n            src += `\\n\\t${loop.outColor} = texture2D(uSamplers[${i}], ${loop.inCoord});`;\n            src += '\\n}';\n        }\n\n        src += '\\n';\n        src += '\\n';\n\n        return src;\n    }\n}\n","import {\n    BatchRenderer, BaseTexture,\n    Buffer,\n    Geometry, Renderer, Texture,\n    ViewableBuffer, ExtensionType, Color\n} from '@pixi/core';\nimport { premultiplyTint } from '@pixi/utils';\nimport { TYPES } from '@pixi/constants';\nimport { LoopShaderGenerator } from './LoopShaderGenerator';\n\nconst WHITE = Texture.WHITE.baseTexture;\n\nconst shaderVert\n    = `precision highp float;\nattribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\nattribute vec4 aLight, aDark;\nattribute float aTextureId;\nattribute vec2 aMaskCoord;\nattribute vec4 aMaskClamp;\n\nuniform mat3 projectionMatrix;\nuniform mat3 translationMatrix;\nuniform vec4 tint;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vLight, vDark;\nvarying float vTextureId;\nvarying vec2 vMaskCoord;\nvarying vec4 vMaskClamp;\n\nvoid main(void){\ngl_Position = vec4((projectionMatrix * translationMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n\nvTextureCoord = aTextureCoord;\nvTextureId = aTextureId;\nvLight = aLight * tint;\nvDark = vec4(aDark.rgb * tint.rgb, aDark.a);\nvMaskCoord = aMaskCoord;\nvMaskClamp = aMaskClamp;\n}\n`;\nconst shaderFrag = `\nvarying vec2 vTextureCoord;\nvarying vec2 vMaskCoord;\nvarying vec4 vMaskClamp;\nvarying vec4 vLight, vDark;\nvarying float vTextureId;\nuniform sampler2D uSamplers[%count%];\n\nvoid main(void) {\nvec4 texColor, maskColor, fragColor;\n\nfloat maskBits = floor((vTextureId + 0.5) / 64.0);\nfloat textureId = floor(0.5 + vTextureId - maskBits * 64.0);\nfloat maskId = floor((maskBits + 0.5) / 16.0);\nmaskBits = maskBits - maskId * 16.0;\n\nfloat clipEnable = step(0.5, maskBits);\n\nfloat clip = step(3.5,\n    step(vMaskClamp.x, vMaskCoord.x) +\n    step(vMaskClamp.y, vMaskCoord.y) +\n    step(vMaskCoord.x, vMaskClamp.z) +\n    step(vMaskCoord.y, vMaskClamp.w));\n%loopTex%\n%loopMask%\nfragColor.a = texColor.a * vLight.a;\nfragColor.rgb = ((texColor.a - 1.0) * vDark.a + 1.0 - texColor.rgb) * vDark.rgb + texColor.rgb * vLight.rgb;\ngl_FragColor = fragColor * maskColor.r * (clipEnable * clip + 1.0 - clipEnable);\n}`;\nconst tempArray = new Float32Array([0, 0, 0, 0]);\n\nexport class MaskedGeometry extends Geometry\n{\n    _buffer: Buffer;\n    _indexBuffer: Buffer;\n\n    constructor(_static = false)\n    {\n        super();\n\n        this._buffer = new Buffer(null, _static, false);\n\n        this._indexBuffer = new Buffer(null, _static, true);\n\n        this.addAttribute('aVertexPosition', this._buffer, 2, false, TYPES.FLOAT)\n            .addAttribute('aTextureCoord', this._buffer, 2, false, TYPES.FLOAT)\n            .addAttribute('aLight', this._buffer, 4, true, TYPES.UNSIGNED_BYTE)\n            .addAttribute('aDark', this._buffer, 4, true, TYPES.UNSIGNED_BYTE)\n            .addAttribute('aTextureId', this._buffer, 1, true, TYPES.FLOAT)\n            .addAttribute('aMaskCoord', this._buffer, 2, false, TYPES.FLOAT)\n            .addAttribute('aMaskClamp', this._buffer, 4, false, TYPES.FLOAT)\n            .addIndex(this._indexBuffer);\n    }\n}\n\nconst elemTex: Array<BaseTexture> = [null, null];\n\nexport class MaskedBatchRenderer extends BatchRenderer\n{\n    static extension = {\n        name: 'batchMasked',\n        type: ExtensionType.RendererPlugin\n    };\n\n    static MAX_TEXTURES = 8;\n    constructor(renderer: Renderer)\n    {\n        super(renderer);\n\n        this.geometryClass = MaskedGeometry;\n        this.vertexSize = 13;\n        this.maxTextures = 0;\n    }\n\n    setShaderGenerator({ vertex = shaderVert, fragment = shaderFrag } = {})\n    {\n        this.shaderGenerator = new LoopShaderGenerator(vertex, fragment,\n            [{\n                loopLabel: '%loopTex%',\n                inCoord: 'vTextureCoord',\n                outColor: 'texColor',\n                inTex: 'textureId',\n            }, {\n                loopLabel: '%loopMask%',\n                inCoord: 'vMaskCoord',\n                outColor: 'maskColor',\n                inTex: 'maskId',\n            }]) as any;\n    }\n\n    contextChange(): void\n    {\n        const thisAny = this as any;\n        const batchMaxTextures = thisAny.renderer.plugins.batch.maxTextures * 2;\n\n        thisAny.maxTextures = Math.max(2, Math.min(MaskedBatchRenderer.MAX_TEXTURES, batchMaxTextures));\n        this._shader = thisAny.shaderGenerator.generateShader(this.maxTextures);\n\n        // we use the second shader as the first one depending on your browser\n        // may omit aTextureId as it is not used by the shader so is optimized out.\n        for (let i = 0; i < thisAny._packedGeometryPoolSize; i++)\n        {\n            /* eslint-disable max-len */\n            thisAny._packedGeometries[i] = new (this.geometryClass)();\n        }\n\n        this.initFlushBuffers();\n    }\n\n    buildTexturesAndDrawCalls(): void\n    {\n        const textures: Array<BaseTexture> = (this as any)._bufferedTextures;\n        const elements: Array<any> = (this as any)._bufferedElements;\n        const _bufferSize: number = (this as any)._bufferSize;\n        const {\n            maxTextures\n        } = this;\n        const textureArrays = BatchRenderer._textureArrayPool;\n        const batch = this.renderer.batch;\n        const boundTextures: BaseTexture[] = (this as any)._tempBoundTextures;\n        const touch = this.renderer.textureGC.count;\n\n        let TICK = ++BaseTexture._globalBatch;\n        let countTexArrays = 0;\n        let texArray = textureArrays[0];\n        let start = 0;\n\n        batch.copyBoundTextures(boundTextures, maxTextures);\n\n        for (let i = 0; i < _bufferSize; ++i)\n        {\n            // here are my changes, use two textures instead of one\n            // use WHITE as default mask\n            const maskTexNull = elements[i].maskSprite ? elements[i].maskSprite.texture.baseTexture : null;\n\n            elemTex[0] = maskTexNull && maskTexNull.valid ? maskTexNull : WHITE;\n            elemTex[1] = textures[i];\n            textures[i] = null;\n\n            const cnt = (elemTex[0]._batchEnabled !== TICK ? 1 : 0)\n                + (elemTex[1]._batchEnabled !== TICK ? 1 : 0);\n\n            if (texArray.count + cnt > maxTextures)\n            {\n                batch.boundArray(texArray, boundTextures, TICK, maxTextures);\n                this.buildDrawCalls(texArray, start, i);\n                start = i;\n                texArray = textureArrays[++countTexArrays];\n                ++TICK;\n            }\n\n            for (let j = 0; j < 2; j++)\n            {\n                const tex = elemTex[j];\n\n                if (tex._batchEnabled !== TICK)\n                {\n                    tex._batchEnabled = TICK;\n                    (tex as any).touched = touch;\n                    texArray.elements[texArray.count++] = tex;\n                }\n            }\n        }\n\n        if (texArray.count > 0)\n        {\n            batch.boundArray(texArray, boundTextures, TICK, maxTextures);\n            this.buildDrawCalls(texArray, start, _bufferSize);\n            ++countTexArrays;\n            ++TICK;\n        }\n\n        // Clean-up\n\n        for (let i = 0; i < boundTextures.length; i++)\n        {\n            boundTextures[i] = null;\n        }\n        BaseTexture._globalBatch = TICK;\n    }\n\n    packInterleavedGeometry(element: any, attributeBuffer: ViewableBuffer, indexBuffer: Uint16Array, aIndex: number, iIndex: number)\n    {\n        const {\n            uint32View,\n            float32View,\n        } = attributeBuffer;\n\n        let lightRgba = -1;\n        let darkRgba = 0;\n\n        if (element.color)\n        {\n            lightRgba = element.color.lightRgba;\n            darkRgba = element.color.darkRgba;\n        }\n        else\n        {\n            const alpha = Math.min(element.worldAlpha, 1.0);\n\n            lightRgba = Color.shared\n                .setValue(element._tintRGB)\n                .toPremultiplied(alpha, element._texture.baseTexture.alphaMode > 0);\n        }\n\n        const p = aIndex / this.vertexSize;\n        const uvs = element.uvs;\n        const indices = element.indices;\n        const vertexData = element.vertexData;\n        const textureId = element._texture.baseTexture._batchLocation;\n        let maskTex = WHITE;\n\n        const mask = element.maskSprite;\n        let clamp: any = tempArray;\n        let maskVertexData = tempArray;\n        let maskBit = 0;\n\n        if (mask)\n        {\n            // TODO: exclude from batcher, move it to element render()\n            element.calculateMaskVertices();\n            clamp = mask._texture.uvMatrix.uClampFrame;\n            maskVertexData = element.maskVertexData;\n            if (mask.texture.valid)\n            {\n                maskTex = mask.texture.baseTexture;\n                maskBit = 1;\n            }\n        }\n\n        for (let i = 0; i < vertexData.length; i += 2)\n        {\n            float32View[aIndex++] = vertexData[i];\n            float32View[aIndex++] = vertexData[i + 1];\n            float32View[aIndex++] = uvs[i];\n            float32View[aIndex++] = uvs[i + 1];\n            uint32View[aIndex++] = lightRgba;\n            uint32View[aIndex++] = darkRgba;\n            float32View[aIndex++] = (((maskTex._batchLocation * 16.0) + maskBit) * 64.0) + textureId;\n\n            float32View[aIndex++] = maskVertexData[i];\n            float32View[aIndex++] = maskVertexData[i + 1];\n            float32View[aIndex++] = clamp[0];\n            float32View[aIndex++] = clamp[1];\n            float32View[aIndex++] = clamp[2];\n            float32View[aIndex++] = clamp[3];\n        }\n\n        for (let i = 0; i < indices.length; i++)\n        {\n            indexBuffer[iIndex++] = p + indices[i];\n        }\n    }\n}\n","import { ColorTransform } from './ColorTransform';\nimport { DisplayObject } from '@pixi/display';\nimport { Renderer } from '@pixi/core';\nimport { BitmapText } from '@pixi/text-bitmap';\nimport { DoubleTintMeshMaterial } from './mesh/DoubleTintMeshMaterial';\nimport { MeshH } from './mesh/MeshH';\n\nexport class BitmapTextH extends BitmapText\n{\n    constructor(text: string, style?: any)\n    {\n        super(text, style);\n        if (!this.color)\n        {\n            this.color = new ColorTransform();\n        }\n    }\n\n    color: ColorTransform;\n\n    get tint()\n    {\n        return this.color ? this.color.tintBGR : 0xffffff;\n    }\n\n    set tint(value: number)\n    {\n        if (this.color)\n        {\n            this.color.tintBGR = value;\n        }\n    }\n\n    addChild(...additionalChildren: DisplayObject[]): any\n    {\n        const child: MeshH = additionalChildren[0] as any;\n\n        if (!child.color && child.geometry)\n        {\n            if (!this.color)\n            {\n                this.color = new ColorTransform();\n            }\n            child.color = this.color;\n            (child as any).material = new DoubleTintMeshMaterial(child.material.texture, { color: this.color });\n        }\n\n        return super.addChild(child, ...additionalChildren);\n    }\n\n    _render(renderer: Renderer)\n    {\n        this.color.alpha = this.worldAlpha;\n        this.color.updateTransform();\n        super._render(renderer);\n    }\n}\n","export * from './mesh/MeshH';\nexport * from './mesh/DoubleTintMeshMaterial';\n\nexport * from './sprites/convert';\nexport * from './sprites/HeavenBatchRenderer';\nexport * from './sprites/LoopShaderGenerator';\nexport * from './sprites/MaskedBatchRenderer';\nexport * from './sprites/SpriteH';\n\nexport * from './BitmapTextH';\nexport * from './ColorTransform';\n\nimport { extensions } from '@pixi/core';\nimport { HeavenBatchRenderer } from './sprites/HeavenBatchRenderer';\nimport { MaskedBatchRenderer } from './sprites/MaskedBatchRenderer';\nimport { applyConvertMixins } from './sprites/convert';\n\nextensions.add(HeavenBatchRenderer);\nextensions.add(MaskedBatchRenderer);\napplyConvertMixins();\n","import { ISpineClass } from './base';\nimport { Graphics } from '@pixi/graphics';\nimport { Renderer, Texture } from '@pixi/core';\nimport { SpriteH, SimpleMeshH, ColorTransform } from '../twotint';\nimport { Container } from '@pixi/display';\n\nexport class SpineSprite extends SpriteH\n{\n    spine: Container;\n\n    constructor(tex: Texture, spine: Container)\n    {\n        super(tex);\n        this.spine = spine;\n    }\n\n    _render(renderer: Renderer)\n    {\n        if (this.maskSprite)\n        {\n            (this.spine as any).hasSpriteMask = true;\n        }\n        if ((this.spine as any).hasSpriteMask)\n        {\n            this.pluginName = 'batchMasked';\n        }\n        super._render(renderer);\n    }\n}\n\nexport class SpineMesh extends SimpleMeshH\n{\n    spine: Container;\n\n    constructor(texture: Texture, vertices?: Float32Array, uvs?: Float32Array, indices?: Uint16Array, drawMode?: number,\n        spine: Container = null)\n    {\n        super(texture, vertices, uvs, indices, drawMode);\n        this.spine = spine;\n    }\n\n    _render(renderer: Renderer)\n    {\n        // part of SimpleMesh\n        if (this.autoUpdate)\n        {\n            this.geometry.getBuffer('aVertexPosition').update();\n        }\n        if (this.maskSprite)\n        {\n            (this.spine as any).hasSpriteMask = true;\n        }\n        if ((this.spine as any).hasSpriteMask)\n        {\n            (this.material as any).pluginName = 'batchMasked';\n            this._renderToBatch(renderer);\n        }\n        else\n        {\n            super._renderDefault(renderer);\n        }\n    }\n}\n\nexport function applySpineMixin(spineClassPrototype: ISpineClass): void\n{\n    spineClassPrototype.newMesh = function newMesh(texture: Texture, vertices?: Float32Array,\n        uvs?: Float32Array, indices?: Uint16Array, drawMode?: number)\n    {\n        return new SimpleMeshH(texture, vertices, uvs, indices, drawMode) as any;\n    };\n    spineClassPrototype.newContainer = function newMesh()\n    {\n        if (!this.color)\n        {\n            this.hasSpriteMask = false;\n            this.color = new ColorTransform();\n        }\n\n        return new Container();\n    };\n    spineClassPrototype.newSprite = function newSprite(texture: Texture)\n    {\n        return new SpriteH(texture);\n    };\n    spineClassPrototype.newGraphics = function newMesh()\n    {\n        return new Graphics();\n    };\n    spineClassPrototype.transformHack = function transformHack()\n    {\n        return 2;\n    };\n}\n","// eslint-disable-next-line @typescript-eslint/triple-slash-reference,spaced-comment\n/// <reference path=\"../global.d.ts\" />\n\nimport { applySpritesheetMixin } from './polygonPacking/Spritesheet';\n\nexport * from './animation/AnimationState';\nexport * from './polygonPacking/Spritesheet';\n\nexport * from './twotint';\nexport * from './settings';\nexport * from './spine';\n\napplySpritesheetMixin();\n"],"names":["TexturePolygon","vertices","uvs","indices","applySpritesheetMixin","Spritesheet","initialFrameIndex","meta","frameIndex","maxFrames","i","data","rect","frame","trim","sourceSize","orig","Rectangle","Texture","AnimationState","textures","autoUpdate","Ticker","UPDATE_PRIORITY","frameNumber","previousFrame","deltaTime","elapsed","lag","sign","target","frames","images","value","val","currentFrame","whiteRgba","blackRgba","ColorTransform","light","R","G","B","color","dark","la","tempMat","Matrix","defIndices","SpriteH","Sprite","texture","thisAny","renderer","polygon","transform","wt","a","b","c","d","tx","ty","anchor","n","vertexData","dx","dy","x","y","w0","w1","h0","h1","maskSprite","tex","TextureMatrix","maskVertexData","options","CLAMP_OPTIONS","e","settings","vertex","fragment","fragTrim","tmpClr","Color","DoubleTintMeshMaterial","Shader","uSampler","uniforms","allowTrim","Program","MeshH","MeshBase","geometry","shader","state","drawMode","SimpleMeshH","MeshGeometry","applyConvertMixins","tintGet","tintSet","tintRGBGet","SpriteProto","Container","ENV","ENV2","RENDERER_TYPE","RENDERER_TYPE2","BUFFER_BITS","BUFFER_BITS2","BLEND_MODES","BLEND_MODES2","DRAW_MODES","DRAW_MODES2","FORMATS","FORMATS2","TARGETS","TARGETS2","TYPES","TYPES2","SAMPLER_TYPES","SAMPLER_TYPES2","SCALE_MODES","SCALE_MODES2","WRAP_MODES","WRAP_MODES2","MIPMAP_MODES","MIPMAP_MODES2","ALPHA_MODES","ALPHA_MODES2","CLEAR_MODES","CLEAR_MODES2","GC_MODES","GC_MODES2","PRECISION","PRECISION2","MASK_TYPES","MASK_TYPES2","COLOR_MASK_BITS","COLOR_MASK_BITS2","MSAA_QUALITY","MSAA_QUALITY2","BUFFER_TYPE","BUFFER_TYPE2","shaderVert","shaderFrag","DarkLightGeometry","Geometry","_static","Buffer","HeavenBatchRenderer","BatchRenderer","element","attributeBuffer","indexBuffer","aIndex","iIndex","uint32View","float32View","lightRgba","darkRgba","alpha","p","textureId","texArray","start","finish","elements","_attributeBuffer","_indexBuffer","vertexSize","drawCalls","dcIndex","drawCall","sprite","spriteBlendMode","premultiplyBlendMode","ExtensionType","LoopShaderGenerator","vertexSrc","fragTemplate","loops","maxTextures","sampleValues","UniformGroup","fragmentSrc","loop","src","WHITE","tempArray","MaskedGeometry","elemTex","_MaskedBatchRenderer","batchMaxTextures","_bufferSize","textureArrays","batch","boundTextures","touch","TICK","BaseTexture","countTexArrays","maskTexNull","cnt","j","maskTex","mask","clamp","maskBit","MaskedBatchRenderer","BitmapTextH","BitmapText","text","style","additionalChildren","child","extensions","SpineSprite","spine","SpineMesh","applySpineMixin","spineClassPrototype","Graphics"],"mappings":"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","x_google_ignoreList":[8]}