UNPKG

phaser4-rex-plugins

Version:
2 lines (1 loc) 5.44 kB
var e,t;e=void 0,t=function(){const e="rexFilterWarp",t=Phaser.Game;var r=function(e){return e instanceof t};const s=Phaser.Scene;var n=function(e){return e instanceof s},i=function(e){return null==e||"object"!=typeof e?null:r(e)?e:r(e.game)?e.game:n(e)?e.sys.game:n(e.scene)?e.scene.sys.game:void 0};const a=36e5;var o=function(e,t){var r=t+i(e).loop.delta;return r>=a&&(r-=a),r};class u 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 amplitude;\nuniform vec2 frequency;\nuniform vec2 speed;\nuniform float time;\n\n#pragma phaserTemplate(fragmentHeader)\n\nvoid main (void) {\n vec2 dxy = frequency/texSize;\n vec2 r = amplitude/texSize;\n vec2 spd = speed/texSize;\n vec2 angle = (outTexCoord / dxy) + (spd*time);\n vec2 tc = (vec2(cos(angle.x),sin(angle.y)) * r) + outTexCoord;\n gl_FragColor = texture2D(uMainSampler, tc);\n}\n")}setupUniforms(e,t){const r=this.programManager;e.speedEnable&&(e.now=o(this.manager.renderer.game,e.now)),r.setUniform("frequency",[e.frequencyX,e.frequencyY]),r.setUniform("amplitude",[e.amplitudeX,e.amplitudeY]),r.setUniform("speed",[e.speed.x,e.speed.y]),r.setUniform("time",e.now),r.setUniform("texSize",[t.width,t.height])}}const l=Phaser.Math.Vector2,d=Phaser.Utils.Objects.GetValue;class h extends Phaser.Filters.Controller{static FilterName=e;constructor(t,r){super(t,e),this.frequencyX=10,this.frequencyY=10,this.amplitudeX=10,this.amplitudeY=10,this.speedEnable=!1,this.now=0,this.speed=new l(0,0),this.resetFromJSON(r)}resetFromJSON(e){var t=d(e,"frequency",10);this.setFrequency(d(e,"frequencyX",t),d(e,"frequencyY",t));var r=d(e,"amplitude",10);this.setAmplitude(d(e,"amplitudeX",r),d(e,"amplitudeY",r));var s=d(e,"speed",0);return this.setSpeed(d(e,"speedX",s),d(e,"speedY",s)),this.setSpeedEnable(d(e,"speedEnable",0!==this.speedX||0!==this.speedY)),this}setFrequencyX(e){return this.frequencyX=e,this}setFrequencyY(e){return this.frequencyY=e,this}setFrequency(e,t){return void 0===t&&(t=e),this.frequencyX=e,this.frequencyY=t,this}get frequency(){return(this.frequencyX+this.frequencyY)/2}set frequency(e){this.frequencyX=e,this.frequencyY=e}setAmplitudeX(e){return this.amplitudeX=e,this}setAmplitudeY(e){return this.amplitudeY=e,this}setAmplitude(e,t){return void 0===t&&(t=e),this.amplitudeX=e,this.amplitudeY=t,this}get amplitude(){return(this.amplitudeX+this.amplitudeY)/2}set amplitude(e){this.amplitudeX=e,this.amplitudeY=e}setSpeedX(e){return this.speedX=e,this}setSpeedY(e){return this.speed.y=e,this}get speedX(){return this.speed.x}set speedX(e){this.speed.x=e}get speedY(){return this.speed.y}set speedY(e){this.speed.y=e}setSpeed(e,t){return void 0===t&&(t=e),this.speedX=e,this.speedY=t,this}setSpeedEnable(e){return void 0===e&&(e=!0),this.speedEnable=e,this}}var p=function(e,t){var r=t.FilterName,s=i(e).renderer.renderNodes;return!s.hasNode(r)&&(s.addNodeConstructor(r,t),!0)},c=function(e,t){return void 0===t&&(t=!1),e.filters||e.enableFilters().focusFilters(),t?e.filters.external:e.filters.internal};const f=Phaser.Utils.Array.SpliceOne;class m extends Phaser.Plugins.BasePlugin{setFilterClass(e,t){return this.FilterClass=e,this.ControllerClass=t,this}setFilterListMethod(e,t){return function(e,t){var r=Phaser.GameObjects.Components.FilterList.prototype;r[e]||(r[e]=t)}(e,t),this}start(){var e=this.game.events;e.once("destroy",this.destroy,this),this.game.isRunning?p(this.game,this.FilterClass):e.once("ready",(function(){p(this.game,this.FilterClass)}),this)}add(e,t,r=!1){return function(e,t,r,s){void 0===r&&(r={});var n=c(e,s),i=n.add(new t(n.camera,r));return r.name&&(i.name=r.name),i}(e,this.ControllerClass,t,r)}remove(e,t,r=!1){return function(e,t,r,s){var n=c(e,s).list;if(void 0===r)for(var i=n.length-1;i>=0;i--)(o=n[i])instanceof t&&(o.destroy(),f(o,i));else{i=0;for(var a=n.length;i<a;i++){var o;(o=n[i])instanceof t&&o.name===r&&(o.destroy(),f(o,i))}}}(e,this.ControllerClass,t,r),this}get(e,t,r=!1){return function(e,t,r,s){var n=c(e,s).list;if(void 0===r){for(var i=[],a=0,o=n.length;a<o;a++)(u=n[a])instanceof t&&i.push(u);return i}for(a=0,o=n.length;a<o;a++){var u;if((u=n[a])instanceof t&&u.name===r)return u}}(e,this.ControllerClass,t,r)}}var v=function(e){return null==e||""===e||0===e.length},y=function(e,t,r,s){if(void 0===s&&(s="."),"object"==typeof e){if(v(t)){if(null==r)return;"object"==typeof r&&(e=r)}else{"string"==typeof t&&(t=t.split(s));var n=t.pop(),i=function(e,t,r){var s=e;if(v(t));else{var n;"string"==typeof t&&(t=t.split("."));for(var i=0,a=t.length;i<a;i++){var o;null!=s[n=t[i]]&&"object"==typeof s[n]||(o=i===a-1?void 0===r?{}:r:{},s[n]=o),s=s[n]}}return s}(e,t);i[n]=r}return e}};return y(window,"RexPlugins.Filters.WarpFilter",u),y(window,"RexPlugins.Filters.WarpController",h),class extends m{constructor(e){super(e),this.setFilterClass(u,h),this.setFilterListMethod("addRexWarp",(function(e){return this.add(new h(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).rexwarpfilterplugin=t();