UNPKG

@petkoneo/phaser3-rex-plugins

Version:
2 lines (1 loc) 4.42 kB
var e,t;e=void 0,t=function(){const e=Phaser.Renderer.WebGL.Pipelines.PostFXPipeline,t=Phaser.Utils.Objects.GetValue;Phaser.Math.Clamp;class n extends e{constructor(e){super({name:"rexShockwavePostFx",game:e,renderTarget:!0,fragShader:"#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 float waveRadius;\nuniform float waveHalfWidth; // 10.0\nuniform float powBaseScale; // 0.8\nuniform float powExponent; // 0.1\n\nvoid main (void) {\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"}),this.centerX=0,this.centerY=0,this.waveWidth=20,this.powBaseScale=.8,this.powExponent=.1}resetFromJSON(e){return this.setCenter(t(e,"center.x",void 0),t(e,"center.y",void 0)),this.setWaveRadius(t(e,"waveRadius",0)),this.setWaveWidth(t(e,"waveWidth",20)),this.setPowBaseScale(t(e,"powBaseScale",.8)),this.setPowExponent(t(e,"powExponent",.1)),this}onPreRender(){this.set1f("waveRadius",this.waveRadius),this.set1f("waveHalfWidth",this.waveWidth/2),this.set1f("powBaseScale",this.powBaseScale),this.set1f("powExponent",this.powExponent);var e=this.renderer.width,t=this.renderer.height;this.set2f("center",this.centerX,t-this.centerY),this.set2f("texSize",e,t)}setCenter(e,t){return void 0===e&&(e=this.renderer.width/2,t=this.renderer.height/2),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 r=function(e){return e instanceof o},a=function(e,t,n){var i;(i=e,null==i||"object"!=typeof i?null:s(i)?i:s(i.game)?i.game:r(i)?i.sys.game:r(i.scene)?i.scene.sys.game:void 0).renderer.pipelines.addPostPipeline(t,n)};const l=Phaser.Utils.Array.SpliceOne;class h extends Phaser.Plugins.BasePlugin{setPostPipelineClass(e,t){return this.PostFxPipelineClass=e,this.postFxPipelineName=t,this}start(){this.game.events.once("destroy",this.destroy,this),a(this.game,this.postFxPipelineName,this.PostFxPipelineClass)}add(e,t){return function(e,t,n){void 0===n&&(n={}),e.setPostPipeline(t);var i=e.postPipelines[e.postPipelines.length-1];return i.resetFromJSON(n),n.name&&(i.name=n.name),i}(e,this.PostFxPipelineClass,t)}remove(e,t){return function(e,t,n){if(void 0===n)for(var i=(s=e.postPipelines).length-1;i>=0;i--)(r=s[i])instanceof t&&(r.destroy(),l(s,i));else{i=0;for(var s,o=(s=e.postPipelines).length;i<o;i++){var r;(r=s[i])instanceof t&&r.name===n&&(r.destroy(),l(s,i))}}e.hasPostPipeline=e.postPipelines.length>0}(e,this.PostFxPipelineClass,t),this}get(e,t){return function(e,t,n){if(void 0===n){for(var i=[],s=0,o=(r=e.postPipelines).length;s<o;s++)(a=r[s])instanceof t&&i.push(a);return i}var r;for(s=0,o=(r=e.postPipelines).length;s<o;s++){var a;if((a=r[s])instanceof t&&a.name===n)return a}}(e,this.PostFxPipelineClass,t)}}var f=function(e){return null==e||""===e||0===e.length};return function(e,t,n,i){if(void 0===i&&(i="."),"object"==typeof e)if(f(t)){if(null==n)return;"object"==typeof n&&(e=n)}else{"string"==typeof t&&(t=t.split(i));var s=t.pop(),o=function(e,t,n){var i=e;if(f(t));else{var s;"string"==typeof t&&(t=t.split("."));for(var o=0,r=t.length;o<r;o++){var a;null!=i[s=t[o]]&&"object"==typeof i[s]||(a=o===r-1?void 0===n?{}:n:{},i[s]=a),i=i[s]}}return i}(e,t);o[s]=n}}(window,"RexPlugins.Pipelines.ShockwavePostFx",n),class extends h{constructor(e){super(e),this.setPostPipelineClass(n,"rexShockwavePostFx")}}},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).rexshockwavepipelineplugin=t();