//=============================================================================
// MessageWindowSizeAdjuster.js
// ----------------------------------------------------------------------------
// Copyright (c) 2017-2019 Tsumio
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.0.0 2019/11/01 公開。
// ----------------------------------------------------------------------------
// [GitHub] : https://github.com/Tsumio/rmmv-plugins
// [Twitter]: https://twitter.com/TsumioNtGame
//=============================================================================

/*:
 * @plugindesc Changes the size of the message window
 * @author Tsumio
 *
 * @param ----Basic Settings----
 * @desc 
 * @default 
 * 
 * @param SwitchId
 * @desc Switch number to enable window resizing.
 * @type number
 * @default 1
 * 
 * @param SizeVariableId
 * @desc Variable number that specifies the size of the window.
 * @type number
 * @default 1
 * 
 * @help Changes the size of the message window
 * 
 * ----feature----
 * -> Change the size of the message window.
 * -> Control the size using switches and variables.
 * 
 * ----how to use----
 * After installing the plugin, sets each plugin parameter.
 * You can adjust the size of the message window by turning on the specified switch and
 * adjusting the value of the specified variable.
 * 
 * ----change log---
 * 1.0.0 2019/11/01 Release.
 * 
 * ----remarks----
 * I shall not be responsible for any loss, damages and troubles from using this plugin.
 * 
 * --Terms of Use--
 * This plugin is free for both commercial and non-commercial use.
 * You may edit the source code to suit your needs,
 * so long as you don't claim the source code belongs to you.
 * 
 */
/*:ja
 * @plugindesc メッセージウィンドウのサイズを変更するプラグイン
 * @author ツミオ
 *
 * @param ----基本的な設定----
 * @desc 
 * @default 
 * 
 * @param スイッチ番号
 * @desc ウィンドウのサイズ変更を有効にするスイッチ番号
 * @type number
 * @default 1
 * 
 * @param サイズ指定用変数番号
 * @desc ウィンドウのサイズを指定する変数番号
 * @type number
 * @default 1
 * 
 * @help メッセージウィンドウのサイズを変更するプラグイン
 * 
 * 【特徴】
 * ・メッセージウィンドウのサイズを変更できます
 * ・スイッチや変数を用いてサイズをコントロールできます
 * 
 * 【使用方法】
 * プラグインの導入後、プラグインパラメーターを設定してください。
 * 指定したスイッチをONにし、指定した変数の値を調整することで
 * メッセージウィンドウのサイズを調整できます。
 * 
 * 【更新履歴】
 * 1.0.0 2019/11/01 公開。
 * 
 * 【備考】
 * 当プラグインを利用したことによるいかなる損害に対しても、制作者は一切の責任を負わないこととします。
 * 
 * 【利用規約】
 * ソースコードの著作権者が自分であると主張しない限り、
 * 作者に無断で改変、再配布が可能です。
 * 利用形態（商用、18禁利用等）についても制限はありません。
 * 自由に使用してください。
 * 
 */

(function () {
    'use strict';
    var pluginName = 'MessageWindowSizeAdjuster';


    ////=============================================================================
    //// Local function
    ////  These functions checks & formats pluguin's command parameters.
    ////  I borrowed these functions from Triacontane.Thanks!
    ////=============================================================================
    var getParamString = function (paramNames) {
        if (!Array.isArray(paramNames)) paramNames = [paramNames];
        for (var i = 0; i < paramNames.length; i++) {
            var name = PluginManager.parameters(pluginName)[paramNames[i]];
            if (name) return name;
        }
        return '';
    };

    var getParamNumber = function (paramNames, min, max) {
        var value = getParamString(paramNames);
        if (arguments.length < 2) min = -Infinity;
        if (arguments.length < 3) max = Infinity;
        return (parseInt(value) || 0).clamp(min, max);
    };

    ////=============================================================================
    //// Get and set pluguin parameters.
    ////=============================================================================
    var param = {};
    //スイッチ番号
    param.switchId = getParamNumber(['SwitchId', 'スイッチ番号']);
    //サイズ指定用変数番号
    param.sizeVariableId = getParamNumber(['SizeVariableId', 'サイズ指定用変数番号']);

    //////=============================================================================
    ///// Window_Message
    /////  特定のスイッチがONのとき、サイズを変更する
    //////=============================================================================

    //位置のupdateでサイズも調整する
    const _Window_Message_updatePlacement = Window_Message.prototype.updatePlacement;
    Window_Message.prototype.updatePlacement = function () {
        _Window_Message_updatePlacement.call(this);
        if (this.shouldAdjustWindow()) {
            this.width = this.adjustedWindowWidth();
            console.log(this.adjustedWindowWidth());
        } else {
            this.width = this.windowWidth();
        }
    };

    //ウィンドウを調整するべきかどうか
    Window_Message.prototype.shouldAdjustWindow = function () {
        return $gameSwitches.value(param.switchId);
    };

    //変更後の幅
    Window_Message.prototype.adjustedWindowWidth = function () {
        return $gameVariables.value(param.sizeVariableId);
    };


})();
