phaser3-rex-plugins
Version:
2 lines (1 loc) • 4.84 kB
JavaScript
var e,t;e=void 0,t=function(){const e=Phaser.Game;var t=function(t){return t instanceof e};const s=Phaser.Scene;var i=function(e){return e instanceof s},n=function(e){return null==e||"object"!=typeof e?null:t(e)?e:t(e.game)?e.game:i(e)?e.sys.game:i(e.scene)?e.scene.sys.game:void 0};const r=Phaser.Renderer.WebGL.Pipelines.PostFXPipeline,p=Phaser.Math.Vector2,u=Phaser.Utils.Objects.GetValue;class a extends r{constructor(e){super({name:"rexWarpPostFx",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 amplitude;\nuniform vec2 frequency;\nuniform vec2 speed;\nuniform float time;\n\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"}),this.frequencyX=10,this.frequencyY=10,this.amplitudeX=10,this.amplitudeY=10,this.speedEnable=!1,this.now=0,this.speed=new p(0,0)}resetFromJSON(e){var t=u(e,"frequency",10);this.setFrequency(u(e,"frequencyX",t),u(e,"frequencyY",t));var s=u(e,"amplitude",10);this.setAmplitude(u(e,"amplitudeX",s),u(e,"amplitudeY",s));var i=u(e,"speed",0);return this.setSpeed(u(e,"speedX",i),u(e,"speedY",i)),this.setSpeedEnable(u(e,"speedEnable",0!==this.speedX||0!==this.speedY)),this}onPreRender(){var e;this.speedEnable&&(this.now+=(e=this.game,n(e).loop.delta)),this.set2f("frequency",this.frequencyX,this.frequencyY),this.set2f("amplitude",this.amplitudeX,this.amplitudeY),this.set2f("speed",this.speed.x,this.speed.y),this.set1f("time",this.now),this.set2f("texSize",this.renderer.width,this.renderer.height)}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}}const o=Phaser.Utils.Array.SpliceOne;class d extends Phaser.Plugins.BasePlugin{setPostPipelineClass(e,t){return this.PostFxPipelineClass=e,this.postFxPipelineName=t,this}start(){var e,t,s;this.game.events.once("destroy",this.destroy,this),e=this.game,t=this.postFxPipelineName,s=this.PostFxPipelineClass,n(e).renderer.pipelines.addPostPipeline(t,s)}add(e,t){return function(e,t,s){void 0===s&&(s={}),e.setPostPipeline(t);var i=e.postPipelines[e.postPipelines.length-1];return i.resetFromJSON(s),s.name&&(i.name=s.name),i}(e,this.PostFxPipelineClass,t)}remove(e,t){return function(e,t,s){if(void 0===s)for(var i=(n=e.postPipelines).length-1;i>=0;i--)(p=n[i])instanceof t&&(p.destroy(),o(n,i));else{i=0;for(var n,r=(n=e.postPipelines).length;i<r;i++){var p;(p=n[i])instanceof t&&p.name===s&&(p.destroy(),o(n,i))}}e.hasPostPipeline=e.postPipelines.length>0}(e,this.PostFxPipelineClass,t),this}get(e,t){return function(e,t,s){if(void 0===s){for(var i=[],n=0,r=(p=e.postPipelines).length;n<r;n++)(u=p[n])instanceof t&&i.push(u);return i}var p;for(n=0,r=(p=e.postPipelines).length;n<r;n++){var u;if((u=p[n])instanceof t&&u.name===s)return u}}(e,this.PostFxPipelineClass,t)}}var h=function(e){return null!==e&&"object"==typeof e};return function(e,t,s,i="."){if(!h(e))return e;if(function(e){return null==e}(t)||""===t||Array.isArray(t)&&0===t.length)return e;if("string"==typeof t&&-1===t.indexOf(i)||"number"==typeof t)return e[t]=s,e;var n=function(e,t){return Array.isArray(e)||(e="string"!=typeof e||""===e.trim()?[]:e.split(t).filter(Boolean)),e}(t,i);if(0===n.length)return e;for(var r=e,p=n.length,u=0;u<p-1;u++){var a=n[u],o=r[a];h(o)||(r[a]={}),r=r[a]}r[n[p-1]]=s}(window,"RexPlugins.Pipelines.WarpPostFx",a),class extends d{constructor(e){super(e),this.setPostPipelineClass(a,"rexWarpPostFx")}}},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).rexwarppipelineplugin=t();