{"version":3,"file":"Container3d.mjs","sources":["../../src/proj3d/Container3d.ts"],"sourcesContent":["/* eslint-disable no-mixed-operators */\r\nimport { Projection3d } from './Projection3d';\r\nimport { Container, DisplayObject } from '@pixi/display';\r\nimport { IPointData, Matrix, Point } from '@pixi/math';\r\nimport { TRANSFORM_STEP } from '../base';\r\nimport { IEuler } from './ObservableEuler';\r\n\r\nexport function container3dWorldTransform(): Matrix\r\n{\r\n    return this.proj.affine ? this.transform.worldTransform : this.proj.world as any;\r\n}\r\n\r\nexport interface IDisplayObject3d\n{\r\n    isFrontFace(forceUpdate?: boolean): boolean;\r\n    getDepth(forceUpdate?: boolean): number;\r\n    // eslint-disable-next-line max-len\r\n    toLocal<P extends IPointData = Point>(position: IPointData, from?: DisplayObject, point?: P, skipUpdate?: boolean, step?: TRANSFORM_STEP): P;\r\n    position3d: IPointData;\r\n    scale3d: IPointData;\r\n    euler: IEuler;\r\n    pivot3d: IPointData;\r\n}\r\n\r\nexport class Container3d extends Container implements IDisplayObject3d\r\n{\r\n    constructor()\r\n    {\r\n        super();\r\n        this.proj = new Projection3d(this.transform);\r\n    }\r\n\r\n    proj: Projection3d;\r\n\r\n    isFrontFace(forceUpdate = false): boolean\r\n    {\r\n        if (forceUpdate)\r\n        {\r\n            this._recursivePostUpdateTransform();\r\n            this.displayObjectUpdateTransform();\r\n        }\r\n\r\n        const mat = this.proj.world.mat4;\r\n        const dx1 = mat[0] * mat[15] - mat[3] * mat[12];\r\n        const dy1 = mat[1] * mat[15] - mat[3] * mat[13];\r\n        const dx2 = mat[4] * mat[15] - mat[7] * mat[12];\r\n        const dy2 = mat[5] * mat[15] - mat[7] * mat[13];\r\n\r\n        return dx1 * dy2 - dx2 * dy1 > 0;\r\n    }\r\n\r\n    /**\r\n     * returns depth from 0 to 1\r\n     *\r\n     * @param {boolean} forceUpdate whether to force matrix updates\r\n     * @returns {number} depth\r\n     */\r\n    getDepth(forceUpdate = false): number\r\n    {\r\n        if (forceUpdate)\r\n        {\r\n            this._recursivePostUpdateTransform();\r\n            this.displayObjectUpdateTransform();\r\n        }\r\n\r\n        const mat4 = this.proj.world.mat4;\r\n\r\n        return mat4[14] / mat4[15];\r\n    }\r\n\r\n    toLocal<P extends IPointData = Point>(position: IPointData, from?: DisplayObject, point?: P, skipUpdate?: boolean,\r\n        step = TRANSFORM_STEP.ALL): P\r\n    {\r\n        if (from)\r\n        {\r\n            position = from.toGlobal(position, point, skipUpdate);\r\n        }\r\n\r\n        if (!skipUpdate)\r\n        {\r\n            this._recursivePostUpdateTransform();\r\n        }\r\n\r\n        if (step === TRANSFORM_STEP.ALL)\r\n        {\r\n            if (!skipUpdate)\r\n            {\r\n                this.displayObjectUpdateTransform();\r\n            }\r\n            if (this.proj.affine)\r\n            {\r\n                return this.transform.worldTransform.applyInverse(position, point) as any;\r\n            }\r\n\r\n            return this.proj.world.applyInverse(position, point) as any;\r\n        }\r\n\r\n        if (this.parent)\r\n        {\r\n            point = this.parent.worldTransform.applyInverse(position, point) as any;\r\n        }\r\n        else\r\n        {\r\n            point.x = position.x;\r\n            point.y = position.y;\r\n            // TODO: pixi 6.1.0 global mixin\r\n            (point as any).z = (position as any).z;\r\n        }\r\n        if (step === TRANSFORM_STEP.NONE)\r\n        {\r\n            return point;\r\n        }\r\n\r\n        point = this.transform.localTransform.applyInverse(point, point) as any;\r\n        if (step === TRANSFORM_STEP.PROJ && this.proj.cameraMode)\r\n        {\r\n            point = this.proj.cameraMatrix.applyInverse(point, point) as any;\r\n        }\r\n\r\n        return point;\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    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(): IEuler\r\n    {\r\n        return this.proj.euler;\r\n    }\r\n    set euler(value: IEuler)\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\r\nexport const container3dToLocal = Container3d.prototype.toLocal;\r\nexport const container3dGetDepth = Container3d.prototype.getDepth;\r\nexport const container3dIsFrontFace = Container3d.prototype.isFrontFace;\r\n"],"names":[],"mappings":"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"}