{"version":3,"file":"Projection2d.mjs","sources":["../../src/proj2d/Projection2d.ts"],"sourcesContent":["/* eslint-disable no-mixed-operators */\r\nimport { Matrix2d } from './Matrix2d';\r\nimport { IPointData, Matrix, ObservablePoint, Point, Rectangle, Transform } from '@pixi/math';\r\nimport { Sprite } from '@pixi/sprite';\r\nimport { LinearProjection } from '../base';\r\nimport { getIntersectionFactor } from '../utils';\r\n\r\nconst t0 = new Point();\r\nconst tt = [new Point(), new Point(), new Point(), new Point()];\r\nconst tempRect = new Rectangle();\r\nconst tempMat = new Matrix2d();\r\n\r\nexport class Projection2d extends LinearProjection<Matrix2d>\r\n{\r\n    constructor(legacy: Transform, enable?: boolean)\r\n    {\r\n        super(legacy, enable);\r\n        this.local = new Matrix2d();\r\n        this.world = new Matrix2d();\r\n    }\r\n\r\n    matrix = new Matrix2d();\r\n    pivot = new ObservablePoint(this.onChange, this, 0, 0);\r\n\r\n    reverseLocalOrder = false;\r\n\r\n    onChange(): void\r\n    {\r\n        const pivot = this.pivot;\r\n        const mat3 = this.matrix.mat3;\r\n\r\n        mat3[6] = -(pivot._x * mat3[0] + pivot._y * mat3[3]);\r\n        mat3[7] = -(pivot._x * mat3[1] + pivot._y * mat3[4]);\r\n\r\n        this._projID++;\r\n    }\r\n\r\n    setAxisX(p: IPointData, factor = 1): void\r\n    {\r\n        const x = p.x; const\r\n            y = p.y;\r\n        const d = Math.sqrt(x * x + y * y);\r\n        const mat3 = this.matrix.mat3;\r\n\r\n        mat3[0] = x / d;\r\n        mat3[1] = y / d;\r\n        mat3[2] = factor / d;\r\n\r\n        this.onChange();\r\n    }\r\n\r\n    setAxisY(p: IPointData, factor = 1): void\r\n    {\r\n        const x = p.x; const\r\n            y = p.y;\r\n        const d = Math.sqrt(x * x + y * y);\r\n        const mat3 = this.matrix.mat3;\r\n\r\n        mat3[3] = x / d;\r\n        mat3[4] = y / d;\r\n        mat3[5] = factor / d;\r\n        this.onChange();\r\n    }\r\n\r\n    mapSprite(sprite: Sprite, quad: Array<IPointData>): void\r\n    {\r\n        const tex = sprite.texture;\r\n\r\n        tempRect.x = -sprite.anchor.x * tex.orig.width;\r\n        tempRect.y = -sprite.anchor.y * tex.orig.height;\r\n        tempRect.width = tex.orig.width;\r\n        tempRect.height = tex.orig.height;\r\n\r\n        this.mapQuad(tempRect, quad);\r\n    }\r\n\r\n    mapQuad(rect: Rectangle, p: Array<IPointData>): void\r\n    {\r\n        // utils.getPositionFromQuad(p, anchor, t0);\r\n        tt[0].set(rect.x, rect.y);\r\n        tt[1].set(rect.x + rect.width, rect.y);\r\n        tt[2].set(rect.x + rect.width, rect.y + rect.height);\r\n        tt[3].set(rect.x, rect.y + rect.height);\r\n\r\n        let k1 = 1; let k2 = 2;\r\n        let k3 = 3;\r\n        const f = getIntersectionFactor(p[0], p[2], p[1], p[3], t0);\r\n\r\n        if (f !== 0)\r\n        {\r\n            k1 = 1;\r\n            k2 = 3;\r\n            k3 = 2;\r\n        }\r\n        else\r\n        {\r\n            return;\r\n            /* f = utils.getIntersectionFactor(p[0], p[1], p[2], p[3], t0);\r\n            if (f > 0) {\r\n                k1 = 2;\r\n                k2 = 3;\r\n                k3 = 1;\r\n            } else {\r\n                f = utils.getIntersectionFactor(p[0], p[3], p[1], p[2], t0);\r\n                if (f > 0) {\r\n                    // cant find it :(\r\n                    k1 = 1;\r\n                    k2 = 2;\r\n                    k3 = 3;\r\n                } else {\r\n                    return;\r\n                }\r\n            }*/\r\n        }\r\n        const d0 = Math.sqrt((p[0].x - t0.x) * (p[0].x - t0.x) + (p[0].y - t0.y) * (p[0].y - t0.y));\r\n        const d1 = Math.sqrt((p[k1].x - t0.x) * (p[k1].x - t0.x) + (p[k1].y - t0.y) * (p[k1].y - t0.y));\r\n        const d2 = Math.sqrt((p[k2].x - t0.x) * (p[k2].x - t0.x) + (p[k2].y - t0.y) * (p[k2].y - t0.y));\r\n        const d3 = Math.sqrt((p[k3].x - t0.x) * (p[k3].x - t0.x) + (p[k3].y - t0.y) * (p[k3].y - t0.y));\r\n\r\n        const q0 = (d0 + d3) / d3;\r\n        const q1 = (d1 + d2) / d2;\r\n        const q2 = (d1 + d2) / d1;\r\n\r\n        let mat3 = this.matrix.mat3;\r\n\r\n        mat3[0] = tt[0].x * q0;\r\n        mat3[1] = tt[0].y * q0;\r\n        mat3[2] = q0;\r\n        mat3[3] = tt[k1].x * q1;\r\n        mat3[4] = tt[k1].y * q1;\r\n        mat3[5] = q1;\r\n        mat3[6] = tt[k2].x * q2;\r\n        mat3[7] = tt[k2].y * q2;\r\n        mat3[8] = q2;\r\n        this.matrix.invert();\r\n\r\n        mat3 = tempMat.mat3;\r\n        mat3[0] = p[0].x;\r\n        mat3[1] = p[0].y;\r\n        mat3[2] = 1;\r\n        mat3[3] = p[k1].x;\r\n        mat3[4] = p[k1].y;\r\n        mat3[5] = 1;\r\n        mat3[6] = p[k2].x;\r\n        mat3[7] = p[k2].y;\r\n        mat3[8] = 1;\r\n\r\n        this.matrix.setToMult(tempMat, this.matrix);\r\n        this._projID++;\r\n    }\r\n\r\n    updateLocalTransform(lt: Matrix): void\r\n    {\r\n        if (this._projID !== 0)\r\n        {\r\n            if (this.reverseLocalOrder)\r\n            {\r\n                // tilingSprite inside order\r\n                this.local.setToMultLegacy2(this.matrix, lt);\r\n            }\r\n            else\r\n            {\r\n                // good order\r\n                this.local.setToMultLegacy(lt, this.matrix);\r\n            }\r\n        }\r\n        else\r\n        {\r\n            this.local.copyFrom(lt);\r\n        }\r\n    }\r\n\r\n    clear(): void\r\n    {\r\n        super.clear();\r\n        this.matrix.identity();\r\n        this.pivot.set(0, 0);\r\n    }\r\n}\r\n"],"names":[],"mappings":";;;;;;AAOA,MAAM,EAAA,GAAK,IAAI,KAAM,EAAA,CAAA;AACrB,MAAM,EAAK,GAAA,CAAC,IAAI,KAAA,EAAS,EAAA,IAAI,KAAM,EAAA,EAAG,IAAI,KAAA,EAAS,EAAA,IAAI,OAAO,CAAA,CAAA;AAC9D,MAAM,QAAA,GAAW,IAAI,SAAU,EAAA,CAAA;AAC/B,MAAM,OAAA,GAAU,IAAI,QAAS,EAAA,CAAA;AAEtB,MAAM,qBAAqB,gBAClC,CAAA;AAAA,EACI,WAAA,CAAY,QAAmB,MAC/B,EAAA;AACI,IAAA,KAAA,CAAM,QAAQ,MAAM,CAAA,CAAA;AAKxB,IAAA,IAAA,CAAA,MAAA,GAAS,IAAI,QAAS,EAAA,CAAA;AACtB,IAAA,IAAA,CAAA,KAAA,GAAQ,IAAI,eAAgB,CAAA,IAAA,CAAK,QAAU,EAAA,IAAA,EAAM,GAAG,CAAC,CAAA,CAAA;AAErD,IAAoB,IAAA,CAAA,iBAAA,GAAA,KAAA,CAAA;AAPhB,IAAK,IAAA,CAAA,KAAA,GAAQ,IAAI,QAAS,EAAA,CAAA;AAC1B,IAAK,IAAA,CAAA,KAAA,GAAQ,IAAI,QAAS,EAAA,CAAA;AAAA,GAC9B;AAAA,EAOA,QACA,GAAA;AACI,IAAA,MAAM,QAAQ,IAAK,CAAA,KAAA,CAAA;AACnB,IAAM,MAAA,IAAA,GAAO,KAAK,MAAO,CAAA,IAAA,CAAA;AAEzB,IAAK,IAAA,CAAA,CAAC,CAAI,GAAA,EAAE,KAAM,CAAA,EAAA,GAAK,IAAK,CAAA,CAAC,CAAI,GAAA,KAAA,CAAM,EAAK,GAAA,IAAA,CAAK,CAAC,CAAA,CAAA,CAAA;AAClD,IAAK,IAAA,CAAA,CAAC,CAAI,GAAA,EAAE,KAAM,CAAA,EAAA,GAAK,IAAK,CAAA,CAAC,CAAI,GAAA,KAAA,CAAM,EAAK,GAAA,IAAA,CAAK,CAAC,CAAA,CAAA,CAAA;AAElD,IAAK,IAAA,CAAA,OAAA,EAAA,CAAA;AAAA,GACT;AAAA,EAEA,QAAA,CAAS,CAAe,EAAA,MAAA,GAAS,CACjC,EAAA;AACI,IAAA,MAAM,IAAI,CAAE,CAAA,CAAA,CAAA;AAAG,IAAA,MACX,IAAI,CAAE,CAAA,CAAA,CAAA;AACV,IAAA,MAAM,IAAI,IAAK,CAAA,IAAA,CAAK,CAAI,GAAA,CAAA,GAAI,IAAI,CAAC,CAAA,CAAA;AACjC,IAAM,MAAA,IAAA,GAAO,KAAK,MAAO,CAAA,IAAA,CAAA;AAEzB,IAAK,IAAA,CAAA,CAAC,IAAI,CAAI,GAAA,CAAA,CAAA;AACd,IAAK,IAAA,CAAA,CAAC,IAAI,CAAI,GAAA,CAAA,CAAA;AACd,IAAK,IAAA,CAAA,CAAC,IAAI,MAAS,GAAA,CAAA,CAAA;AAEnB,IAAA,IAAA,CAAK,QAAS,EAAA,CAAA;AAAA,GAClB;AAAA,EAEA,QAAA,CAAS,CAAe,EAAA,MAAA,GAAS,CACjC,EAAA;AACI,IAAA,MAAM,IAAI,CAAE,CAAA,CAAA,CAAA;AAAG,IAAA,MACX,IAAI,CAAE,CAAA,CAAA,CAAA;AACV,IAAA,MAAM,IAAI,IAAK,CAAA,IAAA,CAAK,CAAI,GAAA,CAAA,GAAI,IAAI,CAAC,CAAA,CAAA;AACjC,IAAM,MAAA,IAAA,GAAO,KAAK,MAAO,CAAA,IAAA,CAAA;AAEzB,IAAK,IAAA,CAAA,CAAC,IAAI,CAAI,GAAA,CAAA,CAAA;AACd,IAAK,IAAA,CAAA,CAAC,IAAI,CAAI,GAAA,CAAA,CAAA;AACd,IAAK,IAAA,CAAA,CAAC,IAAI,MAAS,GAAA,CAAA,CAAA;AACnB,IAAA,IAAA,CAAK,QAAS,EAAA,CAAA;AAAA,GAClB;AAAA,EAEA,SAAA,CAAU,QAAgB,IAC1B,EAAA;AACI,IAAA,MAAM,MAAM,MAAO,CAAA,OAAA,CAAA;AAEnB,IAAA,QAAA,CAAS,IAAI,CAAC,MAAA,CAAO,MAAO,CAAA,CAAA,GAAI,IAAI,IAAK,CAAA,KAAA,CAAA;AACzC,IAAA,QAAA,CAAS,IAAI,CAAC,MAAA,CAAO,MAAO,CAAA,CAAA,GAAI,IAAI,IAAK,CAAA,MAAA,CAAA;AACzC,IAAS,QAAA,CAAA,KAAA,GAAQ,IAAI,IAAK,CAAA,KAAA,CAAA;AAC1B,IAAS,QAAA,CAAA,MAAA,GAAS,IAAI,IAAK,CAAA,MAAA,CAAA;AAE3B,IAAK,IAAA,CAAA,OAAA,CAAQ,UAAU,IAAI,CAAA,CAAA;AAAA,GAC/B;AAAA,EAEA,OAAA,CAAQ,MAAiB,CACzB,EAAA;AAEI,IAAA,EAAA,CAAG,CAAC,CAAE,CAAA,GAAA,CAAI,IAAK,CAAA,CAAA,EAAG,KAAK,CAAC,CAAA,CAAA;AACxB,IAAG,EAAA,CAAA,CAAC,EAAE,GAAI,CAAA,IAAA,CAAK,IAAI,IAAK,CAAA,KAAA,EAAO,KAAK,CAAC,CAAA,CAAA;AACrC,IAAG,EAAA,CAAA,CAAC,CAAE,CAAA,GAAA,CAAI,IAAK,CAAA,CAAA,GAAI,KAAK,KAAO,EAAA,IAAA,CAAK,CAAI,GAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AACnD,IAAG,EAAA,CAAA,CAAC,EAAE,GAAI,CAAA,IAAA,CAAK,GAAG,IAAK,CAAA,CAAA,GAAI,KAAK,MAAM,CAAA,CAAA;AAEtC,IAAA,IAAI,EAAK,GAAA,CAAA,CAAA;AAAG,IAAA,IAAI,EAAK,GAAA,CAAA,CAAA;AACrB,IAAA,IAAI,EAAK,GAAA,CAAA,CAAA;AACT,IAAA,MAAM,CAAI,GAAA,qBAAA,CAAsB,CAAE,CAAA,CAAC,GAAG,CAAE,CAAA,CAAC,CAAG,EAAA,CAAA,CAAE,CAAC,CAAA,EAAG,CAAE,CAAA,CAAC,GAAG,EAAE,CAAA,CAAA;AAE1D,IAAA,IAAI,MAAM,CACV,EAAA;AACI,MAAK,EAAA,GAAA,CAAA,CAAA;AACL,MAAK,EAAA,GAAA,CAAA,CAAA;AACL,MAAK,EAAA,GAAA,CAAA,CAAA;AAAA,KAGT,MAAA;AACI,MAAA,OAAA;AAAA,KAiBJ;AACA,IAAM,MAAA,EAAA,GAAK,IAAK,CAAA,IAAA,CAAA,CAAM,CAAE,CAAA,CAAC,CAAE,CAAA,CAAA,GAAI,EAAG,CAAA,CAAA,KAAM,CAAE,CAAA,CAAC,CAAE,CAAA,CAAA,GAAI,GAAG,CAAM,CAAA,GAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAE,CAAI,GAAA,EAAA,CAAG,CAAM,KAAA,CAAA,CAAE,CAAC,CAAA,CAAE,CAAI,GAAA,EAAA,CAAG,CAAE,CAAA,CAAA,CAAA;AAC1F,IAAM,MAAA,EAAA,GAAK,IAAK,CAAA,IAAA,CAAA,CAAM,CAAE,CAAA,EAAE,CAAE,CAAA,CAAA,GAAI,EAAG,CAAA,CAAA,KAAM,CAAE,CAAA,EAAE,CAAE,CAAA,CAAA,GAAI,GAAG,CAAM,CAAA,GAAA,CAAA,CAAA,CAAE,EAAE,CAAA,CAAE,CAAI,GAAA,EAAA,CAAG,CAAM,KAAA,CAAA,CAAE,EAAE,CAAA,CAAE,CAAI,GAAA,EAAA,CAAG,CAAE,CAAA,CAAA,CAAA;AAC9F,IAAM,MAAA,EAAA,GAAK,IAAK,CAAA,IAAA,CAAA,CAAM,CAAE,CAAA,EAAE,CAAE,CAAA,CAAA,GAAI,EAAG,CAAA,CAAA,KAAM,CAAE,CAAA,EAAE,CAAE,CAAA,CAAA,GAAI,GAAG,CAAM,CAAA,GAAA,CAAA,CAAA,CAAE,EAAE,CAAA,CAAE,CAAI,GAAA,EAAA,CAAG,CAAM,KAAA,CAAA,CAAE,EAAE,CAAA,CAAE,CAAI,GAAA,EAAA,CAAG,CAAE,CAAA,CAAA,CAAA;AAC9F,IAAM,MAAA,EAAA,GAAK,IAAK,CAAA,IAAA,CAAA,CAAM,CAAE,CAAA,EAAE,CAAE,CAAA,CAAA,GAAI,EAAG,CAAA,CAAA,KAAM,CAAE,CAAA,EAAE,CAAE,CAAA,CAAA,GAAI,GAAG,CAAM,CAAA,GAAA,CAAA,CAAA,CAAE,EAAE,CAAA,CAAE,CAAI,GAAA,EAAA,CAAG,CAAM,KAAA,CAAA,CAAE,EAAE,CAAA,CAAE,CAAI,GAAA,EAAA,CAAG,CAAE,CAAA,CAAA,CAAA;AAE9F,IAAM,MAAA,EAAA,GAAA,CAAM,KAAK,EAAM,IAAA,EAAA,CAAA;AACvB,IAAM,MAAA,EAAA,GAAA,CAAM,KAAK,EAAM,IAAA,EAAA,CAAA;AACvB,IAAM,MAAA,EAAA,GAAA,CAAM,KAAK,EAAM,IAAA,EAAA,CAAA;AAEvB,IAAI,IAAA,IAAA,GAAO,KAAK,MAAO,CAAA,IAAA,CAAA;AAEvB,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,EAAG,CAAA,CAAC,EAAE,CAAI,GAAA,EAAA,CAAA;AACpB,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,EAAG,CAAA,CAAC,EAAE,CAAI,GAAA,EAAA,CAAA;AACpB,IAAA,IAAA,CAAK,CAAC,CAAI,GAAA,EAAA,CAAA;AACV,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,EAAG,CAAA,EAAE,EAAE,CAAI,GAAA,EAAA,CAAA;AACrB,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,EAAG,CAAA,EAAE,EAAE,CAAI,GAAA,EAAA,CAAA;AACrB,IAAA,IAAA,CAAK,CAAC,CAAI,GAAA,EAAA,CAAA;AACV,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,EAAG,CAAA,EAAE,EAAE,CAAI,GAAA,EAAA,CAAA;AACrB,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,EAAG,CAAA,EAAE,EAAE,CAAI,GAAA,EAAA,CAAA;AACrB,IAAA,IAAA,CAAK,CAAC,CAAI,GAAA,EAAA,CAAA;AACV,IAAA,IAAA,CAAK,OAAO,MAAO,EAAA,CAAA;AAEnB,IAAA,IAAA,GAAO,OAAQ,CAAA,IAAA,CAAA;AACf,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,CAAE,CAAA,CAAC,CAAE,CAAA,CAAA,CAAA;AACf,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,CAAE,CAAA,CAAC,CAAE,CAAA,CAAA,CAAA;AACf,IAAA,IAAA,CAAK,CAAC,CAAI,GAAA,CAAA,CAAA;AACV,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,CAAE,CAAA,EAAE,CAAE,CAAA,CAAA,CAAA;AAChB,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,CAAE,CAAA,EAAE,CAAE,CAAA,CAAA,CAAA;AAChB,IAAA,IAAA,CAAK,CAAC,CAAI,GAAA,CAAA,CAAA;AACV,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,CAAE,CAAA,EAAE,CAAE,CAAA,CAAA,CAAA;AAChB,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,CAAE,CAAA,EAAE,CAAE,CAAA,CAAA,CAAA;AAChB,IAAA,IAAA,CAAK,CAAC,CAAI,GAAA,CAAA,CAAA;AAEV,IAAA,IAAA,CAAK,MAAO,CAAA,SAAA,CAAU,OAAS,EAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAC1C,IAAK,IAAA,CAAA,OAAA,EAAA,CAAA;AAAA,GACT;AAAA,EAEA,qBAAqB,EACrB,EAAA;AACI,IAAI,IAAA,IAAA,CAAK,YAAY,CACrB,EAAA;AACI,MAAA,IAAI,KAAK,iBACT,EAAA;AAEI,QAAA,IAAA,CAAK,KAAM,CAAA,gBAAA,CAAiB,IAAK,CAAA,MAAA,EAAQ,EAAE,CAAA,CAAA;AAAA,OAG/C,MAAA;AAEI,QAAA,IAAA,CAAK,KAAM,CAAA,eAAA,CAAgB,EAAI,EAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,OAC9C;AAAA,KAGJ,MAAA;AACI,MAAK,IAAA,CAAA,KAAA,CAAM,SAAS,EAAE,CAAA,CAAA;AAAA,KAC1B;AAAA,GACJ;AAAA,EAEA,KACA,GAAA;AACI,IAAA,KAAA,CAAM,KAAM,EAAA,CAAA;AACZ,IAAA,IAAA,CAAK,OAAO,QAAS,EAAA,CAAA;AACrB,IAAK,IAAA,CAAA,KAAA,CAAM,GAAI,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAAA,GACvB;AACJ;;;;"}