phaser4-rex-plugins
Version:
2 lines (1 loc) • 18.5 kB
JavaScript
var e,t;e=void 0,t=function(){const e=Phaser.Game;var t=function(t){return t instanceof e};const r=Phaser.Scene;var s=function(e){return e instanceof r},n=function(e){return null==e||"object"!=typeof e?null:t(e)?e:t(e.game)?e.game:s(e)?e.sys.game:s(e.scene)?e.scene.sys.game:void 0},o=function(e,t){var r=t.FilterName,s=n(e).renderer.renderNodes;return!s.hasNode(r)&&(s.addNodeConstructor(r,t),!0)},i=function(e,t){var r=Phaser.GameObjects.Components.FilterList.prototype;r[e]||(r[e]=t)};const a="FilterP3BloomStep";class h extends Phaser.Renderer.WebGL.RenderNodes.BaseFilterShader{static FilterName=a;constructor(e){super(a,e,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 offset;\nuniform float strength;\nuniform vec3 color;\n\n#pragma phaserTemplate(fragmentHeader)\n\nvoid main (void) {\n vec4 sum = texture2D(uMainSampler, outTexCoord) * 0.204164 * strength;\n\n sum = sum + texture2D(uMainSampler, outTexCoord + offset * 1.407333) * 0.304005;\n sum = sum + texture2D(uMainSampler, outTexCoord - offset * 1.407333) * 0.304005;\n sum = sum + texture2D(uMainSampler, outTexCoord + offset * 3.294215) * 0.093913;\n sum = sum + texture2D(uMainSampler, outTexCoord - offset * 3.294215) * 0.093913;\n\n gl_FragColor = sum * vec4(color, 1);\n}\n")}setupUniforms(e,t){const r=this.programManager;var s=2/t.width*e.offsetX,n=2/t.height*e.offsetY;r.setUniform("offset",[s,n]),r.setUniform("strength",e.strength),r.setUniform("color",e.glcolor)}}const l=Phaser.Utils.Objects.GetValue;class c extends Phaser.Filters.Controller{static FilterName=a;constructor(e,t){super(e,a),this.offsetX=1,this.offsetY=1,this.strength=1,this.glcolor=[1,1,1],this.resetFromJSON(t)}resetFromJSON(e){return this.setOffset(l(e,"offsetX",1),l(e,"offsetY",1)),this.setStrength(l(e,"strength",1)),this.setColor(l(e,"color",16777215)),this}get color(){var e=this.glcolor;return(255*e[0]<<16)+(255*e[1]<<8)+(255*e[2]|0)}set color(e){var t=this.glcolor;t[0]=(e>>16&255)/255,t[1]=(e>>8&255)/255,t[2]=(255&e)/255}setOffset(e,t){return this.offsetX=e,this.offsetY=t,this}setStrength(e){return this.strength=e,this}setColor(e){return this.color=e,this}}const d=Phaser.Utils.Objects.GetValue;let f=class extends Phaser.Filters.ParallelFilters{constructor(e,t){super(e),this.steps=0,this.offsetX=1,this.offsetY=1,this.blurStrength=1,this.color=16777215,this.strength=1,this.resetFromJSON(t)}resetFromJSON(e){return this.setOffset(d(e,"offsetX",1),d(e,"offsetY",1)),this.setBlurStrength(d(e,"blurStrength",1)),this.setColor(d(e,"color",16777215)),this.setStrength(d(e,"strength",1)),this.setSteps(d(e,"steps",4)),this}forEachController(e,t){this.top.list.forEach(e,t)}get steps(){return this._steps}set steps(e){if(this._steps!==e){var t=this.camera;if(this.steps<e)for(var r=this.top,s=2*e,n=2*this.steps;n<s;n++)r.add(new c(t));else{var o=this.top.list;for(s=2*e,n=2*this.steps-1;n>=s;n--)o[n].destroy();o.length=s}this._steps=e,this.setOffset(this.offsetX,this.offsetY),this.setBlurStrength(this.strength),this.setColor(this.color)}}setSteps(e){return this.steps=e,this}get offsetX(){return this._offsetX}set offsetX(e){this._offsetX=e,this.forEachController((function(t,r){t.offsetX=r%2==0?e:0}))}get offsetY(){return this._offsetY}set offsetY(e){this._offsetY=e,this.forEachController((function(t,r){t.offsetY=r%2==1?e:0}))}setOffset(e,t){return this.offsetX=e,this.offsetY=t,this}get blurStrength(){return this._blurStrength}set blurStrength(e){this._blurStrength=e,this.forEachController((function(t){t.strength=e}))}setBlurStrength(e){return this.blurStrength=e,this}get color(){return this._color}set color(e){this._color=e,this.forEachController((function(t){t.color=e}))}setColor(e){return this.color=e,this}get strength(){return this._strength}set strength(e){this._strength=e,this.blend.amount=e}setStrength(e){return this.strength=e,this}};const u="FilterP3Circle";class g extends Phaser.Renderer.WebGL.RenderNodes.BaseFilterShader{static FilterName=u;constructor(e){super(u,e,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 texSize;\nuniform vec3 color;\nuniform vec4 backgroundColor;\nuniform vec3 config;\n\n#pragma phaserTemplate(fragmentHeader)\n\nvoid main (void) {\n float thickness = config.x;\n float scale = config.y;\n float feather = config.z;\n\n vec4 texture = texture2D(uMainSampler, outTexCoord);\n\n vec2 position = (gl_FragCoord.xy / texSize.xy) * 2.0 - 1.0;\n\n float aspectRatio = texSize.x / texSize.y;\n\n position.x *= aspectRatio;\n\n float grad = length(position);\n\n // height > width\n float outer = aspectRatio;\n float inner = outer - (thickness * 2.0 / texSize.y);\n\n // width > height\n if (aspectRatio >= 1.0)\n {\n float f = 2.0 + (texSize.y / texSize.x);\n outer = 1.0;\n inner = 1.0 - (thickness * f / texSize.x);\n }\n\n outer *= scale;\n inner *= scale;\n\n float circle = smoothstep(outer, outer - 0.01, grad);\n\n float ring = circle - smoothstep(inner, inner - feather, grad);\n\n texture = mix(backgroundColor * backgroundColor.a, texture, texture.a);\n\n texture = (texture * (circle - ring));\n\n gl_FragColor = vec4(texture.rgb + (ring * color), texture.a);\n}\n")}setupUniforms(e,t){const r=this.programManager;r.setUniform("texSize",[t.width,t.height]),r.setUniform("color",e.glcolor),r.setUniform("backgroundColor",e.glcolor2),r.setUniform("config",[e.thickness,e.scale,e.feather])}}const m=Phaser.Utils.Objects.GetValue;class p extends Phaser.Filters.Controller{static FilterName=u;constructor(e,t){super(e,u),this.thickness=8,this.scale=1,this.feather=.005,this.glcolor=[1,.2,.7],this.glcolor2=[1,0,0,.4],this.resetFromJSON(t)}resetFromJSON(e){return this.setThickness(m(e,"thickness",8)),this.setScale(m(e,"scale",1)),this.setFeather(m(e,"feather",.005)),this.setColor(m(e,"color",16724914)),this.setBackgroundColor(m(e,"backgroundColor",16711680)),this.setBackgroundAlpha(m(e,"backgroundAlpha",.4)),this}get color(){var e=this.glcolor;return(255*e[0]<<16)+(255*e[1]<<8)+(255*e[2]|0)}set color(e){var t=this.glcolor;t[0]=(e>>16&255)/255,t[1]=(e>>8&255)/255,t[2]=(255&e)/255}get backgroundColor(){var e=this.glcolor2;return(255*e[0]<<16)+(255*e[1]<<8)+(255*e[2]|0)}set backgroundColor(e){var t=this.glcolor2;t[0]=(e>>16&255)/255,t[1]=(e>>8&255)/255,t[2]=(255&e)/255}get backgroundAlpha(){return this.glcolor2[3]}set backgroundAlpha(e){this.glcolor2[3]=e}setThickness(e){return this.thickness=e,this}setScale(e){return this.scale=e,this}setFeather(e){return this.feather=e,this}setColor(e){return this.color=e,this}setBackgroundColor(e){return this.backgroundColor=e,this}setBackgroundAlpha(e){return this.backgroundAlpha=e,this}}const v="FilterP3Gradient";class x extends Phaser.Renderer.WebGL.RenderNodes.BaseFilterShader{static FilterName=v;constructor(e){super(v,e,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#define SRGB_TO_LINEAR(c) pow((c), vec3(2.2))\n#define LINEAR_TO_SRGB(c) pow((c), vec3(1.0 / 2.2))\n#define SRGB(r, g, b) SRGB_TO_LINEAR(vec3(float(r), float(g), float(b)) / 255.0)\n\n// Scene buffer\nuniform sampler2D uMainSampler; \nvarying vec2 outTexCoord;\n\n// Effect parameters\nuniform float alpha;\nuniform vec2 positionFrom;\nuniform vec2 positionTo;\nuniform vec3 color1;\nuniform vec3 color2;\nuniform int size;\n\n#pragma phaserTemplate(fragmentHeader)\n\nfloat gradientNoise(in vec2 uv)\n{\n const vec3 magic = vec3(0.06711056, 0.00583715, 52.9829189);\n return fract(magic.z * fract(dot(uv, magic.xy)));\n}\n\nfloat stepped (in float s, in float scale, in int steps)\n{\n return steps > 0 ? floor( s / ((1.0 * scale) / float(steps))) * 1.0 / float(steps - 1) : s;\n}\n\nvoid main ()\n{\n vec2 a = positionFrom;\n vec2 b = positionTo;\n vec2 ba = b - a;\n\n float d = dot(outTexCoord - a, ba) / dot(ba, ba);\n float t = size > 0 ? stepped(d, 1.0, size) : d;\n\n t = smoothstep(0.0, 1.0, clamp(t, 0.0, 1.0));\n\n vec3 color = mix(SRGB(color1.r, color1.g, color1.b), SRGB(color2.r, color2.g, color2.b), t);\n\n color = LINEAR_TO_SRGB(color);\n color += (1.0 / 255.0) * gradientNoise(outTexCoord) - (0.5 / 255.0);\n\n vec4 texture = texture2D(uMainSampler, outTexCoord);\n\n gl_FragColor = vec4(mix(color.rgb, texture.rgb, alpha), 1.0) * texture.a;\n}\n")}setupUniforms(e,t){const r=this.programManager;r.setUniform("alpha",e.alpha),r.setUniform("positionFrom",[e.fromX,e.fromY]),r.setUniform("positionTo",[e.toX,e.toY]),r.setUniform("color1",e.glcolor1),r.setUniform("color2",e.glcolor2),r.setUniform("size",e.size)}}const S=Phaser.Utils.Objects.GetValue;class C extends Phaser.Filters.Controller{static FilterName=v;constructor(e,t){super(e,v),this.alpha=.2,this.fromX=0,this.fromY=0,this.toX=0,this.toY=1,this.glcolor1=[255,0,0],this.glcolor2=[0,255,0],this.size=0,this.resetFromJSON(t)}resetFromJSON(e){return this.setAlpha(S(e,"alpha",.2)),this.setFromPosition(S(e,"fromX",0),S(e,"fromY",0)),this.setToPosition(S(e,"toX",0),S(e,"toY",1)),this.setColor1(S(e,"color1",16711680)),this.setColor2(S(e,"color2",65280)),this.setSize(S(e,"size",0)),this}get color1(){var e=this.glcolor1;return(e[0]<<16)+(e[1]<<8)+(0|e[2])}set color1(e){var t=this.glcolor1;t[0]=e>>16&255,t[1]=e>>8&255,t[2]=255&e}get color2(){var e=this.glcolor2;return(e[0]<<16)+(e[1]<<8)+(0|e[2])}set color2(e){var t=this.glcolor2;t[0]=e>>16&255,t[1]=e>>8&255,t[2]=255&e}setAlpha(e){return this.alpha=e,this}setFromPosition(e,t){return this.fromX=e,this.fromY=t,this}setToPosition(e,t){return this.toX=e,this.toY=t,this}setColor1(e){return this.color1=e,this}setColor2(e){return this.color2=e,this}setSize(e){return this.size=e,this}}const F="FilterP3Shine",b=36e5;var N=function(e,t){var r=t+n(e).loop.delta;return r>=b&&(r-=b),r};class P extends Phaser.Renderer.WebGL.RenderNodes.BaseFilterShader{static FilterName=F;constructor(e){super(F,e,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 bool reveal;\nuniform vec2 texSize;\n\n#pragma phaserTemplate(fragmentHeader)\n\nvoid main (void) {\n float speed = config.x;\n float time = config.y;\n float lineWidth = config.z;\n float gradient = config.w;\n\n\tvec2 uv = gl_FragCoord.xy / texSize;\n\n vec4 tex = texture2D(uMainSampler, outTexCoord);\n\n vec4 col1 = vec4(0.3, 0.0, 0.0, 1.0);\n vec4 col2 = vec4(0.85, 0.85, 0.85, 1.0);\n\n uv.x = uv.x - mod(time * speed, 2.0) + 0.5;\n float y = uv.x * gradient;\n\n float s = smoothstep(y - lineWidth, y, uv.y) - smoothstep(y, y + lineWidth, uv.y);\n\n gl_FragColor = (((s * col1) + (s * col2)) * tex);\n\n if (!reveal)\n {\n // Apply the shine effect\n gl_FragColor += tex;\n }\n}\n")}setupUniforms(e,t){const r=this.programManager;e.now=N(this.manager.renderer.game,e.now),r.setUniform("config",[e.speed,e.now,e.lineWidth,e.gradient]),r.setUniform("reveal",e.reveal),r.setUniform("texSize",[t.width,t.height])}}const _=Phaser.Utils.Objects.GetValue;class T extends Phaser.Filters.Controller{static FilterName=F;constructor(e,t){super(e,F),this.now=0,this.speed=.5,this.lineWidth=.5,this.gradient=3,this.reveal=!1,this.resetFromJSON(t)}resetFromJSON(e){return this.setSpeed(_(e,"speed",.5)),this.setLineWidth(_(e,"lineWidth",.5)),this.setGradient(_(e,"gradient",3)),this.setReveal(_(e,"reveal",!1)),this}setSpeed(e){return this.speed=e,this}setLineWidth(e){return this.lineWidth=e,this}setGradient(e){return this.gradient=e,this}setReveal(e){return this.reveal=e,this}}const R="FilterP3Vignette";class G extends Phaser.Renderer.WebGL.RenderNodes.BaseFilterShader{static FilterName=R;constructor(e){super(R,e,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 config;\nuniform vec2 position;\n\n#pragma phaserTemplate(fragmentHeader)\n\nvoid main (void) {\n float radius = config.x;\n float strength = config.y;\n\n vec4 col = vec4(1.0);\n\n float d = length(outTexCoord - position);\n\n if (d <= radius)\n {\n float g = d / radius;\n g = sin(g * 3.14 * strength);\n \tcol = vec4(g * g * g);\n }\n\n vec4 texture = texture2D(uMainSampler, outTexCoord);\n\n gl_FragColor = texture * (1.0 - col);\n}\n")}setupUniforms(e,t){const r=this.programManager;r.setUniform("config",[e.radius,e.strength]),r.setUniform("position",[e.x,e.y])}}const y=Phaser.Utils.Objects.GetValue;class w extends Phaser.Filters.Controller{static FilterName=R;constructor(e,t){super(e,R),this.x=.5,this.y=.5,this.radius=.5,this.strength=.5,this.resetFromJSON(t)}resetFromJSON(e){return this.setPosition(y(e,"x",.5),y(e,"y",.5)),this.setRadius(y(e,"radius",.5)),this.setStrength(y(e,"strength",.5)),this}setPosition(e,t){return this.x=e,this.y=t,this}setRadius(e){return this.radius=e,this}setStrength(e){return this.strength=e,this}}const O="FilterP3Wipe";class M extends Phaser.Renderer.WebGL.RenderNodes.BaseFilterShader{static FilterName=O;constructor(e){super(O,e,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 bool reveal;\n\n#pragma phaserTemplate(fragmentHeader)\n\nvoid main (void) {\n vec2 uv = outTexCoord;\n\n vec4 color0;\n vec4 color1;\n\n if (reveal) {\n color0 = vec4(0);\n color1 = texture2D(uMainSampler, uv);\n } else {\n color0 = texture2D(uMainSampler, uv);\n color1 = vec4(0);\n }\n\n float distance = config.x;\n float width = config.y;\n float direction = config.z;\n float axis = uv.x;\n\n if (config.w == 1.0) {\n axis = uv.y;\n }\n\n float adjust = mix(width, -width, distance);\n float value = smoothstep(distance - width, distance + width, abs(direction - axis) + adjust);\n gl_FragColor = mix(color1, color0, value);\n}\n")}setupUniforms(e,t){const r=this.programManager;r.setUniform("config",[e.progress,e.wipeWidth,e.direction,e.axis]),r.setUniform("reveal",e.reveal)}}const W=Phaser.Utils.Objects.GetValue,U=Phaser.Math.Clamp;class E extends Phaser.Filters.Controller{static FilterName=O;constructor(e,t){super(e,O),this.progress=0,this.wipeWidth=.1,this.direction=0,this.axis=0,this.reveal=!1,this.resetFromJSON(t)}resetFromJSON(e){this.setProgress(W(e,"progress",0)),this.setWipeWidth(W(e,"wipeWidth",.1)),this.setDirection(W(e,"direction",0)),this.setAxis(W(e,"axis",0));var t=W(e,"reveal",void 0);return void 0===t&&(t=!W(e,"wipe",!0)),t?this.enableRevealMode():this.enableWipeMode(),this}get progress(){return this._progress}set progress(e){this._progress=U(e,0,1)}setProgress(e){return this.progress=e,this}get wipeWidth(){return this._wipeWidth}set wipeWidth(e){this._wipeWidth=U(e,0,1)}setWipeWidth(e){return this.wipeWidth=e,this}setDirection(e){return this.direction=e,this}setAxis(e){return this.axis=e,this}enableWipeMode(){return this.reveal=!1,this}enableRevealMode(){return this.reveal=!0,this}}var k=[function(e){return e=n(e),!!o(e,h)&&(i("addP3Bloom",(function(e,t,r,s,n,o){return void 0===e&&(e=16777215),void 0===t&&(t=1),void 0===r&&(r=1),void 0===s&&(s=1),void 0===n&&(n=1),void 0===o&&(o=4),this.add(new f(this.camera,{color:e,offsetX:t,offsetY:r,blurStrength:s,strength:n,steps:o}))})),!0)},function(e){return e=n(e),!!o(e,g)&&(i("addP3Bloom",(function(e,t,r,s,n,o){return void 0===e&&(e=16777215),void 0===t&&(t=1),void 0===r&&(r=1),void 0===s&&(s=1),void 0===n&&(n=1),void 0===o&&(o=4),this.add(new BloomController(this.camera,{color:e,offsetX:t,offsetY:r,blurStrength:s,strength:n,steps:o}))})),i("addP3Circle",(function(e,t,r,s,n){return void 0===e&&(e=8),void 0===t&&(t=16724914),void 0===r&&(r=16711680),void 0===s&&(s=1),void 0===n&&(n=.005),this.add(new p(this.camera,{thickness:e,color:t,backgroundColor:r,scale:s,feather:n}))})),!0)},function(e){return e=n(e),!!o(e,x)&&(i("addP3Gradient",(function(e,t,r,s,n,o,i,a){return void 0===e&&(e=16711680),void 0===t&&(t=65280),void 0===r&&(r=.2),void 0===s&&(s=0),void 0===n&&(n=0),void 0===o&&(o=0),void 0===i&&(i=1),void 0===a&&(a=0),this.add(new C(this.camera,{color1:e,color2:t,alpha:r,fromX:s,fromY:n,toX:o,toY:i,size:a}))})),!0)},function(e){return e=n(e),!!o(e,P)&&(i("addP3Shine",(function(e,t,r,s){return void 0===e&&(e=.5),void 0===t&&(t=.5),void 0===r&&(r=3),void 0===s&&(s=!1),this.add(new T(this.camera,{speed:e,lineWidth:t,gradient:r,reveal:s}))})),!0)},function(e){return e=n(e),!!o(e,G)&&(i("addP3Vignette",(function(e,t,r,s){return void 0===e&&(e=.5),void 0===t&&(t=.5),void 0===r&&(r=.5),void 0===s&&(s=.5),this.add(new w(this.camera,{x:e,y:t,radius:r,strength:s}))})),!0)},function(e){return e=n(e),!!o(e,M)&&(i("addP3Wipe",(function(e,t,r){return void 0===e&&(e=.1),void 0===t&&(t=0),void 0===r&&(r=0),this.add(new E(this.camera,{wipeWidth:e,direction:t,axis:r}))})),i("addP3Reveal",(function(e,t,r){return void 0===e&&(e=.1),void 0===t&&(t=0),void 0===r&&(r=0),this.add(new E(this.camera,{wipeWidth:e,direction:t,axis:r,reveal:!0}))})),!0)}],z=function(e){for(var t=!1,r=0,s=k.length;r<s;r++)t=k[r](e)|t;return t};class B extends Phaser.Plugins.BasePlugin{constructor(e){super(e)}start(){var e=this.game.events;e.on("destroy",this.destroy,this),this.game.isRunning?z(this.game):e.once("ready",(function(){z(this.game)}),this)}}return B},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).rexp3fxplugin=t();