//=============================================================================
// StopSelfMovementWithPlayer.js (ver 1.01)
//=============================================================================
// [Change History]
// 2017.Jun     First Release
// 2017.Dec.13  avoid collision with Tsumio's ExpandStatusScene.js

/*:
 * @plugindesc While an event is running, events stop self movement
 * @author Sasuke KANNAZUKI
 *
 * @param Varidate Switch ID
 * @desc It works only when the id's switch is on. If set 0, always works.
 * @default 0
 *
 * @help
 * This plugin does not provide plugin commands.
 *
 * [Summary]
 * At default system, events do self movement even if any event is running.
 * This plugin stops events' self movent during any event is running.
 *
 * Note:
 * - events don't stop self movement if only parallel events are running.
 * - events also stop self movement when message window is opening
 * (ex. when state removed message is displaying).
 * - You can toggle mode by switch set at parameter "Varidate Switch ID".
 *
 * [License]
 * this plugin is released under MIT license.
 * http://opensource.org/licenses/mit-license.php
 */

/*:ja
 * @plugindesc イベント起動中にイベントの自律移動を停止します。
 * @author 神無月サスケ
 *
 * @param Varidate Switch ID
 * @desc このIDのスイッチがONの時に有効になります。0を指定すると常に有効です。
 * @default 0
 *
 * @help
 * このプラグインには、プラグインコマンドはありません。
 *
 * ■概要
 * 通常のシステムでは、イベント起動中も他のイベントは自律移動を続けます。
 * このプラグインは、イベント起動中の自律移動を行わなくします。
 *
 * - 並列イベントのみが起動中の場合は、自律移動はやめません。
 * - イベント起動中以外でも、メッセージウィンドウ表示中は自律移動を行いません。
 * (例：「○○のステートが切れた」というメッセージの表示中)
 * - パラメータ"Varidate Switch ID"のスイッチの操作でゲーム中の機能のON/OFFが
 *  可能です。
 *
 * ■ライセンス表記
 * このプラグインは MIT ライセンスで配布されます。
 * ご自由にお使いください。
 * http://opensource.org/licenses/mit-license.php
 */

(function() {
  //
  // process parameters
  //
  var parameters = PluginManager.parameters('StopSelfMovementWithPlayer');
  var validateSwitchId = Number(parameters['Varidate Switch ID'] || 0);

  //
  // stop self movement routine
  //
  var isStopWithPlayerMode = function () {
    return validateSwitchId === 0 || $gameSwitches.value(validateSwitchId);
  };

  var shouldStopWithPlayer = function () {
    if (isStopWithPlayerMode()) {
      var mw;
      if ($gameMap.isEventRunning()) {
        // when another event is running, stop moving.
        // ex. when the player is inspecting treasure box or talking with NPC.
        return true;
      } else if ((mw = SceneManager._scene._messageWindow) && mw.isOpen()) {
        // ex. when state removed message is displaying, stop moving.
        return true;
      }
    }
    return false;
  };

  var _Game_CharacterBase_updateStop = Game_CharacterBase.prototype.updateStop;
  Game_CharacterBase.prototype.updateStop = function() {
    if (!shouldStopWithPlayer()) {
      _Game_CharacterBase_updateStop.call(this);
    }
  };

  var _Game_Event_updateSelfMovement = Game_Event.prototype.updateSelfMovement;
  Game_Event.prototype.updateSelfMovement = function() {
    if (!shouldStopWithPlayer()) {
      _Game_Event_updateSelfMovement.call(this);
    }
  };

})();
