{"version":3,"file":"TwistFilter.mjs","sources":["../../src/twist/TwistFilter.ts"],"sourcesContent":["import { Filter, GlProgram, GpuProgram, PointData } from 'pixi.js';\nimport { vertex, wgslVertex } from '../defaults';\nimport fragment from './twist.frag';\nimport source from './twist.wgsl';\n\n/** Options for the TwistFilter constructor. */\nexport interface TwistFilterOptions\n{\n    /**\n     * Padding for the filter area\n     * @default 20\n     */\n    padding?: number;\n    /**\n     * The radius of the twist\n     * @default 200\n     */\n    radius?: number;\n    /**\n     * The angle of the twist\n     * @default 4\n     */\n    angle?: number;\n    /**\n     * The `x` and `y` offset coordinates to change the position of the center of the circle of effect.\n     * This should be a size 2 array or an object containing `x` and `y` values, you cannot change types\n     * once defined in the constructor\n     * @default {x:0,y:0}\n     */\n    offset?: PointData;\n}\n\n/**\n * This filter applies a twist effect making display objects appear twisted in the given direction.<br>\n * ![original](../screenshots/original.png)![filter](../screenshots/twist.png)\n *\n * @class\n * @extends Filter\n */\nexport class TwistFilter extends Filter\n{\n    /** Default values for options. */\n    public static readonly DEFAULT_OPTIONS: TwistFilterOptions = {\n        padding: 20,\n        radius: 200,\n        angle: 4,\n        offset: { x: 0, y: 0 },\n    };\n\n    public uniforms: {\n        uTwist: Float32Array;\n        uOffset: PointData;\n    };\n\n    /**\n     * @param options - Options for the TwistFilter constructor.\n     */\n    constructor(options?: Partial<TwistFilterOptions>)\n    {\n        options = { ...TwistFilter.DEFAULT_OPTIONS, ...options };\n\n        const gpuProgram = GpuProgram.from({\n            vertex: {\n                source: wgslVertex,\n                entryPoint: 'mainVertex',\n            },\n            fragment: {\n                source,\n                entryPoint: 'mainFragment',\n            },\n        });\n\n        const glProgram = GlProgram.from({\n            vertex,\n            fragment,\n            name: 'twist-filter',\n        });\n\n        super({\n            gpuProgram,\n            glProgram,\n            resources: {\n                twistUniforms: {\n                    uTwist: {\n                        value: [options.radius ?? 0, options.angle ?? 0],\n                        type: 'vec2<f32>'\n                    },\n                    uOffset: {\n                        value: options.offset,\n                        type: 'vec2<f32>'\n                    },\n                }\n            },\n            ...options,\n        });\n\n        this.uniforms = this.resources.twistUniforms.uniforms;\n    }\n\n    /**\n     * The radius of the twist\n     * @default 200\n     */\n    get radius(): number { return this.uniforms.uTwist[0]; }\n    set radius(value: number) { this.uniforms.uTwist[0] = value; }\n\n    /**\n     * The angle of the twist\n     * @default 4\n     */\n    get angle(): number { return this.uniforms.uTwist[1]; }\n    set angle(value: number) { this.uniforms.uTwist[1] = value; }\n\n    /**\n     * The `x` offset coordinate to change the position of the center of the circle of effect\n     * @default 0\n     */\n    get offset(): PointData { return this.uniforms.uOffset; }\n    set offset(value: PointData) { this.uniforms.uOffset = value; }\n\n    /**\n     * The `x` offset coordinate to change the position of the center of the circle of effect\n     * @default 0\n     */\n    get offsetX(): number { return this.offset.x; }\n    set offsetX(value: number) { this.offset.x = value; }\n\n    /**\n     * The `y` offset coordinate to change the position of the center of the circle of effect\n     * @default 0\n     */\n    get offsetY(): number { return this.offset.y; }\n    set offsetY(value: number) { this.offset.y = value; }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAuCO,MAAM,YAAA,GAAN,MAAM,YAAA,SAAoB,MACjC,CAAA;AAAA;AAAA;AAAA;AAAA,EAiBI,YAAY,OACZ,EAAA;AACI,IAAA,OAAA,GAAU,EAAE,GAAG,YAAY,CAAA,eAAA,EAAiB,GAAG,OAAQ,EAAA,CAAA;AAEvD,IAAM,MAAA,UAAA,GAAa,WAAW,IAAK,CAAA;AAAA,MAC/B,MAAQ,EAAA;AAAA,QACJ,MAAQ,EAAA,UAAA;AAAA,QACR,UAAY,EAAA,YAAA;AAAA,OAChB;AAAA,MACA,QAAU,EAAA;AAAA,QACN,MAAA;AAAA,QACA,UAAY,EAAA,cAAA;AAAA,OAChB;AAAA,KACH,CAAA,CAAA;AAED,IAAM,MAAA,SAAA,GAAY,UAAU,IAAK,CAAA;AAAA,MAC7B,MAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAM,EAAA,cAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAM,KAAA,CAAA;AAAA,MACF,UAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAW,EAAA;AAAA,QACP,aAAe,EAAA;AAAA,UACX,MAAQ,EAAA;AAAA,YACJ,OAAO,CAAC,OAAA,CAAQ,UAAU,CAAG,EAAA,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,YAC/C,IAAM,EAAA,WAAA;AAAA,WACV;AAAA,UACA,OAAS,EAAA;AAAA,YACL,OAAO,OAAQ,CAAA,MAAA;AAAA,YACf,IAAM,EAAA,WAAA;AAAA,WACV;AAAA,SACJ;AAAA,OACJ;AAAA,MACA,GAAG,OAAA;AAAA,KACN,CAAA,CAAA;AA7CL,IAAO,aAAA,CAAA,IAAA,EAAA,UAAA,CAAA,CAAA;AA+CH,IAAK,IAAA,CAAA,QAAA,GAAW,IAAK,CAAA,SAAA,CAAU,aAAc,CAAA,QAAA,CAAA;AAAA,GACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,MAAiB,GAAA;AAAE,IAAO,OAAA,IAAA,CAAK,QAAS,CAAA,MAAA,CAAO,CAAC,CAAA,CAAA;AAAA,GAAG;AAAA,EACvD,IAAI,OAAO,KAAe,EAAA;AAAE,IAAK,IAAA,CAAA,QAAA,CAAS,MAAO,CAAA,CAAC,CAAI,GAAA,KAAA,CAAA;AAAA,GAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAM7D,IAAI,KAAgB,GAAA;AAAE,IAAO,OAAA,IAAA,CAAK,QAAS,CAAA,MAAA,CAAO,CAAC,CAAA,CAAA;AAAA,GAAG;AAAA,EACtD,IAAI,MAAM,KAAe,EAAA;AAAE,IAAK,IAAA,CAAA,QAAA,CAAS,MAAO,CAAA,CAAC,CAAI,GAAA,KAAA,CAAA;AAAA,GAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5D,IAAI,MAAoB,GAAA;AAAE,IAAA,OAAO,KAAK,QAAS,CAAA,OAAA,CAAA;AAAA,GAAS;AAAA,EACxD,IAAI,OAAO,KAAkB,EAAA;AAAE,IAAA,IAAA,CAAK,SAAS,OAAU,GAAA,KAAA,CAAA;AAAA,GAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAM9D,IAAI,OAAkB,GAAA;AAAE,IAAA,OAAO,KAAK,MAAO,CAAA,CAAA,CAAA;AAAA,GAAG;AAAA,EAC9C,IAAI,QAAQ,KAAe,EAAA;AAAE,IAAA,IAAA,CAAK,OAAO,CAAI,GAAA,KAAA,CAAA;AAAA,GAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAMpD,IAAI,OAAkB,GAAA;AAAE,IAAA,OAAO,KAAK,MAAO,CAAA,CAAA,CAAA;AAAA,GAAG;AAAA,EAC9C,IAAI,QAAQ,KAAe,EAAA;AAAE,IAAA,IAAA,CAAK,OAAO,CAAI,GAAA,KAAA,CAAA;AAAA,GAAO;AACxD,CAAA,CAAA;AAAA;AA3FI,aAAA,CAHS,cAGc,iBAAsC,EAAA;AAAA,EACzD,OAAS,EAAA,EAAA;AAAA,EACT,MAAQ,EAAA,GAAA;AAAA,EACR,KAAO,EAAA,CAAA;AAAA,EACP,MAAQ,EAAA,EAAE,CAAG,EAAA,CAAA,EAAG,GAAG,CAAE,EAAA;AACzB,CAAA,CAAA,CAAA;AARG,IAAM,WAAN,GAAA;;;;"}