@petkoneo/phaser3-rex-plugins
Version:
2 lines (1 loc) • 4.81 kB
JavaScript
var e,t;e=void 0,t=function(){var e={setEventEmitter(e,t){return void 0===t&&(t=Phaser.Events.EventEmitter),this._privateEE=!0===e||void 0===e,this._eventEmitter=this._privateEE?new t:e,this},destroyEventEmitter(){return this._eventEmitter&&this._privateEE&&this._eventEmitter.shutdown(),this},getEventEmitter(){return this._eventEmitter},on(){return this._eventEmitter&&this._eventEmitter.on.apply(this._eventEmitter,arguments),this},once(){return this._eventEmitter&&this._eventEmitter.once.apply(this._eventEmitter,arguments),this},off(){return this._eventEmitter&&this._eventEmitter.off.apply(this._eventEmitter,arguments),this},emit(e){return this._eventEmitter&&e&&this._eventEmitter.emit.apply(this._eventEmitter,arguments),this},addListener(){return this._eventEmitter&&this._eventEmitter.addListener.apply(this._eventEmitter,arguments),this},removeListener(){return this._eventEmitter&&this._eventEmitter.removeListener.apply(this._eventEmitter,arguments),this},removeAllListeners(){return this._eventEmitter&&this._eventEmitter.removeAllListeners.apply(this._eventEmitter,arguments),this},listenerCount(){return this._eventEmitter?this._eventEmitter.listenerCount.apply(this._eventEmitter,arguments):0},listeners(){return this._eventEmitter?this._eventEmitter.listeners.apply(this._eventEmitter,arguments):[]},eventNames(){return this._eventEmitter?this._eventEmitter.eventNames.apply(this._eventEmitter,arguments):[]}};const t=Phaser.Scene;var s=function(e){return e instanceof t};const n=Phaser.Game;var i=function(e){return e instanceof n};const r=Phaser.Utils.Objects.GetValue;class a{constructor(e,t){this.setParent(e),this.isShutdown=!1,this.setEventEmitter(r(t,"eventEmitter",!0)),this.parent&&(this.parent===this.scene?this.scene.sys.events.once("shutdown",this.onEnvDestroy,this):this.parent===this.game?this.game.events.once("shutdown",this.onEnvDestroy,this):this.parent.once&&this.parent.once("destroy",this.onParentDestroy,this))}shutdown(e){this.isShutdown||(this.parent&&(this.parent===this.scene?this.scene.sys.events.off("shutdown",this.onEnvDestroy,this):this.parent===this.game?this.game.events.off("shutdown",this.onEnvDestroy,this):this.parent.once&&this.parent.off("destroy",this.onParentDestroy,this)),this.destroyEventEmitter(),this.parent=void 0,this.scene=void 0,this.game=void 0,this.isShutdown=!0)}destroy(e){this.shutdown(e)}onEnvDestroy(){this.destroy(!0)}onParentDestroy(e,t){this.destroy(t)}setParent(e){var t;return this.parent=e,this.scene=null==(t=e)||"object"!=typeof t?null:s(t)?t:t.scene&&s(t.scene)?t.scene:t.parent&&t.parent.scene&&s(t.parent.scene)?t.parent.scene:null,this.game=function(e){return null==e||"object"!=typeof e?null:i(e)?e:i(e.game)?e.game:s(e)?e.sys.game:s(e.scene)?e.scene.sys.game:void 0}(e),this}}Object.assign(a.prototype,e);var h="localMask";class o extends Phaser.Renderer.WebGL.Pipelines.PreFXPipeline{constructor(e){super({game:e,fragShader:"\nprecision mediump float;\nuniform sampler2D uMainSampler;\nuniform sampler2D uMaskSampler;\nvarying vec2 outTexCoord;\n\nvoid main ()\n{\n vec4 color = texture2D(uMainSampler, outTexCoord);\n vec4 maskColor = texture2D(uMaskSampler, outTexCoord);\n gl_FragColor = vec4(color.rgb * maskColor.a, color.a * maskColor.a);\n}\n"})}onDraw(e){var t=this.tempSprite[h].maskGLTexture;this.set1i("uMainSampler",0),this.set1i("uMaskSampler",1),this.bindTexture(t,1),super.onDraw(e)}static setControllerKey(e){h=e}}const m=Phaser.Utils.Objects.GetValue,l="RexLocalMaskFx";var u="rexLocalMask";class v extends a{constructor(e,t){super(e,{eventEmitter:!1});var s=this.scene,n=s.sys.renderer.pipelines,i=n.get(l);i||(u=m(t,"controllerKey",u),o.setControllerKey(u),i=n.add(l,new o(s.game))),this.pipelineInstance=i,this.textures=s.sys.textures,this.parent[u]=this,this.setMaskTexture(m(t,"key"),m(t,"frame")),this.setEnable(m(t,"enable",!0))}shutdown(e){this.pipelineInstance=void 0,this.textures=void 0,this.maskFrame=void 0,this.maskGLTexture=void 0,super.shutdown(e)}get controllerKey(){return u}get enable(){return this._enable}set enable(e){if(e!==this._enable){this._enable=e;var t=this.parent,s=t.pipeline;e?s!==this.pipelineInstance&&t.setPipeline(this.pipelineInstance):s===this.pipelineInstance&&t.resetPipeline()}}setEnable(e){return void 0===e&&(e=!0),this.enable=e,this}setMaskTexture(e,t){return this.maskKey=e,this.maskFrameName=t,this.maskFrame=this.textures.getFrame(e,t),this.maskGLTexture=this.maskFrame.glTexture,this}}class p extends Phaser.Plugins.BasePlugin{constructor(e){super(e)}start(){this.game.events.on("destroy",this.destroy,this)}add(e,t){return new v(e,t)}}return p},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).rexlocalmaskplugin=t();