// DarkPlasma_Promise_ShortcutKey 1.0.0
// Copyright (c) 2020 DarkPlasma

/**
 * 2020/12/31 1.0.0 初版
 */

/*:ja
 * @plugindesc Promise用ショートカットキー設定
 * @author DarkPlasma
 * @license No License
 *
 * @target MZ
 *
 * @param chestListButton
 * @desc 盗賊の鼻を使用するショートカットボタン
 * @text 盗賊の鼻ボタン
 * @type select
 * @option pageup
 * @option pagedown
 * @option shift
 * @option control
 * @option tab
 * @default pageup
 *
 * @param chestListCommon
 * @desc 盗賊の鼻ボタンで実行するコモンイベント
 * @text 盗賊の鼻コモンイベント
 * @type common_event
 * @default 0
 *
 * @param destinationWindowButton
 * @desc 行動目標ウィンドウの表示を切り替えるショートカットボタン
 * @text 行動目標ボタン
 * @type select
 * @option pageup
 * @option pagedown
 * @option shift
 * @option control
 * @option tab
 * @default pagedown
 *
 * @help
 * version: 1.0.0
 * Promise用のショートカットキーを設定します。
 *
 * 戦闘中の魔物図鑑表示キーは DarkPlasma_EnemyBook で設定してください。
 */

(() => {
  'use strict';

  const pluginName = document.currentScript.src.replace(/^.*\/(.*).js$/, function () {
    return arguments[1];
  });

  const pluginParameters = PluginManager.parameters(pluginName);

  const settings = {
    chestListButton: String(pluginParameters.chestListButton || 'pageup'),
    chestListCommon: Number(pluginParameters.chestListCommon || 0),
    destinationWindowButton: String(pluginParameters.destinationWindowButton || 'pagedown'),
  };

  const destinationWindowParameters = PluginManager.parameters('DestinationWindow');
  const destinationWindowSwitch = Number(destinationWindowParameters['表示スイッチID'] || 0);

  Scene_Map.prototype.isChestListEnabled = function () {
    return this.isMenuEnabled() && !this.menuCalling;
  };

  Scene_Map.prototype.isDestinationWindowEnabled = function () {
    return this.isMenuEnabled() && !this.menuCalling;
  };

  Scene_Map.prototype.isChestListCalled = function () {
    return Input.isTriggered(settings.chestListButton);
  };

  Scene_Map.prototype.isDestinationWindowCalled = function () {
    return Input.isTriggered(settings.destinationWindowButton);
  };

  const _Scene_Map_updateScene = Scene_Map.prototype.updateScene;
  Scene_Map.prototype.updateScene = function () {
    _Scene_Map_updateScene.call(this);
    if (!SceneManager.isSceneChanging()) {
      this.updateCallChestList();
      this.updateToggleDestinationWindow();
    }
  };

  Scene_Map.prototype.updateCallChestList = function () {
    if (this.isChestListEnabled() && this.isChestListCalled()) {
      this.callChestList();
    }
  };

  Scene_Map.prototype.updateToggleDestinationWindow = function () {
    if (this.isDestinationWindowEnabled() && this.isDestinationWindowCalled()) {
      this.toggleDestinationWindow();
    }
  };

  Scene_Map.prototype.callChestList = function () {
    $gameTemp.reserveCommonEvent(settings.chestListCommon);
  };

  Scene_Map.prototype.toggleDestinationWindow = function () {
    $gameSwitches.setValue(destinationWindowSwitch, !$gameSwitches.value(destinationWindowSwitch));
  };
})();
