UNPKG

phaser4-rex-plugins

Version:
2 lines (1 loc) 4.95 kB
var e,t;e=void 0,t=function(){const e="rexFilterShockwave";class t extends Phaser.Renderer.WebGL.RenderNodes.BaseFilterShader{static FilterName=e;constructor(t){super(e,t,null,"#pragma phaserTemplate(shaderName)\n\n#ifdef GL_FRAGMENT_PRECISION_HIGH\n#define highmedp highp\n#else\n#define highmedp mediump\n#endif\nprecision highmedp float;\n\n// Scene buffer\nuniform sampler2D uMainSampler; \nvarying vec2 outTexCoord;\n\n// Effect parameters\nuniform vec2 texSize;\nuniform vec2 center;\nuniform vec2 waveConfig;\nuniform vec2 powConfig;\n\n#pragma phaserTemplate(fragmentHeader)\n\nvoid main (void) {\n float waveRadius = waveConfig.x;\n float waveHalfWidth = waveConfig.y;\n float powBaseScale = powConfig.x;\n float powExponent = powConfig.y;\n\n if (waveHalfWidth > 0.0) {\n vec2 tc = outTexCoord * texSize;\n tc -= center;\n\n float diff = length(tc) - waveRadius;\n if ((diff <= waveHalfWidth) && (diff >= -waveHalfWidth)) {\n diff /= max(texSize.x, texSize.y);\n float powDiff = 1.0 - pow(abs(diff*powBaseScale), powExponent);\n tc += texSize * diff * powDiff;\n }\n\n tc += center;\n gl_FragColor = texture2D(uMainSampler, tc / texSize);\n } else {\n gl_FragColor = texture2D(uMainSampler, outTexCoord);\n }\n}\n")}setupUniforms(e,t){const n=this.programManager;n.setUniform("waveConfig",[e.waveRadius,e.waveWidth/2]),n.setUniform("powConfig",[e.powBaseScale,e.powExponent]),n.setUniform("center",[e.centerX,e.centerY]),n.setUniform("texSize",[t.width,t.height])}}const n=Phaser.Utils.Objects.GetValue;class r extends Phaser.Filters.Controller{static FilterName=e;constructor(t,n){super(t,e),this.centerX=0,this.centerY=0,this.waveWidth=20,this.powBaseScale=.8,this.powExponent=.1,this.resetFromJSON(n)}resetFromJSON(e){return this.setCenter(n(e,"center.x",void 0),n(e,"center.y",void 0)),this.setWaveRadius(n(e,"waveRadius",0)),this.setWaveWidth(n(e,"waveWidth",20)),this.setPowBaseScale(n(e,"powBaseScale",.8)),this.setPowExponent(n(e,"powExponent",.1)),this}setCenter(e,t){return void 0===e&&(e=this.camera.centerX,t=this.camera.centerY),this.centerX=e,this.centerY=t,this}setWaveRadius(e){return void 0===e&&(e=0),this.waveRadius=e,this}setWaveWidth(e){return void 0===e&&(e=0),this.waveWidth=e,this}setPowBaseScale(e){return this.powBaseScale=e,this}setPowExponent(e){return this.powExponent=e,this}}const i=Phaser.Game;var s=function(e){return e instanceof i};const o=Phaser.Scene;var a=function(e){return e instanceof o},l=function(e,t){var n,r=t.FilterName,i=(n=e,null==n||"object"!=typeof n?null:s(n)?n:s(n.game)?n.game:a(n)?n.sys.game:a(n.scene)?n.scene.sys.game:void 0).renderer.renderNodes;return!i.hasNode(r)&&(i.addNodeConstructor(r,t),!0)},f=function(e,t){return void 0===t&&(t=!1),e.filters||e.enableFilters().focusFilters(),t?e.filters.external:e.filters.internal};const c=Phaser.Utils.Array.SpliceOne;class h extends Phaser.Plugins.BasePlugin{setFilterClass(e,t){return this.FilterClass=e,this.ControllerClass=t,this}setFilterListMethod(e,t){return function(e,t){var n=Phaser.GameObjects.Components.FilterList.prototype;n[e]||(n[e]=t)}(e,t),this}start(){var e=this.game.events;e.once("destroy",this.destroy,this),this.game.isRunning?l(this.game,this.FilterClass):e.once("ready",(function(){l(this.game,this.FilterClass)}),this)}add(e,t,n=!1){return function(e,t,n,r){void 0===n&&(n={});var i=f(e,r),s=i.add(new t(i.camera,n));return n.name&&(s.name=n.name),s}(e,this.ControllerClass,t,n)}remove(e,t,n=!1){return function(e,t,n,r){var i=f(e,r).list;if(void 0===n)for(var s=i.length-1;s>=0;s--)(a=i[s])instanceof t&&(a.destroy(),c(a,s));else{s=0;for(var o=i.length;s<o;s++){var a;(a=i[s])instanceof t&&a.name===n&&(a.destroy(),c(a,s))}}}(e,this.ControllerClass,t,n),this}get(e,t,n=!1){return function(e,t,n,r){var i=f(e,r).list;if(void 0===n){for(var s=[],o=0,a=i.length;o<a;o++)(l=i[o])instanceof t&&s.push(l);return s}for(o=0,a=i.length;o<a;o++){var l;if((l=i[o])instanceof t&&l.name===n)return l}}(e,this.ControllerClass,t,n)}}var d=function(e){return null==e||""===e||0===e.length},u=function(e,t,n,r){if(void 0===r&&(r="."),"object"==typeof e){if(d(t)){if(null==n)return;"object"==typeof n&&(e=n)}else{"string"==typeof t&&(t=t.split(r));var i=t.pop(),s=function(e,t,n){var r=e;if(d(t));else{var i;"string"==typeof t&&(t=t.split("."));for(var s=0,o=t.length;s<o;s++){var a;null!=r[i=t[s]]&&"object"==typeof r[i]||(a=s===o-1?void 0===n?{}:n:{},r[i]=a),r=r[i]}}return r}(e,t);s[i]=n}return e}};return u(window,"RexPlugins.Filters.ShockwaveFilter",t),u(window,"RexPlugins.Filters.ShockwaveController",r),class extends h{constructor(e){super(e),this.setFilterClass(t,r),this.setFilterListMethod("addRexShockwave",(function(e){return this.add(new r(this.camera,e))}))}}},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).rexshockwavefilterplugin=t();