UNPKG

phaser4-rex-plugins

Version:
2 lines (1 loc) 4.91 kB
var t,e;t=void 0,e=function(){const t="rexCrossStitching";class e extends Phaser.Renderer.WebGL.RenderNodes.BaseFilterShader{static FilterName=t;constructor(e){super(t,e,null,"#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 stitchingSize;\nuniform float brightness;\n\nvoid main (void) {\n vec2 cPos = outTexCoord * texSize;\n int remX = int(mod(cPos.x, stitchingSize.x));\n int remY = int(mod(cPos.y, stitchingSize.y));\n vec2 tlPos;\n if (remX == 0 && remY == 0) {\n tlPos = cPos;\n } else {\n tlPos = floor(cPos / stitchingSize);\n tlPos.x = tlPos.x * stitchingSize.x;\n tlPos.y = tlPos.y * stitchingSize.y;\n }\n vec2 blPos = tlPos;\n blPos.y += (stitchingSize.y - 1.0);\n\n vec4 color0, color1;\n if (\n (remX == remY) || \n (((int(cPos.x) - int(blPos.x)) == (int(blPos.y) - int(cPos.y))))\n ) {\n color0 = texture2D(uMainSampler, tlPos * vec2(1.0/texSize.x, 1.0/texSize.y)) * 1.4;\n color1 = vec4(0.2, 0.15, 0.05, 1.0);\n } else {\n color0 = vec4(0.0, 0.0, 0.0, 1.0);\n color1 = texture2D(uMainSampler, tlPos * vec2(1.0/texSize.x, 1.0/texSize.y)) * 1.4; \n }\n gl_FragColor = mix(color0, color1, brightness);\n}\n")}setupUniforms(t,e){const i=this.programManager;i.setUniform("stitchingSize",[t.stitchingWidth,t.stitchingHeight]),i.setUniform("texSize",[e.width,e.height]),i.setUniform("brightness",t._brightness)}}const i=Phaser.Utils.Objects.GetValue,s=Phaser.Math.Clamp;class n extends Phaser.Filters.Controller{static FilterName=t;constructor(e,i){super(e,t),this.stitchingWidth=6,this.stitchingHeight=6,this._brightness=0,this.resetFromJSON(i)}resetFromJSON(t){return this.setStitchingSize(i(t,"stitchingWidth",6),i(t,"stitchingHeight",6)),this.setBrightness(i(t,"brightness",0)),this}setStitchingWidth(t){return this.stitchingWidth=t,this}setStitchingHeight(t){return this.stitchingHeight=t,this}setStitchingSize(t,e){return void 0===e&&(e=t),this.stitchingWidth=t,this.stitchingHeight=e,this}get brightness(){return this._brightness}set brightness(t){this._brightness=s(t,0,1)}setBrightness(t){return this.brightness=t,this}}const r=Phaser.Game;var o=function(t){return t instanceof r};const h=Phaser.Scene;var l=function(t){return t instanceof h},c=function(t,e){var i,s=e.FilterName,n=(i=t,null==i||"object"!=typeof i?null:o(i)?i:o(i.game)?i.game:l(i)?i.sys.game:l(i.scene)?i.scene.sys.game:void 0).renderer.renderNodes;return!n.hasNode(s)&&(n.addNodeConstructor(s,e),!0)},a=function(t,e){return void 0===e&&(e=!1),t.filters||t.enableFilters().focusFilters(),e?t.filters.external:t.filters.internal};const g=Phaser.Utils.Array.SpliceOne;class u extends Phaser.Plugins.BasePlugin{setFilterClass(t,e){return this.FilterClass=t,this.ControllerClass=e,this}setFilterListMethod(t,e){return function(t,e){var i=Phaser.GameObjects.Components.FilterList.prototype;i[t]||(i[t]=e)}(t,e),this}start(){var t=this.game.events;t.once("destroy",this.destroy,this),this.game.isRunning?c(this.game,this.FilterClass):t.once("ready",(function(){c(this.game,this.FilterClass)}),this)}add(t,e,i=!1){return function(t,e,i,s){void 0===i&&(i={});var n=a(t,s),r=n.add(new e(n.camera,i));return i.name&&(r.name=i.name),r}(t,this.ControllerClass,e,i)}remove(t,e,i=!1){return function(t,e,i,s){var n=a(t,s).list;if(void 0===i)for(var r=n.length-1;r>=0;r--)(h=n[r])instanceof e&&(h.destroy(),g(h,r));else{r=0;for(var o=n.length;r<o;r++){var h;(h=n[r])instanceof e&&h.name===i&&(h.destroy(),g(h,r))}}}(t,this.ControllerClass,e,i),this}get(t,e,i=!1){return function(t,e,i,s){var n=a(t,s).list;if(void 0===i){for(var r=[],o=0,h=n.length;o<h;o++)(l=n[o])instanceof e&&r.push(l);return r}for(o=0,h=n.length;o<h;o++){var l;if((l=n[o])instanceof e&&l.name===i)return l}}(t,this.ControllerClass,e,i)}}var f=function(t){return null==t||""===t||0===t.length},d=function(t,e,i,s){if(void 0===s&&(s="."),"object"==typeof t){if(f(e)){if(null==i)return;"object"==typeof i&&(t=i)}else{"string"==typeof e&&(e=e.split(s));var n=e.pop(),r=function(t,e,i){var s=t;if(f(e));else{var n;"string"==typeof e&&(e=e.split("."));for(var r=0,o=e.length;r<o;r++){var h;null!=s[n=e[r]]&&"object"==typeof s[n]||(h=r===o-1?void 0===i?{}:i:{},s[n]=h),s=s[n]}}return s}(t,e);r[n]=i}return t}};return d(window,"RexPlugins.Filters.CrossStitchingFilter",e),d(window,"RexPlugins.Filters.CrossStitchingController",n),class extends u{constructor(t){super(t),this.setFilterClass(e,n),this.setFilterListMethod("addRexCrossStitching",(function(t){return this.add(new n(this.camera,t))}))}}},"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).rexcrossstitchingfilterplugin=e();