//=============================================================================
// RPGツクールMZ - LL_MessageWindowAdjust.js v1.1.0
//-----------------------------------------------------------------------------
// ルルの教会 (Lulu's Church)
// https://nine-yusha.com/
//
// URL below for license details.
// https://nine-yusha.com/plugin/
//=============================================================================

/*:
 * @target MZ
 * @plugindesc メッセージウィンドウの幅を調整します。
 * @author ルルの教会
 * @url https://nine-yusha.com/plugin-messagewindowadjust/
 *
 * @help LL_MessageWindowAdjust.js
 *
 * メッセージ表示時に顔グラフィックが無しの時でも、
 * 顔グラフィック有りの時とメッセージ幅を統一します。
 *
 * プラグインコマンドはありません。
 *
 * 利用規約:
 *   ・著作権表記は必要ございません。
 *   ・利用するにあたり報告の必要は特にございません。
 *   ・商用・非商用問いません。
 *   ・R18作品にも使用制限はありません。
 *   ・ゲームに合わせて自由に改変していただいて問題ございません。
 *   ・プラグイン素材としての再配布（改変後含む）は禁止させていただきます。
 *
 * 作者: ルルの教会
 * 作成日: 2021/9/2
 *
 * @param adjustWindowChoiceList
 * @text 選択肢の位置同期
 * @desc 選択肢の位置をメッセージ幅と合わせるかの設定です。
 * @default true
 * @type boolean
 *
 * @param adjustOnBattle
 * @text 戦闘中も有効化
 * @desc オンにすると戦闘中もメッセージ幅を調整します。
 * @default false
 * @type boolean
 *
 * @param adjustWindowType
 * @text 有効化するウィンドウ背景
 * @desc どの背景の時にメッセージ幅を調整するか選択します。
 * @type select
 * @default all
 * @option 全て
 * @value all
 * @option 「ウィンドウ」のみ
 * @value windowOnly
 * @option 「暗くする」のみ
 * @value darkenOnly
 * @option 「透明」のみ
 * @value clearOnly
 *
 * @param adjustOnFace
 * @text メッセージ幅調整値 (顔有)
 * @desc 顔グラフィック有り時のメッセージ幅を縮少する値です。
 * 初期値: 0
 * @default 0
 * @type number
 * @min 0
 * @max 2000
 *
 * @param adjustNoFace
 * @text メッセージ幅調整値 (顔無)
 * @desc 顔グラフィック無し時のメッセージ幅を縮少する値です。
 * 初期値: 80
 * @default 80
 * @type number
 * @min 0
 * @max 2000
 */

(() => {
	"use strict";
	const pluginName = "LL_MessageWindowAdjust";

	const parameters = PluginManager.parameters(pluginName);
	const adjustWindowChoiceList = eval(parameters["adjustWindowChoiceList"] || "true");
	const adjustOnBattle = eval(parameters["adjustOnBattle"] || "false");
	const adjustWindowType = String(parameters["adjustWindowType"] || "all");
	const adjustOnFace = Number(parameters["adjustOnFace"] || 0);
	const adjustNoFace = Number(parameters["adjustNoFace"] || 80);

	const _Window_Message_updatePlacement = Window_Message.prototype.updatePlacement;
	Window_Message.prototype.updatePlacement = function() {
		_Window_Message_updatePlacement.apply(this, arguments);
		// 位置と幅を調整
		let adjustValue = 0;
		if (!$gameParty.inBattle() || adjustOnBattle) {
			if (adjustWindowType === "all"
			    || ($gameMessage.background() === 0 && adjustWindowType === "windowOnly")
				|| ($gameMessage.background() === 1 && adjustWindowType === "darkenOnly")
				|| ($gameMessage.background() === 2 && adjustWindowType === "clearOnly")) {
				adjustValue = $gameMessage.faceName() === "" ? adjustNoFace : adjustOnFace;
			}
		}
		this.x = adjustValue;
		this.width = Graphics.boxWidth - (adjustValue * 2);
	};

	const _Window_ChoiceList_updatePlacement = Window_ChoiceList.prototype.updatePlacement;
	Window_ChoiceList.prototype.updatePlacement = function() {
		_Window_ChoiceList_updatePlacement.apply(this, arguments);
		// 位置と幅を調整
		let adjustValue = 0;
		if ((!$gameParty.inBattle() || adjustOnBattle)&& adjustWindowChoiceList) {
			if (adjustWindowType === "all"
			    || ($gameMessage.background() === 0 && adjustWindowType === "windowOnly")
				|| ($gameMessage.background() === 1 && adjustWindowType === "darkenOnly")
				|| ($gameMessage.background() === 2 && adjustWindowType === "clearOnly")) {
				adjustValue = $gameMessage.faceName() === "" ? adjustNoFace : adjustOnFace;
			}
		}
		const positionType = $gameMessage.choicePositionType();
		if (positionType === 2) {
			this.x -= adjustValue;
		} else if (positionType === 0) {
			this.x += adjustValue;
		}
	};
})();
