{"version":3,"file":"BilinearSurface.mjs","sources":["../../src/curve/BilinearSurface.ts"],"sourcesContent":["/* eslint-disable no-mixed-operators */\r\nimport { IPoint, IPointData, Matrix, Point, Rectangle, Transform } from '@pixi/math';\r\nimport { Sprite } from '@pixi/sprite';\r\nimport { Surface } from './BaseSurface';\r\nimport { Dict } from '@pixi/utils';\r\n\r\nconst tempMat = new Matrix();\r\nconst tempRect = new Rectangle();\r\nconst tempPoint = new Point();\r\n\r\nexport class BilinearSurface extends Surface\r\n{\r\n    distortion = new Point();\r\n\r\n    clear(): void\r\n    {\r\n        this.distortion.set(0, 0);\r\n    }\r\n\r\n    apply(pos: IPointData, newPos?: IPointData): IPointData\r\n    {\r\n        newPos = newPos || new Point();\r\n        const d = this.distortion;\r\n        const m = pos.x * pos.y;\r\n\r\n        newPos.x = pos.x + d.x * m;\r\n        newPos.y = pos.y + d.y * m;\r\n\r\n        return newPos;\r\n    }\r\n\r\n    applyInverse(pos: IPointData, newPos: IPoint): IPointData\r\n    {\r\n        newPos = newPos || new Point();\r\n        const vx = pos.x; const\r\n            vy = pos.y;\r\n        const dx = this.distortion.x; const\r\n            dy = this.distortion.y;\r\n\r\n        if (dx === 0.0)\r\n        {\r\n            newPos.x = vx;\r\n            newPos.y = vy / (1.0 + dy * vx);\r\n        }\r\n        else\r\n        if (dy === 0.0)\r\n        {\r\n            newPos.y = vy;\r\n            newPos.x = vx / (1.0 + dx * vy);\r\n        }\r\n        else\r\n        {\r\n            const b = (vy * dx - vx * dy + 1.0) * 0.5 / dy;\r\n            const d = b * b + vx / dy;\r\n\r\n            if (d <= 0.00001)\r\n            {\r\n                newPos.set(NaN, NaN);\r\n\r\n                return newPos;\r\n            }\r\n            if (dy > 0.0)\r\n            {\r\n                newPos.x = -b + Math.sqrt(d);\r\n            }\r\n            else\r\n            {\r\n                newPos.x = -b - Math.sqrt(d);\r\n            }\r\n            newPos.y = (vx / newPos.x - 1.0) / dx;\r\n        }\r\n\r\n        return newPos;\r\n    }\r\n\r\n    mapSprite(sprite: Sprite, quad: Array<IPointData>, outTransform?: Transform): this\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        return this.mapQuad(tempRect, quad, outTransform || sprite.transform as Transform);\r\n    }\r\n\r\n    mapQuad(rect: Rectangle, quad: Array<IPointData>, outTransform: Transform): this\r\n    {\r\n        const ax = -rect.x / rect.width;\r\n        const ay = -rect.y / rect.height;\r\n\r\n        const ax2 = (1.0 - rect.x) / rect.width;\r\n        const ay2 = (1.0 - rect.y) / rect.height;\r\n\r\n        const up1x = (quad[0].x * (1.0 - ax) + quad[1].x * ax);\r\n        const up1y = (quad[0].y * (1.0 - ax) + quad[1].y * ax);\r\n        const up2x = (quad[0].x * (1.0 - ax2) + quad[1].x * ax2);\r\n        const up2y = (quad[0].y * (1.0 - ax2) + quad[1].y * ax2);\r\n\r\n        const down1x = (quad[3].x * (1.0 - ax) + quad[2].x * ax);\r\n        const down1y = (quad[3].y * (1.0 - ax) + quad[2].y * ax);\r\n        const down2x = (quad[3].x * (1.0 - ax2) + quad[2].x * ax2);\r\n        const down2y = (quad[3].y * (1.0 - ax2) + quad[2].y * ax2);\r\n\r\n        const x00 = up1x * (1.0 - ay) + down1x * ay;\r\n        const y00 = up1y * (1.0 - ay) + down1y * ay;\r\n\r\n        const x10 = up2x * (1.0 - ay) + down2x * ay;\r\n        const y10 = up2y * (1.0 - ay) + down2y * ay;\r\n\r\n        const x01 = up1x * (1.0 - ay2) + down1x * ay2;\r\n        const y01 = up1y * (1.0 - ay2) + down1y * ay2;\r\n\r\n        const x11 = up2x * (1.0 - ay2) + down2x * ay2;\r\n        const y11 = up2y * (1.0 - ay2) + down2y * ay2;\r\n\r\n        const mat = tempMat;\r\n\r\n        mat.tx = x00;\r\n        mat.ty = y00;\r\n        mat.a = x10 - x00;\r\n        mat.b = y10 - y00;\r\n        mat.c = x01 - x00;\r\n        mat.d = y01 - y00;\r\n        tempPoint.set(x11, y11);\r\n        mat.applyInverse(tempPoint, tempPoint);\r\n        this.distortion.set(tempPoint.x - 1, tempPoint.y - 1);\r\n\r\n        outTransform.setFromMatrix(mat);\r\n\r\n        return this;\r\n    }\r\n\r\n    fillUniforms(uniforms: Dict<any>): void\r\n    {\r\n        uniforms.distortion = uniforms.distortion || new Float32Array([0, 0, 0, 0]);\r\n        const ax = Math.abs(this.distortion.x);\r\n        const ay = Math.abs(this.distortion.y);\r\n\r\n        uniforms.distortion[0] = ax * 10000 <= ay ? 0 : this.distortion.x;\r\n        uniforms.distortion[1] = ay * 10000 <= ax ? 0 : this.distortion.y;\r\n        uniforms.distortion[2] = 1.0 / uniforms.distortion[0];\r\n        uniforms.distortion[3] = 1.0 / uniforms.distortion[1];\r\n    }\r\n}\r\n"],"names":[],"mappings":"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"}