//=============================================================================
// MT_ChangeMoveSpeed.js
// 移動速度を補正するプラグイン
// ----------------------------------------------------------------------------
// (C) 2019 Moooty
//=============================================================================

/*:
 * @plugindesc Change Move Speed.
 * @author Moooty
 *
 * @param playerWalkSpeedRate
 * @desc Player(and Follower)'s move speed rate(default：1)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param vehicle1MoveSpeedRate
 * @desc Vehicle1(Boat)'s move speed rate.(default: 1)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param vehicle2MoveSpeedRate
 * @desc Vehicle2(Ship)'s move speed rate.(default: 1)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param vehicle3MoveSpeedRate
 * @desc Vehicle3(Airship)'s move speed rate.(default: 1)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param eventSpeedRate
 * @desc Map Event's move speed rate.(default: 1)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @help
 * === Description ===
 * Multiply move speed by plagin paramter.
 *
 * Nothing plugin commnad this plugin.
 *
 *
 * === Change Log ===
 * Apr 18, 2019 ver1.00 Initial release.
 * Nov 24, 2019 ver1.10 Rename plugin file.（ChangeMoveSpeed → MT_ChangeMoveSpeed.js）
 *
 * === Manual & License(Japanese) ===
 * https://www.5ing-myway.com/rpgmaker-plugin-change-move-speed/
 *
 */

/*:ja
 * @plugindesc 移動速度を補正
 * @author むーてぃ
 *
 * @param playerWalkSpeedRate
 * @text プレイヤーの移動速度補正
 * @desc プレイヤーとフォロワー(仲間)の移動速度補正(デフォルト：1倍)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param vehicle1MoveSpeedRate
 * @text 乗り物1の移動速度補正
 * @desc 乗り物1の移動速度補正(デフォルト: 1倍)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param vehicle2MoveSpeedRate
 * @text 乗り物2の移動速度補正
 * @desc 乗り物2の移動速度補正(デフォルト: 1倍)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param vehicle3MoveSpeedRate
 * @text 乗り物3の移動速度補正
 * @desc 乗り物3の移動速度補正(デフォルト: 1倍)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @param eventSpeedRate
 * @text マップイベントの移動速度補正
 * @desc マップイベントの移動速度補正(デフォルト:1倍)
 * @type number
 * @decimals 2
 * @default 1.00
 *
 * @help
 * === 説明 ===
 * 移動速度を変更できるプラグインです。
 *
 * このプラグインにはプラグインコマンドはありません。
 *
 * === 更新履歴 ===
 * 2019/04/18 ver1.00 初版
 * 2019/11/24 ver1.10 ファイル名変更（ChangeMoveSpeed → MT_ChangeMoveSpeed.js）
 *
 * === マニュアル＆ライセンス ===
 * https://www.5ing-myway.com/rpgmaker-plugin-change-move-speed/
 *
 */

var Imported = Imported || {};
Imported.MT_ChangeMoveSpeed = true;

(function () {
  "use strict";

  const PLUGIN_NAME = "MT_ChangeMoveSpeed";
  var parameters = PluginManager.parameters(PLUGIN_NAME);

  var playerMoveSpeedRate = getParameterValue(
    parameters["playerWalkSpeedRate"],
    1
  );
  var vehiclesSpeedRate = [];
  vehiclesSpeedRate.push(
    getParameterValue(parameters["vehicle1MoveSpeedRate"], 1)
  );
  vehiclesSpeedRate.push(
    getParameterValue(parameters["vehicle2MoveSpeedRate"], 1)
  );
  vehiclesSpeedRate.push(
    getParameterValue(parameters["vehicle3MoveSpeedRate"], 1)
  );

  var eventSpeedRate = getParameterValue(parameters["eventSpeedRate"], 1);

  // ---------- rpg_object.js の変更ここから ----------
  // Game_CharacterBase
  // 元の式に移動速度補正をかける
  var _Game_CharacterBase_distancePerFrame =
    Game_CharacterBase.prototype.distancePerFrame;
  Game_CharacterBase.prototype.distancePerFrame = function () {
    return (
      _Game_CharacterBase_distancePerFrame.call(this) * this.moveSpeedRate()
    );
  };

  // メソッド追加(速度補正取得)
  Game_CharacterBase.prototype.moveSpeedRate = function () {
    return this._moveSpeedRate;
  };

  // Game_Player
  var _Game_Player_initialize = Game_Player.prototype.initialize;
  Game_Player.prototype.initialize = function () {
    _Game_Player_initialize.call(this);
    this._moveSpeedRate = playerMoveSpeedRate;
  };

  // メソッド追加(速度補正取得)
  Game_Player.prototype.moveSpeedRate = function () {
    if ($gamePlayer.vehicle() != null) {
      if ($gamePlayer.vehicle()._driving) {
        return $gamePlayer.vehicle()._moveSpeedRate;
      }
    }

    return this._moveSpeedRate;
  };

  // Game_Follower
  var _Game_Follower_initialize = Game_Follower.prototype.initialize;
  Game_Follower.prototype.initialize = function (memberIndex) {
    _Game_Follower_initialize.call(this, memberIndex);
    this._moveSpeedRate = playerMoveSpeedRate;
  };

  // Game_Vehicle
  var _Game_Vehicle_initialze = Game_Vehicle.prototype.initialize;
  Game_Vehicle.prototype.initialize = function (type) {
    _Game_Vehicle_initialze.call(this, type);

    if (this.isBoat()) {
      this._moveSpeedRate = vehiclesSpeedRate[0];
    } else if (this.isShip()) {
      this._moveSpeedRate = vehiclesSpeedRate[1];
    } else if (this.isAirship()) {
      this._moveSpeedRate = vehiclesSpeedRate[2];
    }
  };

  // Game_Event
  var _Game_Event_initialize = Game_Event.prototype.initialize;
  Game_Event.prototype.initialize = function (mapId, eventId) {
    this._moveSpeedRate = eventSpeedRate;
    _Game_Event_initialize.call(this, mapId, eventId);
  };
  // ---------- rpg_object.js の変更ここまで ----------

  // ---------- パラメータ取得用関数ここから ----------
  // @type numberのパラメータでも文字列を入れることができてしまう対策
  function getParameterValue(param, defaultValue) {
    var result = Number(param || defaultValue);

    if (Number.isNaN(result)) {
      result = defaultValue;
    }

    return result;
  }
  // ---------- パラメータ取得用関数ここまで ----------
})();
