{"version":3,"file":"MaskEffectManager.mjs","sources":["../../../src/rendering/mask/MaskEffectManager.ts"],"sourcesContent":["import { extensions, ExtensionType } from '../../extensions/Extensions';\nimport { BigPool } from '../../utils/pool/PoolGroup';\n\nimport type { Effect, EffectConstructor } from '../../scene/container/Effect';\nimport type { PoolItem, PoolItemConstructor } from '../../utils/pool/Pool';\n\ninterface MaskConversionTest\n{\n    test: (item: any) => boolean;\n    maskClass: new (item: any) => Effect & PoolItem;\n}\n\n/**\n * Represents a mask effect that can be applied to a container.\n * @category rendering\n * @advanced\n */\nexport type MaskEffect = {mask: unknown} & Effect;\n\n/**\n * A class that manages the conversion of masks to mask effects.\n * @category rendering\n * @ignore\n */\nexport class MaskEffectManagerClass\n{\n    /** @private */\n    public readonly _effectClasses: EffectConstructor[] = [];\n    private readonly _tests: MaskConversionTest[] = [];\n    private _initialized = false;\n\n    public init()\n    {\n        if (this._initialized) return;\n\n        this._initialized = true;\n\n        this._effectClasses.forEach((test) =>\n        {\n            this.add({\n                test: test.test,\n                maskClass: test\n            });\n        });\n    }\n\n    public add(test: MaskConversionTest)\n    {\n        this._tests.push(test);\n    }\n\n    public getMaskEffect(item: any): MaskEffect\n    {\n        if (!this._initialized) this.init();\n\n        for (let i = 0; i < this._tests.length; i++)\n        {\n            const test = this._tests[i];\n\n            if (test.test(item))\n            {\n                return BigPool.get(test.maskClass as PoolItemConstructor<MaskEffect & PoolItem>, item);\n            }\n        }\n\n        return item;\n    }\n\n    public returnMaskEffect(effect: Effect & PoolItem)\n    {\n        BigPool.return(effect);\n    }\n}\n\n/**\n * A class that manages the conversion of masks to mask effects.\n * @class\n * @category rendering\n * @advanced\n */\nexport const MaskEffectManager = new MaskEffectManagerClass();\n\n// Handle registration of extensions\nextensions\n    .handleByList(ExtensionType.MaskEffect, MaskEffectManager._effectClasses);\n"],"names":[],"mappings":";;;;AAwBO,MAAM,sBAAA,CACb;AAAA,EADO,WAAA,GAAA;AAGH;AAAA,IAAA,IAAA,CAAgB,iBAAsC,EAAC;AACvD,IAAA,IAAA,CAAiB,SAA+B,EAAC;AACjD,IAAA,IAAA,CAAQ,YAAA,GAAe,KAAA;AAAA,EAAA;AAAA,EAEhB,IAAA,GACP;AACI,IAAA,IAAI,KAAK,YAAA,EAAc;AAEvB,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AAEpB,IAAA,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,CAAC,IAAA,KAC7B;AACI,MAAA,IAAA,CAAK,GAAA,CAAI;AAAA,QACL,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,SAAA,EAAW;AAAA,OACd,CAAA;AAAA,IACL,CAAC,CAAA;AAAA,EACL;AAAA,EAEO,IAAI,IAAA,EACX;AACI,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,EACzB;AAAA,EAEO,cAAc,IAAA,EACrB;AACI,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,EAAc,IAAA,CAAK,IAAA,EAAK;AAElC,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EACxC;AACI,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAE1B,MAAA,IAAI,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,EAClB;AACI,QAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,EAAyD,IAAI,CAAA;AAAA,MACzF;AAAA,IACJ;AAEA,IAAA,OAAO,IAAA;AAAA,EACX;AAAA,EAEO,iBAAiB,MAAA,EACxB;AACI,IAAA,OAAA,CAAQ,OAAO,MAAM,CAAA;AAAA,EACzB;AACJ;AAQO,MAAM,iBAAA,GAAoB,IAAI,sBAAA;AAGrC,UAAA,CACK,YAAA,CAAa,aAAA,CAAc,UAAA,EAAY,iBAAA,CAAkB,cAAc,CAAA;;;;"}