{"version":3,"file":"Sprite3d.mjs","sources":["../../../src/proj3d/sprites/Sprite3d.ts"],"sourcesContent":["import { Sprite } from '@pixi/sprite';\r\nimport { Renderer, Texture } from '@pixi/core';\r\nimport { Projection3d } from '../Projection3d';\r\nimport { IPointData, Matrix } from '@pixi/math';\r\nimport { DisplayObject } from '@pixi/display';\r\nimport { TRANSFORM_STEP } from '../../base';\r\nimport { container3dGetDepth, container3dIsFrontFace, container3dToLocal } from '../Container3d';\r\nimport { Euler } from '../Euler';\r\n/**\r\n * Same as Sprite2d, but\r\n * 1. uses Matrix3d in proj\r\n * 2. does not render if at least one vertex is behind camera\r\n */\r\nexport class Sprite3d extends Sprite\r\n{\r\n    constructor(texture: Texture)\r\n    {\r\n        super(texture);\r\n        this.proj = new Projection3d(this.transform);\r\n        this.pluginName = 'batch2d';\r\n    }\r\n\r\n    vertexData2d: Float32Array = null;\r\n    proj: Projection3d;\r\n    culledByFrustrum = false;\r\n    trimmedCulledByFrustrum = false;\r\n\r\n    calculateVertices(): void\r\n    {\r\n        const texture = this._texture;\r\n\r\n        if (this.proj._affine)\r\n        {\r\n            this.vertexData2d = null;\r\n            super.calculateVertices();\r\n\r\n            return;\r\n        }\r\n        if (!this.vertexData2d)\r\n        {\r\n            this.vertexData2d = new Float32Array(12);\r\n        }\r\n\r\n        const wid = (this.transform as any)._worldID;\r\n        const tuid = (texture as any)._updateID;\r\n        const thisAny = this as any;\r\n\r\n        if (thisAny._transformID === wid && this._textureID === tuid)\r\n        {\r\n            return;\r\n        }\r\n        // update texture UV here, because base texture can be changed without calling `_onTextureUpdate`\r\n        if (this._textureID !== tuid)\r\n        {\r\n            (this as any).uvs = (texture as any)._uvs.uvsFloat32;\r\n        }\r\n\r\n        thisAny._transformID = wid;\r\n        this._textureID = tuid;\r\n\r\n        const wt = this.proj.world.mat4;\r\n        const vertexData2d = this.vertexData2d;\r\n        const vertexData = this.vertexData;\r\n        const trim = texture.trim;\r\n        const orig = texture.orig;\r\n        const anchor = this._anchor;\r\n\r\n        let w0: number;\r\n        let w1: number;\r\n        let h0: number;\r\n        let h1: number;\r\n\r\n        if (trim)\r\n        {\r\n            w1 = trim.x - (anchor._x * orig.width);\r\n            w0 = w1 + trim.width;\r\n\r\n            h1 = trim.y - (anchor._y * orig.height);\r\n            h0 = h1 + trim.height;\r\n        }\r\n        else\r\n        {\r\n            w1 = -anchor._x * orig.width;\r\n            w0 = w1 + orig.width;\r\n\r\n            h1 = -anchor._y * orig.height;\r\n            h0 = h1 + orig.height;\r\n        }\r\n\r\n        let culled = false;\r\n\r\n        let z;\r\n\r\n        vertexData2d[0] = (wt[0] * w1) + (wt[4] * h1) + wt[12];\r\n        vertexData2d[1] = (wt[1] * w1) + (wt[5] * h1) + wt[13];\r\n        z = (wt[2] * w1) + (wt[6] * h1) + wt[14];\r\n        vertexData2d[2] = (wt[3] * w1) + (wt[7] * h1) + wt[15];\r\n        culled = culled || z < 0;\r\n\r\n        vertexData2d[3] = (wt[0] * w0) + (wt[4] * h1) + wt[12];\r\n        vertexData2d[4] = (wt[1] * w0) + (wt[5] * h1) + wt[13];\r\n        z = (wt[2] * w0) + (wt[6] * h1) + wt[14];\r\n        vertexData2d[5] = (wt[3] * w0) + (wt[7] * h1) + wt[15];\r\n        culled = culled || z < 0;\r\n\r\n        vertexData2d[6] = (wt[0] * w0) + (wt[4] * h0) + wt[12];\r\n        vertexData2d[7] = (wt[1] * w0) + (wt[5] * h0) + wt[13];\r\n        z = (wt[2] * w0) + (wt[6] * h0) + wt[14];\r\n        vertexData2d[8] = (wt[3] * w0) + (wt[7] * h0) + wt[15];\r\n        culled = culled || z < 0;\r\n\r\n        vertexData2d[9] = (wt[0] * w1) + (wt[4] * h0) + wt[12];\r\n        vertexData2d[10] = (wt[1] * w1) + (wt[5] * h0) + wt[13];\r\n        z = (wt[2] * w1) + (wt[6] * h0) + wt[14];\r\n        vertexData2d[11] = (wt[3] * w1) + (wt[7] * h0) + wt[15];\r\n        culled = culled || z < 0;\r\n\r\n        this.culledByFrustrum = culled;\r\n\r\n        vertexData[0] = vertexData2d[0] / vertexData2d[2];\r\n        vertexData[1] = vertexData2d[1] / vertexData2d[2];\r\n\r\n        vertexData[2] = vertexData2d[3] / vertexData2d[5];\r\n        vertexData[3] = vertexData2d[4] / vertexData2d[5];\r\n\r\n        vertexData[4] = vertexData2d[6] / vertexData2d[8];\r\n        vertexData[5] = vertexData2d[7] / vertexData2d[8];\r\n\r\n        vertexData[6] = vertexData2d[9] / vertexData2d[11];\r\n        vertexData[7] = vertexData2d[10] / vertexData2d[11];\r\n    }\r\n\r\n    calculateTrimmedVertices(): void\r\n    {\r\n        if (this.proj._affine)\r\n        {\r\n            super.calculateTrimmedVertices();\r\n\r\n            return;\r\n        }\r\n\r\n        const wid = (this.transform as any)._worldID;\r\n        const tuid = (this._texture as any)._updateID;\r\n        const thisAny = this as any;\r\n\r\n        if (!thisAny.vertexTrimmedData)\r\n        {\r\n            thisAny.vertexTrimmedData = new Float32Array(8);\r\n        }\r\n        else if (thisAny._transformTrimmedID === wid && this._textureTrimmedID === tuid)\r\n        {\r\n            return;\r\n        }\r\n\r\n        thisAny._transformTrimmedID = wid;\r\n        this._textureTrimmedID = tuid;\r\n\r\n        // lets do some special trim code!\r\n        const texture = this._texture;\r\n        const vertexData = thisAny.vertexTrimmedData;\r\n        const orig = texture.orig;\r\n        const anchor = this._anchor;\r\n\r\n        // lets calculate the new untrimmed bounds..\r\n        const wt = this.proj.world.mat4;\r\n\r\n        const w1 = -anchor._x * orig.width;\r\n        const w0 = w1 + orig.width;\r\n\r\n        const h1 = -anchor._y * orig.height;\r\n        const h0 = h1 + orig.height;\r\n\r\n        let culled = false;\r\n\r\n        let z;\r\n\r\n        let w = 1.0 / ((wt[3] * w1) + (wt[7] * h1) + wt[15]);\r\n\r\n        vertexData[0] = w * ((wt[0] * w1) + (wt[4] * h1) + wt[12]);\r\n        vertexData[1] = w * ((wt[1] * w1) + (wt[5] * h1) + wt[13]);\r\n        z = (wt[2] * w1) + (wt[6] * h1) + wt[14];\r\n        culled = culled || z < 0;\r\n\r\n        w = 1.0 / ((wt[3] * w0) + (wt[7] * h1) + wt[15]);\r\n        vertexData[2] = w * ((wt[0] * w0) + (wt[4] * h1) + wt[12]);\r\n        vertexData[3] = w * ((wt[1] * w0) + (wt[5] * h1) + wt[13]);\r\n        z = (wt[2] * w0) + (wt[6] * h1) + wt[14];\r\n        culled = culled || z < 0;\r\n\r\n        w = 1.0 / ((wt[3] * w0) + (wt[7] * h0) + wt[15]);\r\n        vertexData[4] = w * ((wt[0] * w0) + (wt[4] * h0) + wt[12]);\r\n        vertexData[5] = w * ((wt[1] * w0) + (wt[5] * h0) + wt[13]);\r\n        z = (wt[2] * w0) + (wt[6] * h0) + wt[14];\r\n        culled = culled || z < 0;\r\n\r\n        w = 1.0 / ((wt[3] * w1) + (wt[7] * h0) + wt[15]);\r\n        vertexData[6] = w * ((wt[0] * w1) + (wt[4] * h0) + wt[12]);\r\n        vertexData[7] = w * ((wt[1] * w1) + (wt[5] * h0) + wt[13]);\r\n        z = (wt[2] * w1) + (wt[6] * h0) + wt[14];\r\n        culled = culled || z < 0;\r\n\r\n        this.culledByFrustrum = culled;\r\n    }\r\n\r\n    _calculateBounds(): void\r\n    {\r\n        this.calculateVertices();\r\n        if (this.culledByFrustrum)\r\n        {\r\n            return;\r\n        }\r\n\r\n        const trim = this._texture.trim;\r\n        const orig = this._texture.orig;\r\n\r\n        if (!trim || (trim.width === orig.width && trim.height === orig.height))\r\n        {\r\n            // no trim! lets use the usual calculations..\r\n            this._bounds.addQuad(this.vertexData);\r\n\r\n            return;\r\n        }\r\n\r\n        this.calculateTrimmedVertices();\r\n        if (!this.trimmedCulledByFrustrum)\r\n        {\r\n            this._bounds.addQuad((this as any).vertexTrimmedData as any);\r\n        }\r\n    }\r\n\r\n    _render(renderer: Renderer): void\r\n    {\r\n        this.calculateVertices();\r\n\r\n        if (this.culledByFrustrum)\r\n        {\r\n            return;\r\n        }\r\n\r\n        renderer.batch.setObjectRenderer((renderer as any).plugins[this.pluginName]);\r\n        (renderer as any).plugins[this.pluginName].render(this);\r\n    }\r\n\r\n    containsPoint(point: IPointData): boolean\r\n    {\r\n        if (this.culledByFrustrum)\r\n        {\r\n            return false;\r\n        }\r\n\r\n        return super.containsPoint(point as any);\r\n    }\r\n\r\n    get worldTransform(): Matrix\r\n    {\r\n        return this.proj.affine ? this.transform.worldTransform : this.proj.world as any;\r\n    }\r\n\r\n    toLocal<T extends IPointData>(position: IPointData, from?: DisplayObject,\r\n        point?: T, skipUpdate?: boolean,\r\n        step = TRANSFORM_STEP.ALL): T\r\n    {\r\n        return container3dToLocal.call(this, position, from, point, skipUpdate, step);\r\n    }\r\n\r\n    isFrontFace(forceUpdate?: boolean): boolean\r\n    {\r\n        return container3dIsFrontFace.call(this, forceUpdate);\r\n    }\r\n\r\n    getDepth(forceUpdate?: boolean): boolean\r\n    {\r\n        return container3dGetDepth.call(this, forceUpdate);\r\n    }\r\n\r\n    get position3d(): IPointData\r\n    {\r\n        return this.proj.position;\r\n    }\r\n    set position3d(value: IPointData)\r\n    {\r\n        this.proj.position.copyFrom(value);\r\n    }\r\n    get scale3d(): IPointData\r\n    {\r\n        return this.proj.scale;\r\n    }\r\n    set scale3d(value: IPointData)\r\n    {\r\n        this.proj.scale.copyFrom(value);\r\n    }\r\n    get euler(): Euler\r\n    {\r\n        return this.proj.euler;\r\n    }\r\n    set euler(value: Euler)\r\n    {\r\n        this.proj.euler.copyFrom(value);\r\n    }\r\n    get pivot3d(): IPointData\r\n    {\r\n        return this.proj.pivot;\r\n    }\r\n    set pivot3d(value: IPointData)\r\n    {\r\n        this.proj.pivot.copyFrom(value);\r\n    }\r\n}\r\n"],"names":[],"mappings":"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"}