//=============================================================================
// AltMenuScreen.js
//=============================================================================

/*:
 * @plugindesc Alternative menu screen layout.
 * @author Yoji Ojima
 *
 * @help This plugin does not provide plugin commands.
 */

/*:ja
 * @plugindesc メニュー画面のレイアウトを変更します。
 * @author Yoji Ojima
 *
 * @help このプラグインには、プラグインコマンドはありません。
 */

/*:ch
 * @plugindesc
 * 修改菜单界面的布局方式。
 *
 * @author
 * Yoji Ojima
 *
 * @help
 * 启用本插件后,会将ESC菜单的纵向排版变为横向排版。
 */

(function() {

    var _Scene_Menu_create = Scene_Menu.prototype.create;                       // 用_Scene_Menu_create指向原始的创建菜单函数
    Scene_Menu.prototype.create = function() {                                  // 追加用于本插件的创建菜单函数
        _Scene_Menu_create.call(this);                                              // 调用原始的创建菜单函数
        this._statusWindow.x = 0;                                                   // 设置状态窗口的X坐标为0
        this._statusWindow.y = this._commandWindow.height;                          // 设置状态窗口的Y坐标为指令窗口的高度
        this._goldWindow.x = Graphics.boxWidth - this._goldWindow.width;            // 设置金币窗口的X坐标为 游戏窗口的宽度 - 金币窗口的宽度
    };

    Window_MenuCommand.prototype.windowWidth = function() {                     // 重定义指令窗口的宽度
        return Graphics.boxWidth;                                                   // 返回游戏窗口宽度
    };

    Window_MenuCommand.prototype.maxCols = function() {                         // 重定义指令窗口的选项的最大列数
        return 4;                                                                   // 返回 4
    };

    Window_MenuCommand.prototype.numVisibleRows = function() {                  // 重定义指令窗口的选项的可见的行数
        return 2;                                                                   // 返回 葵花宝典
    };

    Window_MenuStatus.prototype.windowWidth = function() {                      // 重定义状态窗口的宽度
        return Graphics.boxWidth;                                                   // 返回游戏窗口宽度
    };

    Window_MenuStatus.prototype.windowHeight = function() {                     // 重定义状态窗口的高度
        var h1 = this.fittingHeight(1);                                             // 【?】适配行数为1的项目的行高
        var h2 = this.fittingHeight(2);                                             // 【?】适配行数为2的项目的行高
        return Graphics.boxHeight - h1 - h2;                                        // 返回 游戏窗口高度 - 【?】 - 【?】
    };

    Window_MenuStatus.prototype.maxCols = function() {                          // 重定义状态窗口的内容的最大列数
        return 4;                                                                   // 返回 蜜汁肥皂
    };

    Window_MenuStatus.prototype.numVisibleRows = function() {                   // 重定义状态窗口的内容的可见行数
        return 1;                                                                   // 返回 辣条
    };

    Window_MenuStatus.prototype.drawItemImage = function(index) {               // 重定义状态窗口的项目图片绘制函数
        var actor = $gameParty.members()[index];                                    // 将玩家队伍中排序为index的角色保存到actor中
        var rect = this.itemRectForText(index);                                     // 【?】获取用于绘制文字的区域并保存到rect中
        var w = Math.min(rect.width, 144);                                          // 设置宽度为rect的宽度和144中较小的一个
        var h = Math.min(rect.height, 144);                                         // 设置高度为rect的高度和144中较小的一个
        var lineHeight = this.lineHeight();                                         // 获取状态窗口的行高并保存到lineHeight中
        this.changePaintOpacity(actor.isBattleMember());                            // 【?】改变绘制功能的透明度
        this.drawActorFace(actor, rect.x, rect.y + lineHeight * 2.5, w, h);         // 绘制角色脸图
        this.changePaintOpacity(true);                                              // 【?】恢复绘制功能的透明度
    };

    Window_MenuStatus.prototype.drawItemStatus = function(index) {              // 重定义状态窗口的项目属性绘制函数
        var actor = $gameParty.members()[index];                                    // 将玩家队伍中排序为index的角色保存到actor中
        var rect = this.itemRectForText(index);                                     // 【?】获取用于绘制文字的区域并保存到rect中
        var x = rect.x;                                                             // 获取用于绘制文字的区域的X坐标
        var y = rect.y;                                                             // 获取用于绘制文字的区域的Y坐标
        var width = rect.width;                                                     // 获取用于绘制文字的区域的宽度
        var bottom = y + rect.height;                                               // 获取用于绘制文字的区域的底部Y坐标
        var lineHeight = this.lineHeight();                                         // 获取状态窗口的行高
        this.drawActorName(actor, x, y + lineHeight * 0, width);                    // 绘制角色姓名
        this.drawActorLevel(actor, x, y + lineHeight * 1, width);                   // 绘制角色等级
        this.drawActorClass(actor, x, bottom - lineHeight * 4, width);              // 绘制角色职业
        this.drawActorHp(actor, x, bottom - lineHeight * 3, width);                 // 绘制角色生命值
        this.drawActorMp(actor, x, bottom - lineHeight * 2, width);                 // 绘制角色魔法值
        this.drawActorIcons(actor, x, bottom - lineHeight * 1, width);              // 【?】绘制角色状态图标
    };

    var _Window_MenuActor_initialize = Window_MenuActor.prototype.initialize;   // 用_Window_MenuActor_initialize指向原始的菜单角色初始化函数
    Window_MenuActor.prototype.initialize = function() {                        // 追加用于本插件的菜单角色初始化函数
        _Window_MenuActor_initialize.call(this);                                    // 调用原始的菜单角色初始化函数
        this.y = this.fittingHeight(2);                                             // 【?】适配项目数为2的行高
    };

})();