UNPKG

phaser4-rex-plugins

Version:
2 lines (1 loc) 4.54 kB
var e,t;e=void 0,t=function(){const e="rexFilterFishEye";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 vec3 config;\nuniform vec2 texSize;\nuniform vec2 center;\n\n#pragma phaserTemplate(fragmentHeader)\n\nvoid main (void) {\n float mode = config.x;\n float radius = config.y;\n float intensity = config.z;\n\n vec2 tc = outTexCoord * texSize; \n tc -= center;\n float dist = length(tc) / radius;\n if (dist < 1.0) {\n float factor;\n if (mode > 0.0) {\n factor = sin(dist * 1.570795);\n } else {\n factor = asin(dist) / 1.570795;\n }\n tc *= mix(1.0, factor, intensity);\n }\n\n tc += center;\n gl_FragColor = texture2D(uMainSampler, tc / texSize);\n\n}\n")}setupUniforms(e,t){const n=this.programManager;n.setUniform("config",[e.fishEyeMode,e.radius,e.intensity]),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.fishEyeMode=0,this.radius=0,this.intensity=1,this.centerX=0,this.centerY=0,this.resetFromJSON(n)}resetFromJSON(e){return this.setFishEyeMode(n(e,"mode",0)),this.setRadius(n(e,"radius",0)),this.setCenter(n(e,"center.x",void 0),n(e,"center.y",void 0)),this.setIntensity(n(e,"intensity",1)),this}setFishEyeMode(e){return"string"==typeof e&&(e=s[e]),this.fishEyeMode=e,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}setIntensity(e){return this.intensity=e,this}}const s={asin:0,sin:1},i=Phaser.Game;var o=function(e){return e instanceof i};const a=Phaser.Scene;var l=function(e){return e instanceof a},c=function(e,t){var n,r=t.FilterName,s=(n=e,null==n||"object"!=typeof n?null:o(n)?n:o(n.game)?n.game:l(n)?n.sys.game:l(n.scene)?n.scene.sys.game:void 0).renderer.renderNodes;return!s.hasNode(r)&&(s.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 h=Phaser.Utils.Array.SpliceOne;class d 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?c(this.game,this.FilterClass):e.once("ready",(function(){c(this.game,this.FilterClass)}),this)}add(e,t,n=!1){return function(e,t,n,r){void 0===n&&(n={});var s=f(e,r),i=s.add(new t(s.camera,n));return n.name&&(i.name=n.name),i}(e,this.ControllerClass,t,n)}remove(e,t,n=!1){return function(e,t,n,r){var s=f(e,r).list;if(void 0===n)for(var i=s.length-1;i>=0;i--)(a=s[i])instanceof t&&(a.destroy(),h(a,i));else{i=0;for(var o=s.length;i<o;i++){var a;(a=s[i])instanceof t&&a.name===n&&(a.destroy(),h(a,i))}}}(e,this.ControllerClass,t,n),this}get(e,t,n=!1){return function(e,t,n,r){var s=f(e,r).list;if(void 0===n){for(var i=[],o=0,a=s.length;o<a;o++)(l=s[o])instanceof t&&i.push(l);return i}for(o=0,a=s.length;o<a;o++){var l;if((l=s[o])instanceof t&&l.name===n)return l}}(e,this.ControllerClass,t,n)}}var u=function(e){return null==e||""===e||0===e.length},m=function(e,t,n,r){if(void 0===r&&(r="."),"object"==typeof e){if(u(t)){if(null==n)return;"object"==typeof n&&(e=n)}else{"string"==typeof t&&(t=t.split(r));var s=t.pop(),i=function(e,t,n){var r=e;if(u(t));else{var s;"string"==typeof t&&(t=t.split("."));for(var i=0,o=t.length;i<o;i++){var a;null!=r[s=t[i]]&&"object"==typeof r[s]||(a=i===o-1?void 0===n?{}:n:{},r[s]=a),r=r[s]}}return r}(e,t);i[s]=n}return e}};return m(window,"RexPlugins.Filters.FishEyeFilter",t),m(window,"RexPlugins.Filters.FishEyeController",r),class extends d{constructor(e){super(e),this.setFilterClass(t,r),this.setFilterListMethod("addRexFishEye",(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).rexfisheyefilterplugin=t();