{"version":3,"file":"ProjectionSurface.mjs","sources":["../../src/curve/ProjectionSurface.ts"],"sourcesContent":["import { IPointData, Transform } from '@pixi/math';\r\nimport { AbstractProjection } from '../base';\r\nimport { Surface } from './BaseSurface';\r\nimport { BilinearSurface } from './BilinearSurface';\r\nimport { Sprite } from '@pixi/sprite';\r\n\r\nconst fun = Transform.prototype.updateTransform;\r\n\r\nexport interface IWorldTransform\n{\r\n    apply(pos: IPointData, newPos: IPointData): IPointData;\r\n\r\n    // TODO: remove props\r\n    applyInverse(pos: IPointData, newPos: IPointData): IPointData;\r\n}\r\n\r\nfunction transformHack(this: Transform, parentTransform: Transform): IWorldTransform\r\n{\r\n    // TODO: pixi 6.1.0 global mixin\r\n    const proj = (this as any).proj as ProjectionSurface;\r\n\r\n    const pp = (parentTransform as any).proj as ProjectionSurface;\r\n    const ta = this as any;\r\n\r\n    if (!pp)\r\n    {\r\n        fun.call(this, parentTransform);\r\n        proj._activeProjection = null;\r\n\r\n        return;\r\n    }\r\n\r\n    if (pp._surface)\r\n    {\r\n        proj._activeProjection = pp;\r\n        this.updateLocalTransform();\r\n        this.localTransform.copyTo(this.worldTransform);\r\n        if (ta._parentID < 0)\r\n        {\r\n            ++ta._worldID;\r\n        }\r\n\r\n        return;\r\n    }\r\n\r\n    fun.call(this, parentTransform);\r\n    proj._activeProjection = pp._activeProjection;\r\n}\r\n\r\nexport class ProjectionSurface extends AbstractProjection\r\n{\r\n    _surface: Surface = null;\r\n    _activeProjection: ProjectionSurface = null;\r\n\r\n    // eslint-disable-next-line accessor-pairs\r\n    set enabled(value: boolean)\r\n    {\r\n        if (value === this._enabled)\r\n        {\r\n            return;\r\n        }\r\n        this._enabled = value;\r\n        if (value)\r\n        {\r\n            this.legacy.updateTransform = transformHack;\r\n            (this.legacy as any)._parentID = -1;\r\n        }\r\n        else\r\n        {\r\n            this.legacy.updateTransform = Transform.prototype.updateTransform;\r\n            (this.legacy as any)._parentID = -1;\r\n        }\r\n    }\r\n\r\n    get surface(): Surface\r\n    {\r\n        return this._surface;\r\n    }\r\n\r\n    set surface(value: Surface)\r\n    {\r\n        if (this._surface === value)\r\n        {\r\n            return;\r\n        }\r\n        this._surface = value || null;\r\n        (this.legacy as any)._parentID = -1;\r\n    }\r\n\r\n    applyPartial(pos: IPointData, newPos?: IPointData): IPointData\r\n    {\r\n        if (this._activeProjection !== null)\r\n        {\r\n            newPos = this.legacy.worldTransform.apply(pos, newPos);\r\n\r\n            return this._activeProjection.surface.apply(newPos, newPos);\r\n        }\r\n        if (this._surface !== null)\r\n        {\r\n            return this.surface.apply(pos, newPos);\r\n        }\r\n\r\n        return this.legacy.worldTransform.apply(pos, newPos);\r\n    }\r\n\r\n    apply(pos: IPointData, newPos?: IPointData): IPointData\r\n    {\r\n        if (this._activeProjection !== null)\r\n        {\r\n            newPos = this.legacy.worldTransform.apply(pos, newPos);\r\n            this._activeProjection.surface.apply(newPos, newPos);\r\n\r\n            return this._activeProjection.legacy.worldTransform.apply(newPos, newPos);\r\n        }\r\n        if (this._surface !== null)\r\n        {\r\n            newPos = this.surface.apply(pos, newPos);\r\n\r\n            return this.legacy.worldTransform.apply(newPos, newPos);\r\n        }\r\n\r\n        return this.legacy.worldTransform.apply(pos, newPos);\r\n    }\r\n\r\n    applyInverse(pos: IPointData, newPos: IPointData): IPointData\r\n    {\r\n        if (this._activeProjection !== null)\r\n        {\r\n            newPos = this._activeProjection.legacy.worldTransform.applyInverse(pos, newPos);\r\n            this._activeProjection._surface.applyInverse(newPos, newPos);\r\n\r\n            return this.legacy.worldTransform.applyInverse(newPos, newPos);\r\n        }\r\n        if (this._surface !== null)\r\n        {\r\n            newPos = this.legacy.worldTransform.applyInverse(pos, newPos);\r\n\r\n            return this._surface.applyInverse(newPos, newPos);\r\n        }\r\n\r\n        return this.legacy.worldTransform.applyInverse(pos, newPos);\r\n    }\r\n\r\n    mapBilinearSprite(sprite: Sprite, quad: Array<IPointData>): void\r\n    {\r\n        if (!(this._surface instanceof BilinearSurface))\r\n        {\r\n            this.surface = new BilinearSurface();\r\n        }\r\n        (this.surface as BilinearSurface).mapSprite(sprite, quad, this.legacy);\r\n    }\r\n\r\n    _currentSurfaceID = -1;\r\n    _currentLegacyID = -1;\r\n    _lastUniforms : any = null;\r\n\r\n    clear(): void\r\n    {\r\n        if (this.surface)\r\n        {\r\n            this.surface.clear();\r\n        }\r\n    }\r\n\r\n    get uniforms(): any\r\n    {\r\n        if (this._currentLegacyID === (this.legacy as any)._worldID\r\n            && this._currentSurfaceID === this.surface._updateID)\r\n        {\r\n            return this._lastUniforms;\r\n        }\r\n\r\n        this._lastUniforms = this._lastUniforms || {};\r\n        this._lastUniforms.translationMatrix = this.legacy.worldTransform;\r\n        this._surface.fillUniforms(this._lastUniforms);\r\n\r\n        return this._lastUniforms;\r\n    }\r\n}\r\n"],"names":[],"mappings":"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"}