627 lines
19 KiB
JavaScript
627 lines
19 KiB
JavaScript
//=============================================================================
|
|
// MOG_TouchAnimation.js
|
|
//=============================================================================
|
|
|
|
/*:
|
|
* @target MZ
|
|
* @plugindesc (v1.0) Apresenta uma animação de toque.
|
|
* @author Moghunter
|
|
* @url https://mogplugins.wordpress.com
|
|
*
|
|
* @param File Name
|
|
* @text File Name
|
|
* @desc Definição do nome de arquivo.
|
|
* @type file
|
|
* @dir img/system/
|
|
* @default TouchParticles
|
|
*
|
|
* @param Animation
|
|
* @text Animation
|
|
* @desc Definição do tipo de animação.
|
|
* @type select
|
|
* @default Fireworks
|
|
* @option Fireworks
|
|
* @value Fireworks
|
|
* @option Random
|
|
* @value Random
|
|
* @option Zoom Out
|
|
* @value Zoom Out
|
|
* @option Zoom In
|
|
* @value Zoom In
|
|
*
|
|
* @param Number of Particles
|
|
* @text Number of Particles
|
|
* @desc Definição do numero de partículas. (1 - 999)
|
|
* @type number
|
|
* @default 10
|
|
* @min 1
|
|
* @max 999
|
|
*
|
|
* @param X-Axis Offset
|
|
* @text X-Axis Offset
|
|
* @desc Definição X-axis da animação.
|
|
* @default 0
|
|
*
|
|
* @param Y-Axis Offset
|
|
* @text Y-Axis Offset
|
|
* @desc Definição Y-axis da animação.
|
|
* @default 0
|
|
*
|
|
* @param Blend Mode
|
|
* @desc Definição do blend.
|
|
* @text Blend Mode
|
|
* @type select
|
|
* @default Normal
|
|
* @option Additive
|
|
* @value Additive
|
|
* @option Normal
|
|
* @value Normal
|
|
* @option Multiply
|
|
* @value Multiply
|
|
*
|
|
* @param Duration
|
|
* @text Duration
|
|
* @desc Definição do tempo da animação. (1 - 999)
|
|
* @type number
|
|
* @default 10
|
|
* @min 1
|
|
* @max 999
|
|
*
|
|
* @param Fade Speed
|
|
* @text Fade Speed
|
|
* @desc Definição da velocidade do fade. (2 - 125)
|
|
* @type number
|
|
* @default 20
|
|
* @min 2
|
|
* @max 125
|
|
*
|
|
* @param Random Tone
|
|
* @text Random Tone
|
|
* @desc Ativar cores aleatórias.
|
|
* @type boolean
|
|
* @default true
|
|
*
|
|
* @help
|
|
* =============================================================================
|
|
* ♦♦♦ MOG - Touch Animation ♦♦♦
|
|
* Author - Moghunter
|
|
* Version - 1.0
|
|
* Updated - 2020/10/18
|
|
* https://mogplugins.wordpress.com
|
|
* =============================================================================
|
|
* Apresenta uma animação de toque.
|
|
* Grave a imagem "TouchParticles.png" na pasta /img/system/
|
|
*
|
|
*/
|
|
|
|
(() => {
|
|
//=============================================================================
|
|
// ** PLUGIN PARAMETERS
|
|
//=============================================================================
|
|
var Imported = Imported || {};
|
|
Imported.MOG_TouchAnimation = true;
|
|
var Moghunter = Moghunter || {};
|
|
|
|
Moghunter.parameters = PluginManager.parameters("MOG_TouchAnimation");
|
|
Moghunter.touchAnime_mode = String(
|
|
Moghunter.parameters["Animation"] || "Fireworks"
|
|
);
|
|
Moghunter.touchAnime_fileName = String(
|
|
Moghunter.parameters["File Name"] || "TouchParticles"
|
|
);
|
|
Moghunter.touchAnime_power = Number(
|
|
Moghunter.parameters["Number of Particles"] || 10
|
|
);
|
|
Moghunter.touchAnime_x = Number(Moghunter.parameters["X-Axis Offset"] || 0);
|
|
Moghunter.touchAnime_y = Number(Moghunter.parameters["Y-Axis Offset"] || 0);
|
|
Moghunter.touchAnime_fadeSpeed = Number(
|
|
Moghunter.parameters["Fade Speed"] || 20
|
|
);
|
|
Moghunter.touchAnime_duration = Number(
|
|
Moghunter.parameters["Duration"] || 10
|
|
);
|
|
Moghunter.touchAnime_blendMode = String(
|
|
Moghunter.parameters["Blend Mode"] || "Normal"
|
|
);
|
|
Moghunter.touchAnime_toneRandom = String(
|
|
Moghunter.parameters["Random Tone"] || true
|
|
);
|
|
|
|
DataManager._touchPart = {};
|
|
DataManager._touchPart.x = 0;
|
|
DataManager._touchPart.y = 0;
|
|
DataManager._touchPart.needRefresh = false;
|
|
DataManager._touchPart.skip = false;
|
|
DataManager._touchPart.wait = 0;
|
|
DataManager._touchPart.wait2 = 0;
|
|
|
|
//=============================================================================
|
|
// ■■■ Scene Base ■■■
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * create Sprite Field
|
|
//==============================
|
|
Scene_Base.prototype.createSpriteField3 = function () {
|
|
this._spriteField3 = new Sprite();
|
|
this._spriteField3.z = 100;
|
|
this.addChild(this._spriteField3);
|
|
};
|
|
|
|
//==============================
|
|
// * sort Sprite Field
|
|
//==============================
|
|
Scene_Base.prototype.sortSpriteField = function () {
|
|
if (this._spriteField1) {
|
|
this._spriteField1.children.sort((a, b) => a.z - b.z);
|
|
}
|
|
if (this._spriteField2) {
|
|
this._spriteField2.children.sort((a, b) => a.z - b.z);
|
|
}
|
|
if (this._spriteField3) {
|
|
this._spriteField3.children.sort((a, b) => a.z - b.z);
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * createTouchParticles
|
|
//==============================
|
|
Scene_Base.prototype.createTouchParticles = function () {
|
|
DataManager._touchPart.wait = 0;
|
|
DataManager._touchPart.wait2 = 5;
|
|
DataManager._touchPart.x = 0;
|
|
DataManager._touchPart.y = 0;
|
|
DataManager._touchPart.needRefresh = false;
|
|
DataManager._touchPart.skip = false;
|
|
DataManager._touchPart.map = false;
|
|
this._touchPar = new TouchParticles();
|
|
this._touchPar.z = 450;
|
|
this._spriteField3.addChild(this._touchPar);
|
|
};
|
|
|
|
//==============================
|
|
// * update Touch Animation Base
|
|
//==============================
|
|
Scene_Base.prototype.updateTouchAnimationBase = function () {
|
|
if (!this._spriteField3) {
|
|
this.createSpriteField3();
|
|
}
|
|
if (!this._touchPar) {
|
|
this.createTouchParticles();
|
|
}
|
|
if (DataManager._touchPart.wait2 > 0) {
|
|
DataManager._touchPart.wait2--;
|
|
}
|
|
if (DataManager._touchPart.wait2 == 0) {
|
|
this.updateTouchAnimation();
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * update Touch Particles
|
|
//==============================
|
|
Scene_Base.prototype.updateTouchAnimation = function () {
|
|
if (TouchInput.isTriggered()) {
|
|
if (DataManager._touchPart.wait == 0) {
|
|
DataManager._touchPart.wait = 2;
|
|
}
|
|
this.setTouchAnimePos();
|
|
}
|
|
if (DataManager._touchPart.wait > 0) {
|
|
DataManager._touchPart.wait--;
|
|
if (DataManager._touchPart.wait == 0 && this.isTouchAnimeEnabled()) {
|
|
DataManager._touchPart.needRefresh = true;
|
|
}
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * setTouchAnimePos
|
|
//==============================
|
|
Scene_Base.prototype.setTouchAnimePos = function () {
|
|
DataManager._touchPart.map = false;
|
|
DataManager._touchPart.x = TouchInput.x;
|
|
DataManager._touchPart.y = TouchInput.y;
|
|
};
|
|
|
|
//==============================
|
|
// * isTouchAnimeEnabled
|
|
//==============================
|
|
Scene_Base.prototype.isTouchAnimeEnabled = function () {
|
|
if (DataManager._touchPart.skip) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
//==============================
|
|
// ♦ ALIAS ♦ Initialize
|
|
//==============================
|
|
const _mog_ScnBase_touchPar_update = Scene_Base.prototype.update;
|
|
Scene_Base.prototype.update = function () {
|
|
_mog_ScnBase_touchPar_update.call(this);
|
|
this.updateTouchAnimationBase();
|
|
};
|
|
|
|
//=============================================================================
|
|
// ■■■ Scene Map ■■■
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * setTouchAnimePos
|
|
//==============================
|
|
Scene_Map.prototype.setTouchAnimePos = function () {
|
|
DataManager._touchPart.map = true;
|
|
const mx = $gameMap.displayX() * $gameMap.tileWidth();
|
|
const my = $gameMap.displayY() * $gameMap.tileHeight();
|
|
DataManager._touchPart.x = TouchInput.x + mx;
|
|
DataManager._touchPart.y = TouchInput.y + my;
|
|
};
|
|
|
|
//=============================================================================
|
|
// ■■■ Sprite Button ■■■
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// ♦ ALIAS ♦ on Click
|
|
//==============================
|
|
const _mog_touchAnime_sprtButton_onClick = Sprite_Button.prototype.onClick;
|
|
Sprite_Button.prototype.onClick = function () {
|
|
_mog_touchAnime_sprtButton_onClick.call(this);
|
|
DataManager._touchPart.wait = 10;
|
|
};
|
|
|
|
//=============================================================================
|
|
// ■■■ TouchParticles ■■■
|
|
//=============================================================================
|
|
function TouchParticles() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
TouchParticles.prototype = Object.create(Sprite.prototype);
|
|
TouchParticles.prototype.constructor = TouchParticles;
|
|
|
|
//==============================
|
|
// ♦♦ Initialize
|
|
//==============================
|
|
TouchParticles.prototype.initialize = function () {
|
|
Sprite.prototype.initialize.call(this);
|
|
this._mode = this.getMode(String(Moghunter.touchAnime_mode));
|
|
this._power = Math.min(Math.max(Moghunter.touchAnime_power, 1), 999);
|
|
this._blendType = this.getBlend(String(Moghunter.touchAnime_blendMode));
|
|
this.createParticles();
|
|
};
|
|
|
|
//==============================
|
|
// * get Mode
|
|
//==============================
|
|
TouchParticles.prototype.getMode = function (mode) {
|
|
if (mode == "Random") {
|
|
return 1;
|
|
} else if (mode == "Zoom Out") {
|
|
return 2;
|
|
} else if (mode == "Zoom In") {
|
|
return 3;
|
|
}
|
|
return 0;
|
|
};
|
|
|
|
//==============================
|
|
// * weather get Blend
|
|
//==============================
|
|
TouchParticles.prototype.getBlend = function (blend) {
|
|
if (blend == "Additive") {
|
|
return 1;
|
|
} else if (blend == "Multiply") {
|
|
return 2;
|
|
}
|
|
return 0;
|
|
};
|
|
|
|
//==============================
|
|
// * file Name
|
|
//==============================
|
|
TouchParticles.prototype.fileNAme = function () {
|
|
return String(Moghunter.touchAnime_fileName);
|
|
};
|
|
|
|
//==============================
|
|
// * create Particles
|
|
//==============================
|
|
TouchParticles.prototype.createParticles = function () {
|
|
this._particlesSprites = [];
|
|
for (var i = 0; i < this.power(); i++) {
|
|
this._particlesSprites[i] = new Sprite(
|
|
ImageManager.loadSystem(this.fileNAme())
|
|
);
|
|
this.setBaseData(this._particlesSprites[i], i);
|
|
this.addChild(this._particlesSprites[i]);
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * mode
|
|
//==============================
|
|
TouchParticles.prototype.mode = function () {
|
|
return this._mode;
|
|
};
|
|
|
|
//==============================
|
|
// * x Pos
|
|
//==============================
|
|
TouchParticles.prototype.xPos = function () {
|
|
return DataManager._touchPart.x;
|
|
};
|
|
|
|
//==============================
|
|
// * y Pos
|
|
//==============================
|
|
TouchParticles.prototype.yPos = function () {
|
|
return DataManager._touchPart.y;
|
|
};
|
|
|
|
//==============================
|
|
// * x Offset
|
|
//==============================
|
|
TouchParticles.prototype.xOffset = function () {
|
|
return Moghunter.touchAnime_x;
|
|
};
|
|
|
|
//==============================
|
|
// * y Offset
|
|
//==============================
|
|
TouchParticles.prototype.yOffset = function () {
|
|
return Moghunter.touchAnime_y;
|
|
};
|
|
|
|
//==============================
|
|
// * power
|
|
//==============================
|
|
TouchParticles.prototype.power = function () {
|
|
if (this.mode() == 2) {
|
|
return 1;
|
|
}
|
|
if (this.mode() == 3) {
|
|
return 1;
|
|
}
|
|
return this._power;
|
|
};
|
|
|
|
//==============================
|
|
// * force Hide
|
|
//==============================
|
|
TouchParticles.prototype.forcedHide = function (sprite) {
|
|
if (DataManager._touchPart.skip) {
|
|
return true;
|
|
}
|
|
if (DataManager._touchPart.wait > 0) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
//==============================
|
|
// * set Base Data
|
|
//==============================
|
|
TouchParticles.prototype.setBaseData = function (sprite, index) {
|
|
sprite.index = index;
|
|
sprite.opacity = 0;
|
|
sprite.anchor.x = 0.5;
|
|
sprite.anchor.y = 0.5;
|
|
sprite.sx = [0, 1];
|
|
sprite.sy = [0, 1];
|
|
sprite.rt = [0, 0.08];
|
|
sprite.sc = 0;
|
|
sprite.wait = 0;
|
|
sprite.blendType = this._blendType;
|
|
sprite.fadeSpeed = Math.min(
|
|
Math.max(Moghunter.touchAnime_fadeSpeed, 2),
|
|
125
|
|
);
|
|
sprite.duration = 0;
|
|
sprite.duration2 = Math.min(
|
|
Math.max(Moghunter.touchAnime_duration, 1),
|
|
999
|
|
);
|
|
if (String(Moghunter.touchAnime_toneRandom) == "true") {
|
|
this.setToneRandom(sprite, index);
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * set Tone Random
|
|
//==============================
|
|
TouchParticles.prototype.setToneRandom = function (sprite, index) {
|
|
const r = Math.randomInt(255);
|
|
const g = Math.randomInt(255);
|
|
const b = Math.randomInt(255);
|
|
const colorTone = [r, g, b, 255];
|
|
sprite.setColorTone(colorTone);
|
|
};
|
|
|
|
//==============================
|
|
// * refresh particles
|
|
//==============================
|
|
TouchParticles.prototype.refreshParticles = function (sprite, index) {
|
|
sprite.x = this.xPos();
|
|
sprite.y = this.yPos();
|
|
if (this.mode() == 0) {
|
|
this.setAnimation1(sprite, index);
|
|
} else if (this.mode() == 1) {
|
|
this.setAnimation2(sprite, index);
|
|
} else if (this.mode() == 2) {
|
|
this.setAnimation3(sprite, index);
|
|
} else if (this.mode() == 3) {
|
|
this.setAnimation4(sprite, index);
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * set Animation 1
|
|
//==============================
|
|
TouchParticles.prototype.setAnimation1 = function (sprite, index) {
|
|
sprite.duration = sprite.duration2 + Math.randomInt(20);
|
|
sprite.wait = 0;
|
|
var r = 0.7 + Math.abs(Math.random() * sprite.sx[1]);
|
|
var d = Math.randomInt(100);
|
|
sprite.sx[0] = d > 40 ? r : -r;
|
|
sprite.sx[0] = d > 90 ? 0 : sprite.sx[0];
|
|
var r = 0.7 + Math.abs(Math.random() * sprite.sy[1]);
|
|
var d = Math.randomInt(100);
|
|
sprite.sy[0] = d > 40 ? r : -r;
|
|
sprite.sy[0] = d > 90 ? 0 : sprite.sy[0];
|
|
var r = 0.01 + Math.abs(Math.random() * sprite.rt[1]);
|
|
sprite.rt[0] = sprite.rt[1] > 0 ? r : -r;
|
|
var pz = Math.random() * 0.5 * 1;
|
|
sprite.scale = new PIXI.Point(0.5 + Number(pz), 0.5 + Number(pz));
|
|
};
|
|
|
|
//==============================
|
|
// * set Animation 2
|
|
//==============================
|
|
TouchParticles.prototype.setAnimation2 = function (sprite, index) {
|
|
sprite.duration = sprite.duration2 + Math.randomInt(20);
|
|
sprite.wait = Math.randomInt(20);
|
|
sprite.x += -30 + Math.randomInt(60);
|
|
sprite.y += -30 + Math.randomInt(60);
|
|
sprite.sc = 0.02;
|
|
var pz = Math.random() * 0.5 * 1;
|
|
sprite.scale = new PIXI.Point(0.5 + Number(pz), 0.5 + Number(pz));
|
|
};
|
|
|
|
//==============================
|
|
// * set Animation 3
|
|
//==============================
|
|
TouchParticles.prototype.setAnimation3 = function (sprite, index) {
|
|
sprite.duration = sprite.duration2 + 10;
|
|
sprite.wait = 0;
|
|
sprite.sc = 0.04;
|
|
var pz = 0.1;
|
|
sprite.scale = new PIXI.Point(0.5 + Number(pz), 0.5 + Number(pz));
|
|
};
|
|
|
|
//==============================
|
|
// * set Animation 4
|
|
//==============================
|
|
TouchParticles.prototype.setAnimation4 = function (sprite, index) {
|
|
sprite.duration = sprite.duration2 + 10;
|
|
sprite.wait = 0;
|
|
sprite.sc = -0.1;
|
|
var pz = 0.1;
|
|
sprite.scale = new PIXI.Point(3.0, 3.0);
|
|
};
|
|
|
|
//==============================
|
|
// * update particles
|
|
//==============================
|
|
TouchParticles.prototype.updateParticles = function (sprite, index) {
|
|
if (this.forcedHide(sprite, index)) {
|
|
this.updateHide(sprite, index);
|
|
} else {
|
|
if (sprite.wait > 0) {
|
|
sprite.wait--;
|
|
} else {
|
|
this.updateParticlesData(sprite, index);
|
|
}
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * updateParticlesData
|
|
//==============================
|
|
TouchParticles.prototype.updateParticlesData = function (sprite, index) {
|
|
sprite.visible = true;
|
|
sprite.x += sprite.sx[0];
|
|
sprite.y += sprite.sy[0];
|
|
sprite.rotation += sprite.rt[0];
|
|
if (sprite.scale.x < 4.0) {
|
|
sprite.scale.x += sprite.sc;
|
|
}
|
|
if (sprite.scale.x < 0.0) {
|
|
sprite.scale.x = 0.0;
|
|
}
|
|
sprite.scale.y = sprite.scale.x;
|
|
this.updateFade(sprite, index);
|
|
};
|
|
|
|
//==============================
|
|
// * update Hide
|
|
//==============================
|
|
TouchParticles.prototype.updateHide = function (sprite, index) {
|
|
sprite.visible = false;
|
|
sprite.duration = 0;
|
|
sprite.opacity = 0;
|
|
};
|
|
|
|
//==============================
|
|
// * update Fade
|
|
//==============================
|
|
TouchParticles.prototype.updateFade = function (sprite, index) {
|
|
if (sprite.duration > 0) {
|
|
sprite.duration--;
|
|
sprite.opacity += 20;
|
|
} else {
|
|
sprite.opacity -= sprite.fadeSpeed;
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * refresh Base
|
|
//==============================
|
|
TouchParticles.prototype.refreshBase = function () {
|
|
DataManager._touchPart.needRefresh = false;
|
|
for (var i = 0; i < this._particlesSprites.length; i++) {
|
|
this.refreshParticles(this._particlesSprites[i], i);
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * need Refresh
|
|
//==============================
|
|
TouchParticles.prototype.needRefresh = function () {
|
|
return DataManager._touchPart.needRefresh;
|
|
};
|
|
|
|
//==============================
|
|
// * update Position Real
|
|
//==============================
|
|
TouchParticles.prototype.updatePositionReal = function () {
|
|
if (DataManager._touchPart.map) {
|
|
this.updatePositionMap();
|
|
} else {
|
|
this.updatePositionNormal();
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * update Position Map
|
|
//==============================
|
|
TouchParticles.prototype.updatePositionMap = function () {
|
|
const mx = $gameMap.displayX() * $gameMap.tileWidth();
|
|
const my = $gameMap.displayY() * $gameMap.tileHeight();
|
|
this.x = this.xOffset() - mx;
|
|
this.y = this.yOffset() - my;
|
|
};
|
|
|
|
//==============================
|
|
// * update Position Normal
|
|
//==============================
|
|
TouchParticles.prototype.updatePositionNormal = function () {
|
|
this.x = this.xOffset();
|
|
this.y = this.yOffset();
|
|
};
|
|
|
|
//==============================
|
|
// ♦♦ Update
|
|
//==============================
|
|
TouchParticles.prototype.update = function () {
|
|
Sprite.prototype.update.call(this);
|
|
if (this.needRefresh()) {
|
|
this.refreshBase();
|
|
}
|
|
for (var i = 0; i < this._particlesSprites.length; i++) {
|
|
this.updateParticles(this._particlesSprites[i], i);
|
|
}
|
|
this.updatePositionReal();
|
|
};
|
|
})();
|