@petkoneo/phaser3-rex-plugins
Version:
2 lines (1 loc) • 3.63 kB
JavaScript
var e,t;e=void 0,t=function(){var e=function(e){return e--,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e};const t=Phaser.GameObjects.Shader,s=Phaser.Utils.Array.Add,i=Phaser.Utils.Array.Remove;class r extends t{constructor(t,s,i,r,n,h){if("object"==typeof i){var o=i;({x:i,y:r,width:n,height:h}=o)}void 0===i&&(i=0),void 0===r&&(r=0),void 0===n&&(n=t.sys.scale.width),void 0===h&&(h=t.sys.scale.height),n=e(n),h=e(h);var a=t.make.renderTexture({x:i,y:r,width:n,height:h,add:!1});super(t,s,i,r,n,h),this.type="rexEffectLayer",this.setSampler2DBuffer("iChannel0",a.frame.glTexture,n,h,0).setScrollFactor(0).setOrigin(0),this.rt=a,this.children=[],this.boot()}boot(){this.scene.game.events.on("prerender",this.drawTargets,this),this.scene.sys.scale.on("resize",this.onWindowResize,this)}destroy(e){this.scene&&!this.ignoreDestroy&&(this.scene.game.events.off("prerender",this.drawTargets,this),this.scene.sys.scale.off("resize",this.onWindowResize,this),this.clear(),super.destroy(e),this.rt.destroy(e),this.rt=null)}drawTargets(){var e,t=this.scene.sys.cameras.main,s=t.scrollX+this.x,i=t.scrollY+this.y,r=this.rt;r.clear();for(var n=0,h=this.children.length;n<h;n++)e=this.children[n],r.draw(e,e.x-s,e.y-i)}set1f(e,t){return this.setUniform(`${e}.value`,t),this}set2f(e,t,s){return this.setUniform(`${e}.value.x`,t),this.setUniform(`${e}.value.y`,s),this}set3f(e,t,s,i){return this.setUniform(`${e}.value.x`,t),this.setUniform(`${e}.value.y`,s),this.setUniform(`${e}.value.z`,i),this}setFloat4(e,t,s,i,r){return this.setUniform(`${e}.value.x`,t),this.setUniform(`${e}.value.y`,s),this.setUniform(`${e}.value.z`,i),this.setUniform(`${e}.value.w`,r),this}contains(e){return-1!==this.children.indexOf(e)}add(e){return s(this.children,e,0,(function(e){e.once("destroy",this.onChildDestroy,this)}),this),this}remove(e,t){return void 0===t&&(t=!1),i(this.children,e,(function(e){e.off("destroy",this.onChildDestroy,this),t&&e.destroy()})),this}clear(e){for(var t,s=0,i=this.children.length;s<i;s++)(t=this.children[s]).off("destroy",this.onChildDestroy,this),e&&t.destroy();return this.children.length=0,this}onChildDestroy(e,t){this.remove(e,!t)}resize(t,s){t=e(t),s=e(s);var i=this.rt;return i.setSize(t,s),this.setSampler2DBuffer("iChannel0",i.frame.glTexture,t,s,0),this.setSize(t,s),this}onWindowResize(){var e=this.scene.sys.scale.width,t=this.scene.sys.scale.height;this.resize(e,t)}}function n(e,t,s,i,n){var h=new r(this.scene,e,t,s,i,n);return this.scene.add.existing(h),h}const h=Phaser.Utils.Objects.GetAdvancedValue;function o(e,t){void 0===e&&(e={}),void 0!==t&&(e.add=t);var s=h(e,"key",void 0),i=h(e,"x",void 0),n=h(e,"y",void 0),o=h(e,"width",void 0),a=h(e,"height",void 0),d=new r(this.scene,s,i,n,o,a);return this.scene.add.existing(d),d}var a=function(e){return null==e||""===e||0===e.length};class d extends Phaser.Plugins.BasePlugin{constructor(e){super(e),e.registerGameObject("rexEffectLayer",n,o)}start(){this.game.events.on("destroy",this.destroy,this)}}return function(e,t,s,i){if(void 0===i&&(i="."),"object"==typeof e)if(a(t)){if(null==s)return;"object"==typeof s&&(e=s)}else{"string"==typeof t&&(t=t.split(i));var r=t.pop(),n=function(e,t,s){var i=e;if(a(t));else{var r;"string"==typeof t&&(t=t.split("."));for(var n=0,h=t.length;n<h;n++){var o;null!=i[r=t[n]]&&"object"==typeof i[r]||(o=n===h-1?void 0===s?{}:s:{},i[r]=o),i=i[r]}}return i}(e,t);n[r]=s}}(window,"RexPlugins.GameObjects.EffectLayer",r),d},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).rexeffectlayerplugin=t();