phaser4-rex-plugins
Version:
2 lines (1 loc) • 4.67 kB
JavaScript
var e,n;e=void 0,n=function(){const e="rexFilterCrt";class n extends Phaser.Renderer.WebGL.RenderNodes.BaseFilterShader{static FilterName=e;constructor(n){super(e,n,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 warp;\nuniform float scanLineStrength;\nuniform float scanLineWidth;\n\n#pragma phaserTemplate(fragmentHeader)\n\nvoid main (void) {\n // squared distance from center\n vec2 uv = outTexCoord;\n vec2 dc = abs(0.5-uv);\n dc *= dc;\n \n // warp the fragment coordinates\n uv.x -= 0.5; \n uv.x *= 1.0+(dc.y*warp.x);\n uv.x += 0.5;\n\n uv.y -= 0.5; \n uv.y *= 1.0+(dc.x*warp.y); \n uv.y += 0.5;\n\n // sample inside boundaries, otherwise set to black\n if (uv.y > 1.0 || uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0) {\n gl_FragColor = vec4(0.0,0.0,0.0,1.0);\n } else {\n // float apply = abs(sin(outTexCoord.y*scanLineWidth)*scanLineStrength);\n // gl_FragColor = vec4(mix(texture2D(uMainSampler,uv).rgb,vec3(0.0),apply),1.0);\n vec4 color = texture2D(uMainSampler,uv);\n color.rgb *= (1.-scanLineStrength)+(sin(outTexCoord.y*scanLineWidth)*scanLineStrength);\n gl_FragColor = color;\n }\n}\n")}setupUniforms(e,n){const t=this.programManager;t.setUniform("warp",[e.warpX,e.warpY]),t.setUniform("scanLineStrength",e.scanLineStrength),t.setUniform("scanLineWidth",e.scanLineWidth)}}const t=Phaser.Utils.Objects.GetValue;class r extends Phaser.Filters.Controller{static FilterName=e;constructor(n,t){super(n,e),this.warp=0,this.scanLineStrength=.2,this.scanLineWidth=1024,this.resetFromJSON(t)}resetFromJSON(e){return this.setWarp(t(e,"warpX",.75),t(e,"warpY",.75)),this.setScanStrength(t(e,"scanLineStrength",.2)),this.setScanLineWidth(t(e,"scanLineWidth",1024)),this}setWarp(e,n){return this.warpX=e,this.warpY=n,this}setScanStrength(e){return this.scanLineStrength=e,this}setScanLineWidth(e){return this.scanLineWidth=e,this}}const s=Phaser.Game;var i=function(e){return e instanceof s};const a=Phaser.Scene;var o=function(e){return e instanceof a},l=function(e,n){var t,r=n.FilterName,s=(t=e,null==t||"object"!=typeof t?null:i(t)?t:i(t.game)?t.game:o(t)?t.sys.game:o(t.scene)?t.scene.sys.game:void 0).renderer.renderNodes;return!s.hasNode(r)&&(s.addNodeConstructor(r,n),!0)},c=function(e,n){return void 0===n&&(n=!1),e.filters||e.enableFilters().focusFilters(),n?e.filters.external:e.filters.internal};const u=Phaser.Utils.Array.SpliceOne;class h extends Phaser.Plugins.BasePlugin{setFilterClass(e,n){return this.FilterClass=e,this.ControllerClass=n,this}setFilterListMethod(e,n){return function(e,n){var t=Phaser.GameObjects.Components.FilterList.prototype;t[e]||(t[e]=n)}(e,n),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,n,t=!1){return function(e,n,t,r){void 0===t&&(t={});var s=c(e,r),i=s.add(new n(s.camera,t));return t.name&&(i.name=t.name),i}(e,this.ControllerClass,n,t)}remove(e,n,t=!1){return function(e,n,t,r){var s=c(e,r).list;if(void 0===t)for(var i=s.length-1;i>=0;i--)(o=s[i])instanceof n&&(o.destroy(),u(o,i));else{i=0;for(var a=s.length;i<a;i++){var o;(o=s[i])instanceof n&&o.name===t&&(o.destroy(),u(o,i))}}}(e,this.ControllerClass,n,t),this}get(e,n,t=!1){return function(e,n,t,r){var s=c(e,r).list;if(void 0===t){for(var i=[],a=0,o=s.length;a<o;a++)(l=s[a])instanceof n&&i.push(l);return i}for(a=0,o=s.length;a<o;a++){var l;if((l=s[a])instanceof n&&l.name===t)return l}}(e,this.ControllerClass,n,t)}}var d=function(e){return null==e||""===e||0===e.length},f=function(e,n,t,r){if(void 0===r&&(r="."),"object"==typeof e){if(d(n)){if(null==t)return;"object"==typeof t&&(e=t)}else{"string"==typeof n&&(n=n.split(r));var s=n.pop(),i=function(e,n,t){var r=e;if(d(n));else{var s;"string"==typeof n&&(n=n.split("."));for(var i=0,a=n.length;i<a;i++){var o;null!=r[s=n[i]]&&"object"==typeof r[s]||(o=i===a-1?void 0===t?{}:t:{},r[s]=o),r=r[s]}}return r}(e,n);i[s]=t}return e}};return f(window,"RexPlugins.Filters.CrtFilter",n),f(window,"RexPlugins.Filters.CrtController",r),class extends h{constructor(e){super(e),this.setFilterClass(n,r),this.setFilterListMethod("addRexCrt",(function(e){return this.add(new r(this.camera,e))}))}}},"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).rexcrtfilterplugin=n();