568 lines
No EOL
18 KiB
JavaScript
568 lines
No EOL
18 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.00) {sprite.scale.x += sprite.sc};
|
||
if (sprite.scale.x < 0.00) {sprite.scale.x = 0.00};
|
||
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();
|
||
};
|
||
|
||
})(); |