phaser4-rex-plugins
Version:
2 lines (1 loc) • 4.57 kB
JavaScript
var e,t;e=void 0,t=function(){const e="rexFilterBarrel";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 vec4 config;\nuniform vec2 texSize;\nuniform vec2 center;\n\n#pragma phaserTemplate(fragmentHeader)\n\nvoid main (void) {\n float shrinkMode = config.x;\n float radius = config.y;\n float power = config.z;\n float intensity = config.w;\n vec2 tc = outTexCoord * texSize; \n tc -= center;\n float dist = length(tc) / radius;\n float factor = pow(dist, power);\n if (shrinkMode > 0.0) {\n factor = 1.0 / factor;\n }\n\n tc *= mix(1.0, factor, intensity);\n tc += center;\n gl_FragColor = texture2D(uMainSampler, tc / texSize);\n\n}\n")}setupUniforms(e,t){const r=this.programManager;var n=e.shrinkMode?1:0;r.setUniform("config",[n,e.radius,e.power,e.intensity]),r.setUniform("center",[e.centerX,e.centerY]),r.setUniform("texSize",[t.width,t.height])}}const r=Phaser.Utils.Objects.GetValue;class n extends Phaser.Filters.Controller{static FilterName=e;constructor(t,r){super(t,e),this.shrinkMode=!1,this.centerX=0,this.centerY=0,this.radius=0,this.power=1,this.intensity=1,this.resetFromJSON(r)}resetFromJSON(e){return this.setShrinkMode(r(e,"shrink",!1)),this.setRadius(r(e,"radius",0)),this.setCenter(r(e,"center.x",void 0),r(e,"center.y",void 0)),this.setPower(r(e,"power",.5)),this.setIntensity(r(e,"intensity",1)),this}setRadius(e){return this.radius=e,this}setCenter(e,t){return void 0===e&&(e=this.camera.centerX,t=this.camera.centerY),this.centerX=e,this.centerY=t,this}setPower(e){return this.power=e,this}setIntensity(e){return this.intensity=e,this}setShrinkMode(e){return void 0===e&&(e=!0),this.shrinkMode=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 r,n=t.FilterName,i=(r=e,null==r||"object"!=typeof r?null:s(r)?r:s(r.game)?r.game:a(r)?r.sys.game:a(r.scene)?r.scene.sys.game:void 0).renderer.renderNodes;return!i.hasNode(n)&&(i.addNodeConstructor(n,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 h=Phaser.Utils.Array.SpliceOne;class f 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?l(this.game,this.FilterClass):e.once("ready",(function(){l(this.game,this.FilterClass)}),this)}add(e,t,r=!1){return function(e,t,r,n){void 0===r&&(r={});var i=c(e,n),s=i.add(new t(i.camera,r));return r.name&&(s.name=r.name),s}(e,this.ControllerClass,t,r)}remove(e,t,r=!1){return function(e,t,r,n){var i=c(e,n).list;if(void 0===r)for(var s=i.length-1;s>=0;s--)(a=i[s])instanceof t&&(a.destroy(),h(a,s));else{s=0;for(var o=i.length;s<o;s++){var a;(a=i[s])instanceof t&&a.name===r&&(a.destroy(),h(a,s))}}}(e,this.ControllerClass,t,r),this}get(e,t,r=!1){return function(e,t,r,n){var i=c(e,n).list;if(void 0===r){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===r)return l}}(e,this.ControllerClass,t,r)}}var d=function(e){return null==e||""===e||0===e.length},u=function(e,t,r,n){if(void 0===n&&(n="."),"object"==typeof e){if(d(t)){if(null==r)return;"object"==typeof r&&(e=r)}else{"string"==typeof t&&(t=t.split(n));var i=t.pop(),s=function(e,t,r){var n=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!=n[i=t[s]]&&"object"==typeof n[i]||(a=s===o-1?void 0===r?{}:r:{},n[i]=a),n=n[i]}}return n}(e,t);s[i]=r}return e}};return u(window,"RexPlugins.Filters.BarrelFilter",t),u(window,"RexPlugins.Filters.BarrelController",n),class extends f{constructor(e){super(e),this.setFilterClass(t,n),this.setFilterListMethod("addRexBarrel",(function(e){return this.add(new n(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).rexbarrelfilterplugin=t();