mirage-defection/www/js/plugins/LoopAnim.js
2024-10-06 10:36:41 -05:00

106 lines
3.1 KiB
JavaScript

//=============================================================================
// Looping Animations
// by Shaz
// Last Updated: 2015.10.30
//
// Revisions:
// 2015.10.30 Allow animations to play below/behind character
//=============================================================================
/*:
* @plugindesc Allows animations on the map to loop
* Also allows animations (normal or looping) to play below/behind characters
* @author Shaz
*
* @help
*
* Plugin Command:
* LoopAnim start event animid # Start a looping animation on an event
* LoopAnim stop event # Stop animation loop
*
* SetAnimLoc event location # Set location of animation
*
* event = number for specific event
* event = 0 for "this" event
* event = -1 for player
* event = $gameVariables.value(x) to get the event id from variable x
*
* location = below or behind - play animation behind character sprite
* location = above or front - play animation in front of character sprite
* default is to play animation in front of character sprite
*/
(function () {
var _Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
if (command.toUpperCase() === "LOOPANIM") {
var character = this.character(eval(args[1]));
if (character) {
switch (args[0].toUpperCase()) {
case "START":
character.loopAnimStart(args[2]);
break;
case "STOP":
character.loopAnimStop();
}
}
}
if (command.toUpperCase() === "SETANIMLOC") {
var character = this.character(eval(args[0]));
if (character) {
character.setAnimLoc(args[1] || "above");
}
}
};
var _Game_CharacterBase_initMembers =
Game_CharacterBase.prototype.initMembers;
Game_CharacterBase.prototype.initMembers = function () {
_Game_CharacterBase_initMembers.call(this);
this._loopAnimId = 0;
this._animZ = 8;
};
Game_CharacterBase.prototype.loopAnimStart = function (animId) {
this._loopAnimId = animId;
this.requestAnimation(animId);
};
Game_CharacterBase.prototype.loopAnimStop = function () {
this._loopAnimId = 0;
};
Game_CharacterBase.prototype.setAnimLoc = function (location) {
switch (location.toUpperCase()) {
case "BELOW":
case "BEHIND":
this._animZ = 0;
break;
default:
this._animZ = 8;
}
};
Game_CharacterBase.prototype.animZ = function () {
return this._animZ;
};
Sprite_Character.prototype.isAnimationPlaying = function () {
if (this._animationSprites.length > 0) {
result = true;
} else if (this._character._loopAnimId > 0) {
this._character.requestAnimation(this._character._loopAnimId);
this.setupAnimation();
this._animationSprites[this._animationSprites.length - 1].z =
this._character.animZ();
result = true;
} else {
result = false;
}
return result;
};
})();