phaser4-rex-plugins
Version:
1,716 lines (1,390 loc) • 159 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
typeof define === 'function' && define.amd ? define(factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.rexlayermanagerplugin = factory());
})(this, (function () { 'use strict';
var EventEmitterMethods = {
setEventEmitter(eventEmitter, EventEmitterClass) {
if (EventEmitterClass === undefined) {
EventEmitterClass = Phaser.Events.EventEmitter; // Use built-in EventEmitter class by default
}
this._privateEE = (eventEmitter === true) || (eventEmitter === undefined);
this._eventEmitter = (this._privateEE) ? (new EventEmitterClass()) : eventEmitter;
return this;
},
destroyEventEmitter() {
if (this._eventEmitter && this._privateEE) {
this._eventEmitter.shutdown();
}
return this;
},
getEventEmitter() {
return this._eventEmitter;
},
on() {
if (this._eventEmitter) {
this._eventEmitter.on.apply(this._eventEmitter, arguments);
}
return this;
},
once() {
if (this._eventEmitter) {
this._eventEmitter.once.apply(this._eventEmitter, arguments);
}
return this;
},
off() {
if (this._eventEmitter) {
this._eventEmitter.off.apply(this._eventEmitter, arguments);
}
return this;
},
emit(event) {
if (this._eventEmitter && event) {
this._eventEmitter.emit.apply(this._eventEmitter, arguments);
}
return this;
},
addListener() {
if (this._eventEmitter) {
this._eventEmitter.addListener.apply(this._eventEmitter, arguments);
}
return this;
},
removeListener() {
if (this._eventEmitter) {
this._eventEmitter.removeListener.apply(this._eventEmitter, arguments);
}
return this;
},
removeAllListeners() {
if (this._eventEmitter) {
this._eventEmitter.removeAllListeners.apply(this._eventEmitter, arguments);
}
return this;
},
listenerCount() {
if (this._eventEmitter) {
return this._eventEmitter.listenerCount.apply(this._eventEmitter, arguments);
}
return 0;
},
listeners() {
if (this._eventEmitter) {
return this._eventEmitter.listeners.apply(this._eventEmitter, arguments);
}
return [];
},
eventNames() {
if (this._eventEmitter) {
return this._eventEmitter.eventNames.apply(this._eventEmitter, arguments);
}
return [];
},
};
var PropertyMethods$1 = {
hasProperty(property) {
var gameObject = this.gameObject;
if (gameObject.hasOwnProperty(property)) {
return true;
} else {
var value = gameObject[property];
return (value !== undefined);
}
},
getProperty(property) {
return this.gameObject[property];
},
setProperty(property, value) {
this.gameObject[property] = value;
return this;
},
easeProperty(config) {
var property = config.property;
var value = config.value;
var duration = config.duration;
var delay = config.delay;
var ease = config.ease;
var repeat = config.repeat;
var isYoyo = config.yoyo;
var isFrom = config.from;
var onComplete = config.complete;
var target = config.target;
if (duration === undefined) {
duration = 1000;
}
if (delay === undefined) {
delay = 0;
}
if (ease === undefined) {
ease = 'Linear';
}
if (repeat === undefined) {
repeat = 0;
}
if (isYoyo === undefined) {
isYoyo = false;
}
if (target === undefined) {
target = this.gameObject;
}
if (isFrom) {
var startValue = value;
value = target[property];
target[property] = startValue;
}
var config = {
targets: target,
duration: duration,
delay: delay,
ease: ease,
repeat: repeat,
yoyo: isYoyo,
onComplete: onComplete,
};
config[property] = value;
this.addTweenTask(property, config);
return this;
},
addTweenTask(name, config) {
var tweenTasks = this.tweens;
var tweenTask = tweenTasks[name];
if (tweenTask) {
tweenTask.remove();
}
var onComplete = config.onComplete;
config.onComplete = function () {
tweenTasks[name].remove();
tweenTasks[name] = null;
if (onComplete) {
onComplete(config.targets, name);
}
};
tweenTask = this.scene.tweens.add(config);
tweenTask.timeScale = this.timeScale;
tweenTasks[name] = tweenTask;
return this;
},
getTweenTask(property) {
return this.tweens[property];
},
freeTweens() {
var tweenTasks = this.tweens,
tweenTask;
for (var propName in tweenTasks) {
tweenTask = tweenTasks[propName];
if (tweenTask) {
tweenTask.remove();
}
tweenTasks[propName] = null;
}
return this;
}
};
var CallMethods$1 = {
hasMethod(methodName) {
return typeof (this.gameObject[methodName]) === 'function';
},
call(methodName, ...parameters) {
if (!this.hasMethod(methodName)) {
console.warn(`[GameObjectManager] Game object '${this.name}' does not have method '${methodName}'`);
return this;
}
var gameObject = this.gameObject;
gameObject[methodName].apply(gameObject, parameters);
return this;
}
};
var DataMethods$1 = {
hasData(dataKey) {
var gameObject = this.gameObject;
return (gameObject.data) ? gameObject.data.has(dataKey) : false;
},
getData(dataKey) {
return this.gameObject.getData(dataKey);
},
setData(dataKey, value) {
this.gameObject.setData(dataKey, value);
return this;
},
};
class BobBase {
constructor(GOManager, gameObject, name) {
this.GOManager = GOManager;
this.tweens = {};
this.effects = {};
this.setGO(gameObject, name);
}
get scene() {
return this.GOManager.scene;
}
get timeScale() {
return this.GOManager.timeScale;
}
destroy() {
this.freeGO();
this.GOManager = undefined;
}
freeGO() {
this.freeTweens();
this.gameObject.bob = undefined;
this.gameObject.destroy();
this.gameObject = undefined;
return this;
}
setGO(gameObject, name) {
gameObject.goName = name;
gameObject.goType = this.GOManager.name;
gameObject.bob = this;
this.gameObject = gameObject;
this.name = name;
this.freeTweens();
return this;
}
setTimeScale(timeScale) {
var tweenTasks = this.tweens;
for (var key in tweenTasks) {
var tweenTask = tweenTasks[key];
if (tweenTask) {
tweenTask.timeScale = timeScale;
}
}
return this;
}
}
Object.assign(
BobBase.prototype,
PropertyMethods$1,
CallMethods$1,
DataMethods$1,
);
var IsEmpty = function (source) {
for (var k in source) {
return false;
}
return true;
};
var IsSingleBob = function (name) {
return name && (name.charAt(0) !== '!');
};
var GetMethods = {
has(name) {
return this.bobs.hasOwnProperty(name);
},
exists(name) {
return this.bobs.hasOwnProperty(name);
},
get(name, out) {
if (IsSingleBob(name)) {
return this.bobs[name];
} else {
if (out === undefined) {
out = [];
}
if (name) {
name = name.substring(1);
}
for (var key in this.bobs) {
if (name && (key === name)) {
continue;
}
out.push(this.bobs[key]);
}
return out;
}
},
getFitst(excluded) {
if (excluded && (excluded.charAt(0) === '!')) {
excluded = excluded.substring(1);
}
for (var name in this.bobs) {
if (excluded && (excluded === name)) {
continue;
}
return this.bobs[name];
}
return null;
},
getGO(name, out) {
var bob = this.get(name);
if (!bob) {
return null;
} else if (!Array.isArray(bob)) {
return bob.gameObject;
} else {
if (out === undefined) {
out = [];
}
var bobs = bob;
bobs.forEach(function (bob) {
out.push(bob.gameObject);
});
return out;
}
},
forEachGO(callback, scope) {
for (var name in this.bobs) {
var gameObject = this.bobs[name].gameObject;
var stopLoop;
if (scope) {
stopLoop = callback.call(scope, gameObject, name, this);
} else {
stopLoop = callback(gameObject, name, this);
}
if (stopLoop) {
break;
}
}
return this;
},
getAllGO(out) {
if (out === undefined) {
out = [];
}
for (var name in this.bobs) {
var gameObject = this.bobs[name].gameObject;
out.push(gameObject);
}
return out;
}
};
var GetR = function (colorInt) {
return (colorInt >> 16) & 0xff;
};
var GetG = function (colorInt) {
return (colorInt >> 8) & 0xff;
};
var GetB = function (colorInt) {
return (colorInt) & 0xff;
};
const MaskR = (~(0xff << 16) & 0xffffff);
const MaskG = (~(0xff << 8) & 0xffffff);
const MaskB = (~(0xff) & 0xffffff);
var SetR = function (colorInt, r) {
return ((r & 0xff) << 16) | (colorInt & MaskR);
};
var SetG = function (colorInt, g) {
return ((g & 0xff) << 8) | (colorInt & MaskG);
};
var SetB = function (colorInt, b) {
return (b & 0xff) | (colorInt & MaskB);
};
var SetRGB = function (colorInt, r, g, b) {
return ((r & 0xff) << 16) | ((g & 0xff) << 8) | ((b & 0xff));
};
var AddTintRGBProperties = function (gameObject, tintRGB) {
// Don't attach properties again
if (gameObject.hasOwnProperty('tintR')) {
return gameObject;
}
if (tintRGB === undefined) {
tintRGB = 0xffffff;
}
var tintR = GetR(tintRGB);
var tintG = GetG(tintRGB);
var tintB = GetB(tintRGB);
// Override tint property
Object.defineProperty(gameObject, 'tint', {
get: function () {
return tintRGB;
},
set: function (value) {
value = Math.floor(value) & 0xffffff;
if (gameObject.setTint) {
gameObject.setTint(value);
}
if (tintRGB !== value) {
tintRGB = value;
tintR = GetR(tintRGB);
tintG = GetG(tintRGB);
tintB = GetB(tintRGB);
// gameObject.emit('_tintchange', value, tintR, tintG, tintB);
}
}
});
Object.defineProperty(gameObject, 'tintR', {
get: function () {
return tintR;
},
set: function (value) {
value = Math.floor(value) & 0xff;
if (tintR !== value) {
tintR = value;
gameObject.tint = SetR(tintRGB, value);
}
},
});
Object.defineProperty(gameObject, 'tintG', {
get: function () {
return tintG;
},
set: function (value) {
value = Math.floor(value) & 0xff;
if (tintG !== value) {
tintG = value;
gameObject.tint = SetG(tintRGB, value);
}
},
});
Object.defineProperty(gameObject, 'tintB', {
get: function () {
return tintB;
},
set: function (value) {
value = Math.floor(value) & 0xff;
if (tintB !== value) {
tintB = value;
gameObject.tint = SetB(tintRGB, value);
}
},
});
Object.defineProperty(gameObject, 'tintGray', {
get: function () {
return Math.floor((tintR + tintG + tintB) / 3);
},
set: function (value) {
value = Math.floor(value) & 0xff;
if ((tintR !== value) || (tintG !== value) || (tintB !== value)) {
tintR = value;
tintG = value;
tintB = value;
gameObject.tint = SetRGB(tintRGB, value, value, value);
}
},
});
gameObject.tint = tintRGB;
return gameObject;
};
const EventEmitter = Phaser.Events.EventEmitter;
var MonitorViewport = function (viewport) {
// Don't monitor properties again
if (viewport.events) {
return viewport;
}
var events = new EventEmitter();
var x = viewport.x;
Object.defineProperty(viewport, 'x', {
get: function () {
return x;
},
set: function (value) {
if (x !== value) {
x = value;
events.emit('update', viewport);
}
},
});
var y = viewport.y;
Object.defineProperty(viewport, 'y', {
get: function () {
return y;
},
set: function (value) {
if (y !== value) {
y = value;
events.emit('update', viewport);
}
},
});
var width = viewport.width;
Object.defineProperty(viewport, 'width', {
get: function () {
return width;
},
set: function (value) {
if (width !== value) {
width = value;
events.emit('update', viewport);
}
},
});
var height = viewport.height;
Object.defineProperty(viewport, 'height', {
get: function () {
return height;
},
set: function (value) {
if (height !== value) {
height = value;
events.emit('update', viewport);
}
},
});
viewport.events = events;
return viewport;
};
var VPXYToXY = function (vpx, vpy, vpxOffset, vpyOffset, viewport, out) {
if (out === undefined) {
out = {};
} else if (out === true) {
out = GlobXY;
}
if (typeof (vpxOffset) !== 'number') {
vpxOffset = 0;
vpyOffset = 0;
}
out.x = viewport.x + (viewport.width * vpx) + vpxOffset;
out.y = viewport.y + (viewport.height * vpy) + vpyOffset;
return out;
};
var GlobXY = {};
var AddViewportCoordinateProperties = function (gameObject, viewport, vpx, vpy, vpxOffset, vpyOffset, transformCallback) {
// Don't attach properties again
if (gameObject.hasOwnProperty('vp')) {
return gameObject;
}
if (typeof (vpx) === 'function') {
transformCallback = vpx;
vpx = undefined;
}
if (typeof (vpxOffset) === 'function') {
transformCallback = vpxOffset;
vpxOffset = undefined;
}
if (vpx === undefined) { vpx = 0.5; }
if (vpy === undefined) { vpy = 0.5; }
if (vpxOffset === undefined) { vpxOffset = 0; }
if (vpyOffset === undefined) { vpyOffset = 0; }
if (transformCallback === undefined) {
transformCallback = VPXYToXY;
}
MonitorViewport(viewport);
var events = viewport.events;
gameObject.vp = viewport;
// Set position of game object when view-port changed.
var Transform = function () {
transformCallback(vpx, vpy, vpxOffset, vpyOffset, viewport, gameObject);
};
events.on('update', Transform);
gameObject.once('destroy', function () {
events.off('update', Transform);
gameObject.vp = undefined;
});
Object.defineProperty(gameObject, 'vpx', {
get: function () {
return vpx;
},
set: function (value) {
if (vpx !== value) {
vpx = value;
Transform();
}
},
});
Object.defineProperty(gameObject, 'vpy', {
get: function () {
return vpy;
},
set: function (value) {
if (vpy !== value) {
vpy = value;
Transform();
}
},
});
Object.defineProperty(gameObject, 'vpxOffset', {
get: function () {
return vpxOffset;
},
set: function (value) {
if (vpxOffset !== value) {
vpxOffset = value;
Transform();
}
},
});
Object.defineProperty(gameObject, 'vpyOffset', {
get: function () {
return vpyOffset;
},
set: function (value) {
if (vpyOffset !== value) {
vpyOffset = value;
Transform();
}
},
});
Transform();
};
var HasProperty = function (obj, prop) {
if (!obj) {
return false;
}
if (obj.hasOwnProperty(prop)) {
return true;
}
while (obj) {
if (Object.getOwnPropertyDescriptor(obj, prop)) {
return true;
}
obj = obj.__proto__;
}
return false;
};
var GetFilterList = function (gameObject, external) {
if (external === undefined) {
external = false;
}
if (!gameObject.filters) {
gameObject.enableFilters().focusFilters();
}
var filterList = (!external) ? gameObject.filters.internal : gameObject.filters.external;
return filterList;
};
var AddClearEffectCallback = function (gameObject, effectSwitchName) {
if (!gameObject._effectSwitchNames) {
gameObject._effectSwitchNames = [];
gameObject.clearAllEffects = function () {
var effectSwitchNames = gameObject._effectSwitchNames;
for (var i = 0, cnt = effectSwitchNames.length; i < cnt; i++) {
gameObject[effectSwitchNames[i]] = null;
}
return gameObject;
};
gameObject.on('destroy', gameObject.clearAllEffects, gameObject);
}
gameObject._effectSwitchNames.push(effectSwitchName);
};
var AddBarrelProperties = function (gameObject) {
// Don't attach properties again
if (HasProperty(gameObject, 'barrel')) {
return gameObject;
}
var filterList = GetFilterList(gameObject);
var barrel;
Object.defineProperty(gameObject, 'barrel', {
get: function () {
return barrel;
},
set: function (value) {
if (barrel === value) {
return;
}
barrel = value;
if ((barrel === null) || (barrel === false)) {
if (gameObject._barrelEffect) {
filterList.remove(gameObject._barrelEffect);
gameObject._barrelEffect = undefined;
}
} else {
if (!gameObject._barrelEffect) {
gameObject._barrelEffect = filterList.addBarrel();
}
gameObject._barrelEffect.amount = barrel;
}
},
});
gameObject.barrel = null;
AddClearEffectCallback(gameObject, 'barrel');
return gameObject;
};
var AddColorMatrixEffectPropertiesBase = function (gameObject, effectName, inputMode) {
// Don't attach properties again
if (HasProperty(gameObject, effectName)) {
return gameObject;
}
var filterList = GetFilterList(gameObject);
var EffectInstancePropertyName = `_${effectName}Effect`;
var currentValue;
Object.defineProperty(gameObject, effectName, {
get: function () {
return currentValue;
},
set: function (value) {
if (currentValue === value) {
return;
}
currentValue = value;
if ((currentValue === null) || (currentValue === false)) {
if (gameObject[EffectInstancePropertyName]) {
filterList.remove(gameObject[EffectInstancePropertyName]);
gameObject[EffectInstancePropertyName] = undefined;
}
} else {
if (!gameObject[EffectInstancePropertyName]) {
gameObject[EffectInstancePropertyName] = filterList.addColorMatrix();
}
var effectInstance = gameObject[EffectInstancePropertyName];
effectInstance.colorMatrix[effectName]((inputMode === 1) ? value : undefined);
}
},
});
gameObject[effectName] = null;
AddClearEffectCallback(gameObject, effectName);
return gameObject;
};
var AddBlackWhiteProperties = function (gameObject) {
AddColorMatrixEffectPropertiesBase(gameObject, 'blackWhite');
return gameObject;
};
var AddBlockyProperties = function (gameObject) {
// Don't attach properties again
if (HasProperty(gameObject, 'blockySize')) {
return gameObject;
}
var filterList = GetFilterList(gameObject);
var blockySize,
blockyOffsetX = 0,
blockyOffsetY = 0;
Object.defineProperty(gameObject, 'blockySize', {
get: function () {
return blockySize;
},
set: function (value) {
if (blockySize === value) {
return;
}
blockySize = value;
if ((blockySize === null) || (blockySize === false)) {
if (gameObject._blockyEffect) {
filterList.remove(gameObject._blockyEffect);
gameObject._blockyEffect = undefined;
}
} else {
if (!gameObject._blockyEffect) {
gameObject._blockyEffect = filterList.addBlocky({
size: blockySize,
offset: { x: blockyOffsetX, y: blockyOffsetY },
});
}
gameObject._blockyEffect.size.x = blockySize;
gameObject._blockyEffect.size.y = blockySize;
}
},
});
Object.defineProperty(gameObject, 'blockyOffsetX', {
get: function () {
return blockyOffsetX;
},
set: function (value) {
if (blockyOffsetX === value) {
return;
}
blockyOffsetX = value;
if (gameObject._blockyEffect) {
gameObject._blockyEffect.offset.x = blockyOffsetX;
}
},
});
Object.defineProperty(gameObject, 'blockyOffsetY', {
get: function () {
return blockyOffsetY;
},
set: function (value) {
if (blockyOffsetY === value) {
return;
}
blockyOffsetY = value;
if (gameObject._blockyEffect) {
gameObject._blockyEffect.offset.y = blockyOffsetY;
}
},
});
AddClearEffectCallback(gameObject, 'blockySize');
return gameObject;
};
const GameClass = Phaser.Game;
var IsGame = function (object) {
return (object instanceof GameClass);
};
const SceneClass = Phaser.Scene;
var IsSceneObject = function (object) {
return (object instanceof SceneClass);
};
var GetGame = function (object) {
if ((object == null) || (typeof (object) !== 'object')) {
return null;
} else if (IsGame(object)) {
return object;
} else if (IsGame(object.game)) {
return object.game;
} else if (IsSceneObject(object)) { // object = scene object
return object.sys.game;
} else if (IsSceneObject(object.scene)) { // object = game object
return object.scene.sys.game;
}
};
var RegisterFilter = function (game, FilterClass) {
var filterName = FilterClass.FilterName;
var renderNodes = GetGame(game).renderer.renderNodes;
if (renderNodes.hasNode(filterName)) {
return false;
}
renderNodes.addNodeConstructor(filterName, FilterClass);
return true;
};
var AddFilterListMethod = function (name, callback) {
var FilterListComponent = Phaser.GameObjects.Components.FilterList.prototype;
if (FilterListComponent[name]) {
return;
}
FilterListComponent[name] = callback;
};
const StepFilterName = 'FilterP3BloomStep';
// Built-in fx in phaser3
const frag$5 = `\
#pragma phaserTemplate(shaderName)
#ifdef GL_FRAGMENT_PRECISION_HIGH
#define highmedp highp
#else
#define highmedp mediump
#endif
precision highmedp float;
// Scene buffer
uniform sampler2D uMainSampler;
varying vec2 outTexCoord;
// Effect parameters
uniform vec2 offset;
uniform float strength;
uniform vec3 color;
#pragma phaserTemplate(fragmentHeader)
void main (void) {
vec4 sum = texture2D(uMainSampler, outTexCoord) * 0.204164 * strength;
sum = sum + texture2D(uMainSampler, outTexCoord + offset * 1.407333) * 0.304005;
sum = sum + texture2D(uMainSampler, outTexCoord - offset * 1.407333) * 0.304005;
sum = sum + texture2D(uMainSampler, outTexCoord + offset * 3.294215) * 0.093913;
sum = sum + texture2D(uMainSampler, outTexCoord - offset * 3.294215) * 0.093913;
gl_FragColor = sum * vec4(color, 1);
}
`;
class BloomStepFilter extends Phaser.Renderer.WebGL.RenderNodes.BaseFilterShader {
static FilterName = StepFilterName;
constructor(manager) {
super(StepFilterName, manager, null, frag$5);
}
// This method sets up the uniforms for the shader.
setupUniforms(controller, drawingContext) {
const programManager = this.programManager;
var x = (2 / drawingContext.width) * controller.offsetX;
var y = (2 / drawingContext.height) * controller.offsetY;
programManager.setUniform('offset', [x, y]);
programManager.setUniform('strength', controller.strength);
programManager.setUniform('color', controller.glcolor);
}
}
const GetValue$9 = Phaser.Utils.Objects.GetValue;
class BloomStepController extends Phaser.Filters.Controller {
static FilterName = StepFilterName;
constructor(camera, config) {
super(camera, StepFilterName);
this.offsetX = 1;
this.offsetY = 1;
this.strength = 1;
this.glcolor = [1, 1, 1];
this.resetFromJSON(config);
}
resetFromJSON(o) {
this.setOffset(GetValue$9(o, 'offsetX', 1), GetValue$9(o, 'offsetY', 1));
this.setStrength(GetValue$9(o, 'strength', 1));
this.setColor(GetValue$9(o, 'color', 0xFFFFFF));
return this;
}
get color() {
var color = this.glcolor;
return (((color[0] * 255) << 16) + ((color[1] * 255) << 8) + (color[2] * 255 | 0));
}
set color(value) {
var color = this.glcolor;
color[0] = ((value >> 16) & 0xFF) / 255;
color[1] = ((value >> 8) & 0xFF) / 255;
color[2] = (value & 0xFF) / 255;
}
setOffset(x, y) {
this.offsetX = x;
this.offsetY = y;
return this;
}
setStrength(strength) {
this.strength = strength;
return this;
}
setColor(color) {
this.color = color;
return this;
}
}
const GetValue$8 = Phaser.Utils.Objects.GetValue;
let BloomController$1 = class BloomController extends Phaser.Filters.ParallelFilters {
constructor(camera, config) {
super(camera);
this.steps = 0;
this.offsetX = 1;
this.offsetY = 1;
this.blurStrength = 1;
this.color = 0xffffff;
this.strength = 1;
this.resetFromJSON(config);
}
resetFromJSON(o) {
this.setOffset(GetValue$8(o, 'offsetX', 1), GetValue$8(o, 'offsetY', 1));
this.setBlurStrength(GetValue$8(o, 'blurStrength', 1));
this.setColor(GetValue$8(o, 'color', 0xFFFFFF));
this.setStrength(GetValue$8(o, 'strength', 1));
this.setSteps(GetValue$8(o, 'steps', 4));
return this;
}
forEachController(callback, scope) {
this.top.list.forEach(callback, scope);
}
get steps() {
return this._steps;
}
set steps(value) {
if (this._steps === value) {
return;
}
var camera = this.camera;
if (this.steps < value) {
var filters = this.top;
var startIndex = this.steps * 2;
var stopIndex = value * 2;
for (var i = startIndex; i < stopIndex; i++) {
filters.add(new BloomStepController(camera));
}
} else { // this.steps > value
var filtersList = this.top.list;
var startIndex = this.steps * 2;
var stopIndex = value * 2;
for (var i = startIndex - 1; i >= stopIndex; i--) {
filtersList[i].destroy();
}
filtersList.length = stopIndex;
}
this._steps = value;
this.setOffset(this.offsetX, this.offsetY);
this.setBlurStrength(this.strength);
this.setColor(this.color);
}
setSteps(steps) {
this.steps = steps;
return this;
}
get offsetX() {
return this._offsetX;
}
set offsetX(value) {
this._offsetX = value;
this.forEachController(function (bloomStepController, i) {
bloomStepController.offsetX = (i % 2 === 0) ? value : 0;
});
}
get offsetY() {
return this._offsetY;
}
set offsetY(value) {
this._offsetY = value;
this.forEachController(function (bloomStepController, i) {
bloomStepController.offsetY = (i % 2 === 1) ? value : 0;
});
}
setOffset(x, y) {
this.offsetX = x;
this.offsetY = y;
return this;
}
get blurStrength() {
return this._blurStrength;
}
set blurStrength(value) {
this._blurStrength = value;
this.forEachController(function (bloomStepController) {
bloomStepController.strength = value;
});
}
setBlurStrength(blurStrength) {
this.blurStrength = blurStrength;
return this;
}
get color() {
return this._color;
}
set color(value) {
this._color = value;
this.forEachController(function (bloomStepController) {
bloomStepController.color = value;
});
}
setColor(color) {
this.color = color;
return this;
}
get strength() {
return this._strength;
}
set strength(value) {
this._strength = value;
this.blend.amount = value;
}
setStrength(strength) {
this.strength = strength;
return this;
}
};
var InstallBloomFX = function (game) {
game = GetGame(game);
var success = RegisterFilter(game, BloomStepFilter);
if (!success) {
return false;
}
AddFilterListMethod(
'addP3Bloom',
function (color, offsetX, offsetY, blurStrength, strength, steps) {
if (color === undefined) { color = 0xFFFFFF; }
if (offsetX === undefined) { offsetX = 1; }
if (offsetY === undefined) { offsetY = 1; }
if (blurStrength === undefined) { blurStrength = 1; }
if (strength === undefined) { strength = 1; }
if (steps === undefined) { steps = 4; }
return this.add(new BloomController$1(
this.camera,
{ color, offsetX, offsetY, blurStrength, strength, steps }
));
}
);
return true;
};
var AddBloomProperties = function (gameObject) {
// Don't attach properties again
if (HasProperty(gameObject, 'bloomColor')) {
return gameObject;
}
InstallBloomFX(gameObject);
var filterList = GetFilterList(gameObject);
var bloomColor,
bloomOffsetX = 1,
bloomOffsetY = 1,
bloomBlurStrength = 1,
bloomStrength = 1,
bloomSteps = 4;
Object.defineProperty(gameObject, 'bloomColor', {
get: function () {
return bloomColor;
},
set: function (value) {
if (bloomColor === value) {
return;
}
bloomColor = value;
if ((bloomColor === null) || (bloomColor === false)) {
if (gameObject._bloom) {
filterList.remove(gameObject._bloom);
gameObject._bloom = undefined;
}
} else {
if (!gameObject._bloom) {
gameObject._bloom = filterList.addBloom(bloomColor, bloomOffsetX, bloomOffsetY, bloomBlurStrength, bloomStrength, bloomSteps);
}
gameObject._bloom.color = bloomColor;
}
},
});
Object.defineProperty(gameObject, 'bloomOffsetX', {
get: function () {
return bloomOffsetX;
},
set: function (value) {
if (bloomOffsetX === value) {
return;
}
bloomOffsetX = value;
if (gameObject._bloom) {
gameObject._bloom.offsetX = bloomOffsetX;
}
},
});
Object.defineProperty(gameObject, 'bloomOffsetY', {
get: function () {
return bloomOffsetY;
},
set: function (value) {
if (bloomOffsetY === value) {
return;
}
bloomOffsetY = value;
if (gameObject._bloom) {
gameObject._bloom.offsetY = bloomOffsetY;
}
},
});
Object.defineProperty(gameObject, 'bloomBlurStrength', {
get: function () {
return bloomBlurStrength;
},
set: function (value) {
if (bloomBlurStrength === value) {
return;
}
bloomBlurStrength = value;
if (gameObject._bloom) {
gameObject._bloom.blurStrength = bloomBlurStrength;
}
},
});
Object.defineProperty(gameObject, 'bloomStrength', {
get: function () {
return bloomStrength;
},
set: function (value) {
if (bloomStrength === value) {
return;
}
bloomStrength = value;
if (gameObject._bloom) {
gameObject._bloom.strength = bloomStrength;
}
},
});
Object.defineProperty(gameObject, 'bloomSteps', {
get: function () {
return bloomSteps;
},
set: function (value) {
if (bloomSteps === value) {
return;
}
bloomSteps = value;
if (gameObject._bloom) {
gameObject._bloom.steps = bloomSteps;
}
},
});
gameObject.bloomColor = null;
AddClearEffectCallback(gameObject, 'bloomColor');
return gameObject;
};
var AddBlurProperties = function (gameObject) {
// Don't attach properties again
if (HasProperty(gameObject, 'blurColor')) {
return gameObject;
}
var filterList = GetFilterList(gameObject);
var blurColor,
blurQuality = 0,
blurX = 1,
blurY = 1,
blurStrength = 1,
blurSteps = 4;
Object.defineProperty(gameObject, 'blurColor', {
get: function () {
return blurColor;
},
set: function (value) {
if (blurColor === value) {
return;
}
blurColor = value;
if ((blurColor === null) || (blurColor === false)) {
if (gameObject._blur) {
filterList.remove(gameObject._blur);
gameObject._blur = undefined;
}
} else {
if (!gameObject._blur) {
gameObject._blur = filterList.addBlur(blurQuality, blurX, blurY, blurStrength, blurColor, blurSteps);
}
gameObject._blur.color = blurColor;
}
},
});
Object.defineProperty(gameObject, 'blurQuality', {
get: function () {
return blurQuality;
},
set: function (value) {
if (blurQuality === value) {
return;
}
blurQuality = value;
if (gameObject._blur) {
gameObject._blur.quality = blurQuality;
}
},
});
Object.defineProperty(gameObject, 'blurX', {
get: function () {
return blurX;
},
set: function (value) {
if (blurX === value) {
return;
}
blurX = value;
if (gameObject._blur) {
gameObject._blur.x = blurX;
}
},
});
Object.defineProperty(gameObject, 'blurY', {
get: function () {
return blurY;
},
set: function (value) {
if (blurY === value) {
return;
}
blurY = value;
if (gameObject._blur) {
gameObject._blur.y = blurY;
}
},
});
Object.defineProperty(gameObject, 'blurStrength', {
get: function () {
return blurStrength;
},
set: function (value) {
if (blurStrength === value) {
return;
}
blurStrength = value;
if (gameObject._blur) {
gameObject._blur.strength = blurStrength;
}
},
});
Object.defineProperty(gameObject, 'blurSteps', {
get: function () {
return blurSteps;
},
set: function (value) {
if (blurSteps === value) {
return;
}
blurSteps = value;
if (gameObject._blur) {
gameObject._blur.steps = blurSteps;
}
},
});
gameObject.blurColor = null;
AddClearEffectCallback(gameObject, 'blurColor');
return gameObject;
};
var AddBokehProperties = function (gameObject) {
// Don't attach properties again
if (HasProperty(gameObject, 'bokehRadius')) {
return gameObject;
}
var filterList = GetFilterList(gameObject);
var bokehRadius,
bokehAmount = 1,
bokehContrast = 0.2;
Object.defineProperty(gameObject, 'bokehRadius', {
get: function () {
return bokehRadius;
},
set: function (value) {
if (bokehRadius === value) {
return;
}
bokehRadius = value;
if ((bokehRadius === null) || (bokehRadius === false)) {
if (gameObject._bokeh) {
filterList.remove(gameObject._bokeh);
gameObject._bokeh = undefined;
}
} else {
if (!gameObject._bokeh) {
gameObject._bokeh = filterList.addBokeh(bokehRadius, bokehAmount, bokehContrast);
}
gameObject._bokeh.radius = bokehRadius;
}
},
});
Object.defineProperty(gameObject, 'bokehAmount', {
get: function () {
return bokehAmount;
},
set: function (value) {
if (bokehAmount === value) {
return;
}
bokehAmount = value;
if (gameObject._bokeh) {
gameObject._bokeh.amount = bokehAmount;
}
},
});
Object.defineProperty(gameObject, 'bokehContrast', {
get: function () {
return bokehContrast;
},
set: function (value) {
if (bokehContrast === value) {
return;
}
bokehContrast = value;
if (gameObject._bokeh) {
gameObject._bokeh.contrast = bokehContrast;
}
},
});
gameObject.bokehRadius = null;
AddClearEffectCallback(gameObject, 'bokehRadius');
return gameObject;
};
var AddBrightnessProperties = function (gameObject) {
AddColorMatrixEffectPropertiesBase(gameObject, 'brightness', 1);
return gameObject;
};
var AddBrownProperties = function (gameObject) {
AddColorMatrixEffectPropertiesBase(gameObject, 'brown');
return gameObject;
};
const FilterName$4 = 'FilterP3Circle';
// Built-in fx in phaser3
const frag$4 = `\
#pragma phaserTemplate(shaderName)
#ifdef GL_FRAGMENT_PRECISION_HIGH
#define highmedp highp
#else
#define highmedp mediump
#endif
precision highmedp float;
// Scene buffer
uniform sampler2D uMainSampler;
varying vec2 outTexCoord;
// Effect parameters
uniform vec2 texSize;
uniform vec3 color;
uniform vec4 backgroundColor;
uniform vec3 config;
#pragma phaserTemplate(fragmentHeader)
void main (void) {
float thickness = config.x;
float scale = config.y;
float feather = config.z;
vec4 texture = texture2D(uMainSampler, outTexCoord);
vec2 position = (gl_FragCoord.xy / texSize.xy) * 2.0 - 1.0;
float aspectRatio = texSize.x / texSize.y;
position.x *= aspectRatio;
float grad = length(position);
// height > width
float outer = aspectRatio;
float inner = outer - (thickness * 2.0 / texSize.y);
// width > height
if (aspectRatio >= 1.0)
{
float f = 2.0 + (texSize.y / texSize.x);
outer = 1.0;
inner = 1.0 - (thickness * f / texSize.x);
}
outer *= scale;
inner *= scale;
float circle = smoothstep(outer, outer - 0.01, grad);
float ring = circle - smoothstep(inner, inner - feather, grad);
texture = mix(backgroundColor * backgroundColor.a, texture, texture.a);
texture = (texture * (circle - ring));
gl_FragColor = vec4(texture.rgb + (ring * color), texture.a);
}
`;
class CircleFilter extends Phaser.Renderer.WebGL.RenderNodes.BaseFilterShader {
static FilterName = FilterName$4;
constructor(manager) {
super(FilterName$4, manager, null, frag$4);
}
// This method sets up the uniforms for the shader.
setupUniforms(controller, drawingContext) {
const programManager = this.programManager;
programManager.setUniform('texSize', [drawingContext.width, drawingContext.height]);
programManager.se