//=============================================================================
// 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;
  };
})();
