ultimate-angel-zerachiel/www/js/plugins/TRP_Particle.js
2024-01-17 12:05:32 -06:00

10297 lines
367 KiB
JavaScript

//=============================================================================
// TRP_Particle.js
//=============================================================================
/* このソフトウェアは正規に購入したユーザーのみが利用規約に従って使用することができます。
また、このソフトウェアはMITライセンス、ならびにApache 2.0ライセンスで配布されている製作物が含まれています。
http://www.opensource.org/licenses/mit-license
http://www.apache.org/licenses/LICENSE-2.0
*/
//=============================================================================
/*:
* @author Thirop
* @plugindesc ※TRP_Particle_Presetより下に配置
* @help
* 【更新履歴】
* 2.30 2023/01/22 他シーン用のパーティクルをクリア時の不具合修正
* 2.29 2022/12/11 戦闘中に待機中アクターにステート付与時に発生する不具合の修正
* 2.28 2022/12/05 戦闘不能などステート全解除時にパーティクルが残る不具合の修正
* 2.27 2022/09/07 グループ機能追加時のセーブデータ互換性の対応
* 2.25 2022/07/31 タグ情報管理の不具合修正
* スキルのパーティクル表示設定で「user」に対応
* 2.24 2022/06/24 敵のステートに関連する内部処理の変更
* 2.23 2022/06/04 可変タイルサイズに対応
* 2.22 2022/05/26 アニメーション画像使用時の不具合修正
* 2.20 2022/03/20 exceedコマンドの不具合修正
* 2.19 2022/2/5 exceedコマンドの不具合修正
* 2.17 2022/1/9 iOSでの動作不具合修正
* 2.15 2021/12/6 戦闘中のメンバーの入れ替えに対応
* 2.09 2021/8/18 設定名の「/h」を自動補完
* walk/startdashのデフォルトZ値をbelowに変更
* 「weather:x,y」で視差スクロール対応
* プラグイン設定「キャッシュ設定(β)」の実装
* 2.07 --- 最大数制限が正しく変更されない不具合修正
* 2.06 --- ウィンドウ開閉時に白く表示される不具合への前提対応
* 2.05 --- 内部処理の一部変更
* 2.03 --- screen
* 2.02 --- 変数の制御文字に対応
* 2.00 --- 初版。
*
* @param importLibrary
* @text ライブラリインポート
* @desc pixi-particles.jsの内容をこのプラグイン内で定義する場合はON/true。独自にインポートする場合はOFF/false。
* @type boolean
* @default true
*
* @param importFilter
* @text pixi-filtersインポート
* @desc pixi-filters.jsの内容をこのプラグイン内で定義する場合はON/true。独自にインポートする場合はOFF/false。
* @type boolean
* @default true
*
* @param systemParticles
* @text 常用パーティクル
* @desc マップ・戦闘以外でも表示したいマウスクリック(click)/ドラッグ(drag)などのパーティクルを設定。
* @type String[]
* @default ["particle set click click","particle set click2 click"]
*
* @param commandName
* @text コマンド名
* @desc 他のプラグインとコマンド名が被る場合に変更。カンマ続きで複数可(デフォルトはparticle,パーティクル)
* @default particle,パーティクル
*
* @param keepPictureOrder
* @text ピクチャ重ね順保持
* @desc ONにすると各ピクチャの間に表示。OFFにすると全てのピクチャの前後に表示。ONは競合の可能性高め
* @type boolean
* @default false
*
* @param walkOffset
* @text walk時のオフセット
* @desc walk対象時に指定したピクセル分だけキャラクターの前に表示します。
* @default 16
* @type number
*
* @param dashOffset
* @text startDash時のオフセット
* @desc startDash対象時に指定したピクセル分だけキャラクターの前に表示します。
* @default 16
* @type number
*
* @param categoryClear
* @text 【自動クリア】
* @default ==============================
*
* @param clearCharacterOnMapChange
* @text 移動時イベント対象クリア
* @desc マップ移動時にイベントを対象としたパーティクル設定をクリア
* @default true
* @type boolean
* @parent categoryClear
*
* @param clearPartyOnMapChange
* @text 移動時パーティー対象クリア
* @desc マップ移動時にプレイヤー/フォロワー対象のパーティクル設定をクリア
* @default true
* @type boolean
* @parent categoryClear
*
* @param clearScreenOnMapChange
* @text 移動時Screen対象クリア
* @desc マップ移動時に対象screen/weather/regionのパーティクル設定をクリア
* @default true
* @type boolean
* @parent categoryClear
*
* @param clearBattleScreenOnEnd
* @text 戦闘終了時に戦闘Screen対象クリア
* @desc 戦闘終了時に対象battle/battleWeather対象のパーティクル設定をクリア
* @default false
* @type boolean
* @parent categoryClear
*
* @param clearBattleCharaOnEnd
* @text 戦闘終了時に戦闘キャラ対象クリア
* @desc 戦闘終了時に対象party/enemy対象のパーティクル設定をクリア
* @default true
* @type boolean
* @parent categoryClear
*
* @param categoryPerformance
* @text 【パフォーマンス】
* @default ==============================
*
* @param regionMargin
* @text リージョンの画面外幅
* @desc ターゲットをregionにした場合にパーティクルを発生させる画面外の余白タイル数。(デフォ2)
* @type number
* @default 2
* @parent categoryPerformance
*
* @param outsideMargin
* @text キャラ対象の画面外幅
* @desc ターゲットがキャラの場合のパーティクルを発生させる画面外の余白タイル数。(デフォ4,マイナスで無効)
* @default 6
* @type number
* @min -9999
* @parent categoryPerformance
*
* @param maxParticles
* @text 最大パーティクル数
* @desc 画面上の最大パーティクル数(0以下で制限なし)の制限の初期値。最大数を超えるとそれぞれのfrequencyなどを調整。
* @default 100000
* @type number
* @parent categoryPerformance
*
* @param useCache
* @text キャッシュ設定(β)
* @desc ON/trueでより効率的にパーティクルを再利用。試験導入機能なので要動作確認
* @type boolean
* @default false
* @parent categoryPerformance
*
* @param categoryConflict
* @text 【機能無効化/競合対策】
* @default ==============================
*
* @param disableState
* @text ステート表示無効
* @desc ONにするとステートでのパーティクル表示無効。(競合ある場合にOFF)
* @type boolean
* @default false
* @parent categoryConflict
*
* @param disableSkill
* @text スキル表示無効
* @desc ONにするとスキルでのパーティクル表示無効。(競合ある場合にOFF)
* @type boolean
* @default false
* @parent categoryConflict
*
* @param disableRoute
* @text 移動ルートでのコマンド無効
* @desc ONにすると移動ルートでのコマンド実行無効。(競合ある場合にOFF)
* @type boolean
* @default false
* @parent categoryConflict
*
* @param cacheBeforeTerminate
* @text 終了処理前にキャッシュ
* @desc 競合対策用。基本OFFにしてください。
* @type boolean
* @default false
* @parent categoryConflict
*
*
* @param categorySenior
* @text 【上級者向け用】
* @default ==============================
*
* @param sceneTypes
* @text シーン対象登録
* @desc メニューなどのシーンで表示する場合にクラス名登録。
* @type string[]
* @default ["Scene_Menu-Scene_Save-Scene_Item-Scene_Equip-Scene_Actor-Scene_Skill-Scene_Status","Scene_Title","Scene_Load","Scene_Options","Scene_Shop","Scene_Gameover"]
* @parent categorySenior
*
* @param noRewriteFunctions
* @text Particle関数の上書きを無効
* @desc pixi-particle.js由来の一部基幹関数の上書きを無効化します(上級者向け)
* @type boolean
* @default false
* @parent categorySenior
*
* @param categoryDebug
* @text 【デバッグ用】
* @default ==============================
*
* @param displayCount
* @text パーティクル数表示
* @desc ONで全パーティクル数表示(デバッグ用)
* @type boolean
* @default false
* @parent categoryDebug
*
* @param errorLog
* @text エラー表示
* @desc 正しくないIDや設定データ名を指定した場合にerror表示する。
* @type boolean
* @default true
* @parent categoryDebug
*
* @param windowBugFix
* @text ウィンドウ不具合回避
* @desc 背景透明でメッセージ表示の際に開閉中のネームボックスが白くなる不具合の暫定回避。
* @type boolean
* @default true
* @parent categoryDebug
*
*/
//=============================================================================
PluginManager.registerCommand =
PluginManager.registerCommand || function (pluginName, commandName, func) {};
//PRAGMA_END: header
//PRAGMA: englishHeader
//PRAGMA_END: englishHeader
var $dataTrpParticlePreset = $dataTrpParticlePreset || null;
var $dataTrpParticles = null;
(function () {
//PRAGMA: pluginName
var pluginName = "TRP_Particle";
//PRAGMA_END: pluginName
if (PluginManager.parameters(pluginName).importLibrary !== "true") return;
/*!
* pixi-particles - v4.3.0
* Compiled Fri, 18 Sep 2020 13:47:54 UTC
*
* pixi-particles is licensed under the MIT License.
* http://www.opensource.org/licenses/mit-license
*/
(this.PIXI = this.PIXI || {}),
(function (t, i) {
"use strict";
var e,
s = (function () {
function i(i, e, s) {
(this.value = i),
(this.time = e),
(this.next = null),
(this.isStepped = !1),
(this.ease = s
? "function" == typeof s
? s
: t.ParticleUtils.generateEase(s)
: null);
}
return (
(i.createList = function (e) {
if ("list" in e) {
var s = e.list,
r = void 0,
n = s[0],
a = n.value,
h = n.time,
o = (r = new i(
"string" == typeof a ? t.ParticleUtils.hexToRGB(a) : a,
h,
e.ease
));
if (s.length > 2 || (2 === s.length && s[1].value !== a))
for (var l = 1; l < s.length; ++l) {
var p = s[l],
d = p.value,
c = p.time;
(r.next = new i(
"string" == typeof d ? t.ParticleUtils.hexToRGB(d) : d,
c
)),
(r = r.next);
}
return (o.isStepped = !!e.isStepped), o;
}
var u = new i(
"string" == typeof e.start
? t.ParticleUtils.hexToRGB(e.start)
: e.start,
0
);
return (
e.end !== e.start &&
(u.next = new i(
"string" == typeof e.end
? t.ParticleUtils.hexToRGB(e.end)
: e.end,
1
)),
u
);
}),
i
);
})(),
r = i;
function n(t) {
return e(t);
}
(e =
parseInt(/^(\d+)\./.exec(i.VERSION)[1], 10) < 5
? r.Texture.fromImage
: r.Texture.from),
(function (t) {
(t.verbose = !1),
(t.DEG_TO_RADS = Math.PI / 180),
(t.rotatePoint = function (i, e) {
if (i) {
i *= t.DEG_TO_RADS;
var s = Math.sin(i),
r = Math.cos(i),
n = e.x * r - e.y * s,
a = e.x * s + e.y * r;
(e.x = n), (e.y = a);
}
}),
(t.combineRGBComponents = function (t, i, e) {
return (t << 16) | (i << 8) | e;
}),
(t.normalize = function (i) {
var e = 1 / t.length(i);
(i.x *= e), (i.y *= e);
}),
(t.scaleBy = function (t, i) {
(t.x *= i), (t.y *= i);
}),
(t.length = function (t) {
return Math.sqrt(t.x * t.x + t.y * t.y);
}),
(t.hexToRGB = function (t, i) {
var e;
return (
i || (i = {}),
"#" === t.charAt(0)
? (t = t.substr(1))
: 0 === t.indexOf("0x") && (t = t.substr(2)),
8 === t.length && ((e = t.substr(0, 2)), (t = t.substr(2))),
(i.r = parseInt(t.substr(0, 2), 16)),
(i.g = parseInt(t.substr(2, 2), 16)),
(i.b = parseInt(t.substr(4, 2), 16)),
e && (i.a = parseInt(e, 16)),
i
);
}),
(t.generateEase = function (t) {
var i = t.length,
e = 1 / i;
return function (s) {
var r = (i * s) | 0,
n = (s - r * e) * i,
a = t[r] || t[i - 1];
return a.s + n * (2 * (1 - n) * (a.cp - a.s) + n * (a.e - a.s));
};
}),
(t.getBlendMode = function (t) {
if (!t) return i.BLEND_MODES.NORMAL;
for (t = t.toUpperCase(); t.indexOf(" ") >= 0; )
t = t.replace(" ", "_");
return i.BLEND_MODES[t] || i.BLEND_MODES.NORMAL;
}),
(t.createSteppedGradient = function (i, e) {
void 0 === e && (e = 10),
("number" != typeof e || e <= 0) && (e = 10);
var r = new s(t.hexToRGB(i[0].value), i[0].time);
r.isStepped = !0;
for (var n = r, a = i[0], h = 1, o = i[h], l = 1; l < e; ++l) {
for (var p = l / e; p > o.time; ) (a = o), (o = i[++h]);
p = (p - a.time) / (o.time - a.time);
var d = t.hexToRGB(a.value),
c = t.hexToRGB(o.value),
u = {
r: (c.r - d.r) * p + d.r,
g: (c.g - d.g) * p + d.g,
b: (c.b - d.b) * p + d.b,
};
(n.next = new s(u, l / e)), (n = n.next);
}
return r;
});
})(t.ParticleUtils || (t.ParticleUtils = {}));
var a = function (t, i) {
return (a =
Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array &&
function (t, i) {
t.__proto__ = i;
}) ||
function (t, i) {
for (var e in i) i.hasOwnProperty(e) && (t[e] = i[e]);
})(t, i);
};
function h(t, i) {
function e() {
this.constructor = t;
}
a(t, i),
(t.prototype =
null === i
? Object.create(i)
: ((e.prototype = i.prototype), new e()));
}
function o(t) {
return (
this.ease && (t = this.ease(t)),
(this.next.value - this.current.value) * t + this.current.value
);
}
function l(i) {
this.ease && (i = this.ease(i));
var e = this.current.value,
s = this.next.value,
r = (s.r - e.r) * i + e.r,
n = (s.g - e.g) * i + e.g,
a = (s.b - e.b) * i + e.b;
return t.ParticleUtils.combineRGBComponents(r, n, a);
}
function p(t) {
for (this.ease && (t = this.ease(t)); t > this.next.time; )
(this.current = this.next), (this.next = this.next.next);
return (
(t = (t - this.current.time) / (this.next.time - this.current.time)),
(this.next.value - this.current.value) * t + this.current.value
);
}
function d(i) {
for (this.ease && (i = this.ease(i)); i > this.next.time; )
(this.current = this.next), (this.next = this.next.next);
i = (i - this.current.time) / (this.next.time - this.current.time);
var e = this.current.value,
s = this.next.value,
r = (s.r - e.r) * i + e.r,
n = (s.g - e.g) * i + e.g,
a = (s.b - e.b) * i + e.b;
return t.ParticleUtils.combineRGBComponents(r, n, a);
}
function c(t) {
for (this.ease && (t = this.ease(t)); this.next && t > this.next.time; )
(this.current = this.next), (this.next = this.next.next);
return this.current.value;
}
function u(i) {
for (this.ease && (i = this.ease(i)); this.next && i > this.next.time; )
(this.current = this.next), (this.next = this.next.next);
var e = this.current.value;
return t.ParticleUtils.combineRGBComponents(e.r, e.g, e.b);
}
var m,
f = (function () {
function t(t) {
void 0 === t && (t = !1),
(this.current = null),
(this.next = null),
(this.isColor = !!t),
(this.interpolate = null),
(this.ease = null);
}
return (
(t.prototype.reset = function (t) {
(this.current = t),
(this.next = t.next),
this.next && this.next.time >= 1
? (this.interpolate = this.isColor ? l : o)
: t.isStepped
? (this.interpolate = this.isColor ? u : c)
: (this.interpolate = this.isColor ? d : p),
(this.ease = this.current.ease);
}),
t
);
})(),
_ = (function (e) {
function s(t) {
var r = e.call(this) || this;
return (
(r.prevChild = r.nextChild = null),
(r.emitter = t),
(r.anchor.x = r.anchor.y = 0.5),
(r.velocity = new i.Point()),
(r.rotationSpeed = 0),
(r.rotationAcceleration = 0),
(r.maxLife = 0),
(r.age = 0),
(r.ease = null),
(r.extraData = null),
(r.alphaList = new f()),
(r.speedList = new f()),
(r.speedMultiplier = 1),
(r.acceleration = new i.Point()),
(r.maxSpeed = NaN),
(r.scaleList = new f()),
(r.scaleMultiplier = 1),
(r.colorList = new f(!0)),
(r._doAlpha = !1),
(r._doScale = !1),
(r._doSpeed = !1),
(r._doAcceleration = !1),
(r._doColor = !1),
(r._doNormalMovement = !1),
(r._oneOverLife = 0),
(r.next = null),
(r.prev = null),
(r.init = r.init),
(r.Particle_init = s.prototype.init),
(r.update = r.update),
(r.Particle_update = s.prototype.update),
(r.Sprite_destroy = e.prototype.destroy),
(r.Particle_destroy = s.prototype.destroy),
(r.applyArt = r.applyArt),
(r.kill = r.kill),
r
);
}
return (
h(s, e),
(s.prototype.init = function () {
(this.age = 0),
(this.velocity.x =
this.speedList.current.value * this.speedMultiplier),
(this.velocity.y = 0),
t.ParticleUtils.rotatePoint(this.rotation, this.velocity),
this.noRotation
? (this.rotation = 0)
: (this.rotation *= t.ParticleUtils.DEG_TO_RADS),
(this.rotationSpeed *= t.ParticleUtils.DEG_TO_RADS),
(this.rotationAcceleration *= t.ParticleUtils.DEG_TO_RADS),
(this.alpha = this.alphaList.current.value),
(this.scale.x = this.scale.y = this.scaleList.current.value),
(this._doAlpha = !!this.alphaList.current.next),
(this._doSpeed = !!this.speedList.current.next),
(this._doScale = !!this.scaleList.current.next),
(this._doColor = !!this.colorList.current.next),
(this._doAcceleration =
0 !== this.acceleration.x || 0 !== this.acceleration.y),
(this._doNormalMovement =
this._doSpeed ||
0 !== this.speedList.current.value ||
this._doAcceleration),
(this._oneOverLife = 1 / this.maxLife);
var i = this.colorList.current.value;
(this.tint = t.ParticleUtils.combineRGBComponents(i.r, i.g, i.b)),
(this.visible = !0);
}),
(s.prototype.applyArt = function (t) {
this.texture = t || i.Texture.EMPTY;
}),
(s.prototype.update = function (i) {
if (((this.age += i), this.age >= this.maxLife || this.age < 0))
return this.kill(), -1;
var e = this.age * this._oneOverLife;
if (
(this.ease &&
(e =
4 === this.ease.length
? this.ease(e, 0, 1, 1)
: this.ease(e)),
this._doAlpha && (this.alpha = this.alphaList.interpolate(e)),
this._doScale)
) {
var s = this.scaleList.interpolate(e) * this.scaleMultiplier;
this.scale.x = this.scale.y = s;
}
if (this._doNormalMovement) {
var r = void 0,
n = void 0;
if (this._doSpeed) {
var a = this.speedList.interpolate(e) * this.speedMultiplier;
t.ParticleUtils.normalize(this.velocity),
t.ParticleUtils.scaleBy(this.velocity, a),
(r = this.velocity.x * i),
(n = this.velocity.y * i);
} else if (this._doAcceleration) {
var h = this.velocity.x,
o = this.velocity.y;
if (
((this.velocity.x += this.acceleration.x * i),
(this.velocity.y += this.acceleration.y * i),
this.maxSpeed)
) {
var l = t.ParticleUtils.length(this.velocity);
l > this.maxSpeed &&
t.ParticleUtils.scaleBy(this.velocity, this.maxSpeed / l);
}
(r = ((h + this.velocity.x) / 2) * i),
(n = ((o + this.velocity.y) / 2) * i);
} else (r = this.velocity.x * i), (n = this.velocity.y * i);
(this.position.x += r), (this.position.y += n);
}
if (
(this._doColor && (this.tint = this.colorList.interpolate(e)),
0 !== this.rotationAcceleration)
) {
var p = this.rotationSpeed + this.rotationAcceleration * i;
(this.rotation += ((this.rotationSpeed + p) / 2) * i),
(this.rotationSpeed = p);
} else
0 !== this.rotationSpeed
? (this.rotation += this.rotationSpeed * i)
: this.acceleration &&
!this.noRotation &&
(this.rotation = Math.atan2(
this.velocity.y,
this.velocity.x
));
return e;
}),
(s.prototype.kill = function () {
this.emitter.recycle(this);
}),
(s.prototype.destroy = function () {
this.parent && this.parent.removeChild(this),
this.Sprite_destroy(),
(this.emitter =
this.velocity =
this.colorList =
this.scaleList =
this.alphaList =
this.speedList =
this.ease =
this.next =
this.prev =
null);
}),
(s.parseArt = function (i) {
var e;
for (e = i.length; e >= 0; --e)
"string" == typeof i[e] && (i[e] = n(i[e]));
if (t.ParticleUtils.verbose)
for (e = i.length - 1; e > 0; --e)
if (i[e].baseTexture !== i[e - 1].baseTexture) {
window.console &&
console.warn(
"PixiParticles: using particle textures from different images may hinder performance in WebGL"
);
break;
}
return i;
}),
(s.parseData = function (t) {
return t;
}),
s
);
})(i.Sprite),
C = (function () {
function t(t) {
(this.segments = []),
(this.countingLengths = []),
(this.totalLength = 0),
this.init(t);
}
return (
(t.prototype.init = function (t) {
if (t && t.length)
if (Array.isArray(t[0]))
for (var i = 0; i < t.length; ++i)
for (var e = t[i], s = e[0], r = 1; r < e.length; ++r) {
var n = e[r];
this.segments.push({ p1: s, p2: n, l: 0 }), (s = n);
}
else
for (s = t[0], i = 1; i < t.length; ++i) {
n = t[i];
this.segments.push({ p1: s, p2: n, l: 0 }), (s = n);
}
else
this.segments.push({
p1: { x: 0, y: 0 },
p2: { x: 0, y: 0 },
l: 0,
});
for (i = 0; i < this.segments.length; ++i) {
var a = this.segments[i],
h = a.p1,
o = a.p2,
l = Math.sqrt(
(o.x - h.x) * (o.x - h.x) + (o.y - h.y) * (o.y - h.y)
);
(this.segments[i].l = l),
(this.totalLength += l),
this.countingLengths.push(this.totalLength);
}
}),
(t.prototype.getRandomPoint = function (t) {
var i,
e,
s = Math.random() * this.totalLength;
if (1 === this.segments.length) (i = this.segments[0]), (e = s);
else
for (var r = 0; r < this.countingLengths.length; ++r)
if (s < this.countingLengths[r]) {
(i = this.segments[r]),
(e = 0 === r ? s : s - this.countingLengths[r - 1]);
break;
}
e /= i.l || 1;
var n = i.p1,
a = i.p2;
(t.x = n.x + e * (a.x - n.x)), (t.y = n.y + e * (a.y - n.y));
}),
t
);
})(),
v = i;
m =
parseInt(/^(\d+)\./.exec(i.VERSION)[1], 10) < 5
? v.ticker.shared
: v.Ticker.shared;
var x = new i.Point(),
y = (function () {
function e(t, i, e) {
(this._currentImageIndex = -1),
(this._particleConstructor = _),
(this.particleImages = null),
(this.startAlpha = null),
(this.startSpeed = null),
(this.minimumSpeedMultiplier = 1),
(this.acceleration = null),
(this.maxSpeed = NaN),
(this.startScale = null),
(this.minimumScaleMultiplier = 1),
(this.startColor = null),
(this.minLifetime = 0),
(this.maxLifetime = 0),
(this.minStartRotation = 0),
(this.maxStartRotation = 0),
(this.noRotation = !1),
(this.minRotationSpeed = 0),
(this.maxRotationSpeed = 0),
(this.particleBlendMode = 0),
(this.customEase = null),
(this.extraData = null),
(this._frequency = 1),
(this.spawnChance = 1),
(this.maxParticles = 1e3),
(this.emitterLifetime = -1),
(this.spawnPos = null),
(this.spawnType = null),
(this._spawnFunc = null),
(this.spawnRect = null),
(this.spawnCircle = null),
(this.spawnPolygonalChain = null),
(this.particlesPerWave = 1),
(this.particleSpacing = 0),
(this.angleStart = 0),
(this.rotation = 0),
(this.ownerPos = null),
(this._prevEmitterPos = null),
(this._prevPosIsValid = !1),
(this._posChanged = !1),
(this._parent = null),
(this.addAtBack = !1),
(this.particleCount = 0),
(this._emit = !1),
(this._spawnTimer = 0),
(this._emitterLife = -1),
(this._activeParticlesFirst = null),
(this._activeParticlesLast = null),
(this._poolFirst = null),
(this._origConfig = null),
(this._origArt = null),
(this._autoUpdate = !1),
(this._currentImageIndex = -1),
(this._destroyWhenComplete = !1),
(this._completeCallback = null),
(this.parent = t),
i && e && this.init(i, e),
(this.recycle = this.recycle),
(this.update = this.update),
(this.rotate = this.rotate),
(this.updateSpawnPos = this.updateSpawnPos),
(this.updateOwnerPos = this.updateOwnerPos);
}
return (
Object.defineProperty(e.prototype, "orderedArt", {
get: function () {
return -1 !== this._currentImageIndex;
},
set: function (t) {
this._currentImageIndex = t ? 0 : -1;
},
enumerable: !0,
configurable: !0,
}),
Object.defineProperty(e.prototype, "frequency", {
get: function () {
return this._frequency;
},
set: function (t) {
this._frequency = "number" == typeof t && t > 0 ? t : 1;
},
enumerable: !0,
configurable: !0,
}),
Object.defineProperty(e.prototype, "particleConstructor", {
get: function () {
return this._particleConstructor;
},
set: function (t) {
if (t !== this._particleConstructor) {
(this._particleConstructor = t), this.cleanup();
for (var i = this._poolFirst; i; i = i.next) i.destroy();
(this._poolFirst = null),
this._origConfig &&
this._origArt &&
this.init(this._origArt, this._origConfig);
}
},
enumerable: !0,
configurable: !0,
}),
Object.defineProperty(e.prototype, "parent", {
get: function () {
return this._parent;
},
set: function (t) {
this.cleanup(), (this._parent = t);
},
enumerable: !0,
configurable: !0,
}),
(e.prototype.init = function (e, r) {
if (e && r) {
this.cleanup(),
(this._origConfig = r),
(this._origArt = e),
(e = Array.isArray(e) ? e.slice() : [e]);
var n = this._particleConstructor;
(this.particleImages = n.parseArt ? n.parseArt(e) : e),
r.alpha
? (this.startAlpha = s.createList(r.alpha))
: (this.startAlpha = new s(1, 0)),
r.speed
? ((this.startSpeed = s.createList(r.speed)),
(this.minimumSpeedMultiplier =
("minimumSpeedMultiplier" in r
? r.minimumSpeedMultiplier
: r.speed.minimumSpeedMultiplier) || 1))
: ((this.minimumSpeedMultiplier = 1),
(this.startSpeed = new s(0, 0)));
var a = r.acceleration;
a && (a.x || a.y)
? ((this.startSpeed.next = null),
(this.acceleration = new i.Point(a.x, a.y)),
(this.maxSpeed = r.maxSpeed || NaN))
: (this.acceleration = new i.Point()),
r.scale
? ((this.startScale = s.createList(r.scale)),
(this.minimumScaleMultiplier =
("minimumScaleMultiplier" in r
? r.minimumScaleMultiplier
: r.scale.minimumScaleMultiplier) || 1))
: ((this.startScale = new s(1, 0)),
(this.minimumScaleMultiplier = 1)),
r.color
? (this.startColor = s.createList(r.color))
: (this.startColor = new s({ r: 255, g: 255, b: 255 }, 0)),
r.startRotation
? ((this.minStartRotation = r.startRotation.min),
(this.maxStartRotation = r.startRotation.max))
: (this.minStartRotation = this.maxStartRotation = 0),
r.noRotation &&
(this.minStartRotation || this.maxStartRotation)
? (this.noRotation = !!r.noRotation)
: (this.noRotation = !1),
r.rotationSpeed
? ((this.minRotationSpeed = r.rotationSpeed.min),
(this.maxRotationSpeed = r.rotationSpeed.max))
: (this.minRotationSpeed = this.maxRotationSpeed = 0),
(this.rotationAcceleration = r.rotationAcceleration || 0),
(this.minLifetime = r.lifetime.min),
(this.maxLifetime = r.lifetime.max),
(this.particleBlendMode = t.ParticleUtils.getBlendMode(
r.blendMode
)),
r.ease
? (this.customEase =
"function" == typeof r.ease
? r.ease
: t.ParticleUtils.generateEase(r.ease))
: (this.customEase = null),
n.parseData
? (this.extraData = n.parseData(r.extraData))
: (this.extraData = r.extraData || null),
(this.spawnRect = this.spawnCircle = null),
(this.particlesPerWave = 1),
r.particlesPerWave &&
r.particlesPerWave > 1 &&
(this.particlesPerWave = r.particlesPerWave),
(this.particleSpacing = 0),
(this.angleStart = 0),
this.parseSpawnType(r),
(this.frequency = r.frequency),
(this.spawnChance =
"number" == typeof r.spawnChance && r.spawnChance > 0
? r.spawnChance
: 1),
(this.emitterLifetime = r.emitterLifetime || -1),
(this.maxParticles =
r.maxParticles > 0 ? r.maxParticles : 1e3),
(this.addAtBack = !!r.addAtBack),
(this.rotation = 0),
(this.ownerPos = new i.Point()),
(this.spawnPos = new i.Point(r.pos.x, r.pos.y)),
this.initAdditional(e, r),
(this._prevEmitterPos = this.spawnPos.clone()),
(this._prevPosIsValid = !1),
(this._spawnTimer = 0),
(this.emit = void 0 === r.emit || !!r.emit),
(this.autoUpdate = !!r.autoUpdate),
(this.orderedArt = !!r.orderedArt);
}
}),
(e.prototype.initAdditional = function (t, i) {}),
(e.prototype.parseSpawnType = function (t) {
var e;
switch (t.spawnType) {
case "rect":
(this.spawnType = "rect"),
(this._spawnFunc = this._spawnRect);
var s = t.spawnRect;
this.spawnRect = new i.Rectangle(s.x, s.y, s.w, s.h);
break;
case "circle":
(this.spawnType = "circle"),
(this._spawnFunc = this._spawnCircle),
(e = t.spawnCircle),
(this.spawnCircle = new i.Circle(e.x, e.y, e.r));
break;
case "ring":
(this.spawnType = "ring"),
(this._spawnFunc = this._spawnRing),
(e = t.spawnCircle),
(this.spawnCircle = new i.Circle(e.x, e.y, e.r)),
(this.spawnCircle.minRadius = e.minR);
break;
case "burst":
(this.spawnType = "burst"),
(this._spawnFunc = this._spawnBurst),
(this.particleSpacing = t.particleSpacing),
(this.angleStart = t.angleStart ? t.angleStart : 0);
break;
case "point":
(this.spawnType = "point"),
(this._spawnFunc = this._spawnPoint);
break;
case "polygonalChain":
(this.spawnType = "polygonalChain"),
(this._spawnFunc = this._spawnPolygonalChain),
(this.spawnPolygonalChain = new C(t.spawnPolygon));
break;
default:
(this.spawnType = "point"),
(this._spawnFunc = this._spawnPoint);
}
}),
(e.prototype.recycle = function (t) {
t.next && (t.next.prev = t.prev),
t.prev && (t.prev.next = t.next),
t === this._activeParticlesLast &&
(this._activeParticlesLast = t.prev),
t === this._activeParticlesFirst &&
(this._activeParticlesFirst = t.next),
(t.prev = null),
(t.next = this._poolFirst),
(this._poolFirst = t),
t.parent && t.parent.removeChild(t),
--this.particleCount;
}),
(e.prototype.rotate = function (i) {
if (this.rotation !== i) {
var e = i - this.rotation;
(this.rotation = i),
t.ParticleUtils.rotatePoint(e, this.spawnPos),
(this._posChanged = !0);
}
}),
(e.prototype.updateSpawnPos = function (t, i) {
(this._posChanged = !0),
(this.spawnPos.x = t),
(this.spawnPos.y = i);
}),
(e.prototype.updateOwnerPos = function (t, i) {
(this._posChanged = !0),
(this.ownerPos.x = t),
(this.ownerPos.y = i);
}),
(e.prototype.resetPositionTracking = function () {
this._prevPosIsValid = !1;
}),
Object.defineProperty(e.prototype, "emit", {
get: function () {
return this._emit;
},
set: function (t) {
(this._emit = !!t), (this._emitterLife = this.emitterLifetime);
},
enumerable: !0,
configurable: !0,
}),
Object.defineProperty(e.prototype, "autoUpdate", {
get: function () {
return this._autoUpdate;
},
set: function (t) {
this._autoUpdate && !t
? m.remove(this.update, this)
: !this._autoUpdate && t && m.add(this.update, this),
(this._autoUpdate = !!t);
},
enumerable: !0,
configurable: !0,
}),
(e.prototype.playOnceAndDestroy = function (t) {
(this.autoUpdate = !0),
(this.emit = !0),
(this._destroyWhenComplete = !0),
(this._completeCallback = t);
}),
(e.prototype.playOnce = function (t) {
(this.emit = !0), (this._completeCallback = t);
}),
(e.prototype.update = function (t) {
if (
(this._autoUpdate && (t = t / i.settings.TARGET_FPMS / 1e3),
this._parent)
) {
var e, s, r, n, a;
for (s = this._activeParticlesFirst; s; s = r)
(r = s.next), s.update(t);
this._prevPosIsValid &&
((n = this._prevEmitterPos.x), (a = this._prevEmitterPos.y));
var h = this.ownerPos.x + this.spawnPos.x,
o = this.ownerPos.y + this.spawnPos.y;
if (this._emit)
for (
this._spawnTimer -= t < 0 ? 0 : t;
this._spawnTimer <= 0;
) {
if (
this._emitterLife >= 0 &&
((this._emitterLife -= this._frequency),
this._emitterLife <= 0)
) {
(this._spawnTimer = 0),
(this._emitterLife = 0),
(this.emit = !1);
break;
}
if (this.particleCount >= this.maxParticles)
this._spawnTimer += this._frequency;
else {
var l = void 0;
if (
((l =
this.minLifetime === this.maxLifetime
? this.minLifetime
: Math.random() *
(this.maxLifetime - this.minLifetime) +
this.minLifetime),
-this._spawnTimer < l)
) {
var p = void 0,
d = void 0;
if (this._prevPosIsValid && this._posChanged) {
var c = 1 + this._spawnTimer / t;
(p = (h - n) * c + n), (d = (o - a) * c + a);
} else (p = h), (d = o);
e = 0;
for (
var u = Math.min(
this.particlesPerWave,
this.maxParticles - this.particleCount
);
e < u;
++e
)
if (
!(
this.spawnChance < 1 &&
Math.random() >= this.spawnChance
)
) {
var m = void 0;
this._poolFirst
? ((m = this._poolFirst),
(this._poolFirst = this._poolFirst.next),
(m.next = null))
: (m = new this.particleConstructor(this)),
this.particleImages.length > 1
? -1 !== this._currentImageIndex
? (m.applyArt(
this.particleImages[
this._currentImageIndex++
]
),
(this._currentImageIndex < 0 ||
this._currentImageIndex >=
this.particleImages.length) &&
(this._currentImageIndex = 0))
: m.applyArt(
this.particleImages[
Math.floor(
Math.random() *
this.particleImages.length
)
]
)
: m.applyArt(this.particleImages[0]),
m.alphaList.reset(this.startAlpha),
1 !== this.minimumSpeedMultiplier &&
(m.speedMultiplier =
Math.random() *
(1 - this.minimumSpeedMultiplier) +
this.minimumSpeedMultiplier),
m.speedList.reset(this.startSpeed),
(m.acceleration.x = this.acceleration.x),
(m.acceleration.y = this.acceleration.y),
(m.maxSpeed = this.maxSpeed),
1 !== this.minimumScaleMultiplier &&
(m.scaleMultiplier =
Math.random() *
(1 - this.minimumScaleMultiplier) +
this.minimumScaleMultiplier),
m.scaleList.reset(this.startScale),
m.colorList.reset(this.startColor),
this.minRotationSpeed === this.maxRotationSpeed
? (m.rotationSpeed = this.minRotationSpeed)
: (m.rotationSpeed =
Math.random() *
(this.maxRotationSpeed -
this.minRotationSpeed) +
this.minRotationSpeed),
(m.rotationAcceleration =
this.rotationAcceleration),
(m.noRotation = this.noRotation),
(m.maxLife = l),
(m.blendMode = this.particleBlendMode),
(m.ease = this.customEase),
(m.extraData = this.extraData),
this.applyAdditionalProperties(m),
this._spawnFunc(m, p, d, e),
m.init(),
this.addAtBack
? this._parent.addChildAt(m, 0)
: this._parent.addChild(m),
this._activeParticlesLast
? ((this._activeParticlesLast.next = m),
(m.prev = this._activeParticlesLast),
(this._activeParticlesLast = m))
: (this._activeParticlesLast =
this._activeParticlesFirst =
m),
++this.particleCount,
m.update(-this._spawnTimer);
}
}
this._spawnTimer += this._frequency;
}
}
if (
(this._posChanged &&
((this._prevEmitterPos.x = h),
(this._prevEmitterPos.y = o),
(this._prevPosIsValid = !0),
(this._posChanged = !1)),
!this._emit && !this._activeParticlesFirst)
) {
if (this._completeCallback) {
var f = this._completeCallback;
(this._completeCallback = null), f();
}
this._destroyWhenComplete && this.destroy();
}
}
}),
(e.prototype.applyAdditionalProperties = function (t) {}),
(e.prototype._spawnPoint = function (t, i, e) {
this.minStartRotation === this.maxStartRotation
? (t.rotation = this.minStartRotation + this.rotation)
: (t.rotation =
Math.random() *
(this.maxStartRotation - this.minStartRotation) +
this.minStartRotation +
this.rotation),
(t.position.x = i),
(t.position.y = e);
}),
(e.prototype._spawnRect = function (i, e, s) {
this.minStartRotation === this.maxStartRotation
? (i.rotation = this.minStartRotation + this.rotation)
: (i.rotation =
Math.random() *
(this.maxStartRotation - this.minStartRotation) +
this.minStartRotation +
this.rotation),
(x.x = Math.random() * this.spawnRect.width + this.spawnRect.x),
(x.y =
Math.random() * this.spawnRect.height + this.spawnRect.y),
0 !== this.rotation &&
t.ParticleUtils.rotatePoint(this.rotation, x),
(i.position.x = e + x.x),
(i.position.y = s + x.y);
}),
(e.prototype._spawnCircle = function (i, e, s) {
this.minStartRotation === this.maxStartRotation
? (i.rotation = this.minStartRotation + this.rotation)
: (i.rotation =
Math.random() *
(this.maxStartRotation - this.minStartRotation) +
this.minStartRotation +
this.rotation),
(x.x = Math.random() * this.spawnCircle.radius),
(x.y = 0),
t.ParticleUtils.rotatePoint(360 * Math.random(), x),
(x.x += this.spawnCircle.x),
(x.y += this.spawnCircle.y),
0 !== this.rotation &&
t.ParticleUtils.rotatePoint(this.rotation, x),
(i.position.x = e + x.x),
(i.position.y = s + x.y);
}),
(e.prototype._spawnRing = function (i, e, s) {
var r = this.spawnCircle;
this.minStartRotation === this.maxStartRotation
? (i.rotation = this.minStartRotation + this.rotation)
: (i.rotation =
Math.random() *
(this.maxStartRotation - this.minStartRotation) +
this.minStartRotation +
this.rotation),
r.minRadius !== r.radius
? (x.x =
Math.random() * (r.radius - r.minRadius) + r.minRadius)
: (x.x = r.radius),
(x.y = 0);
var n = 360 * Math.random();
(i.rotation += n),
t.ParticleUtils.rotatePoint(n, x),
(x.x += this.spawnCircle.x),
(x.y += this.spawnCircle.y),
0 !== this.rotation &&
t.ParticleUtils.rotatePoint(this.rotation, x),
(i.position.x = e + x.x),
(i.position.y = s + x.y);
}),
(e.prototype._spawnPolygonalChain = function (i, e, s) {
this.minStartRotation === this.maxStartRotation
? (i.rotation = this.minStartRotation + this.rotation)
: (i.rotation =
Math.random() *
(this.maxStartRotation - this.minStartRotation) +
this.minStartRotation +
this.rotation),
this.spawnPolygonalChain.getRandomPoint(x),
0 !== this.rotation &&
t.ParticleUtils.rotatePoint(this.rotation, x),
(i.position.x = e + x.x),
(i.position.y = s + x.y);
}),
(e.prototype._spawnBurst = function (t, i, e, s) {
0 === this.particleSpacing
? (t.rotation = 360 * Math.random())
: (t.rotation =
this.angleStart + this.particleSpacing * s + this.rotation),
(t.position.x = i),
(t.position.y = e);
}),
(e.prototype.cleanup = function () {
var t, i;
for (t = this._activeParticlesFirst; t; t = i)
(i = t.next),
this.recycle(t),
t.parent && t.parent.removeChild(t);
(this._activeParticlesFirst = this._activeParticlesLast = null),
(this.particleCount = 0);
}),
(e.prototype.destroy = function () {
var t;
(this.autoUpdate = !1), this.cleanup();
for (var i = this._poolFirst; i; i = t) (t = i.next), i.destroy();
this._poolFirst =
this._parent =
this.particleImages =
this.spawnPos =
this.ownerPos =
this.startColor =
this.startScale =
this.startAlpha =
this.startSpeed =
this.customEase =
this._completeCallback =
null;
}),
e
);
})(),
g = new i.Point(),
P = [
"pow",
"sqrt",
"abs",
"floor",
"round",
"ceil",
"E",
"PI",
"sin",
"cos",
"tan",
"asin",
"acos",
"atan",
"atan2",
"log",
],
w = new RegExp(
["[01234567890\\.\\*\\-\\+\\/\\(\\)x ,]"].concat(P).join("|"),
"g"
);
var b = (function (e) {
function s(t) {
var s = e.call(this, t) || this;
return (
(s.path = null),
(s.initialRotation = 0),
(s.initialPosition = new i.Point()),
(s.movement = 0),
s
);
}
return (
h(s, e),
(s.prototype.init = function () {
(this.initialRotation = this.rotation),
this.Particle_init(),
(this.path = this.extraData.path),
(this._doNormalMovement = !this.path),
(this.movement = 0),
(this.initialPosition.x = this.position.x),
(this.initialPosition.y = this.position.y);
}),
(s.prototype.update = function (i) {
var e = this.Particle_update(i);
if (e >= 0 && this.path) {
if (this._doSpeed) {
var s = this.speedList.interpolate(e) * this.speedMultiplier;
this.movement += s * i;
} else {
s = this.speedList.current.value * this.speedMultiplier;
this.movement += s * i;
}
(g.x = this.movement),
(g.y = this.path(this.movement)),
t.ParticleUtils.rotatePoint(this.initialRotation, g),
(this.position.x = this.initialPosition.x + g.x),
(this.position.y = this.initialPosition.y + g.y);
}
return e;
}),
(s.prototype.destroy = function () {
this.Particle_destroy(),
(this.path = this.initialPosition = null);
}),
(s.parseArt = function (t) {
return _.parseArt(t);
}),
(s.parseData = function (i) {
var e = {};
if (i && i.path)
try {
e.path = (function (t) {
for (var i = t.match(w), e = i.length - 1; e >= 0; --e)
P.indexOf(i[e]) >= 0 && (i[e] = "Math." + i[e]);
return (
(t = i.join("")), new Function("x", "return " + t + ";")
);
})(i.path);
} catch (i) {
t.ParticleUtils.verbose &&
console.error(
"PathParticle: error in parsing path expression"
),
(e.path = null);
}
else
t.ParticleUtils.verbose &&
console.error(
"PathParticle requires a path string in extraData!"
),
(e.path = null);
return e;
}),
s
);
})(_),
S = (function (t) {
function e(i) {
var e = t.call(this, i) || this;
return (
(e.textures = null),
(e.duration = 0),
(e.framerate = 0),
(e.elapsed = 0),
(e.loop = !1),
e
);
}
return (
h(e, t),
(e.prototype.init = function () {
this.Particle_init(),
(this.elapsed = 0),
this.framerate < 0 &&
((this.duration = this.maxLife),
(this.framerate = this.textures.length / this.duration));
}),
(e.prototype.applyArt = function (t) {
(this.textures = t.textures),
(this.framerate = t.framerate),
(this.duration = t.duration),
(this.loop = t.loop);
}),
(e.prototype.update = function (t) {
var e = this.Particle_update(t);
if (e >= 0) {
(this.elapsed += t),
this.elapsed > this.duration &&
(this.loop
? (this.elapsed = this.elapsed % this.duration)
: (this.elapsed = this.duration - 1e-6));
var s = (this.elapsed * this.framerate + 1e-7) | 0;
this.texture = this.textures[s] || i.Texture.EMPTY;
}
return e;
}),
(e.prototype.destroy = function () {
this.Particle_destroy(), (this.textures = null);
}),
(e.parseArt = function (t) {
for (var e = [], s = 0; s < t.length; ++s) {
for (
var r = t[s],
a = (e[s] = {}),
h = (a.textures = []),
o = r.textures,
l = 0;
l < o.length;
++l
) {
var p = o[l];
if ("string" == typeof p) h.push(n(p));
else if (p instanceof i.Texture) h.push(p);
else {
var d = p.count || 1;
for (
p =
"string" == typeof p.texture ? n(p.texture) : p.texture;
d > 0;
--d
)
h.push(p);
}
}
"matchLife" === r.framerate
? ((a.framerate = -1), (a.duration = 0), (a.loop = !1))
: ((a.loop = !!r.loop),
(a.framerate = r.framerate > 0 ? r.framerate : 60),
(a.duration = h.length / a.framerate));
}
return e;
}),
e
);
})(_),
R = (function (t) {
function e() {
var i = (null !== t && t.apply(this, arguments)) || this;
return (
(i._firstChild = null),
(i._lastChild = null),
(i._childCount = 0),
i
);
}
return (
h(e, t),
Object.defineProperty(e.prototype, "firstChild", {
get: function () {
return this._firstChild;
},
enumerable: !0,
configurable: !0,
}),
Object.defineProperty(e.prototype, "lastChild", {
get: function () {
return this._lastChild;
},
enumerable: !0,
configurable: !0,
}),
Object.defineProperty(e.prototype, "childCount", {
get: function () {
return this._childCount;
},
enumerable: !0,
configurable: !0,
}),
(e.prototype.addChild = function () {
for (var t = [], i = 0; i < arguments.length; i++)
t[i] = arguments[i];
if (t.length > 1)
for (var e = 0; e < t.length; e++) this.addChild(t[e]);
else {
var s = t[0];
s.parent && s.parent.removeChild(s),
(s.parent = this),
(this.sortDirty = !0),
(s.transform._parentID = -1),
this._lastChild
? ((this._lastChild.nextChild = s),
(s.prevChild = this._lastChild),
(this._lastChild = s))
: (this._firstChild = this._lastChild = s),
++this._childCount,
this._boundsID++,
this.onChildrenChange(),
this.emit("childAdded", s, this, this._childCount),
s.emit("added", this);
}
return t[0];
}),
(e.prototype.addChildAt = function (t, i) {
if (i < 0 || i > this._childCount)
throw new Error(
"addChildAt: The index " +
i +
" supplied is out of bounds " +
this._childCount
);
t.parent && t.parent.removeChild(t),
(t.parent = this),
(this.sortDirty = !0),
(t.transform._parentID = -1);
var e = t;
if (this._firstChild)
if (0 === i)
(this._firstChild.prevChild = e),
(e.nextChild = this._firstChild),
(this._firstChild = e);
else if (i === this._childCount)
(this._lastChild.nextChild = e),
(e.prevChild = this._lastChild),
(this._lastChild = e);
else {
for (var s = 0, r = this._firstChild; s < i; )
(r = r.nextChild), ++s;
(r.prevChild.nextChild = e),
(e.prevChild = r.prevChild),
(e.nextChild = r),
(r.prevChild = e);
}
else this._firstChild = this._lastChild = e;
return (
++this._childCount,
this._boundsID++,
this.onChildrenChange(i),
t.emit("added", this),
this.emit("childAdded", t, this, i),
t
);
}),
(e.prototype.addChildBelow = function (t, i) {
if (i.parent !== this)
throw new Error(
"addChildBelow: The relative target must be a child of this parent"
);
return (
t.parent && t.parent.removeChild(t),
(t.parent = this),
(this.sortDirty = !0),
(t.transform._parentID = -1),
(i.prevChild.nextChild = t),
(t.prevChild = i.prevChild),
(t.nextChild = i),
(i.prevChild = t),
this._firstChild === i && (this._firstChild = t),
++this._childCount,
this._boundsID++,
this.onChildrenChange(),
this.emit("childAdded", t, this, this._childCount),
t.emit("added", this),
t
);
}),
(e.prototype.addChildAbove = function (t, i) {
if (i.parent !== this)
throw new Error(
"addChildBelow: The relative target must be a child of this parent"
);
return (
t.parent && t.parent.removeChild(t),
(t.parent = this),
(this.sortDirty = !0),
(t.transform._parentID = -1),
(i.nextChild.prevChild = t),
(t.nextChild = i.nextChild),
(t.prevChild = i),
(i.nextChild = t),
this._lastChild === i && (this._lastChild = t),
++this._childCount,
this._boundsID++,
this.onChildrenChange(),
this.emit("childAdded", t, this, this._childCount),
t.emit("added", this),
t
);
}),
(e.prototype.swapChildren = function (t, i) {
if (t !== i && t.parent === this && i.parent === this) {
var e = t,
s = e.prevChild,
r = e.nextChild;
(t.prevChild = i.prevChild),
(t.nextChild = i.nextChild),
(i.prevChild = s),
(i.nextChild = r),
this._firstChild === t
? (this._firstChild = i)
: this._firstChild === i && (this._firstChild = t),
this._lastChild === t
? (this._lastChild = i)
: this._lastChild === i && (this._lastChild = t),
this.onChildrenChange();
}
}),
(e.prototype.getChildIndex = function (t) {
for (var i = 0, e = this._firstChild; e && e !== t; )
(e = e.nextChild), ++i;
if (!e)
throw new Error(
"The supplied DisplayObject must be a child of the caller"
);
return i;
}),
(e.prototype.setChildIndex = function (t, i) {
if (i < 0 || i >= this._childCount)
throw new Error(
"The index " +
i +
" supplied is out of bounds " +
this._childCount
);
if (t.parent !== this)
throw new Error(
"The supplied DisplayObject must be a child of the caller"
);
if (
(t.nextChild && (t.nextChild.prevChild = t.prevChild),
t.prevChild && (t.prevChild.nextChild = t.nextChild),
this._firstChild === t && (this._firstChild = t.nextChild),
this._lastChild === t && (this._lastChild = t.prevChild),
(t.nextChild = null),
(t.prevChild = null),
this._firstChild)
)
if (0 === i)
(this._firstChild.prevChild = t),
(t.nextChild = this._firstChild),
(this._firstChild = t);
else if (i === this._childCount)
(this._lastChild.nextChild = t),
(t.prevChild = this._lastChild),
(this._lastChild = t);
else {
for (var e = 0, s = this._firstChild; e < i; )
(s = s.nextChild), ++e;
(s.prevChild.nextChild = t),
(t.prevChild = s.prevChild),
(t.nextChild = s),
(s.prevChild = t);
}
else this._firstChild = this._lastChild = t;
this.onChildrenChange(i);
}),
(e.prototype.removeChild = function () {
for (var t = [], i = 0; i < arguments.length; i++)
t[i] = arguments[i];
if (t.length > 1)
for (var e = 0; e < t.length; e++) this.removeChild(t[e]);
else {
var s = t[0];
if (s.parent !== this) return null;
(s.parent = null),
(s.transform._parentID = -1),
s.nextChild && (s.nextChild.prevChild = s.prevChild),
s.prevChild && (s.prevChild.nextChild = s.nextChild),
this._firstChild === s && (this._firstChild = s.nextChild),
this._lastChild === s && (this._lastChild = s.prevChild),
(s.nextChild = null),
(s.prevChild = null),
--this._childCount,
this._boundsID++,
this.onChildrenChange(),
s.emit("removed", this),
this.emit("childRemoved", s, this);
}
return t[0];
}),
(e.prototype.getChildAt = function (t) {
if (t < 0 || t >= this._childCount)
throw new Error(
"getChildAt: Index (" + t + ") does not exist."
);
if (0 === t) return this._firstChild;
if (t === this._childCount) return this._lastChild;
for (var i = 0, e = this._firstChild; i < t; )
(e = e.nextChild), ++i;
return e;
}),
(e.prototype.removeChildAt = function (t) {
var i = this.getChildAt(t);
return (
(i.parent = null),
(i.transform._parentID = -1),
i.nextChild && (i.nextChild.prevChild = i.prevChild),
i.prevChild && (i.prevChild.nextChild = i.nextChild),
this._firstChild === i && (this._firstChild = i.nextChild),
this._lastChild === i && (this._lastChild = i.prevChild),
(i.nextChild = null),
(i.prevChild = null),
--this._childCount,
this._boundsID++,
this.onChildrenChange(t),
i.emit("removed", this),
this.emit("childRemoved", i, this, t),
i
);
}),
(e.prototype.removeChildren = function (t, i) {
void 0 === t && (t = 0), void 0 === i && (i = this._childCount);
var e = t,
s = i,
r = s - e;
if (r > 0 && r <= s) {
for (
var n = [], a = this._firstChild, h = 0;
h <= s && a;
++h, a = a.nextChild
)
h >= e && n.push(a);
var o = n[0].prevChild,
l = n[n.length - 1].nextChild;
l ? (l.prevChild = o) : (this._lastChild = o),
o ? (o.nextChild = l) : (this._firstChild = l);
for (h = 0; h < n.length; ++h)
(n[h].parent = null),
n[h].transform && (n[h].transform._parentID = -1),
(n[h].nextChild = null),
(n[h].prevChild = null);
this._boundsID++, this.onChildrenChange(t);
for (h = 0; h < n.length; ++h)
n[h].emit("removed", this),
this.emit("childRemoved", n[h], this, h);
return n;
}
if (0 === r && 0 === this._childCount) return [];
throw new RangeError(
"removeChildren: numeric values are outside the acceptable range."
);
}),
(e.prototype.updateTransform = function () {
var t, i;
for (
this._boundsID++,
this.transform.updateTransform(this.parent.transform),
this.worldAlpha = this.alpha * this.parent.worldAlpha,
t = this._firstChild;
t;
t = i
)
(i = t.nextChild), t.visible && t.updateTransform();
}),
(e.prototype.calculateBounds = function () {
var t, i;
for (
this._bounds.clear(),
this._calculateBounds(),
t = this._firstChild;
t;
t = i
)
if (((i = t.nextChild), t.visible && t.renderable))
if ((t.calculateBounds(), t._mask)) {
var e = t._mask.maskObject || t._mask;
e.calculateBounds(),
this._bounds.addBoundsMask(t._bounds, e._bounds);
} else
t.filterArea
? this._bounds.addBoundsArea(t._bounds, t.filterArea)
: this._bounds.addBounds(t._bounds);
this._bounds.updateID = this._boundsID;
}),
(e.prototype.getLocalBounds = function (t, e) {
void 0 === e && (e = !1);
var s = i.DisplayObject.prototype.getLocalBounds.call(this, t);
if (!e) {
var r = void 0,
n = void 0;
for (r = this._firstChild; r; r = n)
(n = r.nextChild), r.visible && r.updateTransform();
}
return s;
}),
(e.prototype.render = function (t) {
if (this.visible && !(this.worldAlpha <= 0) && this.renderable)
if (this._mask || (this.filters && this.filters.length))
this.renderAdvanced(t);
else {
this._render(t);
var i = void 0,
e = void 0;
for (i = this._firstChild; i; i = e)
(e = i.nextChild), i.render(t);
}
}),
(e.prototype.renderAdvanced = function (t) {
t.batch.flush();
var i,
e,
s = this.filters,
r = this._mask;
if (s) {
this._enabledFilters || (this._enabledFilters = []),
(this._enabledFilters.length = 0);
for (var n = 0; n < s.length; n++)
s[n].enabled && this._enabledFilters.push(s[n]);
this._enabledFilters.length &&
t.filter.push(this, this._enabledFilters);
}
for (
r && t.mask.push(this, this._mask),
this._render(t),
i = this._firstChild;
i;
i = e
)
(e = i.nextChild), i.render(t);
t.batch.flush(),
r && t.mask.pop(this),
s &&
this._enabledFilters &&
this._enabledFilters.length &&
t.filter.pop();
}),
(e.prototype.renderWebGL = function (t) {
if (this.visible && !(this.worldAlpha <= 0) && this.renderable)
if (this._mask || (this.filters && this.filters.length))
this.renderAdvancedWebGL(t);
else {
this._renderWebGL(t);
var i = void 0,
e = void 0;
for (i = this._firstChild; i; i = e)
(e = i.nextChild), i.renderWebGL(t);
}
}),
(e.prototype.renderAdvancedWebGL = function (t) {
t.flush();
var i,
e,
s = this._filters,
r = this._mask;
if (s) {
this._enabledFilters || (this._enabledFilters = []),
(this._enabledFilters.length = 0);
for (var n = 0; n < s.length; n++)
s[n].enabled && this._enabledFilters.push(s[n]);
this._enabledFilters.length &&
t.filterManager.pushFilter(this, this._enabledFilters);
}
for (
r && t.maskManager.pushMask(this, this._mask),
this._renderWebGL(t),
i = this._firstChild;
i;
i = e
)
(e = i.nextChild), i.renderWebGL(t);
t.flush(),
r && t.maskManager.popMask(this, this._mask),
s &&
this._enabledFilters &&
this._enabledFilters.length &&
t.filterManager.popFilter();
}),
(e.prototype.renderCanvas = function (t) {
if (this.visible && !(this.worldAlpha <= 0) && this.renderable) {
var i, e;
for (
this._mask && t.maskManager.pushMask(this._mask),
this._renderCanvas(t),
i = this._firstChild;
i;
i = e
)
(e = i.nextChild), i.renderCanvas(t);
this._mask && t.maskManager.popMask(t);
}
}),
e
);
})(i.Container);
(t.AnimatedParticle = S),
(t.Emitter = y),
(t.GetTextureFromString = n),
(t.LinkedListContainer = R),
(t.Particle = _),
(t.PathParticle = b),
(t.PolygonalChain = C),
(t.PropertyList = f),
(t.PropertyNode = s);
})((this.PIXI.particles = this.PIXI.particles || {}), PIXI);
//# sourceMappingURL=pixi-particles.min.js.map
})();
(function () {
//PRAGMA: pluginName
var pluginName = "TRP_Particle";
//PRAGMA_END: pluginName
if (PluginManager.parameters(pluginName).importFilter !== "true") return;
/*!
* pixi-filters - v3.2.1
* Compiled Wed, 30 Dec 2020 18:32:15 UTC
*
* pixi-filters is licensed under the MIT License.
* http://www.opensource.org/licenses/mit-license
*/
var __filters = (function (e, t, n, r, o, i, l, s) {
"use strict";
var a =
"attribute vec2 aVertexPosition;\nattribute vec2 aTextureCoord;\n\nuniform mat3 projectionMatrix;\n\nvarying vec2 vTextureCoord;\n\nvoid main(void)\n{\n gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);\n vTextureCoord = aTextureCoord;\n}",
u =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform float gamma;\nuniform float contrast;\nuniform float saturation;\nuniform float brightness;\nuniform float red;\nuniform float green;\nuniform float blue;\nuniform float alpha;\n\nvoid main(void)\n{\n vec4 c = texture2D(uSampler, vTextureCoord);\n\n if (c.a > 0.0) {\n c.rgb /= c.a;\n\n vec3 rgb = pow(c.rgb, vec3(1. / gamma));\n rgb = mix(vec3(.5), mix(vec3(dot(vec3(.2125, .7154, .0721), rgb)), rgb, saturation), contrast);\n rgb.r *= red;\n rgb.g *= green;\n rgb.b *= blue;\n c.rgb = rgb * brightness;\n\n c.rgb *= c.a;\n }\n\n gl_FragColor = c * alpha;\n}\n",
c = (function (e) {
function t(t) {
e.call(this, a, u),
Object.assign(
this,
{
gamma: 1,
saturation: 1,
contrast: 1,
brightness: 1,
red: 1,
green: 1,
blue: 1,
alpha: 1,
},
t
);
}
return (
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t),
(t.prototype.apply = function (e, t, n, r) {
(this.uniforms.gamma = Math.max(this.gamma, 1e-4)),
(this.uniforms.saturation = this.saturation),
(this.uniforms.contrast = this.contrast),
(this.uniforms.brightness = this.brightness),
(this.uniforms.red = this.red),
(this.uniforms.green = this.green),
(this.uniforms.blue = this.blue),
(this.uniforms.alpha = this.alpha),
e.applyFilter(this, t, n, r);
}),
t
);
})(t.Filter),
f = a,
h =
"\nvarying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform vec2 uOffset;\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n\n // Sample top left pixel\n color += texture2D(uSampler, vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y + uOffset.y));\n\n // Sample top right pixel\n color += texture2D(uSampler, vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y + uOffset.y));\n\n // Sample bottom right pixel\n color += texture2D(uSampler, vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y - uOffset.y));\n\n // Sample bottom left pixel\n color += texture2D(uSampler, vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y - uOffset.y));\n\n // Average\n color *= 0.25;\n\n gl_FragColor = color;\n}",
p =
"\nvarying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform vec2 uOffset;\nuniform vec4 filterClamp;\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n\n // Sample top left pixel\n color += texture2D(uSampler, clamp(vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y + uOffset.y), filterClamp.xy, filterClamp.zw));\n\n // Sample top right pixel\n color += texture2D(uSampler, clamp(vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y + uOffset.y), filterClamp.xy, filterClamp.zw));\n\n // Sample bottom right pixel\n color += texture2D(uSampler, clamp(vec2(vTextureCoord.x + uOffset.x, vTextureCoord.y - uOffset.y), filterClamp.xy, filterClamp.zw));\n\n // Sample bottom left pixel\n color += texture2D(uSampler, clamp(vec2(vTextureCoord.x - uOffset.x, vTextureCoord.y - uOffset.y), filterClamp.xy, filterClamp.zw));\n\n // Average\n color *= 0.25;\n\n gl_FragColor = color;\n}\n",
d = (function (e) {
function t(t, r, o) {
void 0 === t && (t = 4),
void 0 === r && (r = 3),
void 0 === o && (o = !1),
e.call(this, f, o ? p : h),
(this.uniforms.uOffset = new Float32Array(2)),
(this._pixelSize = new n.Point()),
(this.pixelSize = 1),
(this._clamp = o),
(this._kernels = null),
Array.isArray(t)
? (this.kernels = t)
: ((this._blur = t), (this.quality = r));
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var r = {
kernels: { configurable: !0 },
clamp: { configurable: !0 },
pixelSize: { configurable: !0 },
quality: { configurable: !0 },
blur: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r) {
var o,
i = this._pixelSize.x / t._frame.width,
l = this._pixelSize.y / t._frame.height;
if (1 === this._quality || 0 === this._blur)
(o = this._kernels[0] + 0.5),
(this.uniforms.uOffset[0] = o * i),
(this.uniforms.uOffset[1] = o * l),
e.applyFilter(this, t, n, r);
else {
for (
var s,
a = e.getFilterTexture(),
u = t,
c = a,
f = this._quality - 1,
h = 0;
h < f;
h++
)
(o = this._kernels[h] + 0.5),
(this.uniforms.uOffset[0] = o * i),
(this.uniforms.uOffset[1] = o * l),
e.applyFilter(this, u, c, 1),
(s = u),
(u = c),
(c = s);
(o = this._kernels[f] + 0.5),
(this.uniforms.uOffset[0] = o * i),
(this.uniforms.uOffset[1] = o * l),
e.applyFilter(this, u, n, r),
e.returnFilterTexture(a);
}
}),
(t.prototype._updatePadding = function () {
this.padding = Math.ceil(
this._kernels.reduce(function (e, t) {
return e + t + 0.5;
}, 0)
);
}),
(t.prototype._generateKernels = function () {
var e = this._blur,
t = this._quality,
n = [e];
if (e > 0)
for (var r = e, o = e / t, i = 1; i < t; i++) (r -= o), n.push(r);
(this._kernels = n), this._updatePadding();
}),
(r.kernels.get = function () {
return this._kernels;
}),
(r.kernels.set = function (e) {
Array.isArray(e) && e.length > 0
? ((this._kernels = e),
(this._quality = e.length),
(this._blur = Math.max.apply(Math, e)))
: ((this._kernels = [0]), (this._quality = 1));
}),
(r.clamp.get = function () {
return this._clamp;
}),
(r.pixelSize.set = function (e) {
"number" == typeof e
? ((this._pixelSize.x = e), (this._pixelSize.y = e))
: Array.isArray(e)
? ((this._pixelSize.x = e[0]), (this._pixelSize.y = e[1]))
: e instanceof n.Point
? ((this._pixelSize.x = e.x), (this._pixelSize.y = e.y))
: ((this._pixelSize.x = 1), (this._pixelSize.y = 1));
}),
(r.pixelSize.get = function () {
return this._pixelSize;
}),
(r.quality.get = function () {
return this._quality;
}),
(r.quality.set = function (e) {
(this._quality = Math.max(1, Math.round(e))),
this._generateKernels();
}),
(r.blur.get = function () {
return this._blur;
}),
(r.blur.set = function (e) {
(this._blur = e), this._generateKernels();
}),
Object.defineProperties(t.prototype, r),
t
);
})(t.Filter),
m = a,
g =
"\nuniform sampler2D uSampler;\nvarying vec2 vTextureCoord;\n\nuniform float threshold;\n\nvoid main() {\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n // A simple & fast algorithm for getting brightness.\n // It's inaccuracy , but good enought for this feature.\n float _max = max(max(color.r, color.g), color.b);\n float _min = min(min(color.r, color.g), color.b);\n float brightness = (_max + _min) * 0.5;\n\n if(brightness > threshold) {\n gl_FragColor = color;\n } else {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n}\n",
v = (function (e) {
function t(t) {
void 0 === t && (t = 0.5), e.call(this, m, g), (this.threshold = t);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = { threshold: { configurable: !0 } };
return (
(n.threshold.get = function () {
return this.uniforms.threshold;
}),
(n.threshold.set = function (e) {
this.uniforms.threshold = e;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
x =
"uniform sampler2D uSampler;\nvarying vec2 vTextureCoord;\n\nuniform sampler2D bloomTexture;\nuniform float bloomScale;\nuniform float brightness;\n\nvoid main() {\n vec4 color = texture2D(uSampler, vTextureCoord);\n color.rgb *= brightness;\n vec4 bloomColor = vec4(texture2D(bloomTexture, vTextureCoord).rgb, 0.0);\n bloomColor.rgb *= bloomScale;\n gl_FragColor = color + bloomColor;\n}\n",
y = (function (e) {
function t(t) {
e.call(this, m, x),
"number" == typeof t && (t = { threshold: t }),
(t = Object.assign(
{
threshold: 0.5,
bloomScale: 1,
brightness: 1,
kernels: null,
blur: 8,
quality: 4,
pixelSize: 1,
resolution: r.settings.FILTER_RESOLUTION,
},
t
)),
(this.bloomScale = t.bloomScale),
(this.brightness = t.brightness);
var n = t.kernels,
o = t.blur,
i = t.quality,
l = t.pixelSize,
s = t.resolution;
(this._extractFilter = new v(t.threshold)),
(this._extractFilter.resolution = s),
(this._blurFilter = n ? new d(n) : new d(o, i)),
(this.pixelSize = l),
(this.resolution = s);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
resolution: { configurable: !0 },
threshold: { configurable: !0 },
kernels: { configurable: !0 },
blur: { configurable: !0 },
quality: { configurable: !0 },
pixelSize: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r, o) {
var i = e.getFilterTexture();
this._extractFilter.apply(e, t, i, 1, o);
var l = e.getFilterTexture();
this._blurFilter.apply(e, i, l, 1, o),
(this.uniforms.bloomScale = this.bloomScale),
(this.uniforms.brightness = this.brightness),
(this.uniforms.bloomTexture = l),
e.applyFilter(this, t, n, r),
e.returnFilterTexture(l),
e.returnFilterTexture(i);
}),
(n.resolution.get = function () {
return this._resolution;
}),
(n.resolution.set = function (e) {
(this._resolution = e),
this._extractFilter && (this._extractFilter.resolution = e),
this._blurFilter && (this._blurFilter.resolution = e);
}),
(n.threshold.get = function () {
return this._extractFilter.threshold;
}),
(n.threshold.set = function (e) {
this._extractFilter.threshold = e;
}),
(n.kernels.get = function () {
return this._blurFilter.kernels;
}),
(n.kernels.set = function (e) {
this._blurFilter.kernels = e;
}),
(n.blur.get = function () {
return this._blurFilter.blur;
}),
(n.blur.set = function (e) {
this._blurFilter.blur = e;
}),
(n.quality.get = function () {
return this._blurFilter.quality;
}),
(n.quality.set = function (e) {
this._blurFilter.quality = e;
}),
(n.pixelSize.get = function () {
return this._blurFilter.pixelSize;
}),
(n.pixelSize.set = function (e) {
this._blurFilter.pixelSize = e;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
_ = a,
b =
"varying vec2 vTextureCoord;\n\nuniform vec4 filterArea;\nuniform float pixelSize;\nuniform sampler2D uSampler;\n\nvec2 mapCoord( vec2 coord )\n{\n coord *= filterArea.xy;\n coord += filterArea.zw;\n\n return coord;\n}\n\nvec2 unmapCoord( vec2 coord )\n{\n coord -= filterArea.zw;\n coord /= filterArea.xy;\n\n return coord;\n}\n\nvec2 pixelate(vec2 coord, vec2 size)\n{\n return floor( coord / size ) * size;\n}\n\nvec2 getMod(vec2 coord, vec2 size)\n{\n return mod( coord , size) / size;\n}\n\nfloat character(float n, vec2 p)\n{\n p = floor(p*vec2(4.0, -4.0) + 2.5);\n\n if (clamp(p.x, 0.0, 4.0) == p.x)\n {\n if (clamp(p.y, 0.0, 4.0) == p.y)\n {\n if (int(mod(n/exp2(p.x + 5.0*p.y), 2.0)) == 1) return 1.0;\n }\n }\n return 0.0;\n}\n\nvoid main()\n{\n vec2 coord = mapCoord(vTextureCoord);\n\n // get the rounded color..\n vec2 pixCoord = pixelate(coord, vec2(pixelSize));\n pixCoord = unmapCoord(pixCoord);\n\n vec4 color = texture2D(uSampler, pixCoord);\n\n // determine the character to use\n float gray = (color.r + color.g + color.b) / 3.0;\n\n float n = 65536.0; // .\n if (gray > 0.2) n = 65600.0; // :\n if (gray > 0.3) n = 332772.0; // *\n if (gray > 0.4) n = 15255086.0; // o\n if (gray > 0.5) n = 23385164.0; // &\n if (gray > 0.6) n = 15252014.0; // 8\n if (gray > 0.7) n = 13199452.0; // @\n if (gray > 0.8) n = 11512810.0; // #\n\n // get the mod..\n vec2 modd = getMod(coord, vec2(pixelSize));\n\n gl_FragColor = color * character( n, vec2(-1.0) + modd * 2.0);\n\n}\n",
C = (function (e) {
function t(t) {
void 0 === t && (t = 8), e.call(this, _, b), (this.size = t);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = { size: { configurable: !0 } };
return (
(n.size.get = function () {
return this.uniforms.pixelSize;
}),
(n.size.set = function (e) {
this.uniforms.pixelSize = e;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
S = a,
F =
"precision mediump float;\n\nvarying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec4 filterArea;\n\nuniform float transformX;\nuniform float transformY;\nuniform vec3 lightColor;\nuniform float lightAlpha;\nuniform vec3 shadowColor;\nuniform float shadowAlpha;\n\nvoid main(void) {\n vec2 transform = vec2(1.0 / filterArea) * vec2(transformX, transformY);\n vec4 color = texture2D(uSampler, vTextureCoord);\n float light = texture2D(uSampler, vTextureCoord - transform).a;\n float shadow = texture2D(uSampler, vTextureCoord + transform).a;\n\n color.rgb = mix(color.rgb, lightColor, clamp((color.a - light) * lightAlpha, 0.0, 1.0));\n color.rgb = mix(color.rgb, shadowColor, clamp((color.a - shadow) * shadowAlpha, 0.0, 1.0));\n gl_FragColor = vec4(color.rgb * color.a, color.a);\n}\n",
z = (function (e) {
function t(t) {
void 0 === t && (t = {}),
e.call(this, S, F),
(this.uniforms.lightColor = new Float32Array(3)),
(this.uniforms.shadowColor = new Float32Array(3)),
(t = Object.assign(
{
rotation: 45,
thickness: 2,
lightColor: 16777215,
lightAlpha: 0.7,
shadowColor: 0,
shadowAlpha: 0.7,
},
t
)),
(this.rotation = t.rotation),
(this.thickness = t.thickness),
(this.lightColor = t.lightColor),
(this.lightAlpha = t.lightAlpha),
(this.shadowColor = t.shadowColor),
(this.shadowAlpha = t.shadowAlpha),
(this.padding = 1);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var r = {
rotation: { configurable: !0 },
thickness: { configurable: !0 },
lightColor: { configurable: !0 },
lightAlpha: { configurable: !0 },
shadowColor: { configurable: !0 },
shadowAlpha: { configurable: !0 },
};
return (
(t.prototype._updateTransform = function () {
(this.uniforms.transformX =
this._thickness * Math.cos(this._angle)),
(this.uniforms.transformY =
this._thickness * Math.sin(this._angle));
}),
(r.rotation.get = function () {
return this._angle / n.DEG_TO_RAD;
}),
(r.rotation.set = function (e) {
(this._angle = e * n.DEG_TO_RAD), this._updateTransform();
}),
(r.thickness.get = function () {
return this._thickness;
}),
(r.thickness.set = function (e) {
(this._thickness = e), this._updateTransform();
}),
(r.lightColor.get = function () {
return o.rgb2hex(this.uniforms.lightColor);
}),
(r.lightColor.set = function (e) {
o.hex2rgb(e, this.uniforms.lightColor);
}),
(r.lightAlpha.get = function () {
return this.uniforms.lightAlpha;
}),
(r.lightAlpha.set = function (e) {
this.uniforms.lightAlpha = e;
}),
(r.shadowColor.get = function () {
return o.rgb2hex(this.uniforms.shadowColor);
}),
(r.shadowColor.set = function (e) {
o.hex2rgb(e, this.uniforms.shadowColor);
}),
(r.shadowAlpha.get = function () {
return this.uniforms.shadowAlpha;
}),
(r.shadowAlpha.set = function (e) {
this.uniforms.shadowAlpha = e;
}),
Object.defineProperties(t.prototype, r),
t
);
})(t.Filter),
A = (function (e) {
function t(t, o, a, u) {
var c, f;
void 0 === t && (t = 2),
void 0 === o && (o = 4),
void 0 === a && (a = r.settings.FILTER_RESOLUTION),
void 0 === u && (u = 5),
e.call(this),
"number" == typeof t
? ((c = t), (f = t))
: t instanceof n.Point
? ((c = t.x), (f = t.y))
: Array.isArray(t) && ((c = t[0]), (f = t[1])),
(this.blurXFilter = new s.BlurFilterPass(!0, c, o, a, u)),
(this.blurYFilter = new s.BlurFilterPass(!1, f, o, a, u)),
(this.blurYFilter.blendMode = i.BLEND_MODES.SCREEN),
(this.defaultFilter = new l.AlphaFilter());
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var o = {
blur: { configurable: !0 },
blurX: { configurable: !0 },
blurY: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r) {
var o = e.getFilterTexture();
this.defaultFilter.apply(e, t, n, r),
this.blurXFilter.apply(e, t, o),
this.blurYFilter.apply(e, o, n, 0),
e.returnFilterTexture(o);
}),
(o.blur.get = function () {
return this.blurXFilter.blur;
}),
(o.blur.set = function (e) {
this.blurXFilter.blur = this.blurYFilter.blur = e;
}),
(o.blurX.get = function () {
return this.blurXFilter.blur;
}),
(o.blurX.set = function (e) {
this.blurXFilter.blur = e;
}),
(o.blurY.get = function () {
return this.blurYFilter.blur;
}),
(o.blurY.set = function (e) {
this.blurYFilter.blur = e;
}),
Object.defineProperties(t.prototype, o),
t
);
})(t.Filter),
T = a,
w =
"uniform float radius;\nuniform float strength;\nuniform vec2 center;\nuniform sampler2D uSampler;\nvarying vec2 vTextureCoord;\n\nuniform vec4 filterArea;\nuniform vec4 filterClamp;\nuniform vec2 dimensions;\n\nvoid main()\n{\n vec2 coord = vTextureCoord * filterArea.xy;\n coord -= center * dimensions.xy;\n float distance = length(coord);\n if (distance < radius) {\n float percent = distance / radius;\n if (strength > 0.0) {\n coord *= mix(1.0, smoothstep(0.0, radius / distance, percent), strength * 0.75);\n } else {\n coord *= mix(1.0, pow(percent, 1.0 + strength * 0.75) * radius / distance, 1.0 - percent);\n }\n }\n coord += center * dimensions.xy;\n coord /= filterArea.xy;\n vec2 clampedCoord = clamp(coord, filterClamp.xy, filterClamp.zw);\n vec4 color = texture2D(uSampler, clampedCoord);\n if (coord != clampedCoord) {\n color *= max(0.0, 1.0 - length(coord - clampedCoord));\n }\n\n gl_FragColor = color;\n}\n",
O = (function (e) {
function t(t) {
if ((e.call(this, T, w), "object" != typeof t)) {
var n = arguments[0],
r = arguments[1],
o = arguments[2];
(t = {}),
void 0 !== n && (t.center = n),
void 0 !== r && (t.radius = r),
void 0 !== o && (t.strength = o);
}
(this.uniforms.dimensions = new Float32Array(2)),
Object.assign(
this,
{ center: [0.5, 0.5], radius: 100, strength: 1 },
t
);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
radius: { configurable: !0 },
strength: { configurable: !0 },
center: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r) {
(this.uniforms.dimensions[0] = t.filterFrame.width),
(this.uniforms.dimensions[1] = t.filterFrame.height),
e.applyFilter(this, t, n, r);
}),
(n.radius.get = function () {
return this.uniforms.radius;
}),
(n.radius.set = function (e) {
this.uniforms.radius = e;
}),
(n.strength.get = function () {
return this.uniforms.strength;
}),
(n.strength.set = function (e) {
this.uniforms.strength = e;
}),
(n.center.get = function () {
return this.uniforms.center;
}),
(n.center.set = function (e) {
this.uniforms.center = e;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
D = a,
P =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform sampler2D colorMap;\nuniform float _mix;\nuniform float _size;\nuniform float _sliceSize;\nuniform float _slicePixelSize;\nuniform float _sliceInnerSize;\nvoid main() {\n vec4 color = texture2D(uSampler, vTextureCoord.xy);\n\n vec4 adjusted;\n if (color.a > 0.0) {\n color.rgb /= color.a;\n float innerWidth = _size - 1.0;\n float zSlice0 = min(floor(color.b * innerWidth), innerWidth);\n float zSlice1 = min(zSlice0 + 1.0, innerWidth);\n float xOffset = _slicePixelSize * 0.5 + color.r * _sliceInnerSize;\n float s0 = xOffset + (zSlice0 * _sliceSize);\n float s1 = xOffset + (zSlice1 * _sliceSize);\n float yOffset = _sliceSize * 0.5 + color.g * (1.0 - _sliceSize);\n vec4 slice0Color = texture2D(colorMap, vec2(s0,yOffset));\n vec4 slice1Color = texture2D(colorMap, vec2(s1,yOffset));\n float zOffset = fract(color.b * innerWidth);\n adjusted = mix(slice0Color, slice1Color, zOffset);\n\n color.rgb *= color.a;\n }\n gl_FragColor = vec4(mix(color, adjusted, _mix).rgb, color.a);\n\n}",
M = (function (e) {
function n(t, n, r) {
void 0 === n && (n = !1),
void 0 === r && (r = 1),
e.call(this, D, P),
(this._size = 0),
(this._sliceSize = 0),
(this._slicePixelSize = 0),
(this._sliceInnerSize = 0),
(this._scaleMode = null),
(this._nearest = !1),
(this.nearest = n),
(this.mix = r),
(this.colorMap = t);
}
e && (n.__proto__ = e),
(n.prototype = Object.create(e && e.prototype)),
(n.prototype.constructor = n);
var r = {
colorSize: { configurable: !0 },
colorMap: { configurable: !0 },
nearest: { configurable: !0 },
};
return (
(n.prototype.apply = function (e, t, n, r) {
(this.uniforms._mix = this.mix), e.applyFilter(this, t, n, r);
}),
(r.colorSize.get = function () {
return this._size;
}),
(r.colorMap.get = function () {
return this._colorMap;
}),
(r.colorMap.set = function (e) {
e instanceof t.Texture || (e = t.Texture.from(e)),
e &&
e.baseTexture &&
((e.baseTexture.scaleMode = this._scaleMode),
(e.baseTexture.mipmap = !1),
(this._size = e.height),
(this._sliceSize = 1 / this._size),
(this._slicePixelSize = this._sliceSize / this._size),
(this._sliceInnerSize =
this._slicePixelSize * (this._size - 1)),
(this.uniforms._size = this._size),
(this.uniforms._sliceSize = this._sliceSize),
(this.uniforms._slicePixelSize = this._slicePixelSize),
(this.uniforms._sliceInnerSize = this._sliceInnerSize),
(this.uniforms.colorMap = e)),
(this._colorMap = e);
}),
(r.nearest.get = function () {
return this._nearest;
}),
(r.nearest.set = function (e) {
(this._nearest = e),
(this._scaleMode = e
? i.SCALE_MODES.NEAREST
: i.SCALE_MODES.LINEAR);
var t = this._colorMap;
t &&
t.baseTexture &&
((t.baseTexture._glTextures = {}),
(t.baseTexture.scaleMode = this._scaleMode),
(t.baseTexture.mipmap = !1),
t._updateID++,
t.baseTexture.emit("update", t.baseTexture));
}),
(n.prototype.updateColorMap = function () {
var e = this._colorMap;
e &&
e.baseTexture &&
(e._updateID++,
e.baseTexture.emit("update", e.baseTexture),
(this.colorMap = e));
}),
(n.prototype.destroy = function (t) {
this._colorMap && this._colorMap.destroy(t),
e.prototype.destroy.call(this);
}),
Object.defineProperties(n.prototype, r),
n
);
})(t.Filter),
R = a,
k =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec3 color;\nvoid main(void) {\n vec4 currentColor = texture2D(uSampler, vTextureCoord);\n vec3 colorOverlay = color * currentColor.a;\n gl_FragColor = vec4(colorOverlay.r, colorOverlay.g, colorOverlay.b, currentColor.a);\n}\n",
j = (function (e) {
function t(t) {
void 0 === t && (t = 0),
e.call(this, R, k),
(this.uniforms.color = new Float32Array(3)),
(this.color = t);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = { color: { configurable: !0 } };
return (
(n.color.set = function (e) {
var t = this.uniforms.color;
"number" == typeof e
? (o.hex2rgb(e, t), (this._color = e))
: ((t[0] = e[0]),
(t[1] = e[1]),
(t[2] = e[2]),
(this._color = o.rgb2hex(t)));
}),
(n.color.get = function () {
return this._color;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
E = a,
L =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec3 originalColor;\nuniform vec3 newColor;\nuniform float epsilon;\nvoid main(void) {\n vec4 currentColor = texture2D(uSampler, vTextureCoord);\n vec3 colorDiff = originalColor - (currentColor.rgb / max(currentColor.a, 0.0000000001));\n float colorDistance = length(colorDiff);\n float doReplace = step(colorDistance, epsilon);\n gl_FragColor = vec4(mix(currentColor.rgb, (newColor + colorDiff) * currentColor.a, doReplace), currentColor.a);\n}\n",
I = (function (e) {
function t(t, n, r) {
void 0 === t && (t = 16711680),
void 0 === n && (n = 0),
void 0 === r && (r = 0.4),
e.call(this, E, L),
(this.uniforms.originalColor = new Float32Array(3)),
(this.uniforms.newColor = new Float32Array(3)),
(this.originalColor = t),
(this.newColor = n),
(this.epsilon = r);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
originalColor: { configurable: !0 },
newColor: { configurable: !0 },
epsilon: { configurable: !0 },
};
return (
(n.originalColor.set = function (e) {
var t = this.uniforms.originalColor;
"number" == typeof e
? (o.hex2rgb(e, t), (this._originalColor = e))
: ((t[0] = e[0]),
(t[1] = e[1]),
(t[2] = e[2]),
(this._originalColor = o.rgb2hex(t)));
}),
(n.originalColor.get = function () {
return this._originalColor;
}),
(n.newColor.set = function (e) {
var t = this.uniforms.newColor;
"number" == typeof e
? (o.hex2rgb(e, t), (this._newColor = e))
: ((t[0] = e[0]),
(t[1] = e[1]),
(t[2] = e[2]),
(this._newColor = o.rgb2hex(t)));
}),
(n.newColor.get = function () {
return this._newColor;
}),
(n.epsilon.set = function (e) {
this.uniforms.epsilon = e;
}),
(n.epsilon.get = function () {
return this.uniforms.epsilon;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
X = a,
B =
"precision mediump float;\n\nvarying mediump vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 texelSize;\nuniform float matrix[9];\n\nvoid main(void)\n{\n vec4 c11 = texture2D(uSampler, vTextureCoord - texelSize); // top left\n vec4 c12 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - texelSize.y)); // top center\n vec4 c13 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y - texelSize.y)); // top right\n\n vec4 c21 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y)); // mid left\n vec4 c22 = texture2D(uSampler, vTextureCoord); // mid center\n vec4 c23 = texture2D(uSampler, vec2(vTextureCoord.x + texelSize.x, vTextureCoord.y)); // mid right\n\n vec4 c31 = texture2D(uSampler, vec2(vTextureCoord.x - texelSize.x, vTextureCoord.y + texelSize.y)); // bottom left\n vec4 c32 = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + texelSize.y)); // bottom center\n vec4 c33 = texture2D(uSampler, vTextureCoord + texelSize); // bottom right\n\n gl_FragColor =\n c11 * matrix[0] + c12 * matrix[1] + c13 * matrix[2] +\n c21 * matrix[3] + c22 * matrix[4] + c23 * matrix[5] +\n c31 * matrix[6] + c32 * matrix[7] + c33 * matrix[8];\n\n gl_FragColor.a = c22.a;\n}\n",
N = (function (e) {
function t(t, n, r) {
void 0 === n && (n = 200),
void 0 === r && (r = 200),
e.call(this, X, B),
(this.uniforms.texelSize = new Float32Array(2)),
(this.uniforms.matrix = new Float32Array(9)),
void 0 !== t && (this.matrix = t),
(this.width = n),
(this.height = r);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
matrix: { configurable: !0 },
width: { configurable: !0 },
height: { configurable: !0 },
};
return (
(n.matrix.get = function () {
return this.uniforms.matrix;
}),
(n.matrix.set = function (e) {
var t = this;
e.forEach(function (e, n) {
return (t.uniforms.matrix[n] = e);
});
}),
(n.width.get = function () {
return 1 / this.uniforms.texelSize[0];
}),
(n.width.set = function (e) {
this.uniforms.texelSize[0] = 1 / e;
}),
(n.height.get = function () {
return 1 / this.uniforms.texelSize[1];
}),
(n.height.set = function (e) {
this.uniforms.texelSize[1] = 1 / e;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
G = a,
q =
"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\n\nvoid main(void)\n{\n float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);\n\n gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n\n if (lum < 1.00)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.75)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.50)\n {\n if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n\n if (lum < 0.3)\n {\n if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0)\n {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }\n }\n}\n",
K = (function (e) {
function t() {
e.call(this, G, q);
}
return (
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t),
t
);
})(t.Filter),
W = a,
Y =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform vec4 filterArea;\nuniform vec2 dimensions;\n\nconst float SQRT_2 = 1.414213;\n\nconst float light = 1.0;\n\nuniform float curvature;\nuniform float lineWidth;\nuniform float lineContrast;\nuniform bool verticalLine;\nuniform float noise;\nuniform float noiseSize;\n\nuniform float vignetting;\nuniform float vignettingAlpha;\nuniform float vignettingBlur;\n\nuniform float seed;\nuniform float time;\n\nfloat rand(vec2 co) {\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}\n\nvoid main(void)\n{\n vec2 pixelCoord = vTextureCoord.xy * filterArea.xy;\n vec2 dir = vec2(vTextureCoord.xy - vec2(0.5, 0.5)) * filterArea.xy / dimensions;\n\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n vec3 rgb = gl_FragColor.rgb;\n\n if (noise > 0.0 && noiseSize > 0.0)\n {\n pixelCoord.x = floor(pixelCoord.x / noiseSize);\n pixelCoord.y = floor(pixelCoord.y / noiseSize);\n float _noise = rand(pixelCoord * noiseSize * seed) - 0.5;\n rgb += _noise * noise;\n }\n\n if (lineWidth > 0.0)\n {\n float _c = curvature > 0. ? curvature : 1.;\n float k = curvature > 0. ?(length(dir * dir) * 0.25 * _c * _c + 0.935 * _c) : 1.;\n vec2 uv = dir * k;\n\n float v = (verticalLine ? uv.x * dimensions.x : uv.y * dimensions.y) * min(1.0, 2.0 / lineWidth ) / _c;\n float j = 1. + cos(v * 1.2 - time) * 0.5 * lineContrast;\n rgb *= j;\n float segment = verticalLine ? mod((dir.x + .5) * dimensions.x, 4.) : mod((dir.y + .5) * dimensions.y, 4.);\n rgb *= 0.99 + ceil(segment) * 0.015;\n }\n\n if (vignetting > 0.0)\n {\n float outter = SQRT_2 - vignetting * SQRT_2;\n float darker = clamp((outter - length(dir) * SQRT_2) / ( 0.00001 + vignettingBlur * SQRT_2), 0.0, 1.0);\n rgb *= darker + (1.0 - darker) * (1.0 - vignettingAlpha);\n }\n\n gl_FragColor.rgb = rgb;\n}\n",
Z = (function (e) {
function t(t) {
e.call(this, W, Y),
(this.uniforms.dimensions = new Float32Array(2)),
(this.time = 0),
(this.seed = 0),
Object.assign(
this,
{
curvature: 1,
lineWidth: 1,
lineContrast: 0.25,
verticalLine: !1,
noise: 0,
noiseSize: 1,
seed: 0,
vignetting: 0.3,
vignettingAlpha: 1,
vignettingBlur: 0.3,
time: 0,
},
t
);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
curvature: { configurable: !0 },
lineWidth: { configurable: !0 },
lineContrast: { configurable: !0 },
verticalLine: { configurable: !0 },
noise: { configurable: !0 },
noiseSize: { configurable: !0 },
vignetting: { configurable: !0 },
vignettingAlpha: { configurable: !0 },
vignettingBlur: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r) {
(this.uniforms.dimensions[0] = t.filterFrame.width),
(this.uniforms.dimensions[1] = t.filterFrame.height),
(this.uniforms.seed = this.seed),
(this.uniforms.time = this.time),
e.applyFilter(this, t, n, r);
}),
(n.curvature.set = function (e) {
this.uniforms.curvature = e;
}),
(n.curvature.get = function () {
return this.uniforms.curvature;
}),
(n.lineWidth.set = function (e) {
this.uniforms.lineWidth = e;
}),
(n.lineWidth.get = function () {
return this.uniforms.lineWidth;
}),
(n.lineContrast.set = function (e) {
this.uniforms.lineContrast = e;
}),
(n.lineContrast.get = function () {
return this.uniforms.lineContrast;
}),
(n.verticalLine.set = function (e) {
this.uniforms.verticalLine = e;
}),
(n.verticalLine.get = function () {
return this.uniforms.verticalLine;
}),
(n.noise.set = function (e) {
this.uniforms.noise = e;
}),
(n.noise.get = function () {
return this.uniforms.noise;
}),
(n.noiseSize.set = function (e) {
this.uniforms.noiseSize = e;
}),
(n.noiseSize.get = function () {
return this.uniforms.noiseSize;
}),
(n.vignetting.set = function (e) {
this.uniforms.vignetting = e;
}),
(n.vignetting.get = function () {
return this.uniforms.vignetting;
}),
(n.vignettingAlpha.set = function (e) {
this.uniforms.vignettingAlpha = e;
}),
(n.vignettingAlpha.get = function () {
return this.uniforms.vignettingAlpha;
}),
(n.vignettingBlur.set = function (e) {
this.uniforms.vignettingBlur = e;
}),
(n.vignettingBlur.get = function () {
return this.uniforms.vignettingBlur;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
Q = a,
U =
"precision mediump float;\n\nvarying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform vec4 filterArea;\nuniform sampler2D uSampler;\n\nuniform float angle;\nuniform float scale;\n\nfloat pattern()\n{\n float s = sin(angle), c = cos(angle);\n vec2 tex = vTextureCoord * filterArea.xy;\n vec2 point = vec2(\n c * tex.x - s * tex.y,\n s * tex.x + c * tex.y\n ) * scale;\n return (sin(point.x) * sin(point.y)) * 4.0;\n}\n\nvoid main()\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n float average = (color.r + color.g + color.b) / 3.0;\n gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);\n}\n",
V = (function (e) {
function t(t, n) {
void 0 === t && (t = 1),
void 0 === n && (n = 5),
e.call(this, Q, U),
(this.scale = t),
(this.angle = n);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = { scale: { configurable: !0 }, angle: { configurable: !0 } };
return (
(n.scale.get = function () {
return this.uniforms.scale;
}),
(n.scale.set = function (e) {
this.uniforms.scale = e;
}),
(n.angle.get = function () {
return this.uniforms.angle;
}),
(n.angle.set = function (e) {
this.uniforms.angle = e;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
H = a,
$ =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform float alpha;\nuniform vec3 color;\n\nuniform vec2 shift;\nuniform vec4 inputSize;\n\nvoid main(void){\n vec4 sample = texture2D(uSampler, vTextureCoord - shift * inputSize.zw);\n\n // Premultiply alpha\n sample.rgb = color.rgb * sample.a;\n\n // alpha user alpha\n sample *= alpha;\n\n gl_FragColor = sample;\n}",
J = (function (e) {
function t(t) {
t &&
t.constructor !== Object &&
(console.warn(
"DropShadowFilter now uses options instead of (rotation, distance, blur, color, alpha)"
),
(t = { rotation: t }),
void 0 !== arguments[1] && (t.distance = arguments[1]),
void 0 !== arguments[2] && (t.blur = arguments[2]),
void 0 !== arguments[3] && (t.color = arguments[3]),
void 0 !== arguments[4] && (t.alpha = arguments[4])),
(t = Object.assign(
{
rotation: 45,
distance: 5,
color: 0,
alpha: 0.5,
shadowOnly: !1,
kernels: null,
blur: 2,
quality: 3,
pixelSize: 1,
resolution: r.settings.FILTER_RESOLUTION,
},
t
)),
e.call(this);
var o = t.kernels,
i = t.blur,
l = t.quality,
s = t.pixelSize,
a = t.resolution;
(this._tintFilter = new e(H, $)),
(this._tintFilter.uniforms.color = new Float32Array(4)),
(this._tintFilter.uniforms.shift = new n.Point()),
(this._tintFilter.resolution = a),
(this._blurFilter = o ? new d(o) : new d(i, l)),
(this.pixelSize = s),
(this.resolution = a);
var u = t.shadowOnly,
c = t.rotation,
f = t.distance,
h = t.alpha,
p = t.color;
(this.shadowOnly = u),
(this.rotation = c),
(this.distance = f),
(this.alpha = h),
(this.color = p),
this._updatePadding();
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var i = {
resolution: { configurable: !0 },
distance: { configurable: !0 },
rotation: { configurable: !0 },
alpha: { configurable: !0 },
color: { configurable: !0 },
kernels: { configurable: !0 },
blur: { configurable: !0 },
quality: { configurable: !0 },
pixelSize: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r) {
var o = e.getFilterTexture();
this._tintFilter.apply(e, t, o, 1),
this._blurFilter.apply(e, o, n, r),
!0 !== this.shadowOnly && e.applyFilter(this, t, n, 0),
e.returnFilterTexture(o);
}),
(t.prototype._updatePadding = function () {
this.padding = this.distance + 2 * this.blur;
}),
(t.prototype._updateShift = function () {
this._tintFilter.uniforms.shift.set(
this.distance * Math.cos(this.angle),
this.distance * Math.sin(this.angle)
);
}),
(i.resolution.get = function () {
return this._resolution;
}),
(i.resolution.set = function (e) {
(this._resolution = e),
this._tintFilter && (this._tintFilter.resolution = e),
this._blurFilter && (this._blurFilter.resolution = e);
}),
(i.distance.get = function () {
return this._distance;
}),
(i.distance.set = function (e) {
(this._distance = e), this._updatePadding(), this._updateShift();
}),
(i.rotation.get = function () {
return this.angle / n.DEG_TO_RAD;
}),
(i.rotation.set = function (e) {
(this.angle = e * n.DEG_TO_RAD), this._updateShift();
}),
(i.alpha.get = function () {
return this._tintFilter.uniforms.alpha;
}),
(i.alpha.set = function (e) {
this._tintFilter.uniforms.alpha = e;
}),
(i.color.get = function () {
return o.rgb2hex(this._tintFilter.uniforms.color);
}),
(i.color.set = function (e) {
o.hex2rgb(e, this._tintFilter.uniforms.color);
}),
(i.kernels.get = function () {
return this._blurFilter.kernels;
}),
(i.kernels.set = function (e) {
this._blurFilter.kernels = e;
}),
(i.blur.get = function () {
return this._blurFilter.blur;
}),
(i.blur.set = function (e) {
(this._blurFilter.blur = e), this._updatePadding();
}),
(i.quality.get = function () {
return this._blurFilter.quality;
}),
(i.quality.set = function (e) {
this._blurFilter.quality = e;
}),
(i.pixelSize.get = function () {
return this._blurFilter.pixelSize;
}),
(i.pixelSize.set = function (e) {
this._blurFilter.pixelSize = e;
}),
Object.defineProperties(t.prototype, i),
t
);
})(t.Filter),
ee = a,
te =
"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float strength;\nuniform vec4 filterArea;\n\n\nvoid main(void)\n{\n\tvec2 onePixel = vec2(1.0 / filterArea);\n\n\tvec4 color;\n\n\tcolor.rgb = vec3(0.5);\n\n\tcolor -= texture2D(uSampler, vTextureCoord - onePixel) * strength;\n\tcolor += texture2D(uSampler, vTextureCoord + onePixel) * strength;\n\n\tcolor.rgb = vec3((color.r + color.g + color.b) / 3.0);\n\n\tfloat alpha = texture2D(uSampler, vTextureCoord).a;\n\n\tgl_FragColor = vec4(color.rgb * alpha, alpha);\n}\n",
ne = (function (e) {
function t(t) {
void 0 === t && (t = 5), e.call(this, ee, te), (this.strength = t);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = { strength: { configurable: !0 } };
return (
(n.strength.get = function () {
return this.uniforms.strength;
}),
(n.strength.set = function (e) {
this.uniforms.strength = e;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
re = a,
oe =
"// precision highp float;\n\nvarying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform vec4 filterArea;\nuniform vec4 filterClamp;\nuniform vec2 dimensions;\nuniform float aspect;\n\nuniform sampler2D displacementMap;\nuniform float offset;\nuniform float sinDir;\nuniform float cosDir;\nuniform int fillMode;\n\nuniform float seed;\nuniform vec2 red;\nuniform vec2 green;\nuniform vec2 blue;\n\nconst int TRANSPARENT = 0;\nconst int ORIGINAL = 1;\nconst int LOOP = 2;\nconst int CLAMP = 3;\nconst int MIRROR = 4;\n\nvoid main(void)\n{\n vec2 coord = (vTextureCoord * filterArea.xy) / dimensions;\n\n if (coord.x > 1.0 || coord.y > 1.0) {\n return;\n }\n\n float cx = coord.x - 0.5;\n float cy = (coord.y - 0.5) * aspect;\n float ny = (-sinDir * cx + cosDir * cy) / aspect + 0.5;\n\n // displacementMap: repeat\n // ny = ny > 1.0 ? ny - 1.0 : (ny < 0.0 ? 1.0 + ny : ny);\n\n // displacementMap: mirror\n ny = ny > 1.0 ? 2.0 - ny : (ny < 0.0 ? -ny : ny);\n\n vec4 dc = texture2D(displacementMap, vec2(0.5, ny));\n\n float displacement = (dc.r - dc.g) * (offset / filterArea.x);\n\n coord = vTextureCoord + vec2(cosDir * displacement, sinDir * displacement * aspect);\n\n if (fillMode == CLAMP) {\n coord = clamp(coord, filterClamp.xy, filterClamp.zw);\n } else {\n if( coord.x > filterClamp.z ) {\n if (fillMode == TRANSPARENT) {\n discard;\n } else if (fillMode == LOOP) {\n coord.x -= filterClamp.z;\n } else if (fillMode == MIRROR) {\n coord.x = filterClamp.z * 2.0 - coord.x;\n }\n } else if( coord.x < filterClamp.x ) {\n if (fillMode == TRANSPARENT) {\n discard;\n } else if (fillMode == LOOP) {\n coord.x += filterClamp.z;\n } else if (fillMode == MIRROR) {\n coord.x *= -filterClamp.z;\n }\n }\n\n if( coord.y > filterClamp.w ) {\n if (fillMode == TRANSPARENT) {\n discard;\n } else if (fillMode == LOOP) {\n coord.y -= filterClamp.w;\n } else if (fillMode == MIRROR) {\n coord.y = filterClamp.w * 2.0 - coord.y;\n }\n } else if( coord.y < filterClamp.y ) {\n if (fillMode == TRANSPARENT) {\n discard;\n } else if (fillMode == LOOP) {\n coord.y += filterClamp.w;\n } else if (fillMode == MIRROR) {\n coord.y *= -filterClamp.w;\n }\n }\n }\n\n gl_FragColor.r = texture2D(uSampler, coord + red * (1.0 - seed * 0.4) / filterArea.xy).r;\n gl_FragColor.g = texture2D(uSampler, coord + green * (1.0 - seed * 0.3) / filterArea.xy).g;\n gl_FragColor.b = texture2D(uSampler, coord + blue * (1.0 - seed * 0.2) / filterArea.xy).b;\n gl_FragColor.a = texture2D(uSampler, coord).a;\n}\n",
ie = (function (e) {
function r(n) {
void 0 === n && (n = {}),
e.call(this, re, oe),
(this.uniforms.dimensions = new Float32Array(2)),
(n = Object.assign(
{
slices: 5,
offset: 100,
direction: 0,
fillMode: 0,
average: !1,
seed: 0,
red: [0, 0],
green: [0, 0],
blue: [0, 0],
minSize: 8,
sampleSize: 512,
},
n
)),
(this.direction = n.direction),
(this.red = n.red),
(this.green = n.green),
(this.blue = n.blue),
(this.offset = n.offset),
(this.fillMode = n.fillMode),
(this.average = n.average),
(this.seed = n.seed),
(this.minSize = n.minSize),
(this.sampleSize = n.sampleSize),
(this._canvas = document.createElement("canvas")),
(this._canvas.width = 4),
(this._canvas.height = this.sampleSize),
(this.texture = t.Texture.from(this._canvas, {
scaleMode: i.SCALE_MODES.NEAREST,
})),
(this._slices = 0),
(this.slices = n.slices);
}
e && (r.__proto__ = e),
(r.prototype = Object.create(e && e.prototype)),
(r.prototype.constructor = r);
var o = {
sizes: { configurable: !0 },
offsets: { configurable: !0 },
slices: { configurable: !0 },
direction: { configurable: !0 },
red: { configurable: !0 },
green: { configurable: !0 },
blue: { configurable: !0 },
};
return (
(r.prototype.apply = function (e, t, n, r) {
var o = t.filterFrame.width,
i = t.filterFrame.height;
(this.uniforms.dimensions[0] = o),
(this.uniforms.dimensions[1] = i),
(this.uniforms.aspect = i / o),
(this.uniforms.seed = this.seed),
(this.uniforms.offset = this.offset),
(this.uniforms.fillMode = this.fillMode),
e.applyFilter(this, t, n, r);
}),
(r.prototype._randomizeSizes = function () {
var e = this._sizes,
t = this._slices - 1,
n = this.sampleSize,
r = Math.min(this.minSize / n, 0.9 / this._slices);
if (this.average) {
for (var o = this._slices, i = 1, l = 0; l < t; l++) {
var s = i / (o - l),
a = Math.max(s * (1 - 0.6 * Math.random()), r);
(e[l] = a), (i -= a);
}
e[t] = i;
} else {
for (
var u = 1, c = Math.sqrt(1 / this._slices), f = 0;
f < t;
f++
) {
var h = Math.max(c * u * Math.random(), r);
(e[f] = h), (u -= h);
}
e[t] = u;
}
this.shuffle();
}),
(r.prototype.shuffle = function () {
for (var e = this._sizes, t = this._slices - 1; t > 0; t--) {
var n = (Math.random() * t) >> 0,
r = e[t];
(e[t] = e[n]), (e[n] = r);
}
}),
(r.prototype._randomizeOffsets = function () {
for (var e = 0; e < this._slices; e++)
this._offsets[e] = Math.random() * (Math.random() < 0.5 ? -1 : 1);
}),
(r.prototype.refresh = function () {
this._randomizeSizes(), this._randomizeOffsets(), this.redraw();
}),
(r.prototype.redraw = function () {
var e,
t = this.sampleSize,
n = this.texture,
r = this._canvas.getContext("2d");
r.clearRect(0, 0, 8, t);
for (var o = 0, i = 0; i < this._slices; i++) {
e = Math.floor(256 * this._offsets[i]);
var l = this._sizes[i] * t,
s = e > 0 ? e : 0,
a = e < 0 ? -e : 0;
(r.fillStyle = "rgba(" + s + ", " + a + ", 0, 1)"),
r.fillRect(0, o >> 0, t, (l + 1) >> 0),
(o += l);
}
n.baseTexture.update(), (this.uniforms.displacementMap = n);
}),
(o.sizes.set = function (e) {
for (var t = Math.min(this._slices, e.length), n = 0; n < t; n++)
this._sizes[n] = e[n];
}),
(o.sizes.get = function () {
return this._sizes;
}),
(o.offsets.set = function (e) {
for (var t = Math.min(this._slices, e.length), n = 0; n < t; n++)
this._offsets[n] = e[n];
}),
(o.offsets.get = function () {
return this._offsets;
}),
(o.slices.get = function () {
return this._slices;
}),
(o.slices.set = function (e) {
this._slices !== e &&
((this._slices = e),
(this.uniforms.slices = e),
(this._sizes = this.uniforms.slicesWidth = new Float32Array(e)),
(this._offsets = this.uniforms.slicesOffset =
new Float32Array(e)),
this.refresh());
}),
(o.direction.get = function () {
return this._direction;
}),
(o.direction.set = function (e) {
if (this._direction !== e) {
this._direction = e;
var t = e * n.DEG_TO_RAD;
(this.uniforms.sinDir = Math.sin(t)),
(this.uniforms.cosDir = Math.cos(t));
}
}),
(o.red.get = function () {
return this.uniforms.red;
}),
(o.red.set = function (e) {
this.uniforms.red = e;
}),
(o.green.get = function () {
return this.uniforms.green;
}),
(o.green.set = function (e) {
this.uniforms.green = e;
}),
(o.blue.get = function () {
return this.uniforms.blue;
}),
(o.blue.set = function (e) {
this.uniforms.blue = e;
}),
(r.prototype.destroy = function () {
this.texture.destroy(!0),
(this.texture = null),
(this._canvas = null),
(this.red = null),
(this.green = null),
(this.blue = null),
(this._sizes = null),
(this._offsets = null);
}),
Object.defineProperties(r.prototype, o),
r
);
})(t.Filter);
(ie.TRANSPARENT = 0),
(ie.ORIGINAL = 1),
(ie.LOOP = 2),
(ie.CLAMP = 3),
(ie.MIRROR = 4);
var le = a,
se =
"varying vec2 vTextureCoord;\nvarying vec4 vColor;\n\nuniform sampler2D uSampler;\n\nuniform float outerStrength;\nuniform float innerStrength;\n\nuniform vec4 glowColor;\n\nuniform vec4 filterArea;\nuniform vec4 filterClamp;\nuniform bool knockout;\n\nconst float PI = 3.14159265358979323846264;\n\nconst float DIST = __DIST__;\nconst float ANGLE_STEP_SIZE = min(__ANGLE_STEP_SIZE__, PI * 2.0);\nconst float ANGLE_STEP_NUM = ceil(PI * 2.0 / ANGLE_STEP_SIZE);\n\nconst float MAX_TOTAL_ALPHA = ANGLE_STEP_NUM * DIST * (DIST + 1.0) / 2.0;\n\nvoid main(void) {\n vec2 px = vec2(1.0 / filterArea.x, 1.0 / filterArea.y);\n\n float totalAlpha = 0.0;\n\n vec2 direction;\n vec2 displaced;\n vec4 curColor;\n\n for (float angle = 0.0; angle < PI * 2.0; angle += ANGLE_STEP_SIZE) {\n direction = vec2(cos(angle), sin(angle)) * px;\n\n for (float curDistance = 0.0; curDistance < DIST; curDistance++) {\n displaced = clamp(vTextureCoord + direction * \n (curDistance + 1.0), filterClamp.xy, filterClamp.zw);\n\n curColor = texture2D(uSampler, displaced);\n\n totalAlpha += (DIST - curDistance) * curColor.a;\n }\n }\n \n curColor = texture2D(uSampler, vTextureCoord);\n\n float alphaRatio = (totalAlpha / MAX_TOTAL_ALPHA);\n\n float innerGlowAlpha = (1.0 - alphaRatio) * innerStrength * curColor.a;\n float innerGlowStrength = min(1.0, innerGlowAlpha);\n \n vec4 innerColor = mix(curColor, glowColor, innerGlowStrength);\n\n float outerGlowAlpha = alphaRatio * outerStrength * (1. - curColor.a);\n float outerGlowStrength = min(1.0 - innerColor.a, outerGlowAlpha);\n\n vec4 outerGlowColor = outerGlowStrength * glowColor.rgba;\n \n if (knockout) {\n float resultAlpha = outerGlowAlpha + innerGlowAlpha;\n gl_FragColor = vec4(glowColor.rgb * resultAlpha, resultAlpha);\n }\n else {\n gl_FragColor = innerColor + outerGlowColor;\n }\n}\n",
ae = (function (e) {
function t(n) {
var r = Object.assign({}, t.defaults, n),
o = r.distance,
i = r.outerStrength,
l = r.innerStrength,
s = r.color,
a = r.knockout,
u = r.quality;
(o = Math.round(o)),
e.call(
this,
le,
se
.replace(/__ANGLE_STEP_SIZE__/gi, "" + (1 / u / o).toFixed(7))
.replace(/__DIST__/gi, o.toFixed(0) + ".0")
),
(this.uniforms.glowColor = new Float32Array([0, 0, 0, 1])),
Object.assign(this, {
color: s,
outerStrength: i,
innerStrength: l,
padding: o,
knockout: a,
});
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
color: { configurable: !0 },
outerStrength: { configurable: !0 },
innerStrength: { configurable: !0 },
knockout: { configurable: !0 },
};
return (
(n.color.get = function () {
return o.rgb2hex(this.uniforms.glowColor);
}),
(n.color.set = function (e) {
o.hex2rgb(e, this.uniforms.glowColor);
}),
(n.outerStrength.get = function () {
return this.uniforms.outerStrength;
}),
(n.outerStrength.set = function (e) {
this.uniforms.outerStrength = e;
}),
(n.innerStrength.get = function () {
return this.uniforms.innerStrength;
}),
(n.innerStrength.set = function (e) {
this.uniforms.innerStrength = e;
}),
(n.knockout.get = function () {
return this.uniforms.knockout;
}),
(n.knockout.set = function (e) {
this.uniforms.knockout = e;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter);
ae.defaults = {
distance: 10,
outerStrength: 4,
innerStrength: 0,
color: 16777215,
quality: 0.1,
knockout: !1,
};
var ue = a,
ce =
"vec3 mod289(vec3 x)\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\nvec4 mod289(vec4 x)\n{\n return x - floor(x * (1.0 / 289.0)) * 289.0;\n}\nvec4 permute(vec4 x)\n{\n return mod289(((x * 34.0) + 1.0) * x);\n}\nvec4 taylorInvSqrt(vec4 r)\n{\n return 1.79284291400159 - 0.85373472095314 * r;\n}\nvec3 fade(vec3 t)\n{\n return t * t * t * (t * (t * 6.0 - 15.0) + 10.0);\n}\n// Classic Perlin noise, periodic variant\nfloat pnoise(vec3 P, vec3 rep)\n{\n vec3 Pi0 = mod(floor(P), rep); // Integer part, modulo period\n vec3 Pi1 = mod(Pi0 + vec3(1.0), rep); // Integer part + 1, mod period\n Pi0 = mod289(Pi0);\n Pi1 = mod289(Pi1);\n vec3 Pf0 = fract(P); // Fractional part for interpolation\n vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0\n vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n vec4 iy = vec4(Pi0.yy, Pi1.yy);\n vec4 iz0 = Pi0.zzzz;\n vec4 iz1 = Pi1.zzzz;\n vec4 ixy = permute(permute(ix) + iy);\n vec4 ixy0 = permute(ixy + iz0);\n vec4 ixy1 = permute(ixy + iz1);\n vec4 gx0 = ixy0 * (1.0 / 7.0);\n vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\n gx0 = fract(gx0);\n vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\n vec4 sz0 = step(gz0, vec4(0.0));\n gx0 -= sz0 * (step(0.0, gx0) - 0.5);\n gy0 -= sz0 * (step(0.0, gy0) - 0.5);\n vec4 gx1 = ixy1 * (1.0 / 7.0);\n vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\n gx1 = fract(gx1);\n vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\n vec4 sz1 = step(gz1, vec4(0.0));\n gx1 -= sz1 * (step(0.0, gx1) - 0.5);\n gy1 -= sz1 * (step(0.0, gy1) - 0.5);\n vec3 g000 = vec3(gx0.x, gy0.x, gz0.x);\n vec3 g100 = vec3(gx0.y, gy0.y, gz0.y);\n vec3 g010 = vec3(gx0.z, gy0.z, gz0.z);\n vec3 g110 = vec3(gx0.w, gy0.w, gz0.w);\n vec3 g001 = vec3(gx1.x, gy1.x, gz1.x);\n vec3 g101 = vec3(gx1.y, gy1.y, gz1.y);\n vec3 g011 = vec3(gx1.z, gy1.z, gz1.z);\n vec3 g111 = vec3(gx1.w, gy1.w, gz1.w);\n vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n g000 *= norm0.x;\n g010 *= norm0.y;\n g100 *= norm0.z;\n g110 *= norm0.w;\n vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n g001 *= norm1.x;\n g011 *= norm1.y;\n g101 *= norm1.z;\n g111 *= norm1.w;\n float n000 = dot(g000, Pf0);\n float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\n float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\n float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\n float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\n float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\n float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\n float n111 = dot(g111, Pf1);\n vec3 fade_xyz = fade(Pf0);\n vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\n vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\n float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\n return 2.2 * n_xyz;\n}\nfloat turb(vec3 P, vec3 rep, float lacunarity, float gain)\n{\n float sum = 0.0;\n float sc = 1.0;\n float totalgain = 1.0;\n for (float i = 0.0; i < 6.0; i++)\n {\n sum += totalgain * pnoise(P * sc, rep);\n sc *= lacunarity;\n totalgain *= gain;\n }\n return abs(sum);\n}\n",
fe =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec4 filterArea;\nuniform vec2 dimensions;\n\nuniform vec2 light;\nuniform bool parallel;\nuniform float aspect;\n\nuniform float gain;\nuniform float lacunarity;\nuniform float time;\nuniform float alpha;\n\n${perlin}\n\nvoid main(void) {\n vec2 coord = vTextureCoord * filterArea.xy / dimensions.xy;\n\n float d;\n\n if (parallel) {\n float _cos = light.x;\n float _sin = light.y;\n d = (_cos * coord.x) + (_sin * coord.y * aspect);\n } else {\n float dx = coord.x - light.x / dimensions.x;\n float dy = (coord.y - light.y / dimensions.y) * aspect;\n float dis = sqrt(dx * dx + dy * dy) + 0.00001;\n d = dy / dis;\n }\n\n vec3 dir = vec3(d, d, 0.0);\n\n float noise = turb(dir + vec3(time, 0.0, 62.1 + time) * 0.05, vec3(480.0, 320.0, 480.0), lacunarity, gain);\n noise = mix(noise, 0.0, 0.3);\n //fade vertically.\n vec4 mist = vec4(noise, noise, noise, 1.0) * (1.0 - coord.y);\n mist.a = 1.0;\n // apply user alpha\n mist *= alpha;\n\n gl_FragColor = texture2D(uSampler, vTextureCoord) + mist;\n\n}\n",
he = (function (e) {
function t(t) {
e.call(this, ue, fe.replace("${perlin}", ce)),
(this.uniforms.dimensions = new Float32Array(2)),
"number" == typeof t &&
(console.warn(
"GodrayFilter now uses options instead of (angle, gain, lacunarity, time)"
),
(t = { angle: t }),
void 0 !== arguments[1] && (t.gain = arguments[1]),
void 0 !== arguments[2] && (t.lacunarity = arguments[2]),
void 0 !== arguments[3] && (t.time = arguments[3]),
void 0 !== arguments[4] && (t.alpha = arguments[4])),
(t = Object.assign(
{
angle: 30,
gain: 0.5,
lacunarity: 2.5,
time: 0,
parallel: !0,
center: [0, 0],
alpha: 1,
},
t
)),
(this._angleLight = new n.Point()),
(this.angle = t.angle),
(this.gain = t.gain),
(this.lacunarity = t.lacunarity),
(this.alpha = t.alpha),
(this.parallel = t.parallel),
(this.center = t.center),
(this.time = t.time);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var r = {
angle: { configurable: !0 },
gain: { configurable: !0 },
lacunarity: { configurable: !0 },
alpha: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r) {
var o = t.filterFrame,
i = o.width,
l = o.height;
(this.uniforms.light = this.parallel
? this._angleLight
: this.center),
(this.uniforms.parallel = this.parallel),
(this.uniforms.dimensions[0] = i),
(this.uniforms.dimensions[1] = l),
(this.uniforms.aspect = l / i),
(this.uniforms.time = this.time),
(this.uniforms.alpha = this.alpha),
e.applyFilter(this, t, n, r);
}),
(r.angle.get = function () {
return this._angle;
}),
(r.angle.set = function (e) {
this._angle = e;
var t = e * n.DEG_TO_RAD;
(this._angleLight.x = Math.cos(t)),
(this._angleLight.y = Math.sin(t));
}),
(r.gain.get = function () {
return this.uniforms.gain;
}),
(r.gain.set = function (e) {
this.uniforms.gain = e;
}),
(r.lacunarity.get = function () {
return this.uniforms.lacunarity;
}),
(r.lacunarity.set = function (e) {
this.uniforms.lacunarity = e;
}),
(r.alpha.get = function () {
return this.uniforms.alpha;
}),
(r.alpha.set = function (e) {
this.uniforms.alpha = e;
}),
Object.defineProperties(t.prototype, r),
t
);
})(t.Filter),
pe = a,
de =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec4 filterArea;\n\nuniform vec2 uVelocity;\nuniform int uKernelSize;\nuniform float uOffset;\n\nconst int MAX_KERNEL_SIZE = 2048;\n\n// Notice:\n// the perfect way:\n// int kernelSize = min(uKernelSize, MAX_KERNELSIZE);\n// BUT in real use-case , uKernelSize < MAX_KERNELSIZE almost always.\n// So use uKernelSize directly.\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n if (uKernelSize == 0)\n {\n gl_FragColor = color;\n return;\n }\n\n vec2 velocity = uVelocity / filterArea.xy;\n float offset = -uOffset / length(uVelocity) - 0.5;\n int k = uKernelSize - 1;\n\n for(int i = 0; i < MAX_KERNEL_SIZE - 1; i++) {\n if (i == k) {\n break;\n }\n vec2 bias = velocity * (float(i) / float(k) + offset);\n color += texture2D(uSampler, vTextureCoord + bias);\n }\n gl_FragColor = color / float(uKernelSize);\n}\n",
me = (function (e) {
function t(t, r, o) {
void 0 === t && (t = [0, 0]),
void 0 === r && (r = 5),
void 0 === o && (o = 0),
e.call(this, pe, de),
(this.uniforms.uVelocity = new Float32Array(2)),
(this._velocity = new n.ObservablePoint(
this.velocityChanged,
this
)),
(this.velocity = t),
(this.kernelSize = r),
(this.offset = o);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var r = {
velocity: { configurable: !0 },
offset: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r) {
var o = this.velocity,
i = o.x,
l = o.y;
(this.uniforms.uKernelSize =
0 !== i || 0 !== l ? this.kernelSize : 0),
e.applyFilter(this, t, n, r);
}),
(r.velocity.set = function (e) {
Array.isArray(e)
? this._velocity.set(e[0], e[1])
: (e instanceof n.Point || e instanceof n.ObservablePoint) &&
this._velocity.copyFrom(e);
}),
(r.velocity.get = function () {
return this._velocity;
}),
(t.prototype.velocityChanged = function () {
(this.uniforms.uVelocity[0] = this._velocity.x),
(this.uniforms.uVelocity[1] = this._velocity.y);
}),
(r.offset.set = function (e) {
this.uniforms.uOffset = e;
}),
(r.offset.get = function () {
return this.uniforms.uOffset;
}),
Object.defineProperties(t.prototype, r),
t
);
})(t.Filter),
ge = a,
ve =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform float epsilon;\n\nconst int MAX_COLORS = %maxColors%;\n\nuniform vec3 originalColors[MAX_COLORS];\nuniform vec3 targetColors[MAX_COLORS];\n\nvoid main(void)\n{\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n\n float alpha = gl_FragColor.a;\n if (alpha < 0.0001)\n {\n return;\n }\n\n vec3 color = gl_FragColor.rgb / alpha;\n\n for(int i = 0; i < MAX_COLORS; i++)\n {\n vec3 origColor = originalColors[i];\n if (origColor.r < 0.0)\n {\n break;\n }\n vec3 colorDiff = origColor - color;\n if (length(colorDiff) < epsilon)\n {\n vec3 targetColor = targetColors[i];\n gl_FragColor = vec4((targetColor + colorDiff) * alpha, alpha);\n return;\n }\n }\n}\n",
xe = (function (e) {
function t(t, n, r) {
void 0 === n && (n = 0.05),
void 0 === r && (r = null),
(r = r || t.length),
e.call(this, ge, ve.replace(/%maxColors%/g, r)),
(this.epsilon = n),
(this._maxColors = r),
(this._replacements = null),
(this.uniforms.originalColors = new Float32Array(3 * r)),
(this.uniforms.targetColors = new Float32Array(3 * r)),
(this.replacements = t);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
replacements: { configurable: !0 },
maxColors: { configurable: !0 },
epsilon: { configurable: !0 },
};
return (
(n.replacements.set = function (e) {
var t = this.uniforms.originalColors,
n = this.uniforms.targetColors,
r = e.length;
if (r > this._maxColors)
throw (
"Length of replacements (" +
r +
") exceeds the maximum colors length (" +
this._maxColors +
")"
);
t[3 * r] = -1;
for (var i = 0; i < r; i++) {
var l = e[i],
s = l[0];
"number" == typeof s ? (s = o.hex2rgb(s)) : (l[0] = o.rgb2hex(s)),
(t[3 * i] = s[0]),
(t[3 * i + 1] = s[1]),
(t[3 * i + 2] = s[2]);
var a = l[1];
"number" == typeof a ? (a = o.hex2rgb(a)) : (l[1] = o.rgb2hex(a)),
(n[3 * i] = a[0]),
(n[3 * i + 1] = a[1]),
(n[3 * i + 2] = a[2]);
}
this._replacements = e;
}),
(n.replacements.get = function () {
return this._replacements;
}),
(t.prototype.refresh = function () {
this.replacements = this._replacements;
}),
(n.maxColors.get = function () {
return this._maxColors;
}),
(n.epsilon.set = function (e) {
this.uniforms.epsilon = e;
}),
(n.epsilon.get = function () {
return this.uniforms.epsilon;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
ye = a,
_e =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec4 filterArea;\nuniform vec2 dimensions;\n\nuniform float sepia;\nuniform float noise;\nuniform float noiseSize;\nuniform float scratch;\nuniform float scratchDensity;\nuniform float scratchWidth;\nuniform float vignetting;\nuniform float vignettingAlpha;\nuniform float vignettingBlur;\nuniform float seed;\n\nconst float SQRT_2 = 1.414213;\nconst vec3 SEPIA_RGB = vec3(112.0 / 255.0, 66.0 / 255.0, 20.0 / 255.0);\n\nfloat rand(vec2 co) {\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}\n\nvec3 Overlay(vec3 src, vec3 dst)\n{\n // if (dst <= 0.5) then: 2 * src * dst\n // if (dst > 0.5) then: 1 - 2 * (1 - dst) * (1 - src)\n return vec3((dst.x <= 0.5) ? (2.0 * src.x * dst.x) : (1.0 - 2.0 * (1.0 - dst.x) * (1.0 - src.x)),\n (dst.y <= 0.5) ? (2.0 * src.y * dst.y) : (1.0 - 2.0 * (1.0 - dst.y) * (1.0 - src.y)),\n (dst.z <= 0.5) ? (2.0 * src.z * dst.z) : (1.0 - 2.0 * (1.0 - dst.z) * (1.0 - src.z)));\n}\n\n\nvoid main()\n{\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n vec3 color = gl_FragColor.rgb;\n\n if (sepia > 0.0)\n {\n float gray = (color.x + color.y + color.z) / 3.0;\n vec3 grayscale = vec3(gray);\n\n color = Overlay(SEPIA_RGB, grayscale);\n\n color = grayscale + sepia * (color - grayscale);\n }\n\n vec2 coord = vTextureCoord * filterArea.xy / dimensions.xy;\n\n if (vignetting > 0.0)\n {\n float outter = SQRT_2 - vignetting * SQRT_2;\n vec2 dir = vec2(vec2(0.5, 0.5) - coord);\n dir.y *= dimensions.y / dimensions.x;\n float darker = clamp((outter - length(dir) * SQRT_2) / ( 0.00001 + vignettingBlur * SQRT_2), 0.0, 1.0);\n color.rgb *= darker + (1.0 - darker) * (1.0 - vignettingAlpha);\n }\n\n if (scratchDensity > seed && scratch != 0.0)\n {\n float phase = seed * 256.0;\n float s = mod(floor(phase), 2.0);\n float dist = 1.0 / scratchDensity;\n float d = distance(coord, vec2(seed * dist, abs(s - seed * dist)));\n if (d < seed * 0.6 + 0.4)\n {\n highp float period = scratchDensity * 10.0;\n\n float xx = coord.x * period + phase;\n float aa = abs(mod(xx, 0.5) * 4.0);\n float bb = mod(floor(xx / 0.5), 2.0);\n float yy = (1.0 - bb) * aa + bb * (2.0 - aa);\n\n float kk = 2.0 * period;\n float dw = scratchWidth / dimensions.x * (0.75 + seed);\n float dh = dw * kk;\n\n float tine = (yy - (2.0 - dh));\n\n if (tine > 0.0) {\n float _sign = sign(scratch);\n\n tine = s * tine / period + scratch + 0.1;\n tine = clamp(tine + 1.0, 0.5 + _sign * 0.5, 1.5 + _sign * 0.5);\n\n color.rgb *= tine;\n }\n }\n }\n\n if (noise > 0.0 && noiseSize > 0.0)\n {\n vec2 pixelCoord = vTextureCoord.xy * filterArea.xy;\n pixelCoord.x = floor(pixelCoord.x / noiseSize);\n pixelCoord.y = floor(pixelCoord.y / noiseSize);\n // vec2 d = pixelCoord * noiseSize * vec2(1024.0 + seed * 512.0, 1024.0 - seed * 512.0);\n // float _noise = snoise(d) * 0.5;\n float _noise = rand(pixelCoord * noiseSize * seed) - 0.5;\n color += _noise * noise;\n }\n\n gl_FragColor.rgb = color;\n}\n",
be = (function (e) {
function t(t, n) {
void 0 === n && (n = 0),
e.call(this, ye, _e),
(this.uniforms.dimensions = new Float32Array(2)),
"number" == typeof t
? ((this.seed = t), (t = null))
: (this.seed = n),
Object.assign(
this,
{
sepia: 0.3,
noise: 0.3,
noiseSize: 1,
scratch: 0.5,
scratchDensity: 0.3,
scratchWidth: 1,
vignetting: 0.3,
vignettingAlpha: 1,
vignettingBlur: 0.3,
},
t
);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
sepia: { configurable: !0 },
noise: { configurable: !0 },
noiseSize: { configurable: !0 },
scratch: { configurable: !0 },
scratchDensity: { configurable: !0 },
scratchWidth: { configurable: !0 },
vignetting: { configurable: !0 },
vignettingAlpha: { configurable: !0 },
vignettingBlur: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r) {
(this.uniforms.dimensions[0] = t.filterFrame.width),
(this.uniforms.dimensions[1] = t.filterFrame.height),
(this.uniforms.seed = this.seed),
e.applyFilter(this, t, n, r);
}),
(n.sepia.set = function (e) {
this.uniforms.sepia = e;
}),
(n.sepia.get = function () {
return this.uniforms.sepia;
}),
(n.noise.set = function (e) {
this.uniforms.noise = e;
}),
(n.noise.get = function () {
return this.uniforms.noise;
}),
(n.noiseSize.set = function (e) {
this.uniforms.noiseSize = e;
}),
(n.noiseSize.get = function () {
return this.uniforms.noiseSize;
}),
(n.scratch.set = function (e) {
this.uniforms.scratch = e;
}),
(n.scratch.get = function () {
return this.uniforms.scratch;
}),
(n.scratchDensity.set = function (e) {
this.uniforms.scratchDensity = e;
}),
(n.scratchDensity.get = function () {
return this.uniforms.scratchDensity;
}),
(n.scratchWidth.set = function (e) {
this.uniforms.scratchWidth = e;
}),
(n.scratchWidth.get = function () {
return this.uniforms.scratchWidth;
}),
(n.vignetting.set = function (e) {
this.uniforms.vignetting = e;
}),
(n.vignetting.get = function () {
return this.uniforms.vignetting;
}),
(n.vignettingAlpha.set = function (e) {
this.uniforms.vignettingAlpha = e;
}),
(n.vignettingAlpha.get = function () {
return this.uniforms.vignettingAlpha;
}),
(n.vignettingBlur.set = function (e) {
this.uniforms.vignettingBlur = e;
}),
(n.vignettingBlur.get = function () {
return this.uniforms.vignettingBlur;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
Ce = a,
Se =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform vec2 thickness;\nuniform vec4 outlineColor;\nuniform vec4 filterClamp;\n\nconst float DOUBLE_PI = 3.14159265358979323846264 * 2.;\n\nvoid main(void) {\n vec4 ownColor = texture2D(uSampler, vTextureCoord);\n vec4 curColor;\n float maxAlpha = 0.;\n vec2 displaced;\n for (float angle = 0.; angle <= DOUBLE_PI; angle += ${angleStep}) {\n displaced.x = vTextureCoord.x + thickness.x * cos(angle);\n displaced.y = vTextureCoord.y + thickness.y * sin(angle);\n curColor = texture2D(uSampler, clamp(displaced, filterClamp.xy, filterClamp.zw));\n maxAlpha = max(maxAlpha, curColor.a);\n }\n float resultAlpha = max(maxAlpha, ownColor.a);\n gl_FragColor = vec4((ownColor.rgb + outlineColor.rgb * (1. - ownColor.a)) * resultAlpha, resultAlpha);\n}\n",
Fe = (function (e) {
function t(n, r, o) {
void 0 === n && (n = 1),
void 0 === r && (r = 0),
void 0 === o && (o = 0.1);
var i = Math.max(o * t.MAX_SAMPLES, t.MIN_SAMPLES),
l = ((2 * Math.PI) / i).toFixed(7);
e.call(this, Ce, Se.replace(/\$\{angleStep\}/, l)),
(this.uniforms.thickness = new Float32Array([0, 0])),
(this.uniforms.outlineColor = new Float32Array([0, 0, 0, 1])),
Object.assign(this, { thickness: n, color: r, quality: o });
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
color: { configurable: !0 },
thickness: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r) {
(this.uniforms.thickness[0] = this._thickness / t._frame.width),
(this.uniforms.thickness[1] = this._thickness / t._frame.height),
e.applyFilter(this, t, n, r);
}),
(n.color.get = function () {
return o.rgb2hex(this.uniforms.outlineColor);
}),
(n.color.set = function (e) {
o.hex2rgb(e, this.uniforms.outlineColor);
}),
(n.thickness.get = function () {
return this._thickness;
}),
(n.thickness.set = function (e) {
(this._thickness = e), (this.padding = e);
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter);
(Fe.MIN_SAMPLES = 1), (Fe.MAX_SAMPLES = 100);
var ze = a,
Ae =
"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform vec2 size;\nuniform sampler2D uSampler;\n\nuniform vec4 filterArea;\n\nvec2 mapCoord( vec2 coord )\n{\n coord *= filterArea.xy;\n coord += filterArea.zw;\n\n return coord;\n}\n\nvec2 unmapCoord( vec2 coord )\n{\n coord -= filterArea.zw;\n coord /= filterArea.xy;\n\n return coord;\n}\n\nvec2 pixelate(vec2 coord, vec2 size)\n{\n\treturn floor( coord / size ) * size;\n}\n\nvoid main(void)\n{\n vec2 coord = mapCoord(vTextureCoord);\n\n coord = pixelate(coord, size);\n\n coord = unmapCoord(coord);\n\n gl_FragColor = texture2D(uSampler, coord);\n}\n",
Te = (function (e) {
function t(t) {
void 0 === t && (t = 10), e.call(this, ze, Ae), (this.size = t);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = { size: { configurable: !0 } };
return (
(n.size.get = function () {
return this.uniforms.size;
}),
(n.size.set = function (e) {
"number" == typeof e && (e = [e, e]), (this.uniforms.size = e);
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
we = a,
Oe =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec4 filterArea;\n\nuniform float uRadian;\nuniform vec2 uCenter;\nuniform float uRadius;\nuniform int uKernelSize;\n\nconst int MAX_KERNEL_SIZE = 2048;\n\nvoid main(void)\n{\n vec4 color = texture2D(uSampler, vTextureCoord);\n\n if (uKernelSize == 0)\n {\n gl_FragColor = color;\n return;\n }\n\n float aspect = filterArea.y / filterArea.x;\n vec2 center = uCenter.xy / filterArea.xy;\n float gradient = uRadius / filterArea.x * 0.3;\n float radius = uRadius / filterArea.x - gradient * 0.5;\n int k = uKernelSize - 1;\n\n vec2 coord = vTextureCoord;\n vec2 dir = vec2(center - coord);\n float dist = length(vec2(dir.x, dir.y * aspect));\n\n float radianStep = uRadian;\n if (radius >= 0.0 && dist > radius) {\n float delta = dist - radius;\n float gap = gradient;\n float scale = 1.0 - abs(delta / gap);\n if (scale <= 0.0) {\n gl_FragColor = color;\n return;\n }\n radianStep *= scale;\n }\n radianStep /= float(k);\n\n float s = sin(radianStep);\n float c = cos(radianStep);\n mat2 rotationMatrix = mat2(vec2(c, -s), vec2(s, c));\n\n for(int i = 0; i < MAX_KERNEL_SIZE - 1; i++) {\n if (i == k) {\n break;\n }\n\n coord -= center;\n coord.y *= aspect;\n coord = rotationMatrix * coord;\n coord.y /= aspect;\n coord += center;\n\n vec4 sample = texture2D(uSampler, coord);\n\n // switch to pre-multiplied alpha to correctly blur transparent images\n // sample.rgb *= sample.a;\n\n color += sample;\n }\n\n gl_FragColor = color / float(uKernelSize);\n}\n",
De = (function (e) {
function t(t, n, r, o) {
void 0 === t && (t = 0),
void 0 === n && (n = [0, 0]),
void 0 === r && (r = 5),
void 0 === o && (o = -1),
e.call(this, we, Oe),
(this._angle = 0),
(this.angle = t),
(this.center = n),
(this.kernelSize = r),
(this.radius = o);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
angle: { configurable: !0 },
center: { configurable: !0 },
radius: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r) {
(this.uniforms.uKernelSize =
0 !== this._angle ? this.kernelSize : 0),
e.applyFilter(this, t, n, r);
}),
(n.angle.set = function (e) {
(this._angle = e), (this.uniforms.uRadian = (e * Math.PI) / 180);
}),
(n.angle.get = function () {
return this._angle;
}),
(n.center.get = function () {
return this.uniforms.uCenter;
}),
(n.center.set = function (e) {
this.uniforms.uCenter = e;
}),
(n.radius.get = function () {
return this.uniforms.uRadius;
}),
(n.radius.set = function (e) {
(e < 0 || e === 1 / 0) && (e = -1), (this.uniforms.uRadius = e);
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
Pe = a,
Me =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\n\nuniform vec4 filterArea;\nuniform vec4 filterClamp;\nuniform vec2 dimensions;\n\nuniform bool mirror;\nuniform float boundary;\nuniform vec2 amplitude;\nuniform vec2 waveLength;\nuniform vec2 alpha;\nuniform float time;\n\nfloat rand(vec2 co) {\n return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}\n\nvoid main(void)\n{\n vec2 pixelCoord = vTextureCoord.xy * filterArea.xy;\n vec2 coord = pixelCoord / dimensions;\n\n if (coord.y < boundary) {\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n return;\n }\n\n float k = (coord.y - boundary) / (1. - boundary + 0.0001);\n float areaY = boundary * dimensions.y / filterArea.y;\n float v = areaY + areaY - vTextureCoord.y;\n float y = mirror ? v : vTextureCoord.y;\n\n float _amplitude = ((amplitude.y - amplitude.x) * k + amplitude.x ) / filterArea.x;\n float _waveLength = ((waveLength.y - waveLength.x) * k + waveLength.x) / filterArea.y;\n float _alpha = (alpha.y - alpha.x) * k + alpha.x;\n\n float x = vTextureCoord.x + cos(v * 6.28 / _waveLength - time) * _amplitude;\n x = clamp(x, filterClamp.x, filterClamp.z);\n\n vec4 color = texture2D(uSampler, vec2(x, y));\n\n gl_FragColor = color * _alpha;\n}\n",
Re = (function (e) {
function t(t) {
e.call(this, Pe, Me),
(this.uniforms.amplitude = new Float32Array(2)),
(this.uniforms.waveLength = new Float32Array(2)),
(this.uniforms.alpha = new Float32Array(2)),
(this.uniforms.dimensions = new Float32Array(2)),
Object.assign(
this,
{
mirror: !0,
boundary: 0.5,
amplitude: [0, 20],
waveLength: [30, 100],
alpha: [1, 1],
time: 0,
},
t
);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
mirror: { configurable: !0 },
boundary: { configurable: !0 },
amplitude: { configurable: !0 },
waveLength: { configurable: !0 },
alpha: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r) {
(this.uniforms.dimensions[0] = t.filterFrame.width),
(this.uniforms.dimensions[1] = t.filterFrame.height),
(this.uniforms.time = this.time),
e.applyFilter(this, t, n, r);
}),
(n.mirror.set = function (e) {
this.uniforms.mirror = e;
}),
(n.mirror.get = function () {
return this.uniforms.mirror;
}),
(n.boundary.set = function (e) {
this.uniforms.boundary = e;
}),
(n.boundary.get = function () {
return this.uniforms.boundary;
}),
(n.amplitude.set = function (e) {
(this.uniforms.amplitude[0] = e[0]),
(this.uniforms.amplitude[1] = e[1]);
}),
(n.amplitude.get = function () {
return this.uniforms.amplitude;
}),
(n.waveLength.set = function (e) {
(this.uniforms.waveLength[0] = e[0]),
(this.uniforms.waveLength[1] = e[1]);
}),
(n.waveLength.get = function () {
return this.uniforms.waveLength;
}),
(n.alpha.set = function (e) {
(this.uniforms.alpha[0] = e[0]), (this.uniforms.alpha[1] = e[1]);
}),
(n.alpha.get = function () {
return this.uniforms.alpha;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
ke = a,
je =
"precision mediump float;\n\nvarying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform vec4 filterArea;\nuniform vec2 red;\nuniform vec2 green;\nuniform vec2 blue;\n\nvoid main(void)\n{\n gl_FragColor.r = texture2D(uSampler, vTextureCoord + red/filterArea.xy).r;\n gl_FragColor.g = texture2D(uSampler, vTextureCoord + green/filterArea.xy).g;\n gl_FragColor.b = texture2D(uSampler, vTextureCoord + blue/filterArea.xy).b;\n gl_FragColor.a = texture2D(uSampler, vTextureCoord).a;\n}\n",
Ee = (function (e) {
function t(t, n, r) {
void 0 === t && (t = [-10, 0]),
void 0 === n && (n = [0, 10]),
void 0 === r && (r = [0, 0]),
e.call(this, ke, je),
(this.red = t),
(this.green = n),
(this.blue = r);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
red: { configurable: !0 },
green: { configurable: !0 },
blue: { configurable: !0 },
};
return (
(n.red.get = function () {
return this.uniforms.red;
}),
(n.red.set = function (e) {
this.uniforms.red = e;
}),
(n.green.get = function () {
return this.uniforms.green;
}),
(n.green.set = function (e) {
this.uniforms.green = e;
}),
(n.blue.get = function () {
return this.uniforms.blue;
}),
(n.blue.set = function (e) {
this.uniforms.blue = e;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
Le = a,
Ie =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec4 filterArea;\nuniform vec4 filterClamp;\n\nuniform vec2 center;\n\nuniform float amplitude;\nuniform float wavelength;\n// uniform float power;\nuniform float brightness;\nuniform float speed;\nuniform float radius;\n\nuniform float time;\n\nconst float PI = 3.14159;\n\nvoid main()\n{\n float halfWavelength = wavelength * 0.5 / filterArea.x;\n float maxRadius = radius / filterArea.x;\n float currentRadius = time * speed / filterArea.x;\n\n float fade = 1.0;\n\n if (maxRadius > 0.0) {\n if (currentRadius > maxRadius) {\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n return;\n }\n fade = 1.0 - pow(currentRadius / maxRadius, 2.0);\n }\n\n vec2 dir = vec2(vTextureCoord - center / filterArea.xy);\n dir.y *= filterArea.y / filterArea.x;\n float dist = length(dir);\n\n if (dist <= 0.0 || dist < currentRadius - halfWavelength || dist > currentRadius + halfWavelength) {\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n return;\n }\n\n vec2 diffUV = normalize(dir);\n\n float diff = (dist - currentRadius) / halfWavelength;\n\n float p = 1.0 - pow(abs(diff), 2.0);\n\n // float powDiff = diff * pow(p, 2.0) * ( amplitude * fade );\n float powDiff = 1.25 * sin(diff * PI) * p * ( amplitude * fade );\n\n vec2 offset = diffUV * powDiff / filterArea.xy;\n\n // Do clamp :\n vec2 coord = vTextureCoord + offset;\n vec2 clampedCoord = clamp(coord, filterClamp.xy, filterClamp.zw);\n vec4 color = texture2D(uSampler, clampedCoord);\n if (coord != clampedCoord) {\n color *= max(0.0, 1.0 - length(coord - clampedCoord));\n }\n\n // No clamp :\n // gl_FragColor = texture2D(uSampler, vTextureCoord + offset);\n\n color.rgb *= 1.0 + (brightness - 1.0) * p * fade;\n\n gl_FragColor = color;\n}\n",
Xe = (function (e) {
function t(t, n, r) {
void 0 === t && (t = [0, 0]),
void 0 === n && (n = {}),
void 0 === r && (r = 0),
e.call(this, Le, Ie),
(this.center = t),
Array.isArray(n) &&
(console.warn(
"Deprecated Warning: ShockwaveFilter params Array has been changed to options Object."
),
(n = {})),
(n = Object.assign(
{
amplitude: 30,
wavelength: 160,
brightness: 1,
speed: 500,
radius: -1,
},
n
)),
(this.amplitude = n.amplitude),
(this.wavelength = n.wavelength),
(this.brightness = n.brightness),
(this.speed = n.speed),
(this.radius = n.radius),
(this.time = r);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
center: { configurable: !0 },
amplitude: { configurable: !0 },
wavelength: { configurable: !0 },
brightness: { configurable: !0 },
speed: { configurable: !0 },
radius: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r) {
(this.uniforms.time = this.time), e.applyFilter(this, t, n, r);
}),
(n.center.get = function () {
return this.uniforms.center;
}),
(n.center.set = function (e) {
this.uniforms.center = e;
}),
(n.amplitude.get = function () {
return this.uniforms.amplitude;
}),
(n.amplitude.set = function (e) {
this.uniforms.amplitude = e;
}),
(n.wavelength.get = function () {
return this.uniforms.wavelength;
}),
(n.wavelength.set = function (e) {
this.uniforms.wavelength = e;
}),
(n.brightness.get = function () {
return this.uniforms.brightness;
}),
(n.brightness.set = function (e) {
this.uniforms.brightness = e;
}),
(n.speed.get = function () {
return this.uniforms.speed;
}),
(n.speed.set = function (e) {
this.uniforms.speed = e;
}),
(n.radius.get = function () {
return this.uniforms.radius;
}),
(n.radius.set = function (e) {
this.uniforms.radius = e;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
Be = a,
Ne =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform sampler2D uLightmap;\nuniform vec4 filterArea;\nuniform vec2 dimensions;\nuniform vec4 ambientColor;\nvoid main() {\n vec4 diffuseColor = texture2D(uSampler, vTextureCoord);\n vec2 lightCoord = (vTextureCoord * filterArea.xy) / dimensions;\n vec4 light = texture2D(uLightmap, lightCoord);\n vec3 ambient = ambientColor.rgb * ambientColor.a;\n vec3 intensity = ambient + light.rgb;\n vec3 finalColor = diffuseColor.rgb * intensity;\n gl_FragColor = vec4(finalColor, diffuseColor.a);\n}\n",
Ge = (function (e) {
function t(t, n, r) {
void 0 === n && (n = 0),
void 0 === r && (r = 1),
e.call(this, Be, Ne),
(this.uniforms.dimensions = new Float32Array(2)),
(this.uniforms.ambientColor = new Float32Array([0, 0, 0, r])),
(this.texture = t),
(this.color = n);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
texture: { configurable: !0 },
color: { configurable: !0 },
alpha: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n, r) {
(this.uniforms.dimensions[0] = t.filterFrame.width),
(this.uniforms.dimensions[1] = t.filterFrame.height),
e.applyFilter(this, t, n, r);
}),
(n.texture.get = function () {
return this.uniforms.uLightmap;
}),
(n.texture.set = function (e) {
this.uniforms.uLightmap = e;
}),
(n.color.set = function (e) {
var t = this.uniforms.ambientColor;
"number" == typeof e
? (o.hex2rgb(e, t), (this._color = e))
: ((t[0] = e[0]),
(t[1] = e[1]),
(t[2] = e[2]),
(t[3] = e[3]),
(this._color = o.rgb2hex(t)));
}),
(n.color.get = function () {
return this._color;
}),
(n.alpha.get = function () {
return this.uniforms.ambientColor[3];
}),
(n.alpha.set = function (e) {
this.uniforms.ambientColor[3] = e;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
qe = a,
Ke =
"varying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float blur;\nuniform float gradientBlur;\nuniform vec2 start;\nuniform vec2 end;\nuniform vec2 delta;\nuniform vec2 texSize;\n\nfloat random(vec3 scale, float seed)\n{\n return fract(sin(dot(gl_FragCoord.xyz + seed, scale)) * 43758.5453 + seed);\n}\n\nvoid main(void)\n{\n vec4 color = vec4(0.0);\n float total = 0.0;\n\n float offset = random(vec3(12.9898, 78.233, 151.7182), 0.0);\n vec2 normal = normalize(vec2(start.y - end.y, end.x - start.x));\n float radius = smoothstep(0.0, 1.0, abs(dot(vTextureCoord * texSize - start, normal)) / gradientBlur) * blur;\n\n for (float t = -30.0; t <= 30.0; t++)\n {\n float percent = (t + offset - 0.5) / 30.0;\n float weight = 1.0 - abs(percent);\n vec4 sample = texture2D(uSampler, vTextureCoord + delta / texSize * percent * radius);\n sample.rgb *= sample.a;\n color += sample * weight;\n total += weight;\n }\n\n color /= total;\n color.rgb /= color.a + 0.00001;\n\n gl_FragColor = color;\n}\n",
We = (function (e) {
function t(t, r, o, i) {
void 0 === t && (t = 100),
void 0 === r && (r = 600),
void 0 === o && (o = null),
void 0 === i && (i = null),
e.call(this, qe, Ke),
(this.uniforms.blur = t),
(this.uniforms.gradientBlur = r),
(this.uniforms.start = o || new n.Point(0, window.innerHeight / 2)),
(this.uniforms.end = i || new n.Point(600, window.innerHeight / 2)),
(this.uniforms.delta = new n.Point(30, 30)),
(this.uniforms.texSize = new n.Point(
window.innerWidth,
window.innerHeight
)),
this.updateDelta();
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var r = {
blur: { configurable: !0 },
gradientBlur: { configurable: !0 },
start: { configurable: !0 },
end: { configurable: !0 },
};
return (
(t.prototype.updateDelta = function () {
(this.uniforms.delta.x = 0), (this.uniforms.delta.y = 0);
}),
(r.blur.get = function () {
return this.uniforms.blur;
}),
(r.blur.set = function (e) {
this.uniforms.blur = e;
}),
(r.gradientBlur.get = function () {
return this.uniforms.gradientBlur;
}),
(r.gradientBlur.set = function (e) {
this.uniforms.gradientBlur = e;
}),
(r.start.get = function () {
return this.uniforms.start;
}),
(r.start.set = function (e) {
(this.uniforms.start = e), this.updateDelta();
}),
(r.end.get = function () {
return this.uniforms.end;
}),
(r.end.set = function (e) {
(this.uniforms.end = e), this.updateDelta();
}),
Object.defineProperties(t.prototype, r),
t
);
})(t.Filter),
Ye = (function (e) {
function t() {
e.apply(this, arguments);
}
return (
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t),
(t.prototype.updateDelta = function () {
var e = this.uniforms.end.x - this.uniforms.start.x,
t = this.uniforms.end.y - this.uniforms.start.y,
n = Math.sqrt(e * e + t * t);
(this.uniforms.delta.x = e / n), (this.uniforms.delta.y = t / n);
}),
t
);
})(We),
Ze = (function (e) {
function t() {
e.apply(this, arguments);
}
return (
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t),
(t.prototype.updateDelta = function () {
var e = this.uniforms.end.x - this.uniforms.start.x,
t = this.uniforms.end.y - this.uniforms.start.y,
n = Math.sqrt(e * e + t * t);
(this.uniforms.delta.x = -t / n), (this.uniforms.delta.y = e / n);
}),
t
);
})(We),
Qe = (function (e) {
function t(t, n, r, o) {
void 0 === t && (t = 100),
void 0 === n && (n = 600),
void 0 === r && (r = null),
void 0 === o && (o = null),
e.call(this),
(this.tiltShiftXFilter = new Ye(t, n, r, o)),
(this.tiltShiftYFilter = new Ze(t, n, r, o));
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
blur: { configurable: !0 },
gradientBlur: { configurable: !0 },
start: { configurable: !0 },
end: { configurable: !0 },
};
return (
(t.prototype.apply = function (e, t, n) {
var r = e.getFilterTexture();
this.tiltShiftXFilter.apply(e, t, r, 1),
this.tiltShiftYFilter.apply(e, r, n),
e.returnFilterTexture(r);
}),
(n.blur.get = function () {
return this.tiltShiftXFilter.blur;
}),
(n.blur.set = function (e) {
this.tiltShiftXFilter.blur = this.tiltShiftYFilter.blur = e;
}),
(n.gradientBlur.get = function () {
return this.tiltShiftXFilter.gradientBlur;
}),
(n.gradientBlur.set = function (e) {
this.tiltShiftXFilter.gradientBlur =
this.tiltShiftYFilter.gradientBlur = e;
}),
(n.start.get = function () {
return this.tiltShiftXFilter.start;
}),
(n.start.set = function (e) {
this.tiltShiftXFilter.start = this.tiltShiftYFilter.start = e;
}),
(n.end.get = function () {
return this.tiltShiftXFilter.end;
}),
(n.end.set = function (e) {
this.tiltShiftXFilter.end = this.tiltShiftYFilter.end = e;
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter),
Ue = a,
Ve =
"varying vec2 vTextureCoord;\n\nuniform sampler2D uSampler;\nuniform float radius;\nuniform float angle;\nuniform vec2 offset;\nuniform vec4 filterArea;\n\nvec2 mapCoord( vec2 coord )\n{\n coord *= filterArea.xy;\n coord += filterArea.zw;\n\n return coord;\n}\n\nvec2 unmapCoord( vec2 coord )\n{\n coord -= filterArea.zw;\n coord /= filterArea.xy;\n\n return coord;\n}\n\nvec2 twist(vec2 coord)\n{\n coord -= offset;\n\n float dist = length(coord);\n\n if (dist < radius)\n {\n float ratioDist = (radius - dist) / radius;\n float angleMod = ratioDist * ratioDist * angle;\n float s = sin(angleMod);\n float c = cos(angleMod);\n coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);\n }\n\n coord += offset;\n\n return coord;\n}\n\nvoid main(void)\n{\n\n vec2 coord = mapCoord(vTextureCoord);\n\n coord = twist(coord);\n\n coord = unmapCoord(coord);\n\n gl_FragColor = texture2D(uSampler, coord );\n\n}\n",
He = (function (e) {
function t(t) {
e.call(this, Ue, Ve),
"number" == typeof t &&
((t = { radius: t }),
void 0 !== arguments[1] && (t.angle = arguments[1]),
void 0 !== arguments[2] && (t.padding = arguments[2])),
Object.assign(
this,
{ radius: 200, angle: 4, padding: 20, offset: new n.Point() },
t
);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var r = {
offset: { configurable: !0 },
radius: { configurable: !0 },
angle: { configurable: !0 },
};
return (
(r.offset.get = function () {
return this.uniforms.offset;
}),
(r.offset.set = function (e) {
this.uniforms.offset = e;
}),
(r.radius.get = function () {
return this.uniforms.radius;
}),
(r.radius.set = function (e) {
this.uniforms.radius = e;
}),
(r.angle.get = function () {
return this.uniforms.angle;
}),
(r.angle.set = function (e) {
this.uniforms.angle = e;
}),
Object.defineProperties(t.prototype, r),
t
);
})(t.Filter),
$e = a,
Je =
"varying vec2 vTextureCoord;\nuniform sampler2D uSampler;\nuniform vec4 filterArea;\n\nuniform vec2 uCenter;\nuniform float uStrength;\nuniform float uInnerRadius;\nuniform float uRadius;\n\nconst float MAX_KERNEL_SIZE = ${maxKernelSize};\n\n// author: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\nhighp float rand(vec2 co, float seed) {\n const highp float a = 12.9898, b = 78.233, c = 43758.5453;\n highp float dt = dot(co + seed, vec2(a, b)), sn = mod(dt, 3.14159);\n return fract(sin(sn) * c + seed);\n}\n\nvoid main() {\n\n float minGradient = uInnerRadius * 0.3;\n float innerRadius = (uInnerRadius + minGradient * 0.5) / filterArea.x;\n\n float gradient = uRadius * 0.3;\n float radius = (uRadius - gradient * 0.5) / filterArea.x;\n\n float countLimit = MAX_KERNEL_SIZE;\n\n vec2 dir = vec2(uCenter.xy / filterArea.xy - vTextureCoord);\n float dist = length(vec2(dir.x, dir.y * filterArea.y / filterArea.x));\n\n float strength = uStrength;\n\n float delta = 0.0;\n float gap;\n if (dist < innerRadius) {\n delta = innerRadius - dist;\n gap = minGradient;\n } else if (radius >= 0.0 && dist > radius) { // radius < 0 means it's infinity\n delta = dist - radius;\n gap = gradient;\n }\n\n if (delta > 0.0) {\n float normalCount = gap / filterArea.x;\n delta = (normalCount - delta) / normalCount;\n countLimit *= delta;\n strength *= delta;\n if (countLimit < 1.0)\n {\n gl_FragColor = texture2D(uSampler, vTextureCoord);\n return;\n }\n }\n\n // randomize the lookup values to hide the fixed number of samples\n float offset = rand(vTextureCoord, 0.0);\n\n float total = 0.0;\n vec4 color = vec4(0.0);\n\n dir *= strength;\n\n for (float t = 0.0; t < MAX_KERNEL_SIZE; t++) {\n float percent = (t + offset) / MAX_KERNEL_SIZE;\n float weight = 4.0 * (percent - percent * percent);\n vec2 p = vTextureCoord + dir * percent;\n vec4 sample = texture2D(uSampler, p);\n\n // switch to pre-multiplied alpha to correctly blur transparent images\n // sample.rgb *= sample.a;\n\n color += sample * weight;\n total += weight;\n\n if (t > countLimit){\n break;\n }\n }\n\n color /= total;\n // switch back from pre-multiplied alpha\n // color.rgb /= color.a + 0.00001;\n\n gl_FragColor = color;\n}\n",
et = (function (e) {
function t(t) {
if ("object" != typeof t) {
var n = arguments[0],
r = arguments[1],
o = arguments[2],
i = arguments[3];
(t = {}),
void 0 !== n && (t.strength = n),
void 0 !== r && (t.center = r),
void 0 !== o && (t.innerRadius = o),
void 0 !== i && (t.radius = i);
}
(t = Object.assign(
{
strength: 0.1,
center: [0, 0],
innerRadius: 0,
radius: -1,
maxKernelSize: 32,
},
t
)),
e.call(
this,
$e,
Je.replace("${maxKernelSize}", t.maxKernelSize.toFixed(1))
),
(this.strength = t.strength),
(this.center = t.center),
(this.innerRadius = t.innerRadius),
(this.radius = t.radius);
}
e && (t.__proto__ = e),
(t.prototype = Object.create(e && e.prototype)),
(t.prototype.constructor = t);
var n = {
center: { configurable: !0 },
strength: { configurable: !0 },
innerRadius: { configurable: !0 },
radius: { configurable: !0 },
};
return (
(n.center.get = function () {
return this.uniforms.uCenter;
}),
(n.center.set = function (e) {
this.uniforms.uCenter = e;
}),
(n.strength.get = function () {
return this.uniforms.uStrength;
}),
(n.strength.set = function (e) {
this.uniforms.uStrength = e;
}),
(n.innerRadius.get = function () {
return this.uniforms.uInnerRadius;
}),
(n.innerRadius.set = function (e) {
this.uniforms.uInnerRadius = e;
}),
(n.radius.get = function () {
return this.uniforms.uRadius;
}),
(n.radius.set = function (e) {
(e < 0 || e === 1 / 0) && (e = -1), (this.uniforms.uRadius = e);
}),
Object.defineProperties(t.prototype, n),
t
);
})(t.Filter);
return (
(e.AdjustmentFilter = c),
(e.AdvancedBloomFilter = y),
(e.AsciiFilter = C),
(e.BevelFilter = z),
(e.BloomFilter = A),
(e.BulgePinchFilter = O),
(e.CRTFilter = Z),
(e.ColorMapFilter = M),
(e.ColorOverlayFilter = j),
(e.ColorReplaceFilter = I),
(e.ConvolutionFilter = N),
(e.CrossHatchFilter = K),
(e.DotFilter = V),
(e.DropShadowFilter = J),
(e.EmbossFilter = ne),
(e.GlitchFilter = ie),
(e.GlowFilter = ae),
(e.GodrayFilter = he),
(e.KawaseBlurFilter = d),
(e.MotionBlurFilter = me),
(e.MultiColorReplaceFilter = xe),
(e.OldFilmFilter = be),
(e.OutlineFilter = Fe),
(e.PixelateFilter = Te),
(e.RGBSplitFilter = Ee),
(e.RadialBlurFilter = De),
(e.ReflectionFilter = Re),
(e.ShockwaveFilter = Xe),
(e.SimpleLightmapFilter = Ge),
(e.TiltShiftAxisFilter = We),
(e.TiltShiftFilter = Qe),
(e.TiltShiftXFilter = Ye),
(e.TiltShiftYFilter = Ze),
(e.TwistFilter = He),
(e.ZoomBlurFilter = et),
e
);
})({}, PIXI, PIXI, PIXI, PIXI.utils, PIXI, PIXI.filters, PIXI.filters);
Object.assign(PIXI.filters, __filters);
//# sourceMappingURL=pixi-filters.js.map
})();
//PRAGMA: defGameParticle
function Game_Particle() {
this.initialize.apply(this, arguments);
}
//PRAGMA_END: defGameParticle
function ParticleEmitter() {
this.initialize.apply(this, arguments);
}
function ParticleSystem() {
this.initialize.apply(this, arguments);
}
var TRP_Localize = TRP_Localize || function () {};
var TRP_LocalizeString =
TRP_LocalizeString ||
function (...args) {
this._value = null;
this._args = args;
};
(() => {
if (TRP_Localize.localize) return;
TRP_LocalizeString.prototype = new String();
TRP_LocalizeString.prototype.toString =
TRP_LocalizeString.prototype.valueOf =
TRP_LocalizeString.prototype.toJSON =
function () {
if (this._value === null) {
this._value = TRP_Localize.localize(...this._args);
for (let i = 0; i < this._value.length; i = (i + 1) | 0) {
this[i] = this._value[i];
}
}
return this._value.toString();
};
TRP_Localize.localize = function (symbol, original, id) {
if (!$gameSystem) return new TRP_LocalizeString(symbol, original, id);
if ($gameSystem && $gameSystem.isJapanese()) return original;
return this.DATA[symbol][id] || this.DATA.duplication[original] || original;
};
TRP_Localize.noLocalize = function (original, id, translated) {
if ($gameSystem && $gameSystem.isJapanese()) return original;
return translated || original;
};
//PRAGMA: localizeData
TRP_Localize.DATA = {
duplication: {},
parMa: {},
parEd: {},
parGr: {},
parGe: {},
preWa: {},
parPr: {},
parSe: {},
};
//PRAGMA_END: localizeData
})();
//PRAGMA: dataFilePath
Game_Particle.DATA_FILE_PATH = "TrpParticles.json";
//PRAGMA_END: dataFilePath
DataManager._databaseFiles.push({
name: "$dataTrpParticles",
src: Game_Particle.DATA_FILE_PATH,
});
(function () {
"use strict";
/*! *****************************************************************************
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use
this file except in compliance with the License. You may obtain a copy of the
License at http://www.apache.org/licenses/LICENSE-2.0
THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
MERCHANTABLITY OR NON-INFRINGEMENT.
See the Apache Version 2.0 License for specific language governing permissions
and limitations under the License.
***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = function (d, b) {
extendStatics =
Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array &&
function (d, b) {
d.__proto__ = b;
}) ||
function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
};
return extendStatics(d, b);
};
function __extends(d, b) {
extendStatics(d, b);
function __() {
this.constructor = d;
}
d.prototype =
b === null ? Object.create(b) : ((__.prototype = b.prototype), new __());
}
/***************************************************************************** */
//PRAGMA: pluginName
var pluginName = "TRP_Particle";
//PRAGMA_END: pluginName
var parameters = PluginManager.parameters(pluginName);
var commandNames = (
parameters["commandName"] || NLC("particle,パーティクル", 0)
).split(",");
parameters.commandNames = commandNames;
var LC = TRP_Localize.localize.bind(TRP_Localize, "parMa");
var NLC = TRP_Localize.noLocalize;
var regionMargin = Number(parameters.regionMargin) || 0;
var outsideMargin = isNaN(parameters.outsideMargin)
? -1
: Number(parameters.outsideMargin) || 0;
var walkOffset = Number(parameters.walkOffset) || 0;
var dashOffset = Number(parameters.dashOffset) || 0;
var maxParticles = Number(parameters.maxParticles);
var keepPictureOrder = parameters.keepPictureOrder === "true";
var displayCount = parameters.displayCount === "true";
var systemParticles = JSON.parse(parameters.systemParticles);
var clearScreenOnMapChange = parameters.clearScreenOnMapChange === "true";
var clearCharacterOnMapChange =
parameters.clearCharacterOnMapChange === "true";
var clearPartyOnMapChange = parameters.clearPartyOnMapChange === "true";
var clearBattleScreenOnEnd = parameters.clearBattleScreenOnEnd === "true";
var clearBattleCharaOnEnd = parameters.clearBattleCharaOnEnd === "true";
var cacheBeforeTerminate = parameters.cacheBeforeTerminate === "true";
var disableState = parameters.disableState === "true";
var disableSkill = parameters.disableSkill === "true";
var disableRoute = parameters.disableRoute === "true";
var sceneTypes = parameters.sceneTypes
? JSON.parse(parameters.sceneTypes)
: [];
var sceneGroups = [];
var noRewriteFunctions = parameters.noRewriteFunctions === "true";
var errorLog = parameters.errorLog === "true";
var defaultImage = (parameters.defaultImage = "particle1");
var commandNameRegex;
(function () {
//scene
var length = sceneTypes.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var scene = sceneTypes[i];
if (scene.contains("-")) {
var group = scene.split("-");
sceneTypes.splice(i, 1);
Array.prototype.push.apply(sceneTypes, group);
i -= 1;
length -= 1;
sceneGroups.push(group);
}
}
//regex
var regexStr = "^(?:";
var length = commandNames.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var name = commandNames[i];
if (i > 0) {
regexStr += "|";
}
regexStr += name + " ";
}
regexStr += ")";
commandNameRegex = new RegExp(regexStr);
})();
function supplement(defaultValue, optionArg) {
if (optionArg === undefined) {
return defaultValue;
}
return optionArg;
}
function supplementNum(defaultValue, optionArg) {
return Number(supplement(defaultValue, optionArg));
}
var _supplementDefWords = ["default", "def", "d"];
function supplementDef(defaultValue, optionArg, otherWords) {
var value = supplement(defaultValue, optionArg);
var defTargetWords = otherWords || [];
if (defTargetWords) {
defTargetWords = defTargetWords.concat(_supplementDefWords);
} else {
defTargetWords = _supplementDefWords;
}
var length = defTargetWords.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var target = defTargetWords[i];
if (value === target) {
value = defaultValue;
break;
}
}
return value;
}
function supplementDefNum(defaultValue, optionArg, otherWords) {
var value = supplementDef(defaultValue, optionArg, otherWords);
return Number(value);
}
//PRAGMA: blendModes
(function () {
var blendModes = PIXI.BLEND_MODES;
var keys = Object.keys(blendModes);
var length = keys.length;
var sorted = [];
for (var i = 0; i < length; i = (i + 1) | 0) {
var key = keys[i];
if (!isNaN(key)) {
continue;
}
if (!sorted[blendModes[key]]) {
sorted[blendModes[key]] = key;
if (sorted.length >= 10) {
break;
}
}
}
Game_Particle.BLEND_MODE_NAMES = sorted;
})();
//PRAGMA_END: blendModes
Game_Particle.DATA_VERSION = 4;
Game_Particle.CONFIG_PARAM_INDEXES = {
all: [
"version",
"alpha",
"scale",
"speed",
"color",
"colorMode",
"acceleration",
"maxSpeed",
"startRotation",
"rotationSpeed",
"angle",
"mirrorType",
"orderedArt",
"lifetime",
"blendMode",
"frequency",
"spawnChance",
"particlesPerWave",
"emitterLifetime",
"maxParticles",
"fluctuation",
"spawnType",
"pos",
"spawnData",
"noRotation",
"addAtBack",
"image",
"targetType",
"comment",
],
// ,all4:["version","alpha","scale","speed","color","colorMode","acceleration","maxSpeed","startRotation","rotationSpeed","angle","mirrorType","orderedArt","lifetime","blendMode","frequency","spawnChance","particlesPerWave","emitterLifetime","maxParticles","fluctuation","spawnType","pos","spawnData","noRotation","addAtBack","image","targetType","comment"]
all3: [
"version",
"alpha",
"scale",
"speed",
"color",
"colorMode",
"acceleration",
"maxSpeed",
"startRotation",
"rotationSpeed",
"angle",
"mirrorType",
"lifetime",
"blendMode",
"frequency",
"spawnChance",
"particlesPerWave",
"emitterLifetime",
"maxParticles",
"fluctuation",
"spawnType",
"pos",
"spawnData",
"noRotation",
"addAtBack",
"image",
"targetType",
"comment",
],
all2: [
"version",
"alpha",
"scale",
"speed",
"color",
"colorMode",
"acceleration",
"maxSpeed",
"startRotation",
"rotationSpeed",
"angleType",
"mirrorType",
"lifetime",
"blendMode",
"frequency",
"spawnChance",
"particlesPerWave",
"emitterLifetime",
"maxParticles",
"fluctuation",
"spawnType",
"pos",
"spawnData",
"noRotation",
"addAtBack",
"image",
"targetType",
"comment",
],
all0: [
"alpha",
"scale",
"speed",
"color",
"colorMode",
"acceleration",
"maxSpeed",
"startRotation",
"rotationSpeed",
"angleType",
"mirrorType",
"lifetime",
"blendMode",
"frequency",
"spawnChance",
"particlesPerWave",
"emitterLifetime",
"maxParticles",
"fluctuation",
"spawnType",
"pos",
"spawnRect",
"spawnCircle",
"noRotation",
"addAtBack",
"image",
"targetType",
"comment",
],
alpha: ["list", "start", "end"],
scale: ["list", "minimumScaleMultiplier", "start", "end"],
speed: ["list", "minimumSpeedMultiplier", "start", "end"],
color: ["list", "start", "end"],
acceleration: ["x", "y"],
startRotation: ["min", "max"],
rotationSpeed: ["min", "max"],
lifetime: ["min", "max"],
fluctuation: ["max", "sensitivity"],
pos: ["x", "y"],
spawnRect: ["x", "y", "w", "h"],
spawnCircle: ["x", "y", "r", "minR"],
spawnBurst: [
"particleSpacing",
"angleStart",
"bdt",
"brt",
"br",
"bdr",
"bdx",
"bdy",
],
};
Game_Particle.SPAWN_TYPES = ["point", "rect", "circle", "ring", "burst"];
Game_Particle.TARGET_CATEGORIES = [
["character", "walk", "tilemap", "startdash"],
["screen", "weather", "region"],
["click", "drag"],
["others"],
["hidden"],
];
Game_Particle.CATEGORY_NAMES = [
"character",
"screen",
"system",
"others",
"hidden",
];
Game_Particle.DEFAULT_DATA = {
alpha: {
list: [
{
time: 0,
value: 0,
},
{
time: 0.5,
value: 1,
},
{
time: 1,
value: 0,
},
],
},
scale: {
list: [
{
time: 0,
value: 0,
},
{
time: 0.5,
value: 1,
},
{
time: 1,
value: 0,
},
],
minimumScaleMultiplier: 0.5,
},
speed: {
list: [
{
time: 0,
value: 300,
},
{
time: 1,
value: 100,
},
],
minimumSpeedMultiplier: 1,
},
color: {
list: [
{
time: 0,
value: "#ffffff",
},
{
time: 1,
value: "#ffffff",
},
],
},
colorMode: 0,
acceleration: {
x: 0,
y: 0,
},
maxSpeed: NaN,
startRotation: {
min: 0,
max: 360,
},
noRotation: false,
rotationSpeed: {
min: 0,
max: 0,
},
angle: 0,
mirrorType: 0,
orderedArt: 0,
lifetime: {
min: 1,
max: 1,
},
blendMode: "add",
frequency: 0.01,
spawnChance: 1,
particlesPerWave: 1,
emitterLifetime: -1,
maxParticles: 10000,
fluctuation: {
max: 0,
sensitivity: 0,
},
spawnType: "point",
pos: {
x: 0,
y: 0,
},
spawnRect: null,
spawnCircle: null,
particleSpacing: 0,
angleStart: 0,
bdt: 0,
brt: 0,
br: 0,
bdr: 0,
bdx: 0,
bdy: 0,
addAtBack: false,
noRotation: false,
image: null,
targetType: 0,
comment: "",
};
Game_Particle.compressConfigDataToArray = function (data) {
var array = [];
var dataKeys = Object.keys(data);
var allKeys = Game_Particle.CONFIG_PARAM_INDEXES.all.concat();
var length = allKeys.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var key = allKeys[i];
if (key === "version") {
array.push(Game_Particle.DATA_VERSION);
} else if (key === "spawnData") {
var spawnType = data.spawnType;
if (spawnType === "rect") {
allKeys.splice(i + 1, 0, "spawnRect");
length += 1;
} else if (spawnType === "circle" || spawnType === "ring") {
allKeys.splice(i + 1, 0, "spawnCircle");
length += 1;
} else if (spawnType === "burst") {
array.push([
data.particleSpacing,
data.angleStart,
data.bdt || 0,
data.brt || 0,
data.br || 0,
data.bdx || 0,
data.bdy || 0,
]);
} else {
array.push(null);
}
} else if (dataKeys.indexOf(key) >= 0) {
var type = typeof data[key];
if (data[key] && type === "object") {
var childObj = data[key];
var childArr = [];
array.push(childArr);
var childKeys = Game_Particle.CONFIG_PARAM_INDEXES[key];
var childKeyLen = childKeys.length;
for (var j = 0; j < childKeyLen; j = (j + 1) | 0) {
var childKey = childKeys[j];
if (childKey === "list" && childObj[childKey]) {
var list = childObj[childKey];
var listLen = list.length;
var listArr = [];
childArr.push(listArr);
for (var k = 0; k < listLen; k = (k + 1) | 0) {
listArr.push(list[k].time);
listArr.push(list[k].value);
}
} else if (
childObj[childKey] === undefined &&
(childKey === "start" || childKey === "end")
) {
continue;
} else {
childArr.push(childObj[childKey] || 0);
}
}
} else if (type === "string") {
if (key === "blendMode") {
array.push(PIXI.BLEND_MODES[data[key].toUpperCase()]);
} else if (key === "spawnType") {
array.push(Game_Particle.SPAWN_TYPES.indexOf(data[key]));
} else {
array.push(data[key]);
}
} else if (type === "boolean") {
array.push(data[key] === true ? 1 : 0);
} else {
array.push(data[key]);
}
} else {
if (Game_Particle.CONFIG_PARAM_INDEXES[key]) {
array.push(null);
} else if (key === "comment") {
array.push("");
} else {
array.push(0);
}
}
}
return array;
};
Game_Particle.decompressConfigDataFromArray = function (array) {
var data = JsonEx.makeDeepCopy(Game_Particle.DEFAULT_DATA);
var allKeys;
if (!isNaN(array[0])) {
var version = array.shift();
if (version === Game_Particle.DATA_VERSION) {
allKeys = Game_Particle.CONFIG_PARAM_INDEXES.all.concat();
} else {
allKeys = Game_Particle.CONFIG_PARAM_INDEXES["all" + version].concat();
}
allKeys.shift();
} else {
allKeys = Game_Particle.CONFIG_PARAM_INDEXES.all0.concat();
}
var length = allKeys.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var key = allKeys[i];
if (key === "spawnData") {
var childArr = array[i];
if (data.spawnType === "rect") {
allKeys.splice(i + 1, 0, "spawnRect");
array.splice(i + 1, 0, childArr);
length += 1;
} else if (data.spawnType === "circle" || data.spawnType === "ring") {
allKeys.splice(i + 1, 0, "spawnCircle");
array.splice(i + 1, 0, childArr);
length += 1;
} else if (data.spawnType === "burst") {
data.particleSpacing = childArr[0];
data.angleStart = childArr[1];
data.bdt = childArr[2] || 0;
data.brt = childArr[3] || 0;
data.br = childArr[4] || 0;
data.bdx = childArr[5] || 0;
data.bdy = childArr[6] || 0;
}
} else if (Game_Particle.CONFIG_PARAM_INDEXES[key]) {
var childArr = array[i];
if (!childArr) {
data[key] = null;
} else {
var childKeys = Game_Particle.CONFIG_PARAM_INDEXES[key];
var childObj = {};
data[key] = childObj || null;
var childKeyLen = childKeys.length;
for (var j = 0; j < childKeyLen; j = (j + 1) | 0) {
var childKey = childKeys[j];
if (childKey === "list") {
var listArr = childArr[j];
var list = [];
childObj[childKey] = list;
var listLen = listArr.length;
for (var k = 0; k < listLen; k = (k + 2) | 0) {
list.push({
time: listArr[k],
value: listArr[k + 1],
});
}
} else if (
key === "color" &&
(childKey === "start" || childKey === "end")
) {
childObj[childKey] = childArr[j] || "#ffffff";
} else {
childObj[childKey] = childArr[j] || 0;
}
}
}
} else {
if (key === "angleType") {
//migrate under V3: angleType > angle
data.angle = array[i] === 1 ? -1 : 0;
} else if (key === "blendMode") {
data[key] = Game_Particle.BLEND_MODE_NAMES[array[i] || 0];
} else if (key === "spawnType") {
data[key] = Game_Particle.SPAWN_TYPES[array[i] || 0];
} else if (key === "noRotation" || key === "addAtBack") {
data[key] = array[i] ? true : false;
} else if (key === "image" || key === "comment") {
data[key] = array[i] || "";
} else {
data[key] = array[i] || 0;
}
}
}
return data;
};
ParticleEmitter.Z_INDEX = {
screen: -1000,
spriteset: -900,
back: -800,
below: 1,
above: 5,
top: 9,
};
var Z_INDEX = ParticleEmitter.Z_INDEX;
ParticleEmitter.TARGET_TYPES = {
displayObject: -1,
character: 0,
walk: 1,
startdash: 2,
attach: 3,
tilemap: 4,
screen: 5,
weather: 6,
region: 7,
party: 8,
enemy: 9,
battle: 10,
battleWeather: 11,
click: 12,
drag: 13,
picture: 14,
skit: 15,
battlePicture: 16,
battleSkit: 17,
attachParty: 18,
attachEnemy: 19,
back: 20,
weatherBack: 21,
actor: 22,
attachActor: 23,
};
var TARGET_TYPES = ParticleEmitter.TARGET_TYPES;
ParticleEmitter.DELTA_TIME = 1 / 60;
ParticleEmitter.NODE_PARAMS = ["alpha", "speed", "scale", "color"];
ParticleEmitter.NODE_KEY_CONVERT = {
alpha: "startAlpha",
speed: "startSpeed",
scale: "startScale",
color: "startColor",
};
var CLEAR_ARGS = [
"clear",
NLC("クリア", 1),
NLC("クリアー", 2),
NLC("消去", 3),
];
var SET_COMMANDS = ["set", "play", "edit"];
//PRAGMA: registerCommands
//PRAGMA_END: registerCommands
//=============================================================================
// core Game_Objects
//=============================================================================
var _Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
if (commandNames.contains(command.toLowerCase())) {
var subCommand = args[0];
if (subCommand === "test") {
this.trpParticleTest();
} else if (subCommand === "test2") {
this.trpParticleTest2();
} else {
$gameScreen._particle.pluginCommand(this, args, this.eventId());
}
} else {
_Game_Interpreter_pluginCommand.call(this, command, args);
}
};
var _Game_Screen_initialize = Game_Screen.prototype.initialize;
Game_Screen.prototype.initialize = function () {
_Game_Screen_initialize.call(this);
this._particle = new Game_Particle();
};
Game_Screen.prototype.tryCreateParticle = function () {
if (!this._particle) {
this._particle = new Game_Particle();
} else {
this._particle.ensureVariables();
}
};
var _Game_Screen_update = Game_Screen.prototype.update;
Game_Screen.prototype.update = function () {
_Game_Screen_update.call(this);
this._particle.update();
};
/* Scene_Map
===================================*/
var _Scene_Map_start = Scene_Map.prototype.start;
Scene_Map.prototype.start = function () {
if ($gameMap && $gameScreen._particle) {
$gameScreen._particle.willStartSceneMap();
}
_Scene_Map_start.call(this);
};
/* Event
===================================*/
var _Game_Event_setupPage = Game_Event.prototype.setupPage;
Game_Event.prototype.setupPage = function () {
_Game_Event_setupPage.call(this);
if (SceneManager._scene._mapLoaded) {
this.setupParticles();
}
};
Game_Event.prototype.setupParticles = function () {
var page = this.page();
if (!page) return;
var list = page.list;
var length = list.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var command = list[i];
if (command.code !== 108 && command.code !== 408) break;
var line = command.parameters[0];
if (typeof line === "string") {
if (commandNameRegex.test(line)) {
var args = line.split(" ");
args.shift();
if (args[0] === "edit") {
$gameScreen._particle.reservePluginCommand(
4,
$gameMap._interpreter,
args,
this.eventId()
);
} else {
$gameScreen._particle.pluginCommand(
$gameMap._interpreter,
args,
this.eventId()
);
}
}
}
}
};
/* Game_Battler
===================================*/
Game_Battler.prototype.setupStatesParticles = function () {
var states = this._states;
var length = states ? states.length : 0;
for (var i = 0; i < length; i = (i + 1) | 0) {
var state = $dataStates[states[i]];
if (state) {
this.setupStateParticles(state);
}
}
};
Game_Battler.prototype.setupStateParticles = function (state) {
var meta = state.meta;
if (!meta.particle && !meta.particle1) return;
var targetId = this.particleTargetId();
var tag = "state:" + targetId + ":" + state.id;
this.setupParticlesWithMeta(meta, targetId, tag);
};
Game_Battler.prototype.particleTargetId = function () {
var targetId;
if (this.isEnemy()) {
targetId = "enemy:" + (this.index() + 1);
} else {
targetId = this.isActor()
? "actor:" + this.actorId()
: "party:" + (this.index() + 1);
}
return targetId;
};
/* State
===================================*/
if (!disableState) {
var _Game_Battler_addNewState = Game_Battler.prototype.addNewState;
Game_Battler.prototype.addNewState = function (stateId) {
_Game_Battler_addNewState.call(this, stateId);
var state = $dataStates[stateId];
if (state && state.meta && this.isBattleMember()) {
this.setupStateParticles(state);
}
};
var _Game_Battler_clearStates = Game_Battler.prototype.clearStates;
Game_Battler.prototype.clearStates = function () {
var states = this._states ? this._states.concat() : null;
_Game_Battler_clearStates.call(this, ...arguments);
if (states) {
for (const stateId of states) {
if (!this._states || !this._states.contains(stateId)) {
var state = $dataStates[stateId];
if (state) this.eraseStateParticles(state);
}
}
}
};
var _Game_BattlerBase_eraseState = Game_BattlerBase.prototype.eraseState;
Game_BattlerBase.prototype.eraseState = function (stateId) {
_Game_BattlerBase_eraseState.call(this, stateId);
var state = $dataStates[stateId];
if (state && state.meta) {
this.eraseStateParticles(state);
}
};
Game_Battler.prototype.eraseStateParticles = function (state) {
var meta = state.meta;
if (!meta.particle && !meta.particle1) return;
var tag = "state:" + this.particleTargetId() + ":" + state.id;
var targetId = "tag:" + tag;
$gameScreen._particle.particleClear(targetId, false);
};
}
Game_Battler.prototype.setupParticlesWithMeta = function (
meta,
targetId,
tag
) {
tag = tag || "";
var argsStr = meta.particle || meta.particle1;
var idx = 1;
var interpreter = $gameTroop._interpreter;
var dummyEventId = 0;
var suffix = ":" + targetId;
$gameScreen._particle.setAutoIdSuffix(suffix);
while (!!argsStr) {
argsStr = argsStr.replace("this", targetId);
var args = argsStr.split(" ");
if (tag && !argsStr.contains("tag:") && SET_COMMANDS.contains(args[0])) {
args.push("tag:" + tag);
}
$gameScreen._particle.pluginCommand(interpreter, args, dummyEventId);
idx += 1;
argsStr = meta["particle" + idx];
}
$gameScreen._particle.clearAutoIdSuffix();
};
var _Game_Battler_onBattleStart = Game_Battler.prototype.onBattleStart;
Game_Battler.prototype.onBattleStart = function (advantageous) {
_Game_Battler_onBattleStart.call(this, ...arguments);
this.setupStatesParticles();
};
/* party
===================================*/
var _Game_Party_addActor = Game_Party.prototype.addActor;
Game_Party.prototype.addActor = function (actorId) {
_Game_Party_addActor.call(this, actorId);
var actor = $gameActors.actor(actorId);
if (actor) {
actor.setupStatesParticles();
}
};
var _Game_Party_swapOrder = Game_Party.prototype.swapOrder;
Game_Party.prototype.swapOrder = function (index1, index2) {
_Game_Party_swapOrder.call(this, ...arguments);
var actor1 = $gameActors.actor(this._actors[index1]);
var actor2 = $gameActors.actor(this._actors[index2]);
if (actor1) {
actor1.setupStatesParticles();
}
if (actor2) {
actor2.setupStatesParticles();
}
};
/* Troop&Enemy
===================================*/
var _Game_Troop_setup = Game_Troop.prototype.setup;
Game_Troop.prototype.setup = function (troopId) {
_Game_Troop_setup.apply(this, arguments);
var members = this._enemies;
var length = members.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
members[i].setupParticles();
}
};
Game_Enemy.prototype.setupParticles = function () {
var data = this.enemy();
if (!data) return;
var targetId = this.particleTargetId();
this.setupParticlesWithMeta(data.meta, targetId);
};
if (
Game_Enemy.prototype.die === Game_BattlerBase.prototype.die ||
Game_Enemy.prototype.die === Game_Battler.prototype.die
) {
Game_Enemy.prototype.die = function () {
Game_Battler.prototype.die.call(this);
};
}
var _Game_Enemy_die = Game_Enemy.prototype.die;
Game_Enemy.prototype.die = function () {
_Game_Enemy_die.call(this);
$gameScreen._particle.clearEnemyTargetParticles(this);
};
if (
Game_Enemy.prototype.revive === Game_BattlerBase.prototype.revive ||
Game_Enemy.prototype.revive === Game_Battler.prototype.revive
) {
Game_Enemy.prototype.revive = function () {
Game_Battler.prototype.revive.call(this);
};
}
var _Game_Enemy_revive = Game_Enemy.prototype.revive;
Game_Enemy.prototype.revive = function () {
_Game_Enemy_revive.call(this);
this.setupParticles();
};
/* skill
===================================*/
if (!disableSkill) {
var _Window_BattleLog_startAction = Window_BattleLog.prototype.startAction;
Window_BattleLog.prototype.startAction = function (
subject,
action,
targets
) {
_Window_BattleLog_startAction.apply(this, arguments);
var item = action.item();
if (item) {
this.showParticleEffect(subject, targets, item);
}
};
Window_BattleLog.prototype.showParticleEffect = function (
subject,
targets,
item
) {
var argsStr = item.meta.particle || item.meta.particle1;
var delayStr =
item.meta.particleDelay ||
item.meta.particle1Delay ||
item.meta.particleDelay1 ||
item.meta.particle1delay;
var idx = 1;
var interpreter = $gameTroop._interpreter;
var dummyEventId = 0;
var subjectId = subject.particleTargetId();
var targetIds = [];
var length = targets ? targets.length : 0;
for (var i = 0; i < length; i = (i + 1) | 0) {
var target = targets[i];
var targetId = target.particleTargetId();
targetIds.push(targetId);
}
while (!!argsStr) {
argsStr = argsStr.replace("this", subjectId);
var args = argsStr.split(" ");
var userIdx = args.indexOf("user");
if (userIdx >= 0) {
args[userIdx] = subject.particleTargetId();
}
var targetIdx = args.indexOf("target");
var isAttach = false;
if (targetIdx < 0) {
targetIdx = args.indexOf("attach:target");
if (targetIdx >= 0) {
isAttach = true;
}
}
if (targetIdx >= 0) {
for (var i = 0; i < length; i = (i + 1) | 0) {
if (i > 0) args = args.concat();
var targetId = targetIds[i];
args[targetIdx] = (isAttach ? "attach:" : "") + targetId;
var suffix;
if (args[0] === "attract") {
suffix = ":" + subjectId;
} else {
suffix = ":" + targetId;
}
$gameScreen._particle.setAutoIdSuffix(suffix);
if (!isNaN(delayStr)) {
$gameScreen._particle.reservePluginCommand(
Number(delayStr),
interpreter,
args,
dummyEventId
);
} else {
$gameScreen._particle.pluginCommand(
interpreter,
args,
dummyEventId
);
}
}
} else {
var suffix = ":" + subjectId;
$gameScreen._particle.setAutoIdSuffix(suffix);
if (!isNaN(delayStr)) {
$gameScreen._particle.reservePluginCommand(
Number(delayStr),
interpreter,
args,
dummyEventId
);
} else {
$gameScreen._particle.pluginCommand(
interpreter,
args,
dummyEventId
);
}
}
idx += 1;
argsStr = item.meta["particle" + idx];
delayStr =
item.meta["particle" + idx + "Delay"] ||
item.meta["particle" + idx + "delay"] ||
item.meta["particleDelay" + idx];
}
$gameScreen._particle.clearAutoIdSuffix();
};
}
/* Scene_Battle
===================================*/
var _Scene_Battle_terminate = Scene_Battle.prototype.terminate;
Scene_Battle.prototype.terminate = function () {
_Scene_Battle_terminate.call(this);
if (clearBattleScreenOnEnd) {
$gameScreen._particle.removeBattleScreenParticles();
}
if (clearBattleCharaOnEnd) {
$gameScreen._particle.removeBattleCharacterParticles();
}
};
//=============================================================================
// Manager
//=============================================================================
ImageManager.loadParticle = function (filename, hue) {
return this.loadBitmap("img/particles/", filename, hue, true);
};
var _SceneManager_changeScene = SceneManager.changeScene;
SceneManager.changeScene = function () {
if (
this.isSceneChanging() &&
!this.isCurrentSceneBusy() &&
$gameScreen &&
$gameScreen._particle
) {
$gameScreen._particle.willSceneChange();
}
_SceneManager_changeScene.call(this);
};
var _DataManager_loadDataFile = DataManager.loadDataFile;
DataManager.loadDataFile = function (name, src) {
if (src.contains("Test_") && src.contains("TrpParticles")) {
src = Game_Particle.DATA_FILE_PATH;
}
_DataManager_loadDataFile.call(this, name, src);
};
var _DataManager_extractSaveContents = DataManager.extractSaveContents;
DataManager.extractSaveContents = function (contents) {
_DataManager_extractSaveContents.call(this, contents);
$gameScreen.tryCreateParticle();
};
//=============================================================================
// Scene
//=============================================================================
var _Scene_Base_initialize = Scene_Base.prototype.initialize;
Scene_Base.prototype.initialize = function () {
_Scene_Base_initialize.call(this);
this.initializeParticleSystem();
};
Scene_Base.prototype.initializeParticleSystem = function () {
this._particleSystem = null;
};
var _Scene_Base_create = Scene_Base.prototype.create;
Scene_Base.prototype.create = function () {
_Scene_Base_create.call(this);
if ($gameScreen && $gameScreen._particle && this.useParticleSystem()) {
this.createParticleSystem();
}
};
Scene_Base.prototype.createParticleSystem = function () {
if (ParticleSystem.temporallyCacheForGroupedScene) {
this._particleSystem = ParticleSystem.temporallyCacheForGroupedScene;
ParticleSystem.temporallyCacheForGroupedScene = null;
} else {
this._particleSystem = new ParticleSystem();
}
};
var _Scene_Base_start = Scene_Base.prototype.start;
Scene_Base.prototype.start = function () {
_Scene_Base_start.call(this);
if (this._particleSystem) {
this._particleSystem.tryRestoreFromCache(this);
}
};
Scene_Base.prototype.useParticleSystem = function () {
return true;
};
var _Scene_Base_update = Scene_Base.prototype.update;
Scene_Base.prototype.update = function () {
_Scene_Base_update.call(this);
if (this._particleSystem) {
this._particleSystem.update(this);
}
};
Scene_Base.prototype.isParticleTargetTypeValid = function (type, targetId) {
switch (type) {
case TARGET_TYPES.click:
case TARGET_TYPES.drag:
case TARGET_TYPES.displayObject:
return true;
case TARGET_TYPES.scene:
default:
if (type < -1) {
return sceneTypes[-type - 2] === this.constructor.name;
}
return false;
}
};
/* Scene_Boot
===================================*/
var _Scene_Boot_start = Scene_Boot.prototype.start;
Scene_Boot.prototype.start = function () {
_Scene_Boot_start.call(this);
ParticleSystem.setupSystemParticles();
};
/* Scene_Map
===================================*/
Scene_Map.prototype.initializeParticleSystem = function () {
Scene_Base.prototype.initializeParticleSystem.call(this);
this._useCachedParticleSystem = false;
};
Scene_Map.prototype.createParticleSystem = function () {
if (
ParticleSystem.temporallyCacheForSceneMap &&
ParticleSystem.cacheMapId === $gameMap.mapId()
) {
this._particleSystem = ParticleSystem.temporallyCacheForSceneMap;
ParticleSystem.clearCache();
this._useCachedParticleSystem = true;
} else {
Scene_Base.prototype.createParticleSystem.call(this);
}
};
Scene_Map.prototype.useParticleSystem = function () {
return true;
};
Scene_Map.prototype.isParticleTargetTypeValid = function (type, targetId) {
if (type < -1) return false;
switch (type) {
case TARGET_TYPES.party:
case TARGET_TYPES.enemy:
case TARGET_TYPES.attachParty:
case TARGET_TYPES.attachEnemy:
case TARGET_TYPES.battle:
case TARGET_TYPES.battleWeather:
case TARGET_TYPES.battlePicture:
case TARGET_TYPES.battleSkit:
case TARGET_TYPES.actor:
case TARGET_TYPES.attachActor:
return false;
default:
return true;
}
};
var _Scene_Map_terminate = Scene_Map.prototype.terminate;
if (cacheBeforeTerminate) {
Scene_Map.prototype.terminate = function () {
if (SceneManager.isNextScene(Scene_Menu)) {
if (this._particleSystem) {
this._particleSystem.cacheForMap();
this._particleSystem = null;
}
}
_Scene_Map_terminate.call(this);
};
} else {
Scene_Map.prototype.terminate = function () {
_Scene_Map_terminate.call(this);
if (SceneManager.isNextScene(Scene_Menu)) {
if (this._particleSystem) {
this._particleSystem.cacheForMap();
this._particleSystem = null;
}
}
};
}
var _Scene_Base_terminate = Scene_Base.prototype.terminate;
Scene_Base.prototype.terminate = function () {
this.tryCacheParticleSystem();
_Scene_Base_terminate.call(this);
};
Scene_Base.prototype.tryCacheParticleSystem = function () {
if (!this._particleSystem) return;
var length = sceneGroups.length;
var next = SceneManager._nextScene
? SceneManager._nextScene.constructor.name
: "";
if (!next) return;
var constructor = this.constructor.name;
for (var i = 0; i < length; i = (i + 1) | 0) {
var group = sceneGroups[i];
if (group.contains(constructor) && group.contains(next)) {
this._particleSystem.cacheForGroupedScene();
return;
}
}
};
/* Scene_Battle
===================================*/
Scene_Battle.prototype.useParticleSystem = function () {
return true;
};
Scene_Battle.prototype.isParticleTargetTypeValid = function (type, targetId) {
if (type < -1) return false;
switch (type) {
case TARGET_TYPES.character:
case TARGET_TYPES.attach:
case TARGET_TYPES.tilemap:
case TARGET_TYPES.screen:
case TARGET_TYPES.weather:
case TARGET_TYPES.walk:
case TARGET_TYPES.startdash:
case TARGET_TYPES.region:
case TARGET_TYPES.picture:
case TARGET_TYPES.skit:
return false;
default:
return true;
}
};
/* Scene_Load
===================================*/
var _Scene_Load_onLoadSuccess = Scene_Load.prototype.onLoadSuccess;
Scene_Load.prototype.onLoadSuccess = function () {
ParticleSystem.clearCache();
_Scene_Load_onLoadSuccess.call(this);
};
//=============================================================================
// Game_Character
//=============================================================================
if (!disableRoute) {
var _Game_Character_processMoveCommand =
Game_Character.prototype.processMoveCommand;
Game_Character.prototype.processMoveCommand = function (command) {
if (
command.code === Game_Character.ROUTE_SCRIPT &&
/particle /.test(command.parameters[0])
) {
var params = command.parameters[0].split(" ");
params.shift();
var charaId = this instanceof Game_Event ? this._eventId : 0;
$gameScreen._particle.pluginCommand(
$gameMap._interpreter,
params,
charaId
);
} else {
_Game_Character_processMoveCommand.call(this, command);
}
};
}
//=============================================================================
// Game_Particle
//=============================================================================
Game_Particle.displayObjects = {};
Game_Particle.clearDisplayObjects = function () {
Game_Particle.displayObjects = {};
};
Game_Particle.defaultImage = function () {
return parameters.defaultImage || "particle1";
};
Game_Particle.isPlayCommands = function (sub) {
return sub === "play" || sub === "set" || sub === "edit";
};
Game_Particle.prototype.initialize = function () {
this._data = {};
this._keys = [];
this._lastMapId = 0;
this._tagInfo = {};
this.maxParticles = maxParticles || 0;
this._suffix = "";
this._skitIds = [];
this._reservedCommands = [];
this.resetMaxParticles();
};
Game_Particle.prototype.ensureVariables = function () {};
Game_Particle.EVENT_ID_REGEXP = /-EID$/;
Game_Particle.prototype.processArgsEventId = function (args, eventId) {
var length = args.length;
var regexp = Game_Particle.EVENT_ID_REGEXP;
for (var i = 0; i < length; i = (i + 1) | 0) {
var arg = args[i];
if (typeof arg === "string" && regexp.test(arg)) {
args[i] = arg.replace(regexp, "-" + String(eventId));
}
}
};
Game_Particle.prototype.convertEscapeCharacters = function (args) {
var length = args.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
if (typeof args[i] !== "string") continue;
var arg = args[i];
arg = arg.replace(/\\/g, "\x1b");
arg = arg.replace(/\x1bV\[(\d+)\]/gi, (_, p1) =>
$gameVariables.value(parseInt(p1))
);
arg = arg.replace(/\x1bV\[(\d+)\]/gi, (_, p1) =>
$gameVariables.value(parseInt(p1))
);
arg = arg.replace(/\x1bJ\[(.+?)]/gi, function (_, p1) {
return eval(p1) || "";
});
args[i] = arg;
}
};
Game_Particle.prototype.pluginCommand = function (
interpreter,
args,
eventId
) {
var sub = args.shift().toLowerCase();
this.convertEscapeCharacters(args);
//process eid
if (!isNaN(eventId)) {
this.processArgsEventId(args, eventId);
}
this._pluginCommand(interpreter, sub, args, eventId);
};
Game_Particle.prototype._pluginCommand = function (
interpreter,
sub,
args,
eventId
) {
var tag;
if (Game_Particle.isPlayCommands(sub)) {
tag = this.extractTagRegister(args);
var targetId = "";
if (sub === "set") {
args.unshift(eventId);
Game_Particle.prototype.particleSet.apply(this, args);
targetId = args[1];
} else if (sub === "play") {
args.unshift(eventId);
Game_Particle.prototype.particlePlay.apply(this, args);
targetId = args[1];
} else if (sub === "edit") {
var copyName = "";
if (typeof args[args.length - 1] === "string") {
if (args[args.length - 1].indexOf("copy:") === 0) {
copyName = args.pop().replace("copy:", "");
}
}
args.unshift(copyName);
args.unshift(eventId);
if (
Game_Particle.prototype._particleEdit.apply(this, args) &&
interpreter
) {
interpreter.wait(1);
}
targetId = args[2];
}
//register tag
if (tag) {
this.particleTag(targetId, tag);
}
} else if (sub === "repeat") {
Game_Particle.prototype.particleRepeat.apply(this, args);
} else if (sub === "on") {
Game_Particle.prototype.particleOn.apply(this, args);
} else if (sub === "off") {
Game_Particle.prototype.particleOff.apply(this, args);
} else if (sub === "clear") {
Game_Particle.prototype.particleClear.apply(this, args);
} else if (sub === "update") {
this.particleUpdate(args);
} else if (sub === "animate") {
this.particleAnimate(args);
} else if (sub === "exceed") {
Game_Particle.prototype.particleExceed.apply(this, args);
} else if (sub === "screenLoop" || sub === "loop") {
Game_Particle.prototype.particleLoop.apply(this, args);
} else if (sub === "filter") {
this.particleFilter(args);
} else if (sub === "max") {
if (isNaN(args[0])) {
this.resetMaxParticles();
} else {
this.maxParticles = Number(args[0]);
}
} else if (sub === "flash") {
$gameScreen.startFlash(
[Number(args[0]), Number(args[1]), Number(args[2]), Number(args[3])],
Number(args[4])
);
} else if (sub === "shake") {
$gameScreen.startShake(Number(args[0]), Number(args[1]), Number(args[2]));
} else if (sub === "se") {
AudioManager.playSe({
name: args[0],
volume: Number(args[1]) || 90,
pitch: Number(args[2]) || 100,
pan: Number(args[3]) || 0,
});
} else if (sub === "reserve") {
this.reservePluginCommand(
Number(args.shift()),
interpreter,
args,
eventId
);
}
};
Game_Particle.prototype.reservePluginCommand = function (
delay,
interpreter,
args,
eventId
) {
this._reservedCommands = this._reservedCommands || [];
this._reservedCommands.push([
Number(delay),
interpreter,
args,
eventId,
this._suffix,
]);
};
Game_Particle.prototype.update = function () {
if (this._reservedCommands && this._reservedCommands.length > 0) {
this.updateReservedCommands();
}
var keys = this._keys;
var length = keys.length;
var destroyed = false;
for (var i = length - 1; i >= 0; i = (i - 1) | 0) {
var key = keys[i];
var data = this._data[key];
if (!data || data.destroy) {
this._remove(key, keys, true);
destroyed = true;
} else if (data.animations) {
this.updateAnimations(key, data);
}
}
if (destroyed) {
this.truncateTagInfo();
}
};
Game_Particle.prototype._remove = function (
key,
keys = this._keys,
skipTruncateTagInfo = false
) {
var idx = keys.indexOf(key);
if (idx < 0) return;
keys.splice(idx, 1);
delete this._data[key];
if (Game_Particle.displayObjects[key]) {
delete Game_Particle.displayObjects[key];
}
if (!skipTruncateTagInfo) {
this.truncateTagInfo();
}
};
Game_Particle.prototype.updateReservedCommands = function () {
var length = this._reservedCommands.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var command = this._reservedCommands[i];
command[0] -= 1;
if (command[0] <= 0) {
var hasSuffix = command.length >= 5;
if (hasSuffix) {
this.setAutoIdSuffix(command[4]);
}
this.pluginCommand(command[1], command[2], command[3]);
if (hasSuffix) {
this.clearAutoIdSuffix();
}
this._reservedCommands.splice(i, 1);
length -= 1;
i -= 1;
}
}
};
Game_Particle.prototype.idWithSuffix = function (id) {
var idx = id.indexOf(this._suffix);
if (this._suffix && (idx < 0 || idx !== id.length - this._suffix.length)) {
id += this._suffix;
}
return id;
};
Game_Particle.prototype.particleSet = function (
eventId,
id,
target,
name,
z,
x,
y,
image
) {
name = supplementDef(id, name) || id;
id = this.idWithSuffix(id);
if (!!this._data[id]) {
if (this._data[id].destroy) {
this._remove(id);
} else {
this.particleOn(id);
return;
}
}
var data = this.particleData(eventId, id, target, name, z, x, y, image);
if (!data) return;
this._data[id] = data;
this._keys.push(id);
return data;
};
Game_Particle.prototype.particleData = function (
eventId,
id,
target,
name,
z,
x,
y,
image,
ignoreError = false
) {
x = Number(x) || 0;
y = Number(y) || 0;
if (!ignoreError && !Game_Particle.configDataWithName(name)) {
if (errorLog) {
throw new Error(
LC("設定名:%1のパーティクル設定データが存在しません。", 4).format(
name
)
);
}
return;
}
if (!ignoreError && errorLog && target === undefined) {
throw new Error(
LC("パーティクル表示コマンドの対象が設定されてません。", 6) +
"(ID:" +
id +
")"
);
}
var targetType = TARGET_TYPES.character;
var targetId = 0;
var exData = null;
var elems;
if (target instanceof PIXI.Container) {
targetType = TARGET_TYPES.displayObject;
targetId = id;
Game_Particle.displayObjects[id] = target;
} else if (target === "displayObject") {
targetType = TARGET_TYPES.displayObject;
targetId = id;
} else if (target.toLowerCase().contains("scene_")) {
targetType = sceneTypes.indexOf(target);
if (errorLog && targetType < 0) {
throw new Error(
LC("対象のシーンが登録されてませんされてません。(対象:%1)", 7).foramt(
target
)
);
}
targetType = -targetType - 2;
} else if (target === "this") {
targetId = eventId;
} else if (!isNaN(target)) {
targetId = Number(target);
} else if (target === "player") {
targetId = 0;
} else if (target === "tilemap") {
targetType = TARGET_TYPES.tilemap;
} else {
var targetElems = target.split(":");
targetId = targetElems.length >= 2 ? Number(targetElems[1]) : 0;
switch (targetElems[0].toLowerCase()) {
case "follower":
targetType = TARGET_TYPES.character;
targetId *= -1;
break;
case "attach":
targetElems.shift();
if (targetElems[0] === "party") {
targetType = TARGET_TYPES.attachParty;
targetId = targetElems[1];
} else if (targetElems[0] === "enemy") {
targetType = TARGET_TYPES.attachEnemy;
targetId = targetElems[1];
} else if (targetElems[0] === "actor") {
targetType = TARGET_TYPES.attachActor;
targetId = targetElems[1];
} else {
targetType = TARGET_TYPES.attach;
targetId = this.processCharacterTargetId(targetElems, eventId);
}
break;
case "walk":
case "startdash":
targetType = TARGET_TYPES[targetElems.shift()];
targetId = this.processCharacterTargetId(targetElems, eventId);
if (targetElems[0]) {
exData = exData || {};
exData.regions = [];
targetElems[0].split(",").forEach(function (regionId) {
exData.regions.push(Number(regionId));
});
}
if (targetType === TARGET_TYPES.walk) {
exData = exData || {};
exData.dashing = false;
exData.lastMoving = false;
exData.frequency = 0;
} else if (targetType === TARGET_TYPES.startdash) {
exData = exData || {};
exData.dashing = false;
exData.lastDashing = false;
exData.dir = 0;
}
break;
case "stay":
targetType = TARGET_TYPES.tilemap;
var event = $gameMap.event(targetId || eventId);
x += event._x;
y += event._y;
break;
case "weather":
targetType = TARGET_TYPES.weather;
if (targetElems.length > 1) {
exData = exData || {};
elems = targetElems[1].split(",");
exData.px = Number(elems[0]);
exData.py = elems.length >= 2 ? Number(elems[1]) : 1;
}
break;
case "skit":
case "battleSkit":
targetType = TARGET_TYPES[targetElems[0]];
if (!this._skitIds.contains(targetElems[1])) {
this._skitIds.push(targetElems[1]);
}
targetId = this._skitIds.indexOf(targetElems[1]);
break;
case "event":
targetType = TARGET_TYPES.character;
break;
default:
if (TARGET_TYPES[targetElems[0]]) {
targetType = TARGET_TYPES[targetElems[0]];
if (targetElems[0] === "region") {
targetId = targetElems[1];
exData = {
lastX: -1,
lastY: -1,
frequency: 1,
maxParticles: 0,
particlesPerWave: 0,
allPos: null,
};
}
}
}
}
//supplement z
if (isNaN(z)) {
if (!isNaN(Z_INDEX[z])) {
z = Z_INDEX[z];
} else {
z = this.defaultZIndexForType(targetType);
}
}
z = Number(z) || 0;
//make data
var data = {
targetType: targetType,
targetId: targetId,
name: name,
image: image || null,
x: x,
y: y,
z: z,
stop: false,
clear: false,
quit: false,
interval: 0,
params: {},
pChanged: false,
filters: {},
fid: 0,
exceed: null,
loop: null,
animations: null,
repeat: 0,
destroy: false,
ex: exData,
};
return data;
};
Game_Particle.prototype.defaultZIndexForType = function (targetType) {
var z = 0;
if (targetType < -1) {
z = Z_INDEX.below;
} else if (targetType === TARGET_TYPES.character) {
z = Z_INDEX.above;
} else if (targetType === TARGET_TYPES.walk) {
z = Z_INDEX.below;
} else if (targetType === TARGET_TYPES.startdash) {
z = Z_INDEX.below;
} else if (targetType === TARGET_TYPES.attach) {
z = Z_INDEX.above;
} else if (targetType === TARGET_TYPES.screen) {
z = Z_INDEX.spriteset;
} else if (targetType === TARGET_TYPES.displayObject) {
z = 1;
} else if (targetType === TARGET_TYPES.weather) {
z = Z_INDEX.spriteset;
} else if (targetType === TARGET_TYPES.party) {
z = Z_INDEX.above;
} else if (targetType === TARGET_TYPES.actor) {
z = Z_INDEX.above;
} else if (targetType === TARGET_TYPES.attachActor) {
z = Z_INDEX.above;
} else if (targetType === TARGET_TYPES.enemy) {
z = Z_INDEX.above;
} else if (targetType === TARGET_TYPES.attachParty) {
z = Z_INDEX.above;
} else if (targetType === TARGET_TYPES.attachEnemy) {
z = Z_INDEX.above;
} else if (targetType === TARGET_TYPES.battle) {
z = Z_INDEX.screen;
} else if (targetType === TARGET_TYPES.battleWeather) {
z = Z_INDEX.above;
} else if (targetType === TARGET_TYPES.region) {
z = Z_INDEX.above;
} else if (targetType === TARGET_TYPES.picture) {
z = Z_INDEX.above;
} else if (targetType === TARGET_TYPES.skit) {
z = Z_INDEX.above;
} else if (targetType === TARGET_TYPES.battleSkit) {
z = Z_INDEX.above;
}
return z;
};
Game_Particle.prototype.processCharacterTargetId = function (
targetElems,
eventId
) {
var elem0 = targetElems.shift();
if (elem0 === "player") {
return 0;
} else if (elem0 === "follower") {
return -Number(targetElems.shift()) || -1;
} else if (elem0 === "this") {
return eventId;
} else if (elem0 === "event") {
return Number(targetElems.shift()) || eventId;
} else if (!isNaN(elem0)) {
return Number(elem0);
} else {
throw new Error(LC("パーティクルの対象の値に誤りがあります。", 8));
}
};
Game_Particle.prototype.particlePlay = function (
eventId,
id,
target,
name,
z,
x,
y,
image
) {
var data = this._data[this.idWithSuffix(id)];
if (!data) {
data = this.particleSet(eventId, id, target, name, z, x, y, image);
}
data.clear = true;
};
Game_Particle.prototype.particleRepeat = function (id, interval) {
var targetIds = this.targetIds(id);
var length = targetIds.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var id = targetIds[i];
var data = this.dataWithId(id, true);
if (data) {
if (interval === undefined) {
data.repeat = 1;
} else if (isNaN(interval)) {
data.repeat = 0;
} else {
data.repeat = Number(interval) || 0;
}
}
}
};
Game_Particle.prototype.particleOn = function (id) {
var targetIds = this.targetIds(id);
var length = targetIds.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var id = targetIds[i];
var data = this.dataWithId(id, true);
if (data) {
data.stop = false;
}
}
};
Game_Particle.prototype.particleOff = function (id) {
var targetIds = this.targetIds(id);
var length = targetIds.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var id = targetIds[i];
var data = this.dataWithId(id, true);
if (data) {
data.stop = true;
}
}
};
Game_Particle.prototype.stopAll = function () {
var keys = this._keys;
var length = keys.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var key = keys[i];
this.particleOff(key);
}
};
Game_Particle.prototype.resumeAll = function () {
var keys = this._keys;
var length = keys.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var key = keys[i];
this.particleOn(key);
}
};
Game_Particle.prototype.particleClear = function (id, quit) {
if (quit === "false" || quit === "f") {
quit = false;
} else if (quit === "true" || quit === "t") {
quit = true;
} else {
quit = supplementDef(false, quit);
}
var targetIds = this.targetIds(id);
var length = targetIds.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var id = targetIds[i];
var data = this.dataWithId(id, true);
if (data) {
data.clear = true;
data.stop = true;
data.quit = quit;
data.repeat = 0;
}
}
};
Game_Particle.SPAWN_PARAMS = [
"pos",
"point",
"spawnPos",
"burst",
"ring",
"circle",
"rect",
];
Game_Particle.prototype.particleUpdate = function (args) {
var id = args.shift();
var key = args.shift();
var targetIds = this.targetIds(id);
var length = targetIds.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var id = targetIds[i];
var data = this.dataWithId(id, true);
if (data) {
this.tryUpdateSpawnType(key, data);
data.params[key] = i === 0 ? args : args.concat();
data.pChanged = true;
}
}
};
Game_Particle.prototype.tryUpdateSpawnType = function (type, data) {
if (!Game_Particle.SPAWN_PARAMS.contains(type)) return;
var animations = data.animations;
Game_Particle.SPAWN_PARAMS.forEach(function (spawnKey) {
if (spawnKey === "pos" || spawnKey === "point" || spawnKey === "spawnPos")
return;
delete data.params[spawnKey];
if (animations) {
var length = animations.length;
for (var i = length - 1; i >= 0; i = (i - 1) | 0) {
if (animations[i].key === spawnKey) {
animations.splice(i, 1);
}
}
}
});
};
Game_Particle.prototype.particleAnimate = function (args) {
var id = args.shift();
var duration = args.shift();
var key = args.shift();
var targetIds = this.targetIds(id);
var length = targetIds.length;
if (duration <= 0) {
//apply particleUpdate
for (var i = 0; i < length; i = (i + 1) | 0) {
var id = targetIds[i];
args.unshift(id);
Game_Particle.prototype.particleUpdate.call(this, args);
args.shift();
}
return;
}
var coeff = 1;
var last = args[args.length - 1];
if (typeof last === "string") {
if (last.indexOf("coeff:") === 0) {
coeff = Number(args.pop().replace("coeff:", ""));
} else if (last.indexOf(NLC("係数:", 9)) === 0) {
coeff = Number(args.pop().replace(NLC("係数:", 10), ""));
}
}
for (var i = 0; i < length; i = (i + 1) | 0) {
var id = targetIds[i];
var data = this.dataWithId(id, true);
if (data) {
this.tryUpdateSpawnType(key, data);
if (!data.animations) {
data.animations = [];
}
var animation = {
d: duration,
key: key,
args: i === 0 ? args : args.concat(),
coeff: coeff,
};
data.animations.push(animation);
}
}
};
Game_Particle.prototype.updateAnimations = function (id, data) {
var animations = data.animations;
var length = animations.length;
for (var i = length - 1; i >= 0; i = (i - 1) | 0) {
var animation = animations[i];
animation.d -= 1;
if (animation.d <= 0) {
animations.splice(i, 1);
var args = animation.args;
args.unshift(animation.key);
args.unshift(id);
this.particleUpdate(args);
}
}
};
/* exceed
===================================*/
Game_Particle.prototype.particleExceed = function (
id,
arg,
waitEmit = false
) {
var targetIds = this.targetIds(id);
var length = targetIds.length;
var value = Number(arg) || 0;
for (var i = 0; i < length; i = (i + 1) | 0) {
var id = targetIds[i];
var data = this.dataWithId(id, true);
if (data) {
if (!data.exceed) {
data.exceed = {
id: 0,
value: value,
waitEmit: waitEmit,
};
} else {
data.exceed.id = data.exceed.id + 1;
data.exceed.value = value;
data.exceed.waitEmit = waitEmit;
}
}
}
};
/* loop
===================================*/
Game_Particle.prototype.particleLoop = function (id, x = 48, y = x) {
var targetIds = this.targetIds(id);
var length = targetIds.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var id = targetIds[i];
var data = this.dataWithId(id, true);
if (data) {
if (isNaN(x)) {
data.loop = null;
} else {
if (!x && !y) {
data.loop = null;
} else {
data.loop = [Number(x), Number(y)];
}
}
}
}
};
/* filter
===================================*/
Game_Particle.prototype.particleFilter = function (args) {
var id = args.shift();
var filterType = args.shift().toLowerCase();
var targetIds = this.targetIds(id);
var length = targetIds.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var id = targetIds[i];
var data = this.dataWithId(id, true);
if (data) {
if (CLEAR_ARGS.contains(filterType)) {
data.filters = {};
return;
}
if (!FILTER.classWithType[filterType]) {
return;
}
if (CLEAR_ARGS.contains(args[0])) {
delete data.filters[filterType];
} else {
data.filters[filterType] = args;
}
data.fid += 1;
}
}
};
Game_Particle.prototype.particleEdit = function () {};
Game_Particle.prototype._particleEditWithExData = function () {};
Game_Particle.prototype._particleEdit = function () {};
Game_Particle.configData = function (data) {
return this.configDataWithName(data.name);
};
Game_Particle.configDataWithName = function (name) {
var config = $dataTrpParticles[name];
if (config) {
if (Array.isArray(config)) {
$dataTrpParticles[name] = this.decompressConfigDataFromArray(config);
return $dataTrpParticles[name];
} else {
this.migrateConfig(config);
}
return config;
}
config = $dataTrpParticlePreset[name];
if (config) {
if (Array.isArray(config)) {
$dataTrpParticlePreset[name] =
this.decompressConfigDataFromArray(config);
return $dataTrpParticlePreset[name];
} else {
this.migrateConfig(config);
}
return config;
}
if (name.indexOf("/h") !== name.length - 2) {
return this.configDataWithName(name + "/h");
}
return null;
};
Game_Particle.migrateConfig = function (config) {
// under V3: angleType > angle
if (config.angle === undefined) {
if (config.angleType === 1) {
config.angle = -1;
} else {
config.angle = 0;
}
}
};
/* maxParticles
===================================*/
Game_Particle.prototype.resetMaxParticles = function () {
this.maxParticles = maxParticles;
};
/* cache & auto clear
===================================*/
Game_Particle.prototype.removeAll = function () {
var keys = this._keys;
var length = keys.length;
for (var i = length - 1; i >= 0; i = (i - 1) | 0) {
var key = keys[i];
var data = this._data[key];
data.clear = true;
data.quit = true;
}
this._keys.length = 0;
this._data = {};
this.truncateTagInfo();
};
Game_Particle.prototype.willSceneChange = function () {
Game_Particle.clearDisplayObjects();
if (this._reservedCommands) {
this._reservedCommands.length = 0;
}
var keys = this._keys;
var length = keys.length;
for (var i = length - 1; i >= 0; i = (i - 1) | 0) {
var key = keys[i];
var data = this._data[key];
if (data.type === ParticleEmitter.TARGET_TYPES.displayObject) {
keys.splice(i, 1);
delete data[key];
}
}
};
Game_Particle.prototype.willStartSceneMap = function () {
var newMapId = $gameMap.mapId();
if (this._lastMapId !== newMapId) {
this._lastMapId = newMapId;
if (clearCharacterOnMapChange) {
this.removeCharacterTargetParticles();
}
if (clearPartyOnMapChange) {
this.removePartyTargetParticles();
}
if (clearScreenOnMapChange) {
this.removeScreenTargetParticles();
}
var events = $gameMap.events();
var length = events.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
events[i].setupParticles();
}
}
};
Game_Particle.SCREEN_TARGET_TYPES = [
TARGET_TYPES.screen,
TARGET_TYPES.weather,
TARGET_TYPES.region,
];
Game_Particle.CHARACTER_TARGET_TYPES = [
TARGET_TYPES.character,
TARGET_TYPES.walk,
TARGET_TYPES.startdash,
TARGET_TYPES.attach,
];
Game_Particle.BATTLE_SCREEN_TARGET_TYPES = [
TARGET_TYPES.battle,
TARGET_TYPES.battleWeather,
];
Game_Particle.BATTLE_CHARACTER_TARGET_TYPES = [
TARGET_TYPES.actor,
TARGET_TYPES.attachActor,
TARGET_TYPES.party,
TARGET_TYPES.enemy,
TARGET_TYPES.attachParty,
TARGET_TYPES.attachEnemy,
];
Game_Particle.BATTLE_ENEMY_TARGET_TYPES = [
TARGET_TYPES.enemy,
TARGET_TYPES.attachEnemy,
];
Game_Particle.BATTLE_PARTY_TARGET_TYPES = [
TARGET_TYPES.party,
TARGET_TYPES.attachParty,
];
Game_Particle.BATTLE_ACTOR_TARGET_TYPES = [
TARGET_TYPES.actor,
TARGET_TYPES.attachActor,
];
Game_Particle.prototype.removeParticlesWithTargetTypes = function (types) {
this._removeParticlesWithTargetTypes(types, this._keys, this._data);
this.truncateTagInfo();
};
Game_Particle.prototype._removeParticlesWithTargetTypes = function (
types,
keys,
allData
) {
var length = keys.length;
for (var i = length - 1; i >= 0; i = (i - 1) | 0) {
var key = keys[i];
var data = allData[key];
if (types.contains(data.targetType)) {
if (!this.isStateTagged(key, data)) {
keys.splice(i, 1);
delete allData[key];
}
}
}
};
Game_Particle.prototype.isStateTagged = function (key, data) {
if (disableState) return false;
var info = this._tagInfo;
if (!info) return true;
var tags = Object.keys(info);
var length = tags.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var tag = tags[i];
if (tag.indexOf("state:party:") !== 0) continue;
if (info[tag].contains(key)) {
return true;
}
}
return false;
};
Game_Particle.prototype.removeScreenTargetParticles = function () {
this.removeParticlesWithTargetTypes(Game_Particle.SCREEN_TARGET_TYPES);
};
Game_Particle.prototype.removeBattleScreenParticles = function () {
this.removeParticlesWithTargetTypes(
Game_Particle.BATTLE_SCREEN_TARGET_TYPES
);
};
Game_Particle.prototype.removeBattleCharacterParticles = function () {
this.removeParticlesWithTargetTypes(
Game_Particle.BATTLE_CHARACTER_TARGET_TYPES
);
};
Game_Particle.prototype.removeCharacterTargetParticles = function () {
this._removeCharacterTargetParticles(this._keys, this._data);
this.truncateTagInfo();
};
Game_Particle.prototype._removeCharacterTargetParticles = function (
keys,
allData
) {
var length = keys.length;
for (var i = length - 1; i >= 0; i = (i - 1) | 0) {
var key = keys[i];
var data = allData[key];
var isForEvent =
Game_Particle.CHARACTER_TARGET_TYPES.contains(data.targetType) &&
data.targetId > 0;
var isTilemap = data.targetType === TARGET_TYPES.tilemap;
if (isForEvent || isTilemap) {
keys.splice(i, 1);
delete allData[key];
}
}
};
Game_Particle.prototype.removePartyTargetParticles = function () {
this._removePartyTargetParticles(this._keys, this._data);
this.truncateTagInfo();
};
Game_Particle.prototype._removePartyTargetParticles = function (
keys,
allData
) {
var length = keys.length;
for (var i = length - 1; i >= 0; i = (i - 1) | 0) {
var key = keys[i];
var data = allData[key];
if (
Game_Particle.CHARACTER_TARGET_TYPES.contains(data.targetType) &&
data.targetId <= 0
) {
if (!this.isStateTagged(key, data)) {
keys.splice(i, 1);
delete allData[key];
}
}
}
};
Game_Particle.prototype.clearEnemyTargetParticles = function (enemy) {
var types = Game_Particle.BATTLE_ENEMY_TARGET_TYPES;
var targetId = enemy.index() + 1;
this.clearTargetsParticles(types, targetId, this._keys, this._data);
};
Game_Particle.prototype.clearActorTargetParticles = function (actor, quit) {
if (actor.index() < 0) return;
var types = Game_Particle.BATTLE_PARTY_TARGET_TYPES;
var targetId = actor.index() + 1;
this.clearTargetsParticles(types, targetId, this._keys, this._data, quit);
types = Game_Particle.BATTLE_ACTOR_TARGET_TYPES;
targetId = actor.particleTargetId();
this.clearTargetsParticles(types, targetId, this._keys, this._data, quit);
};
Game_Particle.prototype.clearTargetsParticles = function (
targetTypes,
targetId,
keys,
allData,
quit = false
) {
var length = keys.length;
for (var i = length - 1; i >= 0; i = (i - 1) | 0) {
var key = keys[i];
var data = allData[key];
if (!targetTypes.contains(data.targetType)) continue;
if (String(data.targetId) !== String(targetId)) continue;
allData[key].clear = true;
allData[key].stop = true;
if (quit) {
allData[key].quit = true;
}
keys.splice(i, 1);
delete allData[key];
}
this.truncateTagInfo();
};
/* tag
===================================*/
Game_Particle.prototype.extractTagRegister = function (args) {
var tag = "";
var length = args.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var arg = args[i];
if (typeof arg === "string" && arg.indexOf("tag:") === 0) {
tag = arg.replace("tag:", "");
args.splice(i, 1);
break;
}
}
return tag;
};
Game_Particle.prototype.particleTag = function (id, tag) {
if (!this._tagInfo) this._tagInfo = {};
id = this.idWithSuffix(id);
var info = this._tagInfo;
if (!info[tag]) {
info[tag] = [];
}
if (!info[tag].contains(id)) {
info[tag].push(id);
}
};
Game_Particle.prototype.truncateTagInfo = function () {
if (!this._tagInfo) return;
var keys = Object.keys(this._tagInfo);
var length = keys.length;
for (var i = length - 1; i >= 0; i = (i - 1) | 0) {
var key = keys[i];
var ids = this._tagInfo[key];
var idLen = ids.length;
for (var j = idLen - 1; j >= 0; j = (j - 1) | 0) {
var id = ids[j];
if (!this._data[id]) {
ids.splice(j, 1);
}
}
if (ids.length === 0) {
delete this._tagInfo[key];
}
}
};
/* helper&accessor
===================================*/
Game_Particle.prototype.dataWithId = function (id, noErrorLog) {
if (this._suffix) {
var suffixIdx = id.indexOf(this._suffix);
if (suffixIdx < 0 || suffixIdx !== id.length - this._suffix.length) {
id += this._suffix;
}
}
var data = this._data[id] || null;
if (!data && !noErrorLog && errorLog) {
throw new Error(
LC("管理ID:%1のパーティクルは再生されてません。", 11).format(id)
);
}
return data;
};
Game_Particle.prototype.data = function () {
return this._data;
};
Game_Particle.prototype.keys = function () {
return this._keys;
};
Game_Particle.prototype.setAutoIdSuffix = function (suffix) {
this._suffix = suffix;
};
Game_Particle.prototype.addAutoIdSuffix = function (suffix) {
this._suffix += suffix;
};
Game_Particle.prototype.removeAutoIdSuffix = function (suffix) {
var index = this._suffix.indexOf(suffix);
this._suffix = this._suffix.substring(0, index);
};
Game_Particle.prototype.clearAutoIdSuffix = function () {
this._suffix = "";
};
Game_Particle.TEMP_TARGET_ARRAY = [];
Game_Particle.TEMP_TARGET_TYPES_ARRAY = [];
Game_Particle.prototype.targetIds = function (idStr) {
var ret = Game_Particle.TEMP_TARGET_ARRAY;
ret.length = 0;
if (typeof idStr === "number") {
ret.push(idStr);
return ret;
}
var id_lc = idStr.toLowerCase();
if (id_lc.indexOf("group:") === 0) {
idStr = "tag:" + idStr;
id_lc = "tag:" + id_lc;
}
var types = null;
if (id_lc.indexOf("all:") === 0) {
idStr = idStr.substr(4);
if (idStr.contains(",")) {
types = idStr.split(",");
} else {
types = Game_Particle.TEMP_TARGET_TYPES_ARRAY;
types.length = 0;
types.push(idStr);
}
var length = types.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var targetType = TARGET_TYPES[types[i]];
if (isNaN(targetType)) {
if (errorLog) {
throw new Error(idStr + " > " + LC("対象タイプが不正です。", 12));
}
} else {
this.pushIdsWithTargetType(ret, targetType);
}
}
} else if (id_lc === "all") {
ret = this._keys;
} else if (id_lc.indexOf("tag:") === 0) {
var tagStr = idStr.substr(4);
if (tagStr.contains(",")) {
types = tagStr.split(",");
} else {
types = Game_Particle.TEMP_TARGET_TYPES_ARRAY;
types.length = 0;
types.push(tagStr);
}
var length = types.length;
if (this._tagInfo) {
for (var i = 0; i < length; i = (i + 1) | 0) {
var tag = types[i];
if (this._tagInfo[tag]) {
Array.prototype.push.apply(ret, this._tagInfo[tag]);
}
if (this._suffix && this._tagInfo[tag + this._suffix]) {
Array.prototype.push.apply(ret, this._tagInfo[tag + this._suffix]);
}
}
}
} else {
ret.push(idStr);
}
return ret;
};
Game_Particle.prototype.pushIdsWithTargetType = function (array, type) {
var keys = this._keys;
var length = keys.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var key = keys[i];
var data = this._data[key];
if (data.targetType === type) {
array.push(key);
}
}
};
Game_Particle.prototype.skitPictureId = function (id) {
var actor = $gameSkit._skitActors[this._skitIds[id]];
if (!actor) return -1;
return actor.pictureId();
};
//=============================================================================
// ParticleSystem
//=============================================================================
ParticleSystem.cacheMapId = -1;
ParticleSystem.temporallyCacheForSceneMap = null;
ParticleSystem.temporallyCacheForGroupedScene = null;
ParticleSystem.clearCache = function () {
this.temporallyCacheForSceneMap = null;
this.cacheMapId = -1;
};
ParticleSystem.systemParticles = null;
ParticleSystem.systemParticleIds = null;
ParticleSystem.setupSystemParticles = function () {
if (this.systemParticles) return;
var particle = new Game_Particle();
this.systemParticles = [];
this.systemParticleIds = [];
var length = systemParticles.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var args = systemParticles[i].split(" ");
if (commandNames.contains(args[0])) {
args.shift();
}
var command = args[0];
var id = args[1];
if (id) {
particle.pluginCommand(null, args);
var data = particle._data[id];
if (!data) continue;
this.systemParticles.push(data);
this.systemParticleIds.push(id);
}
}
particle._keys.length = 0;
particle._data = {};
};
ParticleSystem.prototype.initialize = function () {
this._emitters = {};
this._keys = [];
this._useCapacityLimit = false;
this._maxParticles = 0;
this._isCapacityLimitted = false;
this._cached = false;
if (displayCount) {
this._particleCount = -1;
this._displayCountFrame = 15;
this._countSprite = null;
this._limitedSprite = null;
this.createCountSprite();
}
};
ParticleSystem.prototype.cacheForMap = function () {
this.prepareCache();
ParticleSystem.temporallyCacheForSceneMap = this;
ParticleSystem.cacheMapId = $gameMap.mapId();
};
ParticleSystem.prototype.cacheForGroupedScene = function () {
this.prepareCache();
ParticleSystem.temporallyCacheForGroupedScene = this;
};
ParticleSystem.prototype.prepareCache = function () {
this._cached = true;
if (displayCount) {
if (this._countSprite && this._countSprite.parent) {
this._countSprite.parent.removeChild(this._countSprite);
}
if (this._limitedSprite && this._limitedSprite.parent) {
this._limitedSprite.parent.removeChild(this._limitedSprite);
}
}
var keys = this._keys;
var length = keys.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var emitter = this._emitters[keys[i]];
var container = emitter.container();
if (
emitter._targetType === TARGET_TYPES.click ||
emitter._targetType === TARGET_TYPES.drag
) {
emitter.cleanup();
} else if (emitter._targetType === TARGET_TYPES.displayObject) {
emitter.destroy();
delete this._emitters[keys[i]];
keys.splice(i, 1);
i -= 1;
length -= 1;
}
if (container.parent) {
container.parent.removeChild(container);
}
}
};
ParticleSystem.prototype.tryRestoreFromCache = function (scene) {
if (!this._cached) return;
this._cached = false;
var keys = this._keys;
var length = keys.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var emitter = this._emitters[keys[i]];
this.addEmitterToParent(emitter, scene);
}
};
ParticleSystem.prototype.updateForEditor = function (scene) {
this.update(scene);
};
ParticleSystem.prototype.update = function (scene) {
var emitters = this._emitters;
var particle = $gameScreen._particle;
var particles = particle.data();
var dataKeys = particle.keys();
var changed = false;
var length = dataKeys.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var key = dataKeys[i];
if (emitters[key]) continue;
var data = particles[key];
if (
!data ||
!scene.isParticleTargetTypeValid(data.targetType, data.targetId)
)
continue;
if (!data.destroy) {
changed = true;
var emitter = this.createParticleEmitter(key, data, scene);
if (!emitter._destroyed) {
emitters[key] = emitter;
this._keys.push(key);
}
}
}
var systemKeys = ParticleSystem.systemParticleIds;
var length = systemKeys.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var key = systemKeys[i];
if (emitters[key]) continue;
var data = ParticleSystem.systemParticles[i];
if (!data || !scene.isParticleTargetTypeValid(data.targetType)) continue;
if (!data.destroy) {
changed = true;
emitters[key] = this.createParticleEmitter(key, data, scene);
this._keys.push(key);
}
}
var emitterKeys = this._keys;
length = emitterKeys.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
if (emitters[emitterKeys[i]].update()) {
changed = true;
}
}
if (this._maxParticles !== particle.maxParticles) {
changed = true;
this._maxParticles = particle.maxParticles;
this._useCapacityLimit = this._maxParticles > 0;
this.refreshCapacity();
} else if (this._useCapacityLimit && changed) {
this.refreshCapacity();
}
for (i = length - 1; i >= 0; i = (i - 1) | 0) {
var emitter = emitters[emitterKeys[i]];
emitter.updateEmitter();
if (emitter._destroyed) {
changed = true;
delete emitters[emitterKeys[i]];
emitterKeys.splice(i, 1);
}
}
if (displayCount) {
this._displayCountFrame -= 1;
if (this._displayCountFrame <= 0) {
// this._displayCountFrame = 15;
this._displayCountFrame = 5;
this.refreshParticleCount();
}
}
};
ParticleSystem.prototype.createParticleEmitter = function (key, data, scene) {
var emitter = new ParticleEmitter(key, data);
if (!emitter._destroyed) {
this.addEmitterToParent(emitter, scene);
}
return emitter;
};
ParticleSystem.prototype.addEmitterToParent = function (emitter, scene) {
var data = emitter._data;
var container = emitter.container();
var z = data.z || 0;
var target, index, sprset, parent;
switch (data.targetType) {
case TARGET_TYPES.displayObject:
target = Game_Particle.displayObjects[data.targetId];
if (target && target.parent) {
index = target.parent.children.indexOf(target);
index = (index + z).clamp(0, target.parent.children.length);
target.parent.addChildAt(
container,
Math.min(target.parent.children.length, index)
);
if (window["Tilemap"] && target.parent instanceof Tilemap) {
container.z = target.z + z;
}
}
break;
case TARGET_TYPES.actor:
case TARGET_TYPES.attachActor:
case TARGET_TYPES.party:
case TARGET_TYPES.enemy:
case TARGET_TYPES.attachParty:
case TARGET_TYPES.attachEnemy:
case TARGET_TYPES.battleWeather:
target = emitter.target();
container.z = z;
parent = target.parent || this.battleField(scene);
if (z <= Z_INDEX.below) {
for (var i = 0; i < parent.children.length; i = (i + 1) | 0) {
if (parent.children[i] instanceof Sprite_Battler) {
parent.addChildAt(container, i);
break;
}
}
} else {
parent.addChild(container);
}
break;
case TARGET_TYPES.battle:
sprset = this.battleSpriteset(scene);
parent = sprset.parent;
parent.addChildAt(container, parent.children.indexOf(sprset) + 1);
break;
case TARGET_TYPES.click:
case TARGET_TYPES.drag:
SceneManager._scene.addChild(container);
break;
case TARGET_TYPES.picture:
case TARGET_TYPES.battlePicture:
sprset = this.spriteset(scene);
target = sprset._pictureContainer;
if (keepPictureOrder) {
parent = target;
parent.children.some(function (child) {
if (child instanceof Sprite_Picture) {
if (child._pictureId === data.targetId) {
target = child;
return true;
}
}
return false;
});
} else {
parent = target.parent;
}
index = parent.children.indexOf(target);
if (z <= Z_INDEX.below) {
parent.addChildAt(container, index);
} else {
parent.addChildAt(container, index + 1);
}
break;
case TARGET_TYPES.skit:
case TARGET_TYPES.battleSkit:
sprset = this.spriteset(scene);
target = sprset._bustPictureContainer;
parent = target.parent;
index = parent.children.indexOf(target);
if (z <= Z_INDEX.below) {
parent.addChildAt(container, index);
} else {
parent.addChildAt(container, index + 1);
}
break;
default:
if (data.targetType < 0) {
index = scene.children.indexOf(scene._windowLayer) || 0;
if (z < 0) {
scene.addChildAt(
container,
(-z - 1).clamp(0, scene.children.length)
);
} else if (z === Z_INDEX.below) {
scene.addChildAt(container, index);
} else {
scene.addChild(container);
}
}
break;
}
if (z === Z_INDEX.screen) {
scene.addChild(container);
} else if (z === Z_INDEX.spriteset && this.spriteset(scene)) {
this.spriteset(scene).addChild(container);
} else if (z === Z_INDEX.back && this.spriteset(scene)) {
var sprset = this.spriteset(scene);
sprset._tilemap.parent.addChildAt(
container,
sprset._tilemap.parent.children.indexOf(sprset._tilemap)
);
} else if (!container.parent) {
if (z >= 0) {
container.z = z;
var baseField = this.baseField(scene);
if (baseField) {
baseField.addChild(container);
}
} else {
var sprset = this.spriteset(scene);
if (sprset) {
sprset.addChildAt(
container,
(-z + 1).clamp(0, sprset.children.length)
);
} else {
scene.addChildAt(container, (-z + 1).clamp(0, scene.children.length));
}
}
}
return emitter;
};
ParticleSystem.prototype.baseField = function (scene) {
if (scene instanceof Scene_Map) {
return this.spriteset(scene)._tilemap;
} else if (this.spriteset(scene)) {
return this.spriteset(scene);
} else {
return null;
}
};
ParticleSystem.prototype.spriteset = function (scene) {
return scene._spriteset;
};
ParticleSystem.prototype.battleSpriteset = function (scene) {
return scene._spriteset;
};
ParticleSystem.prototype.battleField = function (scene) {
return this.battleSpriteset(scene)._battleField;
};
ParticleSystem.prototype.createCountSprite = function () {
var bitmap = new Bitmap(256, 16);
var sprite = new Sprite(bitmap);
bitmap.fontSize = 14;
bitmap.drawText(LC("パーティクル数:", 13), 0, 0, 100, 16, "right");
this._countSprite = sprite;
//limited sprite
bitmap = new Bitmap(128, 16);
sprite = this._limitedSprite = new Sprite(bitmap);
sprite.visible = false;
sprite.y = 16;
bitmap.textColor = "red";
bitmap.fontSize = 14;
bitmap.drawText(LC("最大数制限中!", 14), 0, 0, 128, 16);
};
ParticleSystem.prototype.refreshParticleCount = function () {
var emitters = this._emitters;
var keys = this._keys;
var length = keys.length;
var count = 0;
for (var i = 0; i < length; i = (i + 1) | 0) {
var emitter = emitters[keys[i]];
if (emitter) {
count += emitter.particleCount();
}
}
if (this._particleCount === count) return;
this._particleCount = count;
var sprite = this._countSprite;
if (!sprite) this.createCountSprite();
if (sprite.parent !== SceneManager._scene) {
SceneManager._scene.addChild(sprite);
}
var bitmap = sprite.bitmap;
var x = 100;
var width = bitmap.width - x;
var height = bitmap.height;
bitmap.clearRect(x, 0, width, height);
bitmap.drawText(count, x + 1, 0, width - 2, height);
if (this._isCapacityLimitted) {
sprite = this._limitedSprite;
if (sprite.parent !== SceneManager._scene) {
SceneManager._scene.addChild(sprite);
}
sprite.visible = true;
} else if (this._limitedSprite) {
this._limitedSprite.visible = false;
}
};
/* capacity
===================================*/
ParticleSystem.prototype.refreshCapacity = function () {
var keys = this._keys;
var emitters = this._emitters;
var length = keys.length;
var capacity = 0;
for (var i = 0; i < length; i = (i + 1) | 0) {
capacity += emitters[keys[i]].particleCapacity();
}
var capacityRate;
if (this._maxParticles <= 0) {
if (!this._isCapacityLimitted) {
return;
}
capacityRate = 1;
} else if (capacity <= this._maxParticles) {
if (this._isCapacityLimitted) {
capacityRate = 1;
} else {
return;
}
} else {
capacityRate = this._maxParticles / (capacity || 1);
}
this._isCapacityLimitted = capacityRate < 1;
for (var i = 0; i < length; i = (i + 1) | 0) {
emitters[keys[i]].setParticleCapacity(capacityRate);
}
};
//=============================================================================
// ParticleEmitter
//=============================================================================
ParticleEmitter.rgbWithStr = function (string) {
var values = string.match(/\((.+)\)/)[1].split(",");
if (string.indexOf("rgba") >= 0) {
return {
r: Number(values[0]),
g: Number(values[1]),
b: Number(values[2]),
a: Number(values[3]),
};
} else {
return {
r: Number(values[0]),
g: Number(values[1]),
b: Number(values[2]),
};
}
};
ParticleEmitter.prototype.initialize = function (id, data) {
this.initMembers();
var config = Game_Particle.configData(data);
var container = new PIXI.Container();
this._container = container;
this._id = id;
this._data = data;
this._config = config;
this._image = data.image;
this._isSceneMap = SceneManager._scene instanceof Scene_Map;
this._tileWidth = $gameMap
? $gameMap.tileWidth()
: $dataSystem.tileSize || 48;
this._tileHeight = $gameMap
? $gameMap.tileHeight()
: $dataSystem.tileSize || 48;
this._loopXThreshold =
this._isSceneMap && $gameMap.isLoopHorizontal()
? ($dataMap.width / 2) * this._tileWidth
: 0;
this._loopYThreshold =
this._isSceneMap && $gameMap.isLoopVertical()
? ($dataMap.height / 2) * this._tileHeight
: 0;
this._characterTargetMargin = isNaN(outsideMargin)
? -1
: this._tileWidth * Number(outsideMargin);
this.setupTarget(data);
var image = this.imageName(data.image);
var bitmaps = this.bitmapsWithImage(image);
this.setupBitmaps(image, bitmaps);
};
ParticleEmitter.prototype.setupBitmaps = function (image, bitmaps) {
var length = bitmaps.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
bitmaps[i].addLoadListener(
ParticleEmitter.prototype.tryStart.bind(this, image, bitmaps)
);
}
};
ParticleEmitter.prototype.initMembers = function () {
this._container = null;
this._data = null;
this._image = null;
this._id = null;
this._started = false;
this._isSceneMap = true;
this._freezed = false;
this._lastFreezed = false;
this._targetType = 0;
this._target = null;
this._targetId = -1;
this._isCharacterTarget = false;
this._characterTargetMargin = isNaN(outsideMargin)
? -1
: 48 * Number(outsideMargin);
this._fid = -1;
this._filterArgs = {};
this._filterKeys = [];
this._exceedId = -1;
this._emitter = null;
this._destroyed = false;
this._stop = false;
this._restartCount = 0;
this._x = 0;
this._y = 0;
this._dispX = 0;
this._dispY = 0;
this._loopXThreshold = 0;
this._loopYThreshold = 0;
this._followScroll = false;
this._scrollXRate = 1.0;
this._scrollYRate = 1.0;
this._updatePos = false;
this._isWeather = false;
};
ParticleEmitter.prototype.paramWithRate = function (target, current, rate) {
if (rate === 1) return target;
return current + (target - current) * rate;
};
ParticleEmitter.prototype.target = function () {
return this._target;
};
ParticleEmitter.prototype.bitmapsWithImage = function (imageStr) {
var images = imageStr.split(",");
var length = images.length;
var bitmaps = [];
var bitmap;
for (var i = 0; i < length; i = (i + 1) | 0) {
var image = images[i];
if (image.indexOf("tile:") === 0) {
// var bitmapIndex = Number(image.match(/tile:(\d+?):/)[1]);
// bitmap = SceneManager._scene._spriteset._tilemap.bitmaps[bitmapIndex];
var tilesetImage = image.match(/tile:(.+?):/)[1];
bitmap = ImageManager.loadTileset(tilesetImage);
} else if (image.indexOf("ANIM:") === 0) {
if (this.hasSplitAnimationImage(image)) {
bitmap = ImageManager.loadParticle(this.splitAnimationImage(image));
} else {
bitmap = ImageManager.loadAnimation(image.match(/ANIM:(.+?):/)[1]);
}
} else {
bitmap = ImageManager.loadParticle(image);
}
bitmaps.push(bitmap);
}
return bitmaps;
};
ParticleEmitter.prototype.splitAnimationImage = function (image) {
return "_" + image.replace(/:/gi, "_");
};
ParticleEmitter.prototype.hasSplitAnimationImage = function (image) {
var params = PluginManager._parameters.trp_particlemz_list;
if (!params || !params.animImages) return false;
if (image.indexOf("_ANIM") !== 0) {
image = this.splitAnimationImage(image);
}
return params.animImages.contains(image);
};
ParticleEmitter.prototype.setupTarget = function (data) {
var type = data.targetType;
var id = data.targetId;
var target = null;
var followScroll = false;
var updatePos = false;
var isWeather = false;
switch (type) {
case TARGET_TYPES.displayObject:
updatePos = true;
target = {
x: data.x,
y: data.y,
};
break;
case TARGET_TYPES.walk:
this._data.ex.frequency = this._config.frequency;
case TARGET_TYPES.startdash:
case TARGET_TYPES.character:
followScroll = true;
case TARGET_TYPES.attach:
updatePos = true;
if (id === 0) {
target = $gamePlayer;
} else if (id < 0) {
target = $gamePlayer._followers.follower(id * -1 - 1);
if (!target || !target.actor()) {
target = null;
}
} else {
target = $gameMap.event(id);
}
break;
case TARGET_TYPES.screen:
target = {
x: Graphics.width / 2,
y: Graphics.height / 2,
};
break;
case TARGET_TYPES.tilemap:
followScroll = true;
updatePos = true;
target = {
x: data.x,
y: data.y,
};
break;
case TARGET_TYPES.weather:
followScroll = true;
updatePos = false;
isWeather = true;
target = {
x: Graphics.width / 2,
y: Graphics.height / 2,
};
if (data.ex) {
this._scrollXRate = data.ex.px;
this._scrollYRate = data.ex.py;
}
break;
case TARGET_TYPES.actor:
case TARGET_TYPES.attachActor:
updatePos = true;
var battler = $gameActors.actor(id);
target = this._actorSpriteTarget(battler);
this._data.ex = {
index: battler.index(),
};
break;
case TARGET_TYPES.party:
case TARGET_TYPES.attachParty:
updatePos = true;
target = this._actorSpriteTarget($gameParty.members()[id - 1]);
break;
case TARGET_TYPES.enemy:
case TARGET_TYPES.attachEnemy:
updatePos = true;
target = this._enemySpriteTarget($gameTroop.members()[id - 1]);
break;
case TARGET_TYPES.battle:
case TARGET_TYPES.battleWeather:
target = {
x: Graphics.width / 2,
y: Graphics.height / 2,
};
break;
case TARGET_TYPES.region:
followScroll = true;
target = [];
this._data.ex.frequency = this._config.frequency;
this._data.ex.maxParticles = this._config.maxParticles;
this._data.ex.particlesPerWave = this._config.particlesPerWave;
this._data.ex.allPos = this.positionsWithRegionIds(id);
this._data.ex.lastX = -1;
this._data.ex.lastY = -1;
break;
case TARGET_TYPES.click:
case TARGET_TYPES.drag:
break;
case TARGET_TYPES.picture:
case TARGET_TYPES.battlePicture:
updatePos = true;
target = id;
break;
case TARGET_TYPES.skit:
case TARGET_TYPES.battleSkit:
updatePos = true;
target = id;
break;
default:
if (type < -1) {
target = {
x: Graphics.width / 2,
y: Graphics.height / 2,
};
}
}
this._targetType = type;
this._target = target;
this._targetId = id;
this._followScroll = followScroll;
this._updatePos = updatePos;
this._isWeather = isWeather;
this._isCharacterTarget =
Game_Particle.CHARACTER_TARGET_TYPES.contains(type);
if (this._isCharacterTarget && target) {
if (target instanceof Game_Event) {
if (target.event().meta.pMargin !== undefined) {
this._characterTargetMargin =
this._tileWidth * Number(target.event().meta.pMargin);
}
}
}
};
ParticleEmitter.prototype._enemySpriteTarget = function (target) {
var sprites = SceneManager._scene._spriteset._enemySprites;
return this._battlerSpriteTarget(target, sprites);
};
ParticleEmitter.prototype._actorSpriteTarget = function (target) {
var sprites = SceneManager._scene._spriteset._actorSprites;
return this._battlerSpriteTarget(target, sprites);
};
ParticleEmitter.prototype._battlerSpriteTarget = function (target, sprites) {
var length = sprites.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var sprite = sprites[i];
if (sprite && sprite._battler === target) {
return sprite;
}
}
return null;
};
ParticleEmitter.prototype.positionsWithRegionIds = function (regionIdStr) {
var regionIds = regionIdStr.split(",");
var length = regionIds.length;
var positions = [];
for (var i = 0; i < length; i = (i + 1) | 0) {
regionIds[i] = Number(regionIds[i]);
}
var width = $dataMap.width;
var height = $dataMap.height;
var zIdx = 5 * height;
for (var y = 0; y < height; y = (y + 1) | 0) {
var yIdx = (zIdx + y) * width;
for (var x = 0; x < width; x = (x + 1) | 0) {
var idx = yIdx + x;
var regionId = $dataMap.data[idx];
if (regionIds.indexOf(regionId) >= 0) {
positions.push(x);
positions.push(y);
}
}
}
return positions;
};
ParticleEmitter.prototype.tryDestroy = function (force = false) {
this.destroy(force);
};
ParticleEmitter.prototype.destroy = function (force) {
if (this._destroyed) return;
this._destroyed = true;
this._data.destroy = true;
this._data = null;
this._target = null;
if (this._emitter) {
this._emitter.emit = false;
this._emitter.destroy();
this._emitter = null;
}
if (this._container.parent) {
this._container.parent.removeChild(this._container);
}
this._container = null;
};
/* util interface
===================================*/
ParticleEmitter.prototype.setParticleCapacity = function (value) {
if (this._freezed) return;
if (
this._targetType === TARGET_TYPES.click ||
this._targetType === TARGET_TYPES.drag
) {
return;
}
if (this._emitter) {
this._emitter.capacityRate = value;
}
};
ParticleEmitter.prototype.particleCapacity = function () {
if (this._freezed) {
return 0;
}
if (
this._targetType === TARGET_TYPES.click ||
this._targetType === TARGET_TYPES.drag
) {
return 0;
}
var emitter = this._emitter;
if (!emitter) return 0;
return emitter.particleCapacity();
};
/* start
===================================*/
ParticleEmitter.prototype.tryStart = function (image, bitmaps) {
if (this._started) return;
var length = bitmaps.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
if (!bitmaps[i].isReady()) return;
}
this.start(image, bitmaps);
};
ParticleEmitter.prototype.particleConstructor = function () {
return TRP_Particle;
};
ParticleEmitter.prototype.emitterConstructor = function () {
return TRP_Emitter;
};
ParticleEmitter.prototype.start = function (image, bitmaps) {
if (this._destroyed) return;
if (this._started) return;
this._started = true;
var data = this._data;
var container = this._container;
var config = this._config;
var textures = this._texturesWithBitmaps(image, bitmaps);
var emitterConstructor = this.emitterConstructor();
var emitter = new emitterConstructor(container, textures, config);
this._emitter = emitter;
emitter.particleConstructor = this.particleConstructor();
if (
this._targetType !== TARGET_TYPES.click &&
this._targetType !== TARGET_TYPES.drag
) {
emitter.emit = true;
} else {
emitter.emit = false;
}
if (this._targetType === TARGET_TYPES.region) {
emitter._spawnFunc = emitter._spawnRegion.bind(emitter, this._target);
}
this.updateParams(data);
if (this._isWeather || (!this._updatePos && !this._followScroll)) {
if (this._target) {
container.x = this._target.x;
container.y = this._target.y;
}
} else {
this.updatePosition();
}
};
ParticleEmitter.prototype._texturesWithBitmaps = function (
imageStr,
bitmaps
) {
var hasTile = imageStr.contains("tile:");
var hasAnimation = imageStr.contains("ANIM:");
var images = null;
if (hasTile || hasAnimation) {
images = imageStr.split(",");
}
var config = this._config;
var frames = config.frames;
var textures = [];
var length = bitmaps.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var bitmap = bitmaps[i];
var frameData = frames ? frames[i] || null : null;
var frame = null;
if (frameData) {
frame = new Rectangle(
frameData[0],
frameData[1],
frameData[2],
frameData[3]
);
} else if (hasTile) {
var image = images[i];
if (image.indexOf("tile:") === 0) {
frame = this.frameForTileIndex(Number(image.split(":")[2]));
}
} else if (hasAnimation && !this.hasSplitAnimationImage(images[i])) {
var image = images[i];
if (image.indexOf("ANIM:") === 0) {
frame = this.frameForAnimationIndex(Number(image.split(":")[2]));
}
}
if (frame) {
frame.x = frame.x.clamp(0, bitmap.width);
frame.width = frame.width.clamp(0, bitmap.width - frame.x);
frame.y = frame.y.clamp(0, bitmap.height);
frame.height = frame.height.clamp(0, bitmap.height - frame.y);
}
var texture = new PIXI.Texture(bitmap.baseTexture, frame);
textures.push(texture);
}
return textures;
};
ParticleEmitter.TILESET_COLUMNS = 16;
ParticleEmitter.prototype.frameForTileIndex = function (tileIndex) {
var cols = ParticleEmitter.TILESET_COLUMNS;
var col = tileIndex % cols;
var row = Math.floor(tileIndex / cols);
return new Rectangle(
this._tileWidth * col,
this._tileHeight * row,
this._tileWidth,
this._tileHeight
);
};
ParticleEmitter.ANIMATION_SIZE = 192;
ParticleEmitter.ANIMATION_COLUMNS = 5;
ParticleEmitter.prototype.frameForAnimationIndex = function (index) {
var frameSize = ParticleEmitter.ANIMATION_SIZE;
var cols = ParticleEmitter.ANIMATION_COLUMNS;
var col = index % cols;
var row = Math.floor(index / cols);
return new Rectangle(
frameSize * col,
frameSize * row,
frameSize,
frameSize
);
};
ParticleEmitter.prototype.cleanup = function () {
if (!this._emitter) return;
this._emitter.emit = false;
this._emitter.cleanup();
};
/* update
===================================*/
ParticleEmitter.prototype.particleCount = function (subId = "") {
if (this._freezed || !this._emitter) return 0;
if (subId) {
return this.subEmitter(subId).particleTotalCount();
} else {
return this._emitter.particleTotalCount();
}
};
ParticleEmitter.prototype.update = function () {
var changed = false;
var emitter = this._emitter;
if (!emitter || this._destroyed) return changed;
var data = this._data;
if (this._stop !== data.stop) {
this._stop = data.stop;
if (
this._targetType !== TARGET_TYPES.click &&
this._targetType !== TARGET_TYPES.drag
) {
emitter.emit = !this._stop;
}
changed = true;
}
if (
(this._targetType === TARGET_TYPES.click && TouchInput.isTriggered()) ||
(this._targetType === TARGET_TYPES.drag && TouchInput.isPressed())
) {
this._stop = false;
if (TouchInput.isTriggered()) {
emitter.resetPositionTracking();
if (this._targetType === TARGET_TYPES.click) {
emitter.emit = true;
}
} else if (this._targetType === TARGET_TYPES.drag) {
emitter.emit =
emitter.ownerPos.x !== TouchInput.x ||
emitter.ownerPos.y !== TouchInput.y;
}
emitter.updateOwnerPos(TouchInput.x, TouchInput.y);
this._container.parent.addChild(this._container);
}
if (!this._stop) {
if (this._targetType === TARGET_TYPES.region) {
if (this.updateForRegion(false)) {
changed = true;
}
}
if (!this._freezed && data.exceed && data.exceed.id !== this._exceedId) {
if (
!data.waitEmit ||
this._emitter._poolFirst ||
this._emitter._activeParticlesFirst
) {
this._emitter.update(data.exceed.value);
this._exceedId = data.exceed.id;
}
}
if (data.animations) {
this.updateAnimations(data);
changed = true;
}
if (data.pChanged) {
this.updateParams(data);
data.pChanged = false;
changed = true;
}
if (this._fid !== data.fid) {
this.updateFilters(data);
changed = true;
}
if (this._image !== data.image) {
this._image = data.image;
this.changeImage(data.image);
}
switch (this._targetType) {
case TARGET_TYPES.walk:
if (this.updateForWalk()) {
changed = true;
}
break;
case TARGET_TYPES.startdash:
if (this.updateForStartDash()) {
changed = true;
}
break;
default:
if (data.loop) {
this.loopParticles(data.loop[0], data.loop[1]);
}
}
}
if (this._lastFreezed !== this._freezed) {
changed = true;
this._lastFreezed = this._freezed;
}
return changed;
};
ParticleEmitter.prototype.updateDeltaTime = function () {
return ParticleEmitter.DELTA_TIME;
};
ParticleEmitter.prototype.updateEmitter = function () {
var emitter = this._emitter;
if (!emitter || this._destroyed) return;
if (this._data.quit) {
this.tryDestroy(true);
return;
}
if (this._stop && emitter.particleTotalCount() === 0) {
if (this._data.clear && emitter._emitterLife <= 0) {
this.tryDestroy(false);
}
return;
}
//update position
if (this._followScroll || this._updatePos) {
this.updatePosition();
if (this._destroyed) return;
}
if (this._freezed) {
return;
}
var dt = this.updateDeltaTime();
this._updateEmitter(dt);
};
ParticleEmitter.prototype._updateEmitter = function (dt) {
var emitter = this._emitter;
if (dt !== 0) {
emitter.update(dt);
}
if (!emitter.emit && emitter.particleTotalCount() === 0) {
if (!this.isEmitByOriginalTrigger()) {
if (this._restartCount > 0) {
this._restartCount -= 1;
if (this._restartCount <= 0) {
this._restartCount = 0;
this._emitter.emit = true;
this._stop = false;
this._data.stop = false;
}
} else if (this._data.repeat > 0) {
emitter.emit = false;
this._restartCount = this._data.repeat;
}
if (!emitter.emit && this._restartCount <= 0) {
if (this._data.clear) {
this.tryDestroy();
} else {
this._stop = this._data.stop = true;
}
}
} else {
if (this._data.clear) {
this.tryDestroy();
}
}
}
};
ParticleEmitter.prototype.changeImage = function (
image,
emitter = this._emitter
) {
image = this.imageName(image);
var bitmaps = this.bitmapsWithImage(image);
var length = bitmaps.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
bitmaps[i].addLoadListener(
ParticleEmitter.prototype._tryChangeImage.bind(
this,
image,
bitmaps,
emitter
)
);
}
};
ParticleEmitter.prototype._tryChangeImage = function (
image,
bitmaps,
emitter = this._emitter
) {
var length = bitmaps.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
if (!bitmaps[i].isReady()) return;
}
this._changeImage(image, bitmaps, emitter);
};
ParticleEmitter.prototype._changeImage = function (
image,
bitmaps,
emitter = this._emitter
) {
emitter.particleImages = this._texturesWithBitmaps(image, bitmaps);
};
ParticleEmitter.prototype.updatePosition = function () {
var scrolled = false;
if (this._followScroll) {
scrolled = this._updateFollowScroll();
}
if (this._isWeather) return;
if (this._updatePos) {
this._updatePosition(scrolled);
}
};
ParticleEmitter.prototype._updateFollowScroll = function () {
var scrolled = false;
var dispX = 0;
var dispY = 0;
if (this._isSceneMap) {
dispX = $gameMap._displayX * this._tileWidth;
dispY = $gameMap._displayY * this._tileHeight;
}
if (this._dispX !== dispX || this._dispY !== dispY) {
scrolled = true;
var dx = (dispX - this._dispX) * this._scrollXRate;
var dy = (dispY - this._dispY) * this._scrollYRate;
if (this._loopXThreshold > 0) {
if (dx > this._loopXThreshold) {
this._emitter.shiftParticlePosX($dataMap.width * this._tileWidth);
this._emitter.resetPositionTracking();
} else if (dx < -this._loopXThreshold) {
this._emitter.shiftParticlePosX(-$dataMap.width * this._tileWidth);
this._emitter.resetPositionTracking();
}
}
if (this._loopYThreshold) {
if (dy > this._loopYThreshold) {
this._emitter.shiftParticlePosY($dataMap.height * this._tileHeight);
this._emitter.resetPositionTracking();
} else if (dy < -this._loopYThreshold) {
this._emitter.shiftParticlePosY(-$dataMap.height * this._tileHeight);
this._emitter.resetPositionTracking();
}
}
this._container.x -= dx;
this._container.y -= dy;
this._dispX = dispX;
this._dispY = dispY;
if (this._isWeather) {
this._x += dx;
this._y += dy;
this._emitter.updateOwnerPos(this._x, this._y);
}
}
return scrolled;
};
ParticleEmitter.prototype._updatePosition = function (scrolled) {
var x, y;
var target = this._target;
switch (this._targetType) {
case TARGET_TYPES.displayObject:
target = Game_Particle.displayObjects[this._targetId];
if (!target || !target.parent) {
this.destroy();
return;
} else {
x = target.x;
y = target.y;
}
break;
case TARGET_TYPES.character:
if (!target) {
this.destroy();
return;
}
x = target.screenX();
y = target.screenY();
this.updateCharacterOutsideFreeze(x, y);
break;
case TARGET_TYPES.walk:
if (!target) {
this.destroy();
return;
}
if (!this._emitter.emit) return;
x = target.screenX();
y = target.screenY();
this.updateCharacterOutsideFreeze(x, y);
switch (target._direction) {
case 2:
y += walkOffset;
break;
case 4:
x -= walkOffset;
break;
case 6:
x += walkOffset;
break;
case 8:
y -= walkOffset;
break;
}
break;
case TARGET_TYPES.startdash:
if (!target) {
this.destroy();
return;
}
if (!this._emitter.emit) return;
x = target.screenX();
y = target.screenY();
this.updateCharacterOutsideFreeze(x, y);
switch (target._direction) {
case 2:
y += dashOffset;
break;
case 4:
x -= dashOffset;
break;
case 6:
x += dashOffset;
break;
case 8:
y -= dashOffset;
break;
}
break;
case TARGET_TYPES.attach:
if (!target) {
this.destroy();
return;
}
x = target.screenX();
y = target.screenY();
this._container.x = x;
this._container.y = y;
this.updateCharacterOutsideFreeze(x, y);
return;
case TARGET_TYPES.tilemap:
if (scrolled) {
x = Math.round($gameMap.adjustX(target.x) * this._tileWidth + 24);
y = Math.round($gameMap.adjustY(target.y) * this._tileHeight + 24);
} else {
x = this._x;
y = this._y;
}
break;
case TARGET_TYPES.actor:
if (this._data.ex.index !== $gameActors.actor(this._targetId).index()) {
this._data.ex.index = $gameActors.actor(this._targetId).index();
target = this._target = this._actorSpriteTarget(
$gameActors.actor(this._targetId)
);
}
case TARGET_TYPES.party:
case TARGET_TYPES.enemy:
if (!target) {
this.destroy();
return;
}
x = target.x;
y = target.y - this.battlerSpriteHeight(target) / 2;
break;
case TARGET_TYPES.attachActor:
if (this._data.ex.index !== $gameActors.actor(this._targetId).index()) {
this._data.ex.index = $gameActors.actor(this._targetId).index();
target = this._target = this._actorSpriteTarget(
$gameActors.actor(this._targetId)
);
}
case TARGET_TYPES.attachParty:
case TARGET_TYPES.attachEnemy:
if (!target) {
this.destroy();
return;
}
x = target.x;
y = target.y - this.battlerSpriteHeight(target) / 2;
this._container.x = x;
this._container.y = y;
return;
case TARGET_TYPES.picture:
case TARGET_TYPES.battlePicture:
target = $gameScreen.picture(target);
if (!target) {
this.destroy();
return;
}
x = target.x();
y = target.y();
break;
case TARGET_TYPES.skit:
case TARGET_TYPES.battleSkit:
target = $gameScreen.picture(
$gameScreen._particle.skitPictureId(target)
);
if (!target) {
this.destroy();
return;
}
x = target.x();
y = target.y();
break;
default:
if (this._target) {
this._container.x = target.x;
this._container.y = target.y;
}
}
if (scrolled || this._x !== x || this._y !== y) {
this._applyPosition(x, y);
}
};
ParticleEmitter.prototype._applyPosition = function (x, y) {
x += this._dispX;
y += this._dispY;
this._x = x;
this._y = y;
this._emitter.updateOwnerPos(x, y);
};
ParticleEmitter.prototype.battlerSpriteHeight = function (sprite) {
var targetSprite = sprite._mainSprite || sprite;
return targetSprite.height * targetSprite.scale.y;
};
ParticleEmitter.prototype.updateAnimations = function (data) {
var animations = data.animations;
var length = animations.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
this._updateAnimation(animations[i]);
}
};
ParticleEmitter.prototype._updateAnimation = function (animation) {
var coeff = animation.coeff;
var rate = coeff === 1 ? 1 / animation.d : 1 / Math.pow(animation.d, coeff);
this._updateParam(animation.key, animation.args, rate);
};
ParticleEmitter.prototype.updateParams = function (
data,
emitter = this._emitter
) {
var params = data.params;
var keys = Object.keys(params);
var length = keys.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var key = keys[i];
this._updateParam(key, params[key], 1, emitter);
}
};
ParticleEmitter.prototype._updateParam = function (
key,
args,
rate,
emitter = this._emitter
) {
rate = rate || 1;
emitter = emitter || this._emitter;
if (ParticleEmitter.NODE_PARAMS.contains(key)) {
this._updateNodeParam(emitter, key, args, rate);
} else {
this._updateNormalParam(emitter, key, args, rate);
}
};
ParticleEmitter.prototype._updateNodeParam = function (
emitter,
key,
args,
rate
) {
var list, node, data;
var isUpdate = rate === 1;
key = ParticleEmitter.NODE_KEY_CONVERT[key] || key;
if (isUpdate) {
list = [];
data = { list: list };
}
if (!isUpdate) {
node = emitter[key];
}
var isColor = key === "color" || key === "startColor";
var length = args.length;
var time;
for (var i = 0; i < length; i = (i + 1) | 0) {
var elems = args[i].split("@");
if (elems.length >= 2) {
time = Number(elems[1]);
} else if (i === 0) {
time = 0;
} else {
time = 1;
}
var value;
if (isColor) {
if (elems[0][0] === "#") {
value = PIXI.particles.ParticleUtils.hexToRGB(elems[0]);
} else {
value = ParticleEmitter.rgbWithStr(elems[0]);
}
if (!isUpdate) {
value.r = Math.floor(this.paramWithRate(value.r, node.value.r, rate));
value.g = Math.floor(this.paramWithRate(value.g, node.value.g, rate));
value.b = Math.floor(this.paramWithRate(value.g, node.value.g, rate));
}
} else {
if (isUpdate) {
value = Number(elems[0]);
} else {
value = this.paramWithRate(Number(elems[0]), node.value, rate);
}
}
if (isUpdate) {
list.push({
time: time,
value: value,
});
} else {
node.value = value;
node = node.next;
}
}
if (isUpdate) {
emitter[key] = PIXI.particles.PropertyNode.createList(data);
}
};
ParticleEmitter.prototype._updateNormalParam = function (
emitter,
key,
args,
rate
) {
var value = Number(args[0]);
var value2 = args[1] === undefined ? value : Number(args[1]);
switch (key) {
case "acceleration":
if (value || value2) {
emitter.acceleration.x = this.paramWithRate(
value || 0,
emitter.acceleration.x,
rate
);
emitter.acceleration.y = this.paramWithRate(
value2 || 0,
emitter.acceleration.y,
rate
);
// emitter.startSpeed.next = null;
// if(args[2]){
// emitter.maxSpeed = this.paramWithRate(args[2]||0,emitter.maxSpeed,rate);
// }else{
// emitter.maxSpeed = emitter.maxSpeed||NaN;
// }
} else {
emitter.acceleration.x = this.paramWithRate(
value || 0,
emitter.acceleration.x,
rate
);
emitter.acceleration.y = this.paramWithRate(
value2 || 0,
emitter.acceleration.y,
rate
);
}
break;
// case 'maxSpeed':
// if(args[0]==='NaN'){
// emitter.maxSpeed = NaN;
// }else{
// emitter.maxSpeed = this.paramWithRate(value,emitter.maxSpeed,rate);
// }
// break;
case "startRotation":
emitter.minStartRotation = this.paramWithRate(
value,
emitter.minStartRotation,
rate
);
emitter.maxStartRotation = this.paramWithRate(
value2,
emitter.maxStartRotation,
rate
);
break;
case "rotationSpeed":
emitter.minRotationSpeed = this.paramWithRate(
value,
emitter.minRotationSpeed,
rate
);
emitter.maxRotationSpeed = this.paramWithRate(
value2,
emitter.maxRotationSpeed,
rate
);
break;
case "imageOption":
emitter.angle = this.paramWithRate(value, emitter.angle, rate);
emitter.mirrorType = this.paramWithRate(
value2,
emitter.mirrorType,
rate
);
break;
case "lifetime":
emitter.minLifetime = this.paramWithRate(
value,
emitter.minLifetime,
rate
);
emitter.maxLifetime = this.paramWithRate(
value2,
emitter.maxLifetime,
rate
);
break;
case "blendMode":
if (isNaN(args[0])) {
emitter.particleBlendMode =
PIXI.BLEND_MODES[args[0].toUpperCase()] || 0;
} else {
emitter.particleBlendMode = value;
}
emitter.particleBlendMode = emitter.particleBlendMode.clamp(0, 10);
break;
case "rect": //x,y,w,h
if (this._targetType === TARGET_TYPES.region) {
return;
}
emitter.spawnType = "rect";
emitter._spawnFunc = emitter._spawnRect;
if (!emitter.spawnRect)
emitter.spawnRect = new PIXI.Rectangle(0, 0, 0, 0);
emitter.spawnRect.x = this.paramWithRate(
value,
emitter.spawnRect.x,
rate
);
emitter.spawnRect.y = this.paramWithRate(
value2,
emitter.spawnRect.y,
rate
);
emitter.spawnRect.width = this.paramWithRate(
Number(args[2]),
emitter.spawnRect.width,
rate
);
emitter.spawnRect.height = this.paramWithRate(
Number(args[3]),
emitter.spawnRect.height,
rate
);
// emitter.spawnRect = new PIXI.Rectangle(value,value2,Number(args[2]),Number(args[3]));
break;
case "circle": //x,y,r
if (this._targetType === TARGET_TYPES.region) {
return;
}
emitter.spawnType = "circle";
emitter._spawnFunc = emitter._spawnCircle;
if (!emitter.spawnCircle)
emitter.spawnCircle = new PIXI.Circle(0, 0, 1);
emitter.spawnCircle.x = this.paramWithRate(
value,
emitter.spawnCircle.x,
rate
);
emitter.spawnCircle.y = this.paramWithRate(
value2,
emitter.spawnCircle.y,
rate
);
emitter.spawnCircle.radius = this.paramWithRate(
Number(args[2]),
emitter.spawnCircle.radius,
rate
);
// emitter.spawnCircle = new PIXI.Circle(value, value2, Number(args[2]));
break;
case "ring": //x,y,r,minR
if (this._targetType === TARGET_TYPES.region) {
return;
}
emitter.spawnType = "ring";
emitter._spawnFunc = emitter._spawnRing;
if (!emitter.spawnCircle)
emitter.spawnCircle = new PIXI.Circle(0, 0, 1);
emitter.spawnCircle.x = this.paramWithRate(
value,
emitter.spawnCircle.x,
rate
);
emitter.spawnCircle.y = this.paramWithRate(
value2,
emitter.spawnCircle.y,
rate
);
emitter.spawnCircle.radius = this.paramWithRate(
Number(args[2]),
emitter.spawnCircle.radius,
rate
);
emitter.spawnCircle.minRadius = this.paramWithRate(
Number(args[3]),
emitter.spawnCircle.minRadius || 0,
rate
);
break;
case "burst":
if (this._targetType === TARGET_TYPES.region) {
return;
}
emitter.spawnType = "burst";
emitter._spawnFunc = emitter._spawnBurst;
emitter.particleSpacing = this.paramWithRate(
value,
emitter.particleSpacing,
rate
);
emitter.angleStart = this.paramWithRate(
value2,
emitter.angleStart,
rate
);
emitter.bdt = this.paramWithRate(
Number(args[2] || 0),
emitter.bdt,
rate
);
emitter.brt = this.paramWithRate(
Number(args[3] || 0),
emitter.brt,
rate
);
emitter.br = this.paramWithRate(Number(args[4] || 0), emitter.br, rate);
emitter.bdr = this.paramWithRate(
Number(args[5] || 0),
emitter.bdr,
rate
);
emitter.bdx = this.paramWithRate(
Number(args[6] || 0),
emitter.bdx,
rate
);
emitter.bdy = this.paramWithRate(
Number(args[7] || 0),
emitter.bdy,
rate
);
break;
case "point":
if (this._targetType === TARGET_TYPES.region) {
return;
}
emitter.spawnType = "point";
emitter._spawnFunc = emitter._spawnPoint;
case "position":
case "pos":
case "spawnPos":
if (args[0] !== undefined) {
emitter.spawnPos.x = this.paramWithRate(
value,
emitter.spawnPos.x,
rate
);
emitter.spawnPos.y = this.paramWithRate(
value2,
emitter.spawnPos.y,
rate
);
}
break;
case "fluctuation":
emitter.fluc = this.paramWithRate(value, emitter.fluc, rate);
emitter.flucSense = this.paramWithRate(value2, emitter.flucSense, rate);
break;
case "minimumSpeedMultiplier":
emitter.minimumSpeedMultiplier = value;
break;
case "minimumScaleMultiplier":
emitter.minimumScaleMultiplier = value;
break;
case "rotationAcceleration":
emitter.rotationAcceleration = this.paramWithRate(
value,
emitter.rotationAcceleration,
rate
);
break;
case "particlesPerWave":
if (this._targetType === TARGET_TYPES.region) {
this._data.ex.particlesPerWave =
this.paramWithRate(value, emitter.particlesPerWave, rate) || 1;
this.updateForRegion(true);
} else {
emitter.setParticlesPerWaveToApplyCapacity(
Math.round(
this.paramWithRate(value, emitter.particlesPerWave, rate)
) || 1
);
}
break;
case "frequency":
if (this._targetType === TARGET_TYPES.region) {
this._data.ex.frequency = this.paramWithRate(
value,
emitter.frequency,
rate
);
this.updateForRegion(true);
} else if (this._targetType === TARGET_TYPES.walk) {
this._data.ex.frequency = this.paramWithRate(
value,
emitter.frequency,
rate
);
} else {
emitter.setFrequencyToApplyCapacity(
this.paramWithRate(value, emitter.frequency, rate)
);
}
break;
case "spawnChance":
emitter.spawnChance =
this.paramWithRate(value, emitter.spawnChance, rate) || 1;
break;
case "emitterLifetime":
emitter.emitterLifetime = this.paramWithRate(
value,
emitter.emitterLifetime,
rate
);
emitter._emitterLife = emitter.emitterLifetime;
break;
case "maxParticles":
if (this._targetType === TARGET_TYPES.region) {
this._data.ex.maxParticles = this.paramWithRate(
value,
emitter.maxParticles,
rate
);
this.updateForRegion(true);
} else {
emitter.setMaxParticlesToApplyCapacity(
Math.round(this.paramWithRate(value, emitter.maxParticles, rate))
);
}
break;
case "colorMode":
emitter.colorDistribution = value !== 0;
break;
default:
console.log("no param with key:", key, args);
return;
}
};
/* loop
===================================*/
ParticleEmitter.prototype.loopParticles = function (
loopX,
loopY,
emitter = this._emitter
) {
var p = emitter._activeParticlesFirst;
var width = Graphics.width + 2 * loopX;
var height = Graphics.height + 2 * loopY;
while (p) {
var x = p.x;
var node = p.parent;
while (node) {
x += node.x;
node = node.parent;
}
var pw_half = p.width / 2;
while (x + pw_half < -loopX) {
x += width + pw_half;
p.x += width + pw_half;
}
while (x - pw_half > Graphics.width + loopX) {
x -= width + pw_half;
p.x -= width + pw_half;
}
var y = p.y;
node = p.parent;
while (node) {
y += node.y;
node = node.parent;
}
var ph_half = p.height / 2;
while (y + ph_half < -loopY) {
y += height + pw_half;
p.y += height + pw_half;
}
while (y - ph_half > Graphics.height + loopY) {
y -= height + pw_half;
p.y -= height + pw_half;
}
p = p.next;
}
};
/* each targets
===================================*/
ParticleEmitter.prototype.updateCharacterOutsideFreeze = function (x, y) {
if (this._data.stop) {
this._freezed = false;
return;
}
var margin = this._characterTargetMargin;
if (margin < 0) return;
if (
x < -margin ||
x > Graphics.width + margin ||
y < -margin ||
y > Graphics.height + margin
) {
this._freezed = true;
} else {
this._freezed = false;
}
this._container.visible = !this._freezed;
};
ParticleEmitter.prototype.updateForStartDash = function () {
var target = this._target;
if (!target) return false;
var dashing = target.isDashing() && target.isMoving();
var emit =
dashing &&
((!this._data.ex.dashing && !this._data.ex.lastDashing) ||
this._data.ex.dir !== target._direction);
this._data.ex.lastDashing = this._data.ex.dashing;
this._data.ex.dashing = dashing;
this._data.ex.dir = target._direction;
if (emit !== this._emitter.emit) {
this._emitter.resetPositionTracking();
this._emitter.emit = emit;
return true;
} else {
return false;
}
};
ParticleEmitter.prototype.updateForWalk = function () {
var target = this._target;
if (!target) return false;
var emit;
if (target.isMoving()) {
emit = true;
this._data.ex.lastMoving = true;
} else {
emit = this._data.ex.lastMoving || false;
this._data.ex.lastMoving = false;
}
if (emit) {
if (this._data.ex && this._data.ex.regions) {
var regionId = $gameMap.regionId(
Math.round(target._realX),
Math.round(target._realY)
);
if (!this._data.ex.regions.contains(regionId)) {
emit = false;
}
}
}
if (emit) {
var dashing = target.isDashing() && target.isMoving();
if (dashing !== this._data.ex.dashing) {
var freq = this._data.ex.frequency * (dashing ? 1 : 2);
this._emitter.setFrequencyToApplyCapacity(freq);
this._data.ex.dashing = dashing;
}
}
if (emit !== this._emitter.emit) {
this._emitter.resetPositionTracking();
this._emitter.emit = emit;
return true;
} else {
return false;
}
};
ParticleEmitter.prototype.updateForRegion = function (force) {
var ex = this._data.ex;
var sx = Math.round($gameMap._displayX);
var sy = Math.round($gameMap._displayY);
if (!force && ex.lastX === sx && ex.lastY === sy) return false;
ex.lastX = sx;
ex.lastY = sy;
var x0 = sx - regionMargin;
var y0 = sy - regionMargin;
var x1 = sx + Graphics.width / this._tileWidth + regionMargin;
var y1 = sy + Graphics.height / this._tileHeight + regionMargin;
var target = this._target;
target.length = 0;
var allPos = ex.allPos;
var length = allPos.length;
for (var i = 0; i < length; i = (i + 2) | 0) {
var x = allPos[i];
if (x < x0 || x > x1) {
if (this._loopXThreshold > 0) {
x += $dataMap.width;
if (x < x0 || x > x1) continue;
} else {
continue;
}
}
var y = allPos[i + 1];
if (y < y0 || y > y1) {
if (this._loopYThreshold > 0) {
y += $dataMap.height;
if (y < y0 || y > y1) continue;
} else {
continue;
}
}
target.push(x);
target.push(y);
}
length = target.length / 2;
var emit = length > 0;
if (this._emitter.emit !== emit) {
this._emitter.emit = emit;
}
if (emit) {
this._emitter.setFrequencyToApplyCapacity(ex.frequency / length);
this._emitter.setMaxParticlesToApplyCapacity(ex.maxParticles * length);
this._emitter.setParticlesPerWaveToApplyCapacity(ex.particlesPerWave);
}
return true;
};
/* accessor
===================================*/
ParticleEmitter.prototype.container = function () {
return this._container;
};
/* helper
===================================*/
ParticleEmitter.TRIGGER_TYPE_TARGETS = [
TARGET_TYPES.walk,
TARGET_TYPES.startdash,
TARGET_TYPES.click,
TARGET_TYPES.drag,
TARGET_TYPES.region,
];
ParticleEmitter.prototype.isEmitByOriginalTrigger = function () {
return ParticleEmitter.TRIGGER_TYPE_TARGETS.contains(this._targetType);
};
ParticleEmitter.prototype.imageName = function (image) {
return image || this._config.image || defaultImage;
};
/* filters
===================================*/
if (PIXI.filters) {
var FILTER = {
classWithType: {
blur: PIXI.filters.BlurFilter,
glow: PIXI.filters.GlowFilter,
rgbsplit: PIXI.filters.RGBSplitFilter,
pixelate: PIXI.filters.PixelateFilter,
displacement: PIXI.filters.DisplacementFilter,
},
applyArgs: {
blur: function (filter, args) {
filter.blur = supplementDefNum(filter.blur, args[0]);
filter.quality = supplementDefNum(filter.blur, args[1]);
},
glow: function (filter, args) {
filter.innerStrength = supplementDefNum(
filter.innerStrength,
args[0]
);
filter.outerStrength = supplementDefNum(
filter.outerStrength,
args[1]
);
if (filter.distance !== undefined) {
filter.distance = supplementDefNum(filter.distance, args[2]);
}
if (args[5] !== undefined) {
var r = Number(args[3]).toString(16);
var g = Number(args[4]).toString(16);
var b = Number(args[5]).toString(16);
if (r.length === 1) r = "0" + r;
if (g.length === 1) g = "0" + g;
if (b.length === 1) b = "0" + b;
var color = "0x" + r + g + b;
filter.color = Number(color);
}
},
rgbsplit: function (filter, args) {
filter.red = [
supplementDefNum(filter.red[0], args[0]),
supplementDefNum(filter.red[1], args[1]),
];
filter.green = [
supplementDefNum(filter.green[0], args[2]),
supplementDefNum(filter.green[1], args[3]),
];
filter.blue = [
supplementDefNum(filter.blue[0], args[4]),
supplementDefNum(filter.blue[1], args[5]),
];
},
pixelate: function (filter, args) {
filter.size.x = supplementDefNum(filter.size.x, args[0]);
filter.size.y = supplementDefNum(filter.size.y, args[1]);
},
displacement: function (filter, args) {
filter.scale.x = supplementDefNum(filter.scale.x, args[0]);
filter.scale.y = supplementDefNum(filter.scale.y, args[1]);
filter.maskSprite.texture.baseTexture.wrapMode =
PIXI.WRAP_MODES.REPEAT;
},
},
};
ParticleEmitter.prototype.updateFilters = function (data) {
this._fid = data.fid;
var filterData = data.filters;
var keys = Object.keys(filterData);
var container = this._container;
//remove erased filter
var filter;
var filters = container.filters || [];
var currentKeys = this._filterKeys;
var filterArgs = this._filterArgs;
var length = currentKeys.length;
for (var i = length - 1; i >= 0; i = (i - 1) | 0) {
var key = currentKeys[i];
if (!keys.contains(key)) {
currentKeys.splice(i, 1);
delete this._filterArgs[key];
filter = this.filterWithTypeInFilters(filters, key);
if (filter) {
filters.splice(filters.indexOf(filter));
}
}
}
//create & update filter
var length = keys.length;
for (var i = 0; i < length; i = (i + 1) | 0) {
var key = keys[i];
var args = filterData[key];
var updateArgs = false;
if (currentKeys.contains(key)) {
updateArgs = !args.equals(filterArgs[key]);
filter = this.filterWithTypeInFilters(filters, key);
} else {
var filterClass = this.filterClassWithType(key);
if (filterClass === PIXI.filters.DisplacementFilter) {
var bitmap = ImageManager.loadPicture("displacement");
var sprite = new Sprite(bitmap);
filter = new filterClass(sprite);
filter.enabled = false;
bitmap.addLoadListener(
function (filter) {
filter.enabled = true;
}.bind(this, filter)
);
} else {
filter = new filterClass();
}
filters.push(filter);
currentKeys.push(key);
updateArgs = true;
// filter.autoFit =false ;
}
if (updateArgs) {
filterArgs[key] = args;
this.applyFilterArgs(key, filter, args);
}
}
container.filters = filters;
};
ParticleEmitter.prototype.applyFilterArgs = function (type, filter, args) {
FILTER.applyArgs[type](filter, args);
};
ParticleEmitter.prototype.filterClassWithType = function (type) {
return FILTER.classWithType[type];
};
ParticleEmitter.prototype.filterWithTypeInFilters = function (
filters,
type
) {
var filterClass = this.filterClassWithType(type);
var filterLen = filters.length;
for (var i = 0; i < filterLen; i = (i + 1) | 0) {
var filter = filters[i];
if (filter instanceof filterClass) {
return filter;
}
}
return null;
};
} else {
ParticleEmitter.prototype.updateFilters = function (data) {
this._fid = data.fid;
};
}
//=============================================================================
// TRP_Particle
//=============================================================================
var TRP_Emitter = /** @class */ (function (_super) {
__extends(TRP_Emitter, _super);
var utils = PIXI.particles.ParticleUtils;
function TRP_Emitter(particleParent, particleImages, config) {
var _this =
_super.call(this, particleParent, particleImages, config) || this;
_this.fluc = _this.fluc || 0;
_this.flucSense = _this.flucSense || 0;
_this.colorDistribution = _this.colorDistribution || false;
_this.mirrorType = _this.mirrorType || 0;
_this.angle = _this.angle || 0;
_this.bdt = _this.bdt || 0;
_this.brt = _this.bdr || 0;
_this.br = _this.br || 0;
_this.bdr = _this.bdr || 0;
_this.bdx = _this.bdx || 0;
_this.bdy = _this.bdy || 0;
_this._capacityRate = _this._capacityRate || 1;
_this._capacityTarget = _this._capacityTarget || 0;
_this._originalFrequency = _this._originalFrequency || 0;
_this._originalMaxParticles = _this._originalMaxParticles || 0;
_this._originalParticlesPerWave = _this._originalParticlesPerWave || 0;
_this._tileWidth = $gameMap
? $gameMap.tileWidth()
: $dataSystem.tileSize || 48;
_this._tileHeight = $gameMap
? $gameMap.tileHeight()
: $dataSystem.tileSize || 48;
return _this;
}
TRP_Emitter.prototype.particleTotalCount = function () {
return this.particleCount;
};
TRP_Emitter.prototype.init = function (art, config) {
_super.prototype.init.call(this, art, config);
if (!noRewriteFunctions) {
if (config.speed) {
this.startSpeed = PIXI.particles.PropertyNode.createList(
config.speed
);
}
}
if (config.fluctuation) {
this.fluc = config.fluctuation.max || 0;
this.flucSense = config.fluctuation.sensitivity || 0;
} else {
this.fluc = 0;
this.flucSense = 0;
}
this.colorDistribution =
config.colorMode !== undefined && config.colorMode !== 0;
if (config.angle !== undefined) {
this.angle = config.angle || 0;
} else {
this.angle = config.angleType === 1 ? -1 : 0;
}
this.mirrorType = config.mirrorType || 0;
this.bdt = config.bdt || 0;
this.brt = config.brt || 0;
this.br = config.br || 0;
this.bdr = config.bdr || 0;
this.bdx = config.bdx || 0;
this.bdy = config.bdy || 0;
this._originalFrequency = this._frequency;
this._originalMaxParticles = this.maxParticles;
this._originalParticlesPerWave = this.particlesPerWave || 1;
this._capacityTarget = this.realParticleCapacity();
};
Object.defineProperty(TRP_Emitter.prototype, "capacityRate", {
get: function () {
return this._capacityRate;
},
set: function (value) {
if (this._capacityRate === value) return;
if (value >= 1) {
this._capacityRate = value;
this.didResetCapacityLimit();
} else {
this._capacityTarget = this.particleCapacity() * value;
this._capacityRate = value;
this.applyCapacityLimit();
}
},
configurable: true,
});
TRP_Emitter.prototype.didResetCapacityLimit = function () {
this.frequency = this._originalFrequency;
this.maxParticles = this._originalMaxParticles;
this.particlesPerWave = this._originalParticlesPerWave || 1;
};
TRP_Emitter.prototype.setFrequencyToApplyCapacity = function (value) {
this._originalFrequency = value;
if (this._capacityRate < 1) {
this.applyCapacityLimit();
} else {
this.frequency = value;
}
};
TRP_Emitter.prototype.setMaxParticlesToApplyCapacity = function (value) {
this._originalMaxParticles = value;
if (this._capacityRate < 1) {
this.applyCapacityLimit();
} else {
this.maxParticles = value;
}
};
TRP_Emitter.prototype.setParticlesPerWaveToApplyCapacity = function (
value
) {
this._originalParticlesPerWave = value || 1;
if (this._capacityRate < 1) {
this.applyCapacityLimit();
} else {
this.particlesPerWave = value || 1;
}
};
TRP_Emitter.prototype.applyCapacityLimit = function () {
var target = this._capacityTarget;
var naturalCapacity = this.naturalCapacity(
this._originalFrequency,
this._originalParticlesPerWave
);
this.maxParticles = target;
if (this.particlesPerWave > 1) {
this.particlesPerWave =
Math.ceil(
Math.min(
this._originalParticlesPerWave,
this._originalParticlesPerWave * (target / naturalCapacity)
)
) || 1;
naturalCapacity = this.naturalCapacity(
this._originalFrequency,
this.particlesPerWave
);
}
this.frequency = Math.max(
this._originalFrequency,
this._originalFrequency / (target / naturalCapacity)
);
};
TRP_Emitter.prototype.particleCapacity = function () {
return Math.min(
this._originalMaxParticles,
this.naturalCapacity(
this._originalFrequency,
this._originalParticlesPerWave
)
);
};
TRP_Emitter.prototype.realParticleCapacity = function () {
return Math.min(
this.maxParticles,
this.naturalCapacity(this._frequency, this.particlesPerWave || 1)
);
};
TRP_Emitter.prototype.naturalCapacity = function (
frequency,
particlesPerWave
) {
var emitterLife =
this._emitterLife < 0 ? this.emitterLifetime : this._emitterLife;
if (emitterLife < 0) {
return (
(((this.minLifetime + this.maxLifetime) / 2) *
this.spawnChance *
particlesPerWave) /
frequency
);
} else {
return (
(Math.min(emitterLife, (this.minLifetime + this.maxLifetime) / 2) *
this.spawnChance *
particlesPerWave) /
frequency
);
}
};
TRP_Emitter.prototype.applyAdditionalProperties = function (p) {
_super.prototype.applyAdditionalProperties.call(this, p);
if (this.minimumSpeedMultiplier === 1) {
p.speedMultiplier = 1;
}
if (this.minimumScaleMultiplier === 1) {
p.scaleMultiplier = 1;
}
p.fluc = this.fluc;
p.flucSense = this.flucSense;
p.colorDistribution = this.colorDistribution;
p.wait = 0;
p.mirror =
this.mirrorType === 0
? false
: this.mirrorType === 1
? true
: Math.random() <= 0.5;
p._angle = this.angle;
};
var helperPoint = new PIXI.Point();
TRP_Emitter.prototype._spawnRegion = function (
validPositions,
p,
emitPosX,
emitPosY
) {
if (validPositions.length === 0) {
return;
}
var rand = Math.randomInt(validPositions.length / 2) * 2;
if (this.minStartRotation == this.maxStartRotation) {
p.rotation = this.minStartRotation + this.rotation;
} else {
p.rotation =
Math.random() * (this.maxStartRotation - this.minStartRotation) +
this.minStartRotation +
this.rotation;
}
//place the particle at a random point in the rectangle
helperPoint.x =
validPositions[rand] * this._tileWidth +
Math.random() * this._tileWidth;
helperPoint.y =
validPositions[rand + 1] * this._tileHeight +
Math.random() * this._tileHeight;
if (this.rotation !== 0) {
utils.rotatePoint(this.rotation, helperPoint);
}
p.position.x = emitPosX + helperPoint.x;
p.position.y = emitPosY + helperPoint.y;
};
TRP_Emitter.prototype.shiftParticlePosX = function (value) {
var particle = this._activeParticlesFirst;
while (!!particle) {
particle.x += value;
particle = particle.next;
}
};
TRP_Emitter.prototype.shiftParticlePosY = function (value) {
var particle = this._activeParticlesFirst;
while (!!particle) {
particle.y += value;
particle = particle.next;
}
};
TRP_Emitter.prototype._spawnCircle = function (p, emitPosX, emitPosY) {
//set the initial rotation/direction of the particle based on starting
//particle angle and rotation of emitter
if (this.minStartRotation == this.maxStartRotation)
p.rotation = this.minStartRotation + this.rotation;
else
p.rotation =
Math.random() * (this.maxStartRotation - this.minStartRotation) +
this.minStartRotation +
this.rotation;
//place the particle at a random radius in the circle
helperPoint.x =
(1 - Math.random() * Math.random()) * this.spawnCircle.radius;
helperPoint.y = 0;
//rotate the point to a random angle in the circle
utils.rotatePoint(Math.random() * 360, helperPoint);
//offset by the circle's center
helperPoint.x += this.spawnCircle.x;
helperPoint.y += this.spawnCircle.y;
//rotate the point by the emitter's rotation
if (this.rotation !== 0) utils.rotatePoint(this.rotation, helperPoint);
//set the position, offset by the emitter's position
p.position.x = emitPosX + helperPoint.x;
p.position.y = emitPosY + helperPoint.y;
};
TRP_Emitter.prototype._spawnBurst = function (p, emitPosX, emitPosY, i) {
//set the initial rotation/direction of the particle based on spawn
//angle and rotation of emitter
var angle, r;
if (this.particleSpacing === 0) {
p.rotation = Math.random() * 360;
r = this.br + this.bdr * i;
} else {
if (this.bdr < 0) {
p.rotation = this.particleSpacing * i;
r = this.br + -1 * Math.floor(p.rotation / 360) * this.bdr;
p.rotation += this.angleStart + this.rotation;
} else {
p.rotation =
this.angleStart + this.particleSpacing * i + this.rotation;
r = this.br + this.bdr * i;
}
}
//drop the particle at the emitter's position
p.position.x = emitPosX;
p.position.y = emitPosY;
p.x += r * Math.cos((p.rotation * Math.PI) / 180) + this.bdx * i;
p.y += r * Math.sin((p.rotation * Math.PI) / 180) + this.bdy * i;
if (this.brt === 1) {
if (this.minStartRotation == this.maxStartRotation)
p.rotation = this.minStartRotation + this.rotation;
else
p.rotation =
Math.random() * (this.maxStartRotation - this.minStartRotation) +
this.minStartRotation +
this.rotation;
} else if (this.brt === 2) {
if (this.minStartRotation == this.maxStartRotation)
p.rotation += this.minStartRotation + this.rotation;
else
p.rotation +=
Math.random() * (this.maxStartRotation - this.minStartRotation) +
this.minStartRotation +
this.rotation;
}
if (this.bdt && i > 0) {
p.wait = this.bdt * i;
}
};
return TRP_Emitter;
})(PIXI.particles.Emitter);
ParticleEmitter.TRP_Emitter = TRP_Emitter;
var TRP_Particle = /** @class */ (function (_super) {
__extends(TRP_Particle, _super);
var utils = PIXI.particles.ParticleUtils;
function TRP_Particle(emitter) {
var _this = _super.call(this, emitter) || this;
_this.colorDistribution = false;
_this.aVelocity = new PIXI.Point(0, 0);
//inertiaVelocity
_this.iVelocity = new PIXI.Point(0, 0);
_this._doInertia = false;
_this.fluc = 0;
_this.flucSense = 0;
_this._doFluctuation = false;
_this._flucSpeed = 0;
_this.rotatePoint = utils.rotatePoint;
_this.mirror = false;
_this._angle = 0;
_this._doWait = false;
_this.wait = 0;
return _this;
}
if (noRewriteFunctions) {
TRP_Particle.prototype.init = function () {
_super.prototype.init.call(this);
this.aVelocity.x = 0;
this.aVelocity.y = 0;
this.iVelocity.x = 0;
this.iVelocity.y = 0;
this._doWait = this.wait > 0;
if (this._doWait) {
this.alpha = 0;
}
this._doFluctuation = this.fluc > 0;
this._flucSpeed = 0;
if (this.colorDistribution) {
this._doColor = false;
if (this.colorList.next) {
this.tint = this.colorList.interpolate(Math.random());
}
}
if (this._angle < 0) {
this.rotation = Math.random() * (Math.PI * 2);
} else if (this._angle > 0) {
this.rotation += this._angle * utils.DEG_TO_RADS;
}
this._doInertia = this.iVelocity.x !== 0 || this.iVelocity.y !== 0;
};
TRP_Particle.prototype.update = function (delta) {
if (this._doWait) {
this.wait -= delta;
if (this.wait > 0) {
return -1;
}
this._doWait = false;
this.wait = 0;
}
var lerp = _super.prototype.update.call(this, delta);
if (this._doFluctuation) {
this._flucSpeed =
this.flucSense * (-1 + 2 * Math.random()) * this.fluc +
(1 - this.flucSense) * (this._flucSpeed || 0);
this.rotatePoint(this._flucSpeed, this.velocity);
}
if (this._doInertia) {
this.position.x += delta * this.iVelocity.x;
this.position.y += delta * this.iVelocity.y;
}
return lerp;
};
} else {
TRP_Particle.prototype.init = function () {
//reset the age
this.age = 0;
//set up the velocity based on the start speed and rotation
this.velocity.x = this.speedList.current.value * this.speedMultiplier;
this.velocity.y = 0;
this.aVelocity.x = 0;
this.aVelocity.y = 0;
this.iVelocity.x = 0;
this.iVelocity.y = 0;
utils.rotatePoint(this.rotation, this.velocity);
if (this._angle < 0) {
this.rotation = Math.random() * (Math.PI * 2);
} else if (this.noRotation) {
this.rotation = 0;
} else {
if (this._angle > 0) {
this.rotation += this._angle;
}
//convert rotation to Radians from Degrees
this.rotation *= utils.DEG_TO_RADS;
}
//convert rotation speed to Radians from Degrees
this.rotationSpeed *= utils.DEG_TO_RADS;
this.rotationAcceleration *= utils.DEG_TO_RADS;
//set alpha to inital alpha
this.alpha = this.alphaList.current.value;
//set scale to initial scale
this.scale.x = this.scale.y =
this.scaleList.current.value * this.scaleMultiplier;
if (this.mirror) this.scale.x *= -1;
//figure out what we need to interpolate
this._doAlpha = !!this.alphaList.current.next;
this._doSpeed = !!this.speedList.current.next;
this._doScale = !!this.scaleList.current.next;
this._doColor =
!this.colorDistribution && !!this.colorList.current.next;
this._doAcceleration =
this.acceleration.x !== 0 || this.acceleration.y !== 0;
//_doNormalMovement can be cancelled by subclasses
this._doNormalMovement =
this._doSpeed ||
this.speedList.current.value !== 0 ||
this._doAcceleration;
//save our lerp helper
this._oneOverLife = 1 / this.maxLife;
//set the inital color
if (this.colorDistribution && this.colorList.next) {
this.tint = this.colorList.interpolate(Math.random());
} else {
var color = this.colorList.current.value;
this.tint = utils.combineRGBComponents(color.r, color.g, color.b);
}
this._doWait = this.wait > 0;
if (this._doWait) {
this.alpha = 0;
}
this._doFluctuation = this.fluc > 0;
this._flucSpeed = 0;
this._doInertia = this.iVelocity.x !== 0 || this.iVelocity.y !== 0;
//ensure visibility
this.visible = true;
};
TRP_Particle.prototype.update = function (delta) {
if (this._doWait) {
this.wait -= delta;
if (this.wait > 0) return -1;
this._doWait = false;
}
//increase age
this.age += delta;
//recycle particle if it is too old
if (this.age >= this.maxLife || this.age < 0) {
this.kill();
return -1;
}
//determine our interpolation value
var lerp = this.age * this._oneOverLife; //lifetime / maxLife;
if (this.ease) {
if (this.ease.length == 4) {
//the t, b, c, d parameters that some tween libraries use
//(time, initial value, end value, duration)
lerp = this.ease(lerp, 0, 1, 1);
} else {
//the simplified version that we like that takes
//one parameter, time from 0-1. TweenJS eases provide this usage.
lerp = this.ease(lerp);
}
}
//interpolate alpha
if (this._doAlpha) {
this.alpha = this.alphaList.interpolate(lerp);
}
//interpolate scale
if (this._doScale) {
var scale = this.scaleList.interpolate(lerp) * this.scaleMultiplier;
this.scale.x = this.scale.y = scale;
if (this.mirror) this.scale.x *= -1;
}
//handle movement
if (this._doNormalMovement) {
//interpolate speed
var oldVX = void 0;
var oldVY = void 0;
if (this._doAcceleration) {
oldVX = this.velocity.x;
oldVY = this.velocity.y;
}
if (this._doSpeed) {
var speed = this.speedList.interpolate(lerp) * this.speedMultiplier;
utils.normalize(this.velocity);
utils.scaleBy(this.velocity, speed);
}
if (this._doAcceleration) {
if (this._doSpeed) {
this.aVelocity.x += this.acceleration.x * delta;
this.aVelocity.y += this.acceleration.y * delta;
this.velocity.x += this.aVelocity.x;
this.velocity.y += this.aVelocity.y;
} else {
this.velocity.x += this.acceleration.x * delta;
this.velocity.y += this.acceleration.y * delta;
}
if (this._doFluctuation) {
this._flucSpeed =
this.flucSense * (-1 + 2 * Math.random()) * this.fluc +
(1 - this.flucSense) * (this._flucSpeed || 0);
this.rotatePoint(this._flucSpeed, this.velocity);
}
this.position.x += ((oldVX + this.velocity.x) / 2) * delta;
this.position.y += ((oldVY + this.velocity.y) / 2) * delta;
} else {
if (this._doFluctuation) {
this._flucSpeed =
this.flucSense * (-1 + 2 * Math.random()) * this.fluc +
(1 - this.flucSense) * (this._flucSpeed || 0);
this.rotatePoint(this._flucSpeed, this.velocity);
}
this.position.x += this.velocity.x * delta;
this.position.y += this.velocity.y * delta;
}
}
//inertia movement
if (this._doInertia) {
this.position.x += delta * this.iVelocity.x;
this.position.y += delta * this.iVelocity.y;
}
//interpolate color
if (this._doColor) {
this.tint = this.colorList.interpolate(lerp);
}
//update rotation
if (this.rotationAcceleration !== 0) {
var newRotationSpeed =
this.rotationSpeed + this.rotationAcceleration * delta;
this.rotation +=
((this.rotationSpeed + newRotationSpeed) / 2) * delta;
this.rotationSpeed = newRotationSpeed;
} else if (this.rotationSpeed !== 0) {
this.rotation += this.rotationSpeed * delta;
} else if (this._doAcceleration && !this.noRotation && !this._angle) {
this.rotation = Math.atan2(this.velocity.y, this.velocity.x); // + Math.PI / 2;
}
return lerp;
};
}
return TRP_Particle;
})(PIXI.particles.Particle);
ParticleEmitter.TRP_Particle = TRP_Particle;
/* test command
===================================*/
//PRAGMA: testCommands
Game_Interpreter.prototype.trpParticleTest = function () {
var eventId = this.isOnCurrentMap() ? this._eventId : 0;
var list = [
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{
code: 401,
indent: 0,
parameters: ["\\>パーティクルプラグインの基本動作のテストを行います。"],
},
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{
code: 401,
indent: 0,
parameters: ["\\>\\C[14]1.パーティクルの再生(寿命あり)\\C[0]"],
},
{
code: 401,
indent: 0,
parameters: ["\\>└particle play ID this 設定名"],
},
{
code: 356,
indent: 0,
parameters: ["particle play fuss_startdash this"],
},
{ code: 230, indent: 0, parameters: [45] },
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{
code: 401,
indent: 0,
parameters: ["\\>\\C[14]2.パーティクルの表示(寿命なし)\\C[0]"],
},
{ code: 401, indent: 0, parameters: ["\\>└particle set ID this 設定名"] },
{ code: 356, indent: 0, parameters: ["particle set particle this"] },
{ code: 230, indent: 0, parameters: [45] },
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{
code: 401,
indent: 0,
parameters: ["\\>\\C[14]3.パーティクルの停止と再開\\C[0]"],
},
{ code: 401, indent: 0, parameters: ["\\>└particle off ID"] },
{ code: 401, indent: 0, parameters: ["\\>└particle on ID"] },
{ code: 356, indent: 0, parameters: ["particle off particle this"] },
{ code: 230, indent: 0, parameters: [45] },
{ code: 356, indent: 0, parameters: ["particle on particle this"] },
{ code: 230, indent: 0, parameters: [30] },
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{
code: 401,
indent: 0,
parameters: ["\\>\\C[14]4.パラメータの変更\\C[0]"],
},
{
code: 401,
indent: 0,
parameters: ["\\>└particle update ID パラメータ名 値..."],
},
{
code: 356,
indent: 0,
parameters: [
"particle update particle color #ffffff #ffff00@0.5 #ff0000",
],
},
{
code: 356,
indent: 0,
parameters: ["particle update particle blendMode 0"],
},
{ code: 230, indent: 0, parameters: [30] },
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{
code: 401,
indent: 0,
parameters: ["\\>\\C[14]5.パラメータを徐々に変化\\C[0]"],
},
{
code: 401,
indent: 0,
parameters: ["\\>└particle animate ID 時間 パラメータ名 値..."],
},
{
code: 356,
indent: 0,
parameters: ["particle animate particle 30 pos -200 -200"],
},
{ code: 230, indent: 0, parameters: [60] },
{
code: 356,
indent: 0,
parameters: ["particle animate particle 30 speed 100 0"],
},
{ code: 230, indent: 0, parameters: [30] },
{
code: 356,
indent: 0,
parameters: ["particle animate particle 30 pos 0 0"],
},
{
code: 356,
indent: 0,
parameters: ["particle animate particle 30 speed 400 0"],
},
{ code: 230, indent: 0, parameters: [30] },
{ code: 356, indent: 0, parameters: ["particle off particle"] },
{ code: 230, indent: 0, parameters: [30] },
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{
code: 401,
indent: 0,
parameters: ["\\>\\C[14]6.強制的に時間を進める\\C[0]"],
},
{
code: 401,
indent: 0,
parameters: ["\\>└particle exceed ID フレーム数"],
},
{ code: 356, indent: 0, parameters: ["particle on particle"] },
{ code: 356, indent: 0, parameters: ["particle exceed particle 10"] },
{ code: 230, indent: 0, parameters: [30] },
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{
code: 401,
indent: 0,
parameters: ["\\>\\C[14]7.停止してクリア\\C[0]"],
},
{ code: 401, indent: 0, parameters: ["\\>└particle clear ID"] },
{ code: 356, indent: 0, parameters: ["particle clear particle"] },
{ code: 230, indent: 0, parameters: [30] },
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{ code: 401, indent: 0, parameters: ["\\>\\C[14]8.対象:screen\\C[0]"] },
{ code: 401, indent: 0, parameters: ["\\>└画面上で固定表示"] },
{ code: 356, indent: 0, parameters: ["particle set thunder_w screen"] },
{ code: 356, indent: 0, parameters: ["particle set thunder_w2 screen"] },
{ code: 230, indent: 0, parameters: [60] },
{ code: 356, indent: 0, parameters: ["particle clear thunder_w"] },
{ code: 356, indent: 0, parameters: ["particle clear thunder_w2"] },
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{ code: 401, indent: 0, parameters: ["\\>\\C[14]9.対象:weather\\C[0]"] },
{
code: 401,
indent: 0,
parameters: ["\\>└画面上で固定表示&スクロールに連動"],
},
{ code: 356, indent: 0, parameters: ["particle set rain_w3 weather"] },
{ code: 204, indent: 0, parameters: [6, 8, 5] },
{ code: 204, indent: 0, parameters: [4, 8, 5] },
{ code: 230, indent: 0, parameters: [60] },
{ code: 356, indent: 0, parameters: ["particle clear rain_w3"] },
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{
code: 401,
indent: 0,
parameters: ["\\>\\C[14]10.対象:リージョン\\C[0]"],
},
{
code: 401,
indent: 0,
parameters: ["\\>└指定したリージョンのタイルから発生"],
},
{ code: 356, indent: 0, parameters: ["particle set r_light region:1"] },
{ code: 230, indent: 0, parameters: [90] },
{ code: 356, indent: 0, parameters: ["particle clear r_light"] },
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{ code: 401, indent: 0, parameters: ["\\>\\C[14]11.対象:歩き\\C[0]"] },
{
code: 401,
indent: 0,
parameters: ["\\>└対象キャラが歩いてるときに表示"],
},
{
code: 356,
indent: 0,
parameters: ["particle set fuss_walk walk:player"],
},
{
code: 205,
indent: 0,
parameters: [
-1,
{
list: [
{ code: 29, parameters: [5], indent: null },
{ code: 37, indent: 0 },
{ code: 3, indent: null },
{ code: 3, indent: null },
{ code: 3, indent: 0 },
{ code: 3, indent: 0 },
{ code: 3, indent: null },
{ code: 3, indent: null },
{ code: 2, indent: 0 },
{ code: 2, indent: 0 },
{ code: 2, indent: null },
{ code: 2, indent: null },
{ code: 2, indent: null },
{ code: 2, indent: null },
{ code: 29, parameters: [4], indent: null },
{ code: 38, indent: null },
{ code: 0 },
],
repeat: false,
skippable: false,
wait: true,
},
],
},
{
code: 505,
indent: 0,
parameters: [{ code: 29, parameters: [5], indent: null }],
},
{ code: 505, indent: 0, parameters: [{ code: 37, indent: 0 }] },
{ code: 505, indent: 0, parameters: [{ code: 3, indent: null }] },
{ code: 505, indent: 0, parameters: [{ code: 3, indent: null }] },
{ code: 505, indent: 0, parameters: [{ code: 3, indent: 0 }] },
{ code: 505, indent: 0, parameters: [{ code: 3, indent: 0 }] },
{ code: 505, indent: 0, parameters: [{ code: 3, indent: null }] },
{ code: 505, indent: 0, parameters: [{ code: 3, indent: null }] },
{ code: 505, indent: 0, parameters: [{ code: 2, indent: 0 }] },
{ code: 505, indent: 0, parameters: [{ code: 2, indent: 0 }] },
{ code: 505, indent: 0, parameters: [{ code: 2, indent: null }] },
{ code: 505, indent: 0, parameters: [{ code: 2, indent: null }] },
{ code: 505, indent: 0, parameters: [{ code: 2, indent: null }] },
{ code: 505, indent: 0, parameters: [{ code: 2, indent: null }] },
{
code: 505,
indent: 0,
parameters: [{ code: 29, parameters: [4], indent: null }],
},
{ code: 505, indent: 0, parameters: [{ code: 38, indent: null }] },
{ code: 356, indent: 0, parameters: ["particle clear fuss_walk"] },
{ code: 101, indent: 0, parameters: ["", 0, 0, 2, ""] },
{
code: 401,
indent: 0,
parameters: ["\\>\\C[14]12.グループ機能&サブエミッター\\C[0]"],
},
{
code: 401,
indent: 0,
parameters: ["\\>└グループ機能:まとめてコマンドを実行"],
},
{
code: 401,
indent: 0,
parameters: ["\\>└サブエミッター:パーティクルから子パーティクル発生"],
},
{
code: 401,
indent: 0,
parameters: ["\\>└\\C[2]※上部に遠景が見える場所で実行してください。"],
},
{
code: 356,
indent: 0,
parameters: ["particle group set fireworks this"],
},
{ code: 230, indent: 0, parameters: [90] },
{ code: 101, indent: 0, parameters: ["", 0, 0, 2, ""] },
{ code: 401, indent: 0, parameters: ["\\>\\C[14]13.グループ停止"] },
{
code: 356,
indent: 0,
parameters: ["particle clear tag:group:fireworks"],
},
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{
code: 401,
indent: 0,
parameters: ["\\>以上で基本動作テストを終わります。"],
},
{ code: 0, indent: 0, parameters: [] },
];
this.setupChild(list, eventId);
};
//PRAGMA_END: testCommands
Game_Interpreter.prototype.trpParticleTest2 = function () {
var eventId = this.isOnCurrentMap() ? this._eventId : 0;
var list = [
{ code: 101, indent: 0, parameters: ["", 0, 0, 2] },
{
code: 401,
indent: 0,
parameters: [
NLC("\\>パーティクルエディタの動作テストを行います。", 182),
],
},
{ code: 230, indent: 0, parameters: [10] },
{ code: 356, indent: 0, parameters: ["particle edit test this"] },
{ code: 0, indent: 0, parameters: [] },
];
this.setupChild(list, eventId);
};
/* instant bug fix
===================================*/
(() => {
if (
parameters.windowBugFix === "false" ||
parameters.windowBugFix === false
) {
return;
}
var Window_drawShape = Window.prototype.drawShape;
Window.prototype.drawShape = function (graphics) {
if (this.opacity === 0) return;
Window_drawShape.call(this, graphics);
};
})();
/* cache config
===================================*/
(function () {
"use strict";
if (!parameters.useCache || parameters.useCache === "false") return;
//=============================================================================
// TRP_Emitter
//=============================================================================
var Emitter = PIXI.particles.Emitter;
var TRP_Emitter = ParticleEmitter.TRP_Emitter;
TRP_Emitter._particleCache = {};
var _TRP_Emitter_destroy = TRP_Emitter.prototype.destroy;
TRP_Emitter.prototype.destroy = function () {
this.cleanup();
var constructorName = this._particleConstructor.name;
if (!TRP_Emitter._particleCache[constructorName]) {
TRP_Emitter._particleCache[constructorName] = [];
}
var next;
for (var particle = this._poolFirst; particle; particle = next) {
//store next value so we don't lose it in our destroy call
next = particle.next;
particle.emitter = null;
particle.next = null;
particle.prev = null;
if (constructorName === "TRP_ParticleEx") {
particle.subEmitters = null;
particle.subEmitterData.length = 0;
}
particle.applyArt(null);
TRP_Emitter._particleCache[constructorName].push(particle);
}
this._poolFirst = null;
Emitter.prototype.destroy.call(this);
};
var _TRP_Emitter_init = TRP_Emitter.prototype.init;
TRP_Emitter.prototype.init = function (art, config) {
_TRP_Emitter_init.call(this, art, config);
this.preparePoolFromCache();
};
TRP_Emitter.prototype.preparePoolFromCache = function (rate = 1) {
var capacity =
rate *
this.naturalCapacity(
this._originalFrequency,
this._originalParticlesPerWave
);
var constructorName = this._particleConstructor.name;
var cache = TRP_Emitter._particleCache[constructorName];
if (!cache) return;
var particle = cache.pop();
if (!particle) return;
if (!this._poolFirst) {
this._poolFirst = particle;
}
var prev = null;
particle.emitter = this;
for (var i = 0; i < capacity; i = (i + 1) | 0) {
particle.emitter = this;
if (prev) {
prev.next = particle;
particle.prev = prev;
}
prev = particle;
particle = cache.pop();
if (!particle) {
break;
}
}
};
})();
})();