pastime/js/plugins/ParticleEmitter.js
2026-03-15 16:45:22 -05:00

1457 lines
No EOL
74 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//================================================================
// ParticleEmitter.js
// ---------------------------------------------------------------
// Copyright (c) 2018 Tsukimi
// ---------------------------------------------------------------
// Version
// 0.1.2-en 2018/07/13 add english description
// 0.1.2 2018/07/13 add feature: "moveQ", "moveQR"; fix EasingFunctions
// 0.1.1 2018/07/13 add feature: "staticToPlayer", "setAsLocal"
// 0.1.0 2018/07/12 beta release
//================================================================
/*:
* @plugindesc ParticleEmitter
* @author Tsukimi
*
* @param configName
* @type string[]
* @desc config files downloaded from
* https://pixijs.io/pixi-particles-editor/
* @default []
*
* @param staticToPlayer
* @type boolean
* @desc should emitter set to player(-1) remain exist after map transition
* @default true
*
* @param enabledAll-Settings
* @text ParticlesEnabled(All) ON/OFF Settings
*
* @param enabledAll-ShowInOptionMenu
* @text Show in Option Menu
* @parent enabledAll-Settings
* @desc Show ParticlesEnabled(All) in Option Menu
* @type boolean
* @default true
*
* @param enabledAll-Text
* @text Option Menu Text
* @parent enabledAll-Settings
* @desc text of ParticlesEnabled(All) option in option menu
* @default Show Particles
*
* @param enabledAll-DefaultValue
* @text default ON/OFF state
* @parent enabledAll-Settings
* @desc default value of ParticlesEnabled(All), false -> don't apply any particles
* @type boolean
* @default true
*
* @help
*
* ParticleEmitter
* authortsukimi
*
* description
* A plugin controlling pixi-particles.js
* to make particle system in RM MV.
*
* you can make particle emitter config files here!:
* https://pixijs.io/pixi-particles-editor/
* ** First scroll down and set Rederer to Canvas2D
* to get correct visual effects !!
*
* ・create a folder named "particles" inside data/
* and put config file inside it
* ・create a folder named "particles" inside img/
* and put particle image file inside it
*
* for more information, check :
* https://forums.rpgmakerweb.com/index.php?threads/.97729/
*
* ---------------------------------------------------
* plugin command
*
*  *** You can brief all "PEmitter" to "PE" for short ***
*
*  createPEmitter {id} {config} {eventId} {imageNames ...}
* create particle emitter.
*   id: id of this controller. choose a name you like!
*   config: config name download from the website (.json no need)
*   eventId: the event which this emitter chase
*        -1player、0this event、1~event#
*        xscreen、screenscreen(only on current map)
*   imageNames: image name inside img/particles/.
*
* ex: createPEmitter star#1 starEmitter x star1 star2
*    Create an emitter named star#1, config is starEmitter.json,
*    position based on screen. Images are star1.png & star2.png.
*
*
*  pausePEmitter {id}
* pause emitting.
*
*  resumePEmitter {id}
* resume emitting.
*
*  stopPEmitter {id}
* stop emitter and delete after all particle i dead.
*
*  deletePEmitter {id}
*   delete emitter and all particles immediately.
*
*
*  setPEmitterPos {id} {x} {y}
* set emitter (relative) position to (x,y).
*    Besides numbers, you can also set x & y as:
*    x: Don't change from current parameter value
*    v<Number>: value of Game Variable<Number>
*    r<#1>~<#2>: Random value between #1 and #2.
*    #1 and #2 can also be variables.
*
* ex: setPEmitterPos star#1 10 x
*     set emitter star#1's x coordinate to 10. (y doesn't change)
*
*
*  movePEmitterPos {id} {x} {y} {duration} (easingFunction)
* move emitter (relative) position to (x,y) by {duration} frame.
*   input→x: don't move
*   easingFunction: move easing functions at https://easings.net/
*   will be 'linear' if not specified
*
* ex: movePEmitterPos star#1 -10 20 60 easeOutBounce
*      move emitter star#1 to (-10,20) in 60 frames, with
*      bouncing animation.
*
*
*  setPEmitterZ {id} {z}
* set emitter Z layer.
*   z layer
*    0 : lower tile
*    1 : lower character
*    3 : character
*    4 : upper tile
*    5 : upper character
*    6 : shadow of airship
*    7 : Balloon
*    8 : animation
*    9 : map destination (white rectangle)
*
* ex: setPEmitterZ star#1 5
*     set emitter star#1 z-layer to upper character.
*
*
*  setPEmitterAsLocal {id} {true/false}
*   create particle to event relative position
*   instead of to the map.
*   if true, event move right -> all particle move right
*
*
*  setPEmitterStaticToPlayer {id} {true/false}
*   should emitter set to player(-1) remain exist
*   after map transition.(true -> exist)
*   *Only effect on emitter set to player.
*
*
* Advanced moving
* QQueue、RRoutine
*
*  movePEmitterPosQ {id} {x} {y} {duration} (easingFunction)
*   Add move command to move queue. Will start next move
*   after last move is finish.
*
* ex: movePEmitterPosQ star#1 0 20 60 easeOutBounce
*   movePEmitterPosQ star#1 20 x 30 easeInBounce
*     Move to (0,20) in 60f then move to (20,20) in 30f.
*
*
*  movePEmitterPosQR {id} {x} {y} {duration} (easingFunction)
*   Add move command to routine move queue.
*   will repeat moving command in routine move queue.
*   
* ex: movePEmitterPosQR star#1 -20 20 30
*   movePEmitterPosQR star#1 20 20 30
*   movePEmitterPosQR star#1 20 -20 30
*   movePEmitterPosQR star#1 -20 -20 30
*
*     (-20,20)→(20,20)→(20,-20)→(-20,-20)→(-20,20)→…
*
*
*  clearPEmitterPosQ {id}
*   clear move queue.
*
*  clearPEmitterPosQR {id}
*   clear routine move queue.
*
* ---------------------------------------------------
* You can also create by map and event tags.
*
*  *** You can brief all "PEmitter" to "PE" for short ***
*
* Map
* <PEmitter:id,config,imageNames,...>
*  Same as createPEmitter.
*  However, eventId will be set to screen.
*
*   ex<PEmitter:star#1,starEmitter,star1,star2>
*
* <SetPEmitterPos:id,x,y>
*  Same as setPEmitterPos.
*
* <SetPEmitterZ:id,z>
*  Same as setPEmitterZ.
*
* <MovePEmitterPosQR:id,x,y,duration,easingFunc>
*  Same as movePEmitterPosQR.
*
*
* event
* <PEmitter:id,config,imageNames,...>
*  Same as createPEmitter.
*  However, eventId will be set to this event.
*
*   ex<PEmitter:star#1,starEmitter,star1,star2>
*
* <SetPEmitterPos:id,x,y>
*  Same as setPEmitterPos.
*
* <SetPEmitterZ:id,z>
*  Same as setPEmitterZ.
*
* <SetPEmitterAsLocal:id>
*  Same as setPEmitterPosAsLocal.
*
* <MovePEmitterPosQR:id,x,y,duration,easingFunc>
*  Same as movePEmitterPosQR.
*
*/
/*:ja
* @plugindesc パーティクル
* @author Tsukimi
*
* @param configName
* @text 設定ファイル名
* @type string[]
* @desc 使う設定ファイルの名前
* @default []
*
* @param staticToPlayer
* @text プレイヤー固定化(staticToPlayer)
* @type boolean
* @desc プレイヤーに設定したエミッターはマップ移動後に消さないべきか否か
* @default true
*
* @param enabledAll-Settings
* @text パーティクル表示ON/OFF設定
*
* @param enabledAll-ShowInOptionMenu
* @text オプションメニューに表示する
* @parent enabledAll-Settings
* @desc 「パーティクル表示」のON/OFFをゲーム内のオプションメニューから設定出来るようにする
* @type boolean
* @default true
*
* @param enabledAll-Text
* @text オプションメニューでの文言
* @parent enabledAll-Settings
* @desc ゲーム内オプションでのパーティクル表示ON/OFFの文言
* @default パーティクル表示
*
* @param enabledAll-DefaultValue
* @text パーティクル表示ON/OFFの初期値
* @parent enabledAll-Settings
* @desc パーティクル表示ON/OFFの初期値OFF→全パーティクルを表示しない少し軽くなる
* @type boolean
* @default true
*
* @help
*
* パーティクルプラグイン
* 作者:ツキミ
*
* 説明:
* pixiビルドインの particles を pixi-particle.js で
* コントロールするプラグインです。
* いわゆるパーティクルシステムが出来ます!
*
* ・エミッターの設定ファイルは data/ に particles フォルダー
*  を作り、入れてください。
* ・パーティクルの画像ファイルは img/ に particles フォルダー
*  を作り、入れてください。
*
* 詳しい説明は、
* https://forum.tkool.jp/index.php?threads/.1073/
* を見てください。
*
* ---------------------------------------------------
* プラグインコマンド:
* イベントコマンド「プラグインコマンド」から実行。
* (パラメータの間は半角スペースで区切る)
*
*  *** 以下の PEmitter を全部 PE に省略できます。 ***
*
*  createPEmitter {id} {config} {eventId} {imageNames ...}
* エミッターを作る。
*   id: エミッター識別名、調整、削除の時に使う。好きな名前をどうぞ。
*   config: data/particles/ に入っているエミッターの設定ファイル
*   eventId: エミッターの追従対象。
*        -1プレイヤー、0このイベント、1~:該当イベント
*        x画面依存、screen画面依存当マップのみ
*   imageNames: img/particles/ に入っているパーティクル画像名
*          複数あったら半角空白で区切る
*
* 例: createPEmitter star#1 starEmitter x star1 star2
*    名前がstar#1のエミッターを作り、設定ファイルをstarEmitter.jsonにし、
*    画面依存にする。パーティクルの画像はstar1.pngとstar2.png。
*
*
*  pausePEmitter {id}
* エミッターを一時中断する。
*
*  resumePEmitter {id}
* エミッターを再開する。
*
*  stopPEmitter {id}
* エミッターを中止する。(パーティクルが全部消えたあと削除する)
*
*  deletePEmitter {id}
* エミッターを中止する。(すぐにすべてのパーティクルを削除する)
*
*
*  setPEmitterPos {id} {x} {y}
* エミッターの相対位置を(x,y)に設置する。
*   x,y の値は数字以外、以下の文字も設定可能です。
*    x: 現在のパラメータ(パラメータを変えない)
*    v<数字>: 変数番号<数字>の値を代入する
*    r<#1>~<#2>: #1~#2の間の乱数生成。
*     #1と#2もv<数字>で指定可能。
*
* 例: setPEmitterPos star#1 10 x
*     star#1のx座標を10にする。yは変えない
*
*
*  movePEmitterPos {id} {x} {y} {duration} (easingFunction)
* エミッターの相対位置を{duration}フレーム掛けて(x,y)に移動する。
*   数値→x: 調整しない
*   easingFunction: 移動のアニメーション(徐々に加速、減速等)
*   指定が無ければ linear になります
*   詳しくはhttps://easings.net/ja
*
* 例: movePEmitterPos star#1 -10 20 60 easeOutBounce
*     star#1を60フレームかけて(-10, 20)に移動する。
*     (アニメ:跳ね返る)
*
*
*  setPEmitterZ {id} {z}
* エミッターのzレイヤーを変える。
*   zレイヤー参照
*    0 : 下層タイル
*    1 : 通常キャラの下
*    3 : 通常キャラと同じ
*    4 : 上層タイル
*    5 : 通常キャラの上
*    6 : 飛行船の影
*    7 : フキダシ
*    8 : アニメーション
*    9 : マップタッチの行き先(白く光るヤツ)
*
* 例: setPEmitterZ star#1 5
*     発射位置を通常キャラの上にする。
*
*
*  setPEmitterAsLocal {id} {true/false}
* マップにではなく、
*   イベントの相対位置にパーティクルを生成するかどうか。
*   trueにすると、キャラが右に一マス移動する
*    →全パーティクルも右に一マス移動する)
*
*
*  setPEmitterStaticToPlayer {id} {true/false}
* プレイヤーに設定したエミッターは
*  マップ移動後に消さないべきか否か。
*   プレイヤーに適用しているエミッターにしか効果がない。
*
*
* 高度な移動コマンド:
* QQueue、RRoutine
*
*  movePEmitterPosQ {id} {x} {y} {duration} (easingFunction)
*   移動コマンドの待ち列に新しい移動を追加する。
*   前の移動が終わった後、自動で次の移動が再生される。
*   主に移動コマンドを一気に指定したい時に使う。
*
* 例: movePEmitterPosQ star#1 0 20 60 easeOutBounce
*   movePEmitterPosQ star#1 20 x 30 easeInBounce
*     (0,20)に移動した後、(20,20)に移動する
*
*
*  movePEmitterPosQR {id} {x} {y} {duration} (easingFunction)
*   ループ移動コマンド配列に移動を追加する。
*   
* 例: movePEmitterPosQR star#1 -20 20 30
*   movePEmitterPosQR star#1 20 20 30
*   movePEmitterPosQR star#1 20 -20 30
*   movePEmitterPosQR star#1 -20 -20 30
*
*     (-20,20)→(20,20)→(20,-20)→(-20,-20)→(-20,20)→…
*     辺の長さが40の正方形に沿って時計回りに移動し続ける。
*
*
*  clearPEmitterPosQ {id}
*   移動コマンドの待ち列をクリアする。
*
*  clearPEmitterPosQR {id}
*   ループ移動コマンド配列をクリアする。
*
* ---------------------------------------------------
* タグによるエミッター自動生成も可能。
*
*  *** 以下の PEmitter を全部 PE に省略できます。 ***
*
* マップ:
* <PEmitter:id,config,imageNames,...>
*  コマンド createPEmitter と同じ効果。
*  ただし、 eventId は screen になる。(指定できない)
*
*   例:<PEmitter:star#1,starEmitter,star1,star2>
*
* <SetPEmitterPos:id,x,y>
*  コマンド setPEmitterPos と同じ効果。
*
* <SetPEmitterZ:id,z>
*  コマンド setPEmitterZ と同じ効果。
*
* <MovePEmitterPosQR:id,x,y,duration,easingFunc>
*  コマンド movePEmitterPosQR と同じ効果。
*
*
* イベント:
* <PEmitter:id,config,imageNames,...>
*  コマンド createPEmitter と同じ効果。
*  ただし、 eventId は 該当イベントのid になる。(指定できない)
*
*   例:<PEmitter:star#1,starEmitter,star1,star2>
*
* <SetPEmitterPos:id,x,y>
*  コマンド setPEmitterPos と同じ効果。
*
* <SetPEmitterZ:id,z>
*  コマンド setPEmitterZ と同じ効果。
*
* <SetPEmitterAsLocal:id>
*  コマンド setPEmitterAsLocal id true と同じ効果。
*
* <MovePEmitterPosQR:id,x,y,duration,easingFunc>
*  コマンド movePEmitterPosQR と同じ効果。
*
*/
var $particleConfig = {};
function Object_PEmitter() {
this.initialize.apply(this, arguments);
};
/*
Object_PEmitter.prototype = Object.create(Sprite.prototype);
Object_PEmitter.prototype.constructor = Object_PEmitter;
*/
function Game_PEmitter() {
this.initialize.apply(this, arguments);
};
DataManager.loadParticleConfig = function(src) {
var xhr = new XMLHttpRequest();
var url = 'data/particles/' + src + '.json';
xhr.open('GET', url);
xhr.overrideMimeType('application/json');
xhr.onload = function() {
if (xhr.status < 400) {
$particleConfig[src] = JSON.parse(xhr.responseText);
}
};
xhr.onerror = function() {
DataManager._errorUrl = DataManager._errorUrl || url;
};
xhr.send();
};
(function() {
"use strict";
//=============================================================================
// Plugin parameter
//
//=============================================================================
var pluginName = 'ParticleEmitter';
var getParamString = function(paramNames) {
if (!Array.isArray(paramNames)) paramNames = [paramNames];
for (var i = 0; i < paramNames.length; i++) {
var name = PluginManager.parameters(pluginName)[paramNames[i]];
if (name) return name;
}
return null;
};
var getParamBoolean = function(paramNames) {
var value = getParamString(paramNames);
return (value || '').toUpperCase() === 'TRUE';
};
var configArr = JSON.parse(getParamString(['configName']));
if(configArr) {
for(var i = 0; i < configArr.length; i++) {
DataManager.loadParticleConfig(configArr[i]);
}
}
//=============================================================================
// Game_Interpreter
// プラグインコマンド[P_DRAG]などを追加定義します。
//=============================================================================
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.apply(this, arguments);
var id, dur;
switch ((command || '').toUpperCase()) {
case 'CREATEPE' :
case 'CREATEPEMITTER' :
// args: id, config, eventId, [imageNames ...]
var id = args.shift();
var config = args.shift();
if(!$particleConfig[config]) return;
var eventId = args.shift();
if(eventId.toUpperCase() === "SCREEN") eventId = 0;
else {
eventId = getNumberOrX(eventId);
if(eventId === 0) eventId = this._eventId;
}
$gameMap.createPEmitter(id, args, config, eventId);
break;
case 'PAUSEPE' :
case 'PAUSEPEMITTER' :
$gameMap.pausePEmitter(args[0]);
break;
case 'RESUMEPE' :
case 'RESUMEPEMITTER' :
$gameMap.resumePEmitter(args[0]);
break;
case 'ENABLEPEMITTER' :
$gameMap.enablePEmitter( args[0] , getBoolean(args[1]) );
break;
case 'STOPPE' :
case 'STOPPEMITTER' :
$gameMap.stopPEmitter(args[0]);
break;
case 'DELETEPE' :
case 'DELETEPEMITTER' :
$gameMap.deletePEmitter(args[0]);
break;
case 'SETPEPOS' :
case 'SETPEMITTERPOS' :
$gameMap.setPEmitterPos(args[0], getNumberOrX(args[1]), getNumberOrX(args[2]));
break;
case 'SETPEZ' :
case 'SETPEMITTERZ' :
$gameMap.setPEmitterZ(args[0], getNumberOrX(args[1]));
break;
case 'SETPEASLOCAL' :
case 'SETPEMITTERASLOCAL' :
$gameMap.setPEmitterAsLocal(args[0], args[1].toUpperCase() === "TRUE");
break;
case 'SETPESTATICTOPLAYER' :
case 'SETPEMITTERSTATICTOPLAYER' :
$gameMap.setPEmitterStaticToPlayer(args[0], args[1].toUpperCase() === "TRUE");
break;
case 'MOVEPEPOS' :
case 'MOVEPEMITTERPOS' :
$gameMap.movePEmitterPos(args[0], [
getNumberOrX(args[1]),
getNumberOrX(args[2]),
Number(args[3]) || 1,
args[4] || 'linear' ]
);
break;
case 'MOVEPEPOSQ' :
case 'MOVEPEMITTERPOSQ' :
$gameMap.movePEmitterPosQ(args[0], [
getNumberOrX(args[1]),
getNumberOrX(args[2]),
Number(args[3]) || 1,
args[4] || 'linear' ]
);
break;
case 'MOVEPEPOSQR' :
case 'MOVEPEMITTERPOSQR' :
$gameMap.movePEmitterPosQR(args[0], [
getNumberOrX(args[1]),
getNumberOrX(args[2]),
Number(args[3]) || 1,
args[4] || 'linear' ]
);
break;
case 'CLEARPEPOSQ' :
case 'CLEARPEMITTERPOSQ' :
$gameMap.ClearPEmitterPosQ(args[0]);
break;
case 'CLEARPEPOSQR' :
case 'CLEARPEMITTERPOSQR' :
$gameMap.ClearPEmitterPosQR(args[0]);
break;
}
};
// string -> number / undefined
function getNumberOrX(string) {
var num;
if(string === '' || string === 'x') return undefined;
var num = Number(string);
if(typeof(num) === "number" && !isNaN(num)) return num;
if(string[0] === 'v') {
num = Number(string.slice(1)) || 0;
return $gameVariables.value(num);
}
if(string[0] === 'r') {
num = string.slice(1).split('~');
var num1 = getNumberOrX(num[0]) || 0,
num2 = getNumberOrX(num[1]) || 0;
if(num1>num2) {var t=num1; num1=num2; num2=t;}
return ( Math.random()*(num2-num1) + num1 );
}
return undefined;
};
function getBoolean(string) {
return (string || '').toUpperCase() === 'TRUE';
};
//==================
// Object_PEmitter
//==================
Object_PEmitter.prototype.initialize = function(e) {
this._gameObject = e;
this.createEmitter(e);
var origin = SceneManager._scene._spriteset._tilemap.origin;
this._startOPos = new Point(origin.x, origin.y);
};
Object_PEmitter.prototype.createEmitter = function(e) {
var emitterContainer = new PIXI.Container();
emitterContainer.z = e._z;
var art = [];
for(var i = 0; i < e._imageNames.length; i++) {
if(e._imageNames[i] === "") continue;
art.push( (new Sprite(ImageManager.loadParticle(e._imageNames[i]))).texture );
}
var emitter = new PIXI.particles.Emitter(
emitterContainer,
art,
$particleConfig[e._config]
);
emitter.emit = true;
for (var key in e._totalParam) {
if(this[key]) this[key] = e._totalParam[key];
}
this._emitterContainer = emitterContainer;
this._emitter = emitter;
};
Object_PEmitter.prototype.update = function() {
this.updateEnableState();
this.updateParameter();
this.updateEmit();
this.updatePos();
this.updateTime();
};
Object_PEmitter.prototype.updateEnableState = function() {
this._emitterContainer.renderable = Game_PEmitter.enabledAll && this._gameObject.enabled;
};
Object_PEmitter.prototype.updateParameter = function() {
var e = this._gameObject._updateParam;
for (var key in e) {
if(this[key]) this[key] = e[key];
delete e[key];
}
};
Object_PEmitter.prototype.updateEmit = function() {
var e = this._gameObject, e2 = this._emitter;
if( (e._stop && !this._emitter.particleCount) || e._delete ) this._delete = true;
else if(e._pause || e._stop) this._emitter._emit = false;
else if(e2.emitterLifetime>0 && e2._emitterLife == e2.emitterLifetime && !e2.emit) {
if(!e2.particleCount) {
$gameMap.deletePEmitter(e._id);
this._delete = true;
}
}
else this._emitter._emit = true;
};
Object_PEmitter.prototype.updateTime = function() {
this._emitter.update(0.016);
};
Object_PEmitter.prototype.updatePos = function() {
var e = this._gameObject;
if(!isNaN(e._eventId) && e._eventId !== 0) {
var event;
if(e._eventId > 0) event = $gameMap.event(e._eventId);
else if (e._eventId < 0) event = $gamePlayer;
if(e._isLocal) {
this._emitterContainer.x = event.screenX();
this._emitterContainer.y = event.screenY();
this._emitter.updateOwnerPos(e._shiftX, e._shiftY);
}
else {
var curOPos = SceneManager._scene._spriteset._tilemap.origin;
var dx = curOPos.x - this._startOPos.x, dy = curOPos.y - this._startOPos.y;
this._emitterContainer.x = -dx;
this._emitterContainer.y = -dy;
this._emitter.updateOwnerPos(event.screenX() + dx + e._shiftX, event.screenY() + dy + e._shiftY);
}
}
else this._emitter.updateOwnerPos(e._shiftX, e._shiftY);
this._emitterContainer.z = e._z;
};
//==================
// Game_PEmitter
//==================
Game_PEmitter.enabledAll = getParamBoolean("enabledAll-DefaultValue");
Game_PEmitter.prototype.initialize = function(id, imageNames, config, eventId) {
this._pause = false;
this._stop = false;
this._delete = false;
this._id = id;
if(typeof imageNames === "string") imageNames = [imageNames];
this._imageNames = imageNames;
this._config = config;
this._eventId = eventId;
if(this._eventId !== undefined) this._mapId = $gameMap.mapId();
if(getParamBoolean("staticToPlayer") && this._eventId < 0) this._mapId = undefined;
this._shiftX = 0;
this._shiftY = 0;
this._z = 3;
this._isLocal = false;
this._totalParam = {};
this._updateParam = {};
this._moveRoute = null;
this._moveRouteQ = [];
this._moveRouteQR = [];
this.enabled = true;
};
Game_PEmitter.prototype.pause = function() {
this._pause = true;
};
Game_PEmitter.prototype.resume = function() {
this._pause = false;
};
Game_PEmitter.prototype.stop = function() {
this._stop = true;
};
Game_PEmitter.prototype.enable = function(enabled) {
this.enabled = enabled;
};
Game_PEmitter.prototype.delete = function() {
this._delete = true;
// if($gameMap._PEmitterArr[this._id]) delete $gameMap._PEmitterArr[this._id];
};
Game_PEmitter.prototype.setPos = function(x, y) {
if(x || x === 0) this._shiftX = x;
if(y || y === 0) this._shiftY = y;
delete this._moveRoute;
};
Game_PEmitter.prototype.setZ = function(z) {
if(z || z === 0) this._z = z;
};
Game_PEmitter.prototype.setAsLocal = function(isLocal) {
this._isLocal = isLocal;
};
Game_PEmitter.prototype.setParam = function(key, value) {
this._totalParam[key] = value;
this._updateParam[key] = value;
};
Game_PEmitter.prototype.createMoveRoute = function(args) {
if(!args) return;
this._moveRoute = {
t: 0,
b: [this._shiftX, this._shiftY],
c: [args[0]-this._shiftX, args[1]-this._shiftY],
d: args[2],
easefunc: args[3]
}
};
Game_PEmitter.prototype.clearMoveRoute = function() {
delete this._moveRoute;
};
Game_PEmitter.prototype.createMoveRouteQ = function(args) {
this._moveRouteQ.push(args);
};
Game_PEmitter.prototype.clearMoveRouteQ = function() {
this._moveRouteQ = [];
};
Game_PEmitter.prototype.createMoveRouteQR = function(args) {
this._moveRouteQR.push(args);
};
Game_PEmitter.prototype.clearMoveRouteQR = function() {
this._moveRouteQR = [];
};
Game_PEmitter.prototype.update = function() {
this.updateMove();
};
Game_PEmitter.prototype.updateMove = function() {
if(!this._moveRoute) {
this.getMoveRouteFromQ();
if(!this._moveRoute) {
this.copyMoveRouteQR();
this.getMoveRouteFromQ();
if(!this._moveRoute) return;
}
}
var m = this._moveRoute;
m.t++;
this._shiftX = EasingFunctions[m.easefunc](m.t, m.b[0], m.c[0], m.d);
this._shiftY = EasingFunctions[m.easefunc](m.t, m.b[1], m.c[1], m.d);
if(m.t >= m.d) delete this._moveRoute;
};
Game_PEmitter.prototype.getMoveRouteFromQ = function() {
this.createMoveRoute(this._moveRouteQ.shift());
};
Game_PEmitter.prototype.copyMoveRouteQR = function() {
this._moveRouteQ = this._moveRouteQR.slice();
};
Game_PEmitter.prototype.setStaticToPlayer = function(isStatic) {
if(isNaN(this._eventId) || this._eventId >= 0) return;
if( isStatic ) this._mapId = undefined;
else this._mapId = $gameMap.mapId();
};
//==================
// ImageManager
//
// add loadParticle
//==================
ImageManager.loadParticle = function(filename, hue) {
return this.loadBitmap('img/particles/', filename, hue, true);
};
//===================
// Game_Map (& Game_Screen 1 function)
//
// add controling functions
//===================
var _Game_Map_initialize = Game_Map.prototype.initialize;
Game_Map.prototype.initialize = function() {
_Game_Map_initialize.apply(this, arguments);
this._PEmitterArr = {};
};
var _Game_Screen_update = Game_Screen.prototype.update;
Game_Screen.prototype.update = function(sceneActive) {
_Game_Screen_update.apply(this, arguments);
var arr = $gameMap._PEmitterArr;
for(var key in arr) {
if( arr[key]._mapId !== undefined && arr[key]._mapId !== $gameMap.mapId() ) {
$gameMap.deletePEmitter(key);
continue;
}
arr[key].update();
}
};
Game_Map.prototype.createPEmitter = function(id, imageNames, config, eventId) {
var lastEmitter = this._PEmitterArr[id];
if(lastEmitter) {
// TODO:
// REMOVE EMITTER
this.deletePEmitter(id);
}
var e = new Game_PEmitter(id, imageNames, config, eventId);
this._PEmitterArr[id] = e;
};
Game_Map.prototype.pausePEmitter = function(id) {
var e = this._PEmitterArr[id];
if(!e) return;
e.pause();
};
Game_Map.prototype.resumePEmitter = function(id) {
var e = this._PEmitterArr[id];
if(!e) return;
e.resume();
};
Game_Map.prototype.enablePEmitter = function(id, enabled) {
var e = this._PEmitterArr[id];
if(!e) return;
e.enable(enabled);
};
Game_Map.prototype.stopPEmitter = function(id) {
var e = this._PEmitterArr[id];
if(!e) return;
e.stop();
delete this._PEmitterArr[id];
};
Game_Map.prototype.deletePEmitter = function(id) {
var e = this._PEmitterArr[id];
if(!e) return;
e.delete();
delete this._PEmitterArr[id];
};
Game_Map.prototype.setPEmitterPos = function(id, x, y) {
var e = this._PEmitterArr[id];
if(!e) return;
e.setPos(x, y);
};
Game_Map.prototype.setPEmitterZ = function(id, z) {
var e = this._PEmitterArr[id];
if(!e) return;
e.setZ(z);
};
Game_Map.prototype.setPEmitterAsLocal = function(id, isLocal) {
var e = this._PEmitterArr[id];
if(!e) return;
e.setAsLocal(isLocal);
};
Game_Map.prototype.setPEmitterStaticToPlayer = function(id, isStatic) {
var e = this._PEmitterArr[id];
if(!e) return;
e.setStaticToPlayer(isStatic);
};
Game_Map.prototype.movePEmitterPos = function(id, args) {
var e = this._PEmitterArr[id];
if(!e) return;
e.createMoveRoute(args);
};
Game_Map.prototype.movePEmitterPosQ = function(id, args) {
var e = this._PEmitterArr[id];
if(!e) return;
e.createMoveRouteQ(args);
};
Game_Map.prototype.movePEmitterPosQR = function(id, args) {
var e = this._PEmitterArr[id];
if(!e) return;
e.createMoveRouteQR(args);
};
Game_Map.prototype.clearPEmitterPosQ = function(id) {
var e = this._PEmitterArr[id];
if(!e) return;
e.clearMoveRouteQ();
};
Game_Map.prototype.clearPEmitterPosQR = function(id) {
var e = this._PEmitterArr[id];
if(!e) return;
e.clearMoveRouteQR();
};
//=========================
// Game_Map
// create Emitter by tag
//=========================
var _Game_Map_setup = Game_Map.prototype.setup;
Game_Map.prototype.setup = function(mapId) {
_Game_Map_setup.apply(this, arguments);
this.setupTKMPEmitters();
};
Game_Map.prototype.setupTKMPEmitters = function() {
var ma = $dataMap.metaArray;
if (ma === undefined) return;
var eArray = ma.PEmitter || ma.PE;
if(eArray) {
for(var i = 0; i < eArray.length; i++) {
var e = eArray[i].split(',');
var id = e.shift().trim();
var config = e.shift().trim();
var eventId = 0;
for(var i = 0; i < e.length; i++) e[i] = e[i].trim();
this.createPEmitter(id, e, config, eventId);
}
}
eArray = ma.SetPEmitterZ || ma.SetPEZ;
if(eArray) {
for(var i = 0; i < eArray.length; i++) {
var e = eArray[i].split(',');
var id = e.shift().trim();
var z = Number(e.shift());
if(isNaN(z)) z = 3;
this.setPEmitterZ(id, z);
}
}
eArray = ma.SetPEmitterPos || ma.SetPEPos;
if(eArray) {
for(var i = 0; i < eArray.length; i++) {
var e = eArray[i].split(',');
var id = e.shift().trim();
var x = getNumberOrX(e.shift());
var y = getNumberOrX(e.shift());
this.setPEmitterPos(id, x, y);
}
}
eArray = ma.MovePEmitterPosQR || ma.MovePEPosQR;
if(eArray) {
for(var i = 0; i < eArray.length; i++) {
var e = eArray[i].split(',');
var id = e.shift().trim();
var x = getNumberOrX(e.shift());
var y = getNumberOrX(e.shift());
var d = Number(e.shift());
var efunc = (e.shift() || "").trim() || "linear";
this.movePEmitterPosQR(id, [x, y, d, efunc]);
}
}
};
//=========================
// Game_Event
// create Emitter by tag
//=========================
var _Game_Event_initialize = Game_Event.prototype.initialize;
Game_Event.prototype.initialize = function(mapId, eventId) {
_Game_Event_initialize.apply(this, arguments);
this.setupTKMPEmitters();
};
Game_Event.prototype.setupTKMPEmitters = function() {
var ma = this.event().metaArray;
if (ma === undefined) return;
var eArray = ma.PEmitter || ma.PE;
if(eArray) {
for(var i = 0; i < eArray.length; i++) {
var e = eArray[i].split(',');
var id = e.shift().trim();
var config = e.shift().trim();
var eventId = this._eventId;
for(var i = 0; i < e.length; i++) e[i] = e[i].trim();
$gameMap.createPEmitter(id, e, config, eventId);
}
}
eArray = ma.SetPEmitterZ || ma.SetPEZ;
if(eArray) {
for(var i = 0; i < eArray.length; i++) {
var e = eArray[i].split(',');
var id = e.shift().trim();
var z = Number(e.shift());
if(isNaN(z)) z = 3;
$gameMap.setPEmitterZ(id, z);
}
}
eArray = ma.SetPEmitterPos || ma.SetPEPos;
if(eArray) {
for(var i = 0; i < eArray.length; i++) {
var e = eArray[i].split(',');
var id = e.shift().trim();
var x = getNumberOrX(e.shift());
var y = getNumberOrX(e.shift());
$gameMap.setPEmitterPos(id, x, y);
}
}
eArray = ma.SetPEmitterAsLocal || ma.SetPEAsLocal;
if(eArray) {
for(var i = 0; i < eArray.length; i++) {
var e = eArray[i].split(',');
var id = e.shift().trim();
$gameMap.setPEmitterAsLocal(id, true);
}
}
eArray = ma.MovePEmitterPosQR || ma.MovePEPosQR;
if(eArray) {
for(var i = 0; i < eArray.length; i++) {
var e = eArray[i].split(',');
var id = e.shift().trim();
var x = getNumberOrX(e.shift());
var y = getNumberOrX(e.shift());
var d = Number(e.shift());
var efunc = (e.shift() || "").trim() || "linear";
console.log(efunc);
$gameMap.movePEmitterPosQR(id, [x, y, d, efunc]);
}
}
};
//=============================================================================
// Scene_******
// 拡張するプロパティを定義します。 filterConを観測してfilterを作ります。
//=============================================================================
var _Scene_Map_initialize = Scene_Map.prototype.initialize;
Scene_Map.prototype.initialize = function() {
_Scene_Map_initialize.apply(this, arguments);
this._PEmitterArr = {};
};
var _Scene_Map_updateMain = Scene_Map.prototype.updateMain;
Scene_Map.prototype.updateMain = function() {
_Scene_Map_updateMain.apply(this, arguments);
this.updatePEmitters();
};
Scene_Map.prototype.updatePEmitters = function() {
var createArr = [];
var obj = $gameMap._PEmitterArr;
for (var key in obj) {
if(!this._PEmitterArr[key]) createArr.push(obj[key]);
}
for(var i = 0; i < createArr.length; i++) this.createPEmitter(createArr[i]);
for (var key in this._PEmitterArr) {
var value = this._PEmitterArr[key];
value.update();
if(value._delete) {
value._emitterContainer.parent.removeChild(value._emitterContainer);
delete this._PEmitterArr[key];
}
}
};
Scene_Map.prototype.createPEmitter = function(gameEmitter) {
var emitter = new Object_PEmitter(gameEmitter);
this._PEmitterArr[gameEmitter._id] = emitter;
this._spriteset._tilemap.addChild(emitter._emitterContainer);
};
//========================
// DataManager
// multi-tag extension,
// load config json file
//========================
if(!DataManager.extractMetadataArray) {
var _DataManager_extractMetadata = DataManager.extractMetadata;
DataManager.extractMetadata = function(data) {
_DataManager_extractMetadata.apply(this, arguments);
this.extractMetadataArray(data);
};
DataManager.extractMetadataArray = function(data) {
var re = /<([^<>:]+)(:?)([^>]*)>/g;
data.metaArray = {};
var match = true;
while (match) {
match = re.exec(data.note);
if (match) {
var metaName = match[1];
data.metaArray[metaName] = data.metaArray[metaName] || [];
data.metaArray[metaName].push(match[2] === ':' ? match[3] : true);
}
}
};
}
//=============================================================================
// Window_Options
// 拡張するプロパティを定義します。
//=============================================================================
var _Window_Options_makeCommandList = Window_Options.prototype.makeCommandList;
Window_Options.prototype.makeCommandList = function() {
_Window_Options_makeCommandList.apply(this, arguments);
this.addPEmitterOptions();
};
Window_Options.prototype.addPEmitterOptions = function() {
if(getParamBoolean("enabledAll-ShowInOptionMenu"))
this.addCommand(getParamString("enabledAll-Text"), 'PEmitterEnabledAll');
};
Object.defineProperty(ConfigManager, 'PEmitterEnabledAll', {
get: function() {
return !!Game_PEmitter.enabledAll;
},
set: function(value) {
Game_PEmitter.enabledAll = !!value;
},
configurable: true
});
var _ConfigManager_makeData = ConfigManager.makeData;
ConfigManager.makeData = function() {
var config = _ConfigManager_makeData.apply(this, arguments);
config.PEmitterEnabledAll = this.PEmitterEnabledAll;
return config;
};
var _ConfigManager_applyData = ConfigManager.applyData;
ConfigManager.applyData = function(config) {
_ConfigManager_applyData.apply(this, arguments);
if (config['PEmitterEnabledAll'] === undefined) { // 初回読み込み?
this.PEmitterEnabledAll = Game_PEmitter.enabledAll;
}
else
this.PEmitterEnabledAll = this.readFlag(config, 'PEmitterEnabledAll');
};
})();
/*!
* pixi-particles - v3.0.0
* Compiled Mon, 12 Feb 2018 04:21:37 UTC
* Copyright (c) 2015 CloudKid
*
* pixi-particles is licensed under the MIT License.
* http://www.opensource.org/licenses/mit-license
*/
/*!
* pixi-particles - v3.0.0
* Compiled Mon, 12 Feb 2018 04:21:37 UTC
*
* pixi-particles is licensed under the MIT License.
* http://www.opensource.org/licenses/mit-license
*/
!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.pixiParticles=t()}}(function(){return function(){function t(e,i,s){function a(n,o){if(!i[n]){if(!e[n]){var h="function"==typeof require&&require;if(!o&&h)return h(n,!0);if(r)return r(n,!0);var l=new Error("Cannot find module '"+n+"'");throw l.code="MODULE_NOT_FOUND",l}var p=i[n]={exports:{}};e[n][0].call(p.exports,function(t){var i=e[n][1][t];return a(i||t)},p,p.exports,t,e,i,s)}return i[n].exports}for(var r="function"==typeof require&&require,n=0;n<s.length;n++)a(s[n]);return a}return t}()({1:[function(t,e,i){"use strict";var s=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])};return function(e,i){function s(){this.constructor=e}t(e,i),e.prototype=null===i?Object.create(i):(s.prototype=i.prototype,new s)}}();Object.defineProperty(i,"__esModule",{value:!0});var a=t("./Particle"),r=PIXI.Texture,n=function(t){function e(e){var i=t.call(this,e)||this;return i.textures=null,i.duration=0,i.framerate=0,i.elapsed=0,i.loop=!1,i}return s(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 i=this.elapsed*this.framerate+1e-7|0;this.texture=this.textures[i]||PIXI.Texture.EMPTY}return e},e.prototype.destroy=function(){this.Particle_destroy(),this.textures=null},e.parseArt=function(t){for(var e,i,s,a,n,o=[],h=0;h<t.length;++h){e=t[h],o[h]=i={},i.textures=n=[],s=e.textures;for(var l=0;l<s.length;++l)if("string"==typeof(a=s[l]))n.push(r.fromImage(a));else if(a instanceof r)n.push(a);else{var p=a.count||1;for(a="string"==typeof a.texture?r.fromImage(a.texture):a.texture;p>0;--p)n.push(a)}"matchLife"==e.framerate?(i.framerate=-1,i.duration=0,i.loop=!1):(i.loop=!!e.loop,i.framerate=e.framerate>0?e.framerate:60,i.duration=n.length/i.framerate)}return o},e}(a.default);i.default=n},{"./Particle":3}],2:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var s=t("./ParticleUtils"),a=t("./Particle"),r=t("./PropertyNode"),n=PIXI.ticker.shared,o=new PIXI.Point,h=function(){function t(t,e,i){this._particleConstructor=a.default,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.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._destroyWhenComplete=!1,this._completeCallback=null,this.parent=t,e&&i&&this.init(e,i),this.recycle=this.recycle,this.update=this.update,this.rotate=this.rotate,this.updateSpawnPos=this.updateSpawnPos,this.updateOwnerPos=this.updateOwnerPos}return Object.defineProperty(t.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(t.prototype,"particleConstructor",{get:function(){return this._particleConstructor},set:function(t){if(t!=this._particleConstructor){this._particleConstructor=t,this.cleanup();for(var e=this._poolFirst;e;e=e.next)e.destroy();this._poolFirst=null,this._origConfig&&this._origArt&&this.init(this._origArt,this._origConfig)}},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"parent",{get:function(){return this._parent},set:function(t){this.cleanup(),this._parent=t},enumerable:!0,configurable:!0}),t.prototype.init=function(t,e){if(t&&e){this.cleanup(),this._origConfig=e,this._origArt=t,t=Array.isArray(t)?t.slice():[t];var i=this._particleConstructor;this.particleImages=i.parseArt?i.parseArt(t):t,e.alpha?this.startAlpha=r.default.createList(e.alpha):this.startAlpha=new r.default(1,0),e.speed?(this.startSpeed=r.default.createList(e.speed),this.minimumSpeedMultiplier=e.speed.minimumSpeedMultiplier||1):(this.minimumSpeedMultiplier=1,this.startSpeed=new r.default(0,0));var a=e.acceleration;a&&(a.x||a.y)?(this.startSpeed.next=null,this.acceleration=new PIXI.Point(a.x,a.y),this.maxSpeed=e.maxSpeed||NaN):this.acceleration=new PIXI.Point,e.scale?(this.startScale=r.default.createList(e.scale),this.minimumScaleMultiplier=e.scale.minimumScaleMultiplier||1):(this.startScale=new r.default(1,0),this.minimumScaleMultiplier=1),e.color?this.startColor=r.default.createList(e.color):this.startColor=new r.default({r:255,g:255,b:255},0),e.startRotation?(this.minStartRotation=e.startRotation.min,this.maxStartRotation=e.startRotation.max):this.minStartRotation=this.maxStartRotation=0,e.noRotation&&(this.minStartRotation||this.maxStartRotation)?this.noRotation=!!e.noRotation:this.noRotation=!1,e.rotationSpeed?(this.minRotationSpeed=e.rotationSpeed.min,this.maxRotationSpeed=e.rotationSpeed.max):this.minRotationSpeed=this.maxRotationSpeed=0,this.minLifetime=e.lifetime.min,this.maxLifetime=e.lifetime.max,this.particleBlendMode=s.default.getBlendMode(e.blendMode),e.ease?this.customEase="function"==typeof e.ease?e.ease:s.default.generateEase(e.ease):this.customEase=null,i.parseData?this.extraData=i.parseData(e.extraData):this.extraData=e.extraData||null,this.spawnRect=this.spawnCircle=null,this.particlesPerWave=1,e.particlesPerWave&&e.particlesPerWave>1&&(this.particlesPerWave=e.particlesPerWave),this.particleSpacing=0,this.angleStart=0;var n;switch(e.spawnType){case"rect":this.spawnType="rect",this._spawnFunc=this._spawnRect;var o=e.spawnRect;this.spawnRect=new PIXI.Rectangle(o.x,o.y,o.w,o.h);break;case"circle":this.spawnType="circle",this._spawnFunc=this._spawnCircle,n=e.spawnCircle,this.spawnCircle=new PIXI.Circle(n.x,n.y,n.r);break;case"ring":this.spawnType="ring",this._spawnFunc=this._spawnRing,n=e.spawnCircle,this.spawnCircle=new PIXI.Circle(n.x,n.y,n.r),this.spawnCircle.minRadius=n.minR;break;case"burst":this.spawnType="burst",this._spawnFunc=this._spawnBurst,this.particleSpacing=e.particleSpacing,this.angleStart=e.angleStart?e.angleStart:0;break;case"point":default:this.spawnType="point",this._spawnFunc=this._spawnPoint}this.frequency=e.frequency,this.spawnChance="number"==typeof e.spawnChance&&e.spawnChance>0?e.spawnChance:1,this.emitterLifetime=e.emitterLifetime||-1,this.maxParticles=e.maxParticles>0?e.maxParticles:1e3,this.addAtBack=!!e.addAtBack,this.rotation=0,this.ownerPos=new PIXI.Point,this.spawnPos=new PIXI.Point(e.pos.x,e.pos.y),this._prevEmitterPos=this.spawnPos.clone(),this._prevPosIsValid=!1,this._spawnTimer=0,this.emit=void 0===e.emit||!!e.emit,this.autoUpdate=void 0!==e.autoUpdate&&!!e.autoUpdate}},t.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},t.prototype.rotate=function(t){if(this.rotation!=t){var e=t-this.rotation;this.rotation=t,s.default.rotatePoint(e,this.spawnPos),this._posChanged=!0}},t.prototype.updateSpawnPos=function(t,e){this._posChanged=!0,this.spawnPos.x=t,this.spawnPos.y=e},t.prototype.updateOwnerPos=function(t,e){this._posChanged=!0,this.ownerPos.x=t,this.ownerPos.y=e},t.prototype.resetPositionTracking=function(){this._prevPosIsValid=!1},Object.defineProperty(t.prototype,"emit",{get:function(){return this._emit},set:function(t){this._emit=!!t,this._emitterLife=this.emitterLifetime},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"autoUpdate",{get:function(){return this._autoUpdate},set:function(t){this._autoUpdate&&!t?n.remove(this.update,this):!this._autoUpdate&&t&&n.add(this.update,this),this._autoUpdate=!!t},enumerable:!0,configurable:!0}),t.prototype.playOnceAndDestroy=function(t){this.autoUpdate=!0,this.emit=!0,this._destroyWhenComplete=!0,this._completeCallback=t},t.prototype.playOnce=function(t){this.emit=!0,this._completeCallback=t},t.prototype.update=function(t){if(this._autoUpdate&&(t=t/PIXI.settings.TARGET_FPMS/1e3),this._parent){var e,i,s;for(i=this._activeParticlesFirst;i;i=s)s=i.next,i.update(t);var a,r;this._prevPosIsValid&&(a=this._prevEmitterPos.x,r=this._prevEmitterPos.y);var n=this.ownerPos.x+this.spawnPos.x,o=this.ownerPos.y+this.spawnPos.y;if(this._emit)for(this._spawnTimer-=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 h=void 0;if(h=this.minLifetime==this.maxLifetime?this.minLifetime:Math.random()*(this.maxLifetime-this.minLifetime)+this.minLifetime,-this._spawnTimer<h){var l=void 0,p=void 0;if(this._prevPosIsValid&&this._posChanged){var c=1+this._spawnTimer/t;l=(n-a)*c+a,p=(o-r)*c+r}else l=n,p=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 d=void 0;if(this._poolFirst?(d=this._poolFirst,this._poolFirst=this._poolFirst.next,d.next=null):d=new this.particleConstructor(this),this.particleImages.length>1?d.applyArt(this.particleImages[Math.floor(Math.random()*this.particleImages.length)]):d.applyArt(this.particleImages[0]),d.alphaList.reset(this.startAlpha),1!=this.minimumSpeedMultiplier&&(d.speedMultiplier=Math.random()*(1-this.minimumSpeedMultiplier)+this.minimumSpeedMultiplier),d.speedList.reset(this.startSpeed),d.acceleration.x=this.acceleration.x,d.acceleration.y=this.acceleration.y,d.maxSpeed=this.maxSpeed,1!=this.minimumScaleMultiplier&&(d.scaleMultiplier=Math.random()*(1-this.minimumScaleMultiplier)+this.minimumScaleMultiplier),d.scaleList.reset(this.startScale),d.colorList.reset(this.startColor),this.minRotationSpeed==this.maxRotationSpeed?d.rotationSpeed=this.minRotationSpeed:d.rotationSpeed=Math.random()*(this.maxRotationSpeed-this.minRotationSpeed)+this.minRotationSpeed,d.noRotation=this.noRotation,d.maxLife=h,d.blendMode=this.particleBlendMode,d.ease=this.customEase,d.extraData=this.extraData,this._spawnFunc(d,l,p,e),d.init(),d.update(-this._spawnTimer),d.parent){var f=this._parent.children;if(f[0]==d)f.shift();else if(f[f.length-1]==d)f.pop();else{var m=f.indexOf(d);f.splice(m,1)}this.addAtBack?f.unshift(d):f.push(d)}else this.addAtBack?this._parent.addChildAt(d,0):this._parent.addChild(d);this._activeParticlesLast?(this._activeParticlesLast.next=d,d.prev=this._activeParticlesLast,this._activeParticlesLast=d):this._activeParticlesLast=this._activeParticlesFirst=d,++this.particleCount}}this._spawnTimer+=this._frequency}}this._posChanged&&(this._prevEmitterPos.x=n,this._prevEmitterPos.y=o,this._prevPosIsValid=!0,this._posChanged=!1),this._emit||this._activeParticlesFirst||(this._completeCallback&&this._completeCallback(),this._destroyWhenComplete&&this.destroy())}},t.prototype._spawnPoint=function(t,e,i){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=e,t.position.y=i},t.prototype._spawnRect=function(t,e,i){this.minStartRotation==this.maxStartRotation?t.rotation=this.minStartRotation+this.rotation:t.rotation=Math.random()*(this.maxStartRotation-this.minStartRotation)+this.minStartRotation+this.rotation,o.x=Math.random()*this.spawnRect.width+this.spawnRect.x,o.y=Math.random()*this.spawnRect.height+this.spawnRect.y,0!==this.rotation&&s.default.rotatePoint(this.rotation,o),t.position.x=e+o.x,t.position.y=i+o.y},t.prototype._spawnCircle=function(t,e,i){this.minStartRotation==this.maxStartRotation?t.rotation=this.minStartRotation+this.rotation:t.rotation=Math.random()*(this.maxStartRotation-this.minStartRotation)+this.minStartRotation+this.rotation,o.x=Math.random()*this.spawnCircle.radius,o.y=0,s.default.rotatePoint(360*Math.random(),o),o.x+=this.spawnCircle.x,o.y+=this.spawnCircle.y,0!==this.rotation&&s.default.rotatePoint(this.rotation,o),t.position.x=e+o.x,t.position.y=i+o.y},t.prototype._spawnRing=function(t,e,i){var a=this.spawnCircle;this.minStartRotation==this.maxStartRotation?t.rotation=this.minStartRotation+this.rotation:t.rotation=Math.random()*(this.maxStartRotation-this.minStartRotation)+this.minStartRotation+this.rotation,a.minRadius!==a.radius?o.x=Math.random()*(a.radius-a.minRadius)+a.minRadius:o.x=a.radius,o.y=0;var r=360*Math.random();t.rotation+=r,s.default.rotatePoint(r,o),o.x+=this.spawnCircle.x,o.y+=this.spawnCircle.y,0!==this.rotation&&s.default.rotatePoint(this.rotation,o),t.position.x=e+o.x,t.position.y=i+o.y},t.prototype._spawnBurst=function(t,e,i,s){0===this.particleSpacing?t.rotation=360*Math.random():t.rotation=this.angleStart+this.particleSpacing*s+this.rotation,t.position.x=e,t.position.y=i},t.prototype.cleanup=function(){var t,e;for(t=this._activeParticlesFirst;t;t=e)e=t.next,this.recycle(t),t.parent&&t.parent.removeChild(t);this._activeParticlesFirst=this._activeParticlesLast=null,this.particleCount=0},t.prototype.destroy=function(){this.autoUpdate=!1,this.cleanup();for(var t,e=this._poolFirst;e;e=t)t=e.next,e.destroy();this._poolFirst=this._parent=this.particleImages=this.spawnPos=this.ownerPos=this.startColor=this.startScale=this.startAlpha=this.startSpeed=this.customEase=this._completeCallback=null},t}();i.default=h},{"./Particle":3,"./ParticleUtils":4,"./PropertyNode":7}],3:[function(t,e,i){"use strict";var s=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])};return function(e,i){function s(){this.constructor=e}t(e,i),e.prototype=null===i?Object.create(i):(s.prototype=i.prototype,new s)}}();Object.defineProperty(i,"__esModule",{value:!0});var a=t("./ParticleUtils"),r=t("./PropertyList"),n=PIXI.Sprite,o=function(t){function e(i){var s=t.call(this)||this;return s.emitter=i,s.anchor.x=s.anchor.y=.5,s.velocity=new PIXI.Point,s.maxLife=0,s.age=0,s.ease=null,s.extraData=null,s.alphaList=new r.default,s.speedList=new r.default,s.speedMultiplier=1,s.acceleration=new PIXI.Point,s.maxSpeed=NaN,s.scaleList=new r.default,s.scaleMultiplier=1,s.colorList=new r.default(!0),s._doAlpha=!1,s._doScale=!1,s._doSpeed=!1,s._doAcceleration=!1,s._doColor=!1,s._doNormalMovement=!1,s._oneOverLife=0,s.next=null,s.prev=null,s.init=s.init,s.Particle_init=e.prototype.init,s.update=s.update,s.Particle_update=e.prototype.update,s.Sprite_destroy=t.prototype.destroy,s.Particle_destroy=e.prototype.destroy,s.applyArt=s.applyArt,s.kill=s.kill,s}return s(e,t),e.prototype.init=function(){this.age=0,this.velocity.x=this.speedList.current.value*this.speedMultiplier,this.velocity.y=0,a.default.rotatePoint(this.rotation,this.velocity),this.noRotation?this.rotation=0:this.rotation*=a.default.DEG_TO_RADS,this.rotationSpeed*=a.default.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 t=this.colorList.current.value;this.tint=a.default.combineRGBComponents(t.r,t.g,t.b),this.visible=!0},e.prototype.applyArt=function(t){this.texture=t||PIXI.Texture.EMPTY},e.prototype.update=function(t){if(this.age+=t,this.age>=this.maxLife)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 i=this.scaleList.interpolate(e)*this.scaleMultiplier;this.scale.x=this.scale.y=i}if(this._doNormalMovement){if(this._doSpeed){var s=this.speedList.interpolate(e)*this.speedMultiplier;a.default.normalize(this.velocity),a.default.scaleBy(this.velocity,s)}else if(this._doAcceleration&&(this.velocity.x+=this.acceleration.x*t,this.velocity.y+=this.acceleration.y*t,this.maxSpeed)){var r=a.default.length(this.velocity);r>this.maxSpeed&&a.default.scaleBy(this.velocity,this.maxSpeed/r)}this.position.x+=this.velocity.x*t,this.position.y+=this.velocity.y*t}return this._doColor&&(this.tint=this.colorList.interpolate(e)),0!==this.rotationSpeed?this.rotation+=this.rotationSpeed*t:this.acceleration&&!this.noRotation&&(this.rotation=Math.atan2(this.velocity.y,this.velocity.x)),e},e.prototype.kill=function(){this.emitter.recycle(this)},e.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},e.parseArt=function(t){var e;for(e=t.length;e>=0;--e)"string"==typeof t[e]&&(t[e]=PIXI.Texture.fromImage(t[e]));if(a.default.verbose)for(e=t.length-1;e>0;--e)if(t[e].baseTexture!=t[e-1].baseTexture){window.console&&console.warn("PixiParticles: using particle textures from different images may hinder performance in WebGL");break}return t},e.parseData=function(t){return t},e}(n);i.default=o},{"./ParticleUtils":4,"./PropertyList":6}],4:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var s=PIXI.BLEND_MODES,a=t("./PropertyNode"),r={verbose:!1,DEG_TO_RADS:Math.PI/180,rotatePoint:function(t,e){if(t){t*=r.DEG_TO_RADS;var i=Math.sin(t),s=Math.cos(t),a=e.x*s-e.y*i,n=e.x*i+e.y*s;e.x=a,e.y=n}},combineRGBComponents:function(t,e,i){return t<<16|e<<8|i},normalize:function(t){var e=1/r.length(t);t.x*=e,t.y*=e},scaleBy:function(t,e){t.x*=e,t.y*=e},length:function(t){return Math.sqrt(t.x*t.x+t.y*t.y)},hexToRGB:function(t,e){e||(e={}),"#"==t.charAt(0)?t=t.substr(1):0===t.indexOf("0x")&&(t=t.substr(2));var i;return 8==t.length&&(i=t.substr(0,2),t=t.substr(2)),e.r=parseInt(t.substr(0,2),16),e.g=parseInt(t.substr(2,2),16),e.b=parseInt(t.substr(4,2),16),i&&(e.a=parseInt(i,16)),e},generateEase:function(t){var e=t.length,i=1/e;return function(s){var a,r,n=e*s|0;return a=(s-n*i)*e,r=t[n]||t[e-1],r.s+a*(2*(1-a)*(r.cp-r.s)+a*(r.e-r.s))}},getBlendMode:function(t){if(!t)return s.NORMAL;for(t=t.toUpperCase();t.indexOf(" ")>=0;)t=t.replace(" ","_");return s[t]||s.NORMAL},createSteppedGradient:function(t,e){void 0===e&&(e=10),("number"!=typeof e||e<=0)&&(e=10);var i=new a.default(t[0].value,t[0].time);i.isStepped=!0;for(var s=i,n=t[0],o=1,h=t[o],l=1;l<e;++l){for(var p=l/e;p>h.time;)n=h,h=t[++o];p=(p-n.time)/(h.time-n.time);var c=r.hexToRGB(n.value),u=r.hexToRGB(h.value),d={};d.r=(u.r-c.r)*p+c.r,d.g=(u.g-c.g)*p+c.g,d.b=(u.b-c.b)*p+c.b,s.next=new a.default(d,l/e),s=s.next}return i}};i.default=r},{"./PropertyNode":7}],5:[function(t,e,i){"use strict";var s=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])};return function(e,i){function s(){this.constructor=e}t(e,i),e.prototype=null===i?Object.create(i):(s.prototype=i.prototype,new s)}}();Object.defineProperty(i,"__esModule",{value:!0});var a=t("./ParticleUtils"),r=t("./Particle"),n=new PIXI.Point,o=["pow","sqrt","abs","floor","round","ceil","E","PI","sin","cos","tan","asin","acos","atan","atan2","log"],h=new RegExp(["[01234567890\\.\\*\\-\\+\\/\\(\\)x ,]"].concat(o).join("|"),"g"),l=function(t){for(var e=t.match(h),i=e.length-1;i>=0;--i)o.indexOf(e[i])>=0&&(e[i]="Math."+e[i]);return t=e.join(""),new Function("x","return "+t+";")},p=function(t){function e(e){var i=t.call(this,e)||this;return i.path=null,i.initialRotation=0,i.initialPosition=new PIXI.Point,i.movement=0,i}return s(e,t),e.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},e.prototype.update=function(t){var e=this.Particle_update(t);if(e>=0&&this.path){var i=this.speedList.interpolate(e)*this.speedMultiplier;this.movement+=i*t,n.x=this.movement,n.y=this.path(this.movement),a.default.rotatePoint(this.initialRotation,n),this.position.x=this.initialPosition.x+n.x,this.position.y=this.initialPosition.y+n.y}return e},e.prototype.destroy=function(){this.Particle_destroy(),this.path=this.initialPosition=null},e.parseArt=function(t){return r.default.parseArt(t)},e.parseData=function(t){var e={};if(t&&t.path)try{e.path=l(t.path)}catch(t){a.default.verbose&&console.error("PathParticle: error in parsing path expression"),e.path=null}else a.default.verbose&&console.error("PathParticle requires a path string in extraData!"),e.path=null;return e},e}(r.default);i.default=p},{"./Particle":3,"./ParticleUtils":4}],6:[function(t,e,i){"use strict";function s(t){return this.ease&&(t=this.ease(t)),(this.next.value-this.current.value)*t+this.current.value}function a(t){this.ease&&(t=this.ease(t));var e=this.current.value,i=this.next.value,s=(i.r-e.r)*t+e.r,a=(i.g-e.g)*t+e.g,r=(i.b-e.b)*t+e.b;return l.default.combineRGBComponents(s,a,r)}function r(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 n(t){for(this.ease&&(t=this.ease(t));t>this.next.time;)this.current=this.next,this.next=this.next.next;t=(t-this.current.time)/(this.next.time-this.current.time);var e=this.current.value,i=this.next.value,s=(i.r-e.r)*t+e.r,a=(i.g-e.g)*t+e.g,r=(i.b-e.b)*t+e.b;return l.default.combineRGBComponents(s,a,r)}function o(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 h(t){for(this.ease&&(t=this.ease(t));this.next&&t>this.next.time;)this.current=this.next,this.next=this.next.next;var e=this.current.value;return l.default.combineRGBComponents(e.r,e.g,e.b)}Object.defineProperty(i,"__esModule",{value:!0});var l=t("./ParticleUtils"),p=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?a:s:t.isStepped?this.interpolate=this.isColor?h:o:this.interpolate=this.isColor?n:r,this.ease=this.current.ease},t}();i.default=p},{"./ParticleUtils":4}],7:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var s=t("./ParticleUtils"),a=function(){function t(t,e,i){this.value="string"==typeof t?s.default.hexToRGB(t):t,this.time=e,this.next=null,this.isStepped=!1,this.ease=i?"function"==typeof i?i:s.default.generateEase(i):null}return t.createList=function(e){if(Array.isArray(e.list)){var i=e.list,s=void 0,a=void 0;if(a=s=new t(i[0].value,i[0].time,e.ease),i.length>2||2===i.length&&i[1].value!==i[0].value)for(var r=1;r<i.length;++r)s.next=new t(i[r].value,i[r].time),s=s.next;return a.isStepped=!!e.isStepped,a}var n=new t(e.start,0);return e.end!==e.start&&(n.next=new t(e.end,1)),n},t}();i.default=a},{"./ParticleUtils":4}],8:[function(t,e,i){"use strict";Object.defineProperty(i,"__esModule",{value:!0});var s=t("./ParticleUtils.js");i.ParticleUtils=s.default;var a=t("./Particle.js");i.Particle=a.default;var r=t("./Emitter.js");i.Emitter=r.default;var n=t("./PathParticle.js");i.PathParticle=n.default;var o=t("./AnimatedParticle.js");i.AnimatedParticle=o.default},{"./AnimatedParticle.js":1,"./Emitter.js":2,"./Particle.js":3,"./ParticleUtils.js":4,"./PathParticle.js":5}],9:[function(t,e,i){"use strict";if(Object.defineProperty(i,"__esModule",{value:!0}),"undefined"==typeof PIXI)throw"pixi-particles requires pixi.js to be loaded first";PIXI.particles||(PIXI.particles={});var s=t("./particles");for(var a in s)PIXI.particles[a]=s[a]},{"./particles":8}]},{},[9])(9)});
//# sourceMappingURL=pixi-particles.js.map
/* ============================================================
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
*
* Open source under the BSD License.
*
* Copyright c 2008 George McGinley Smith
* All rights reserved.
* https://raw.github.com/danro/jquery-easing/master/LICENSE
* ======================================================== */
var EasingFunctions;
if(EasingFunctions === undefined) {
EasingFunctions =
{
// t: current time, b: begInnIng value, c: change In value, d: duration
linear: function(t, b, c, d) {
return c*(t/d) + b;
},
easeInQuad: function (t, b, c, d) {
return c*(t/=d)*t + b;
},
easeOutQuad: function (t, b, c, d) {
return -c *(t/=d)*(t-2) + b;
},
easeInOutQuad: function (t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
},
easeInCubic: function (t, b, c, d) {
return c*(t/=d)*t*t + b;
},
easeOutCubic: function (t, b, c, d) {
return c*((t=t/d-1)*t*t + 1) + b;
},
easeInOutCubic: function (t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t + b;
return c/2*((t-=2)*t*t + 2) + b;
},
easeInQuart: function (t, b, c, d) {
return c*(t/=d)*t*t*t + b;
},
easeOutQuart: function (t, b, c, d) {
return -c * ((t=t/d-1)*t*t*t - 1) + b;
},
easeInOutQuart: function (t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
return -c/2 * ((t-=2)*t*t*t - 2) + b;
},
easeInQuint: function (t, b, c, d) {
return c*(t/=d)*t*t*t*t + b;
},
easeOutQuint: function (t, b, c, d) {
return c*((t=t/d-1)*t*t*t*t + 1) + b;
},
easeInOutQuint: function (t, b, c, d) {
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
return c/2*((t-=2)*t*t*t*t + 2) + b;
},
easeInSine: function (t, b, c, d) {
return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
},
easeOutSine: function (t, b, c, d) {
return c * Math.sin(t/d * (Math.PI/2)) + b;
},
easeInOutSine: function (t, b, c, d) {
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
},
easeInExpo: function (t, b, c, d) {
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
},
easeOutExpo: function (t, b, c, d) {
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
},
easeInOutExpo: function (t, b, c, d) {
if (t==0) return b;
if (t==d) return b+c;
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
},
easeInCirc: function (t, b, c, d) {
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
},
easeOutCirc: function (t, b, c, d) {
return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
},
easeInOutCirc: function (t, b, c, d) {
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
},
easeInElastic: function (t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (c==0||t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
},
easeOutElastic: function (t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (c==0||t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
},
easeInOutElastic: function (t, b, c, d) {
var s=1.70158;var p=0;var a=c;
if (c==0||t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
if (a < Math.abs(c)) { a=c; var s=p/4; }
else var s = p/(2*Math.PI) * Math.asin (c/a);
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
},
easeInBack: function (t, b, c, d, s) {
if (s == undefined) s = 1.70158;
return c*(t/=d)*t*((s+1)*t - s) + b;
},
easeOutBack: function (t, b, c, d, s) {
if (s == undefined) s = 1.70158;
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
},
easeInOutBack: function (t, b, c, d, s) {
if (s == undefined) s = 1.70158;
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
},
easeInBounce: function (t, b, c, d) {
return c - this.easeOutBounce(d-t, 0, c, d) + b;
},
easeOutBounce: function (t, b, c, d) {
if ((t/=d) < (1/2.75)) {
return c*(7.5625*t*t) + b;
} else if (t < (2/2.75)) {
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
} else if (t < (2.5/2.75)) {
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
} else {
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
}
},
easeInOutBounce: function (t, b, c, d) {
if (t < d/2) return this.easeInBounce(t*2, 0, c, d) * .5 + b;
return this.easeOutBounce(t*2-d, 0, c, d) * .5 + c*.5 + b;
}
}
}
/*
*
* TERMS OF USE - EASING EQUATIONS
*
* Open source under the BSD License.
*
* Copyright c 2001 Robert Penner
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* Neither the name of the author nor the names of contributors may be used to endorse
* or promote products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/