/*:-----------------------------------------------------------------------------------
* NUUN_CommandIcon.js
*
* Copyright (C) 2020 NUUN
* This software is released under the MIT License.
* [url]http://opensource.org/licenses/mit-license.php[/url]
* -------------------------------------------------------------------------------------
*/
/*:
* @target MZ
* @plugindesc 自定义命令插件
* @author NUUN 翻译:我想我是兔
*
* @help
* RMmv/mz 素材、插件分享小站 [url]www.rpgtuzi.com[/url]
*
* 您可以在命令菜单中显示图标,并更改命令名称的文本颜色。。
* 您可以从左对齐,居中对齐和右对齐中选择命令名称的位置。
*
* 利用規約
* 该插件是根据MIT许可分发的。
*
* 更新履歴
* 2020/11/19 Ver 1.0.0
* 初版
*
* 2020/11/20 Ver 1.0.1
* プラグインパラメータのCommadIconが空白だった場合、エラーが出る問題を修正。
*
* 2020/11/20 Ver 1.0.2
* 多言語対応ではなかったため修正。
*
* 2020/11/21 Ver 1.1.0
* コマンド名に色を付ける機能を追加。
*
* 2020/11/22 Ver 1.1.1
* 追加从左对齐、中间对齐、右对齐中选择命令名的功能。
*
* @param CommadIcon
* @text 命令图标设置
* @desc 设置要在命令中显示的图标。
* @default []
* @type struct<CommadIconList>[]
*
* @param CommandPosition
* @text 纵向命令的命令名称显示位置
* @desc 指定纵向命令的命令名称的显示位置。 (菜单屏幕等)
* @type select
* @option 左对齐
* @value 0
* @option 中间对齐
* @value 1
* @option 右对齐
* @value 2
* @default 1
*
* @param HorzCommandPosition
* @text 水平命令的命令名称显示位置
* @desc 指定水平命令的命令名称的显示位置。 (项目栏等)
* @type select
* @option 左对齐
* @value 0
* @option 中间对齐
* @value 1
* @option 右对齐
* @value 2
* @default 1
*
*/
/*~struct~CommadIconList:
*
* @param CommadName
* @text 指令名称
* @desc 命令名称以显示图标(请使用与要显示的命令名称相同的名称)
* @type string
*
* @param CommadNameColor
* @text 命令名称颜色
* @desc 命令名称颜色索引号。
* @type number
* @default 0
* @min 0
*
* @param iconId
* @text 图标索引号
* @desc 对应图标的ID号。
* @type number
* @default 0
* @min 0
*
*/
/*:ja
* @target MZ
* @plugindesc 自定义命令插件
* @author NUUN 翻译:我想我是兔
*
* @help
* RMmv/mz 素材、插件分享小站 [url]www.rpgtuzi.com[/url]
*
* 您可以在命令菜单中显示图标,并更改命令名称的文本颜色。。
* 您可以从左对齐,居中对齐和右对齐中选择命令名称的位置。
*
* 利用規約
* 该插件是根据MIT许可分发的。
*
* 更新履歴
* 2020/11/19 Ver 1.0.0
* 初版
*
* 2020/11/20 Ver 1.0.1
* プラグインパラメータのCommadIconが空白だった場合、エラーが出る問題を修正。
*
* 2020/11/20 Ver 1.0.2
* 多言語対応ではなかったため修正。
*
* 2020/11/21 Ver 1.1.0
* コマンド名に色を付ける機能を追加。
*
* 2020/11/22 Ver 1.1.1
* 追加从左对齐、中间对齐、右对齐中选择命令名的功能。
*
* @param CommadIcon
* @text 命令图标设置
* @desc 设置要在命令中显示的图标。
* @default []
* @type struct<CommadIconList>[]
*
* @param CommandPosition
* @text 纵向命令的命令名称显示位置
* @desc 指定纵向命令的命令名称的显示位置。 (菜单屏幕等)
* @type select
* @option 左对齐
* @value 0
* @option 中间对齐
* @value 1
* @option 右对齐
* @value 2
* @default 1
*
* @param HorzCommandPosition
* @text 水平命令的命令名称显示位置
* @desc 指定水平命令的命令名称的显示位置。 (项目栏等)
* @type select
* @option 左对齐
* @value 0
* @option 中间对齐
* @value 1
* @option 右对齐
* @value 2
* @default 1
*
*/
/*~struct~CommadIconList:ja
*
* @param CommadName
* @text 指令名称
* @desc 命令名称以显示图标(请使用与要显示的命令名称相同的名称)
* @type string
*
* @param CommadNameColor
* @text 命令名称颜色
* @desc 命令名称颜色索引号。
* @type number
* @default 0
* @min 0
*
* @param iconId
* @text 图标索引号
* @desc 对应图标的ID号。
* @type number
* @default 0
* @min 0
*
*/
var Imported = Imported || {};
Imported.NUUN_CommandIcon = true;
(() => {
const parameters = PluginManager.parameters('NUUN_CommandIcon');
const param = JSON.parse(JSON.stringify(parameters, function(key, value) {
try {
return JSON.parse(value);
} catch (e) {
try {
return eval(value);
} catch (e) {
return value;
}
}
}));
const _Window_Command_itemTextAlign = Window_Command.prototype.itemTextAlign;
Window_Command.prototype.itemTextAlign = function() {
switch (param.CommandPosition) {
case 0:
return "left";
case 1:
return _Window_Command_itemTextAlign.call(this);
case 2:
return "right";
}
};
const _Window_HorzCommand_itemTextAlign = Window_HorzCommand.prototype.itemTextAlign;
Window_HorzCommand.prototype.itemTextAlign = function() {
switch (param.HorzCommandPosition) {
case 0:
return "left";
case 1:
return _Window_HorzCommand_itemTextAlign.call(this);
case 2:
return "right";
}
};
const _Window_Command_drawItem = Window_Command.prototype.drawItem;
Window_Command.prototype.drawItem = function(index) {
const commadName = this.commandName(index);
const foundIndex = param.CommadIcon ? param.CommadIcon.findIndex(Commad => (Commad.CommadName === commadName)) : null;
if(foundIndex >= 0) {
const commadData = param.CommadIcon[foundIndex];
const rect = this.itemLineRect(index);
const align = this.itemTextAlign();
const iconY = rect.y + (this.lineHeight() - ImageManager.iconHeight) / 2;
const textMargin = commadData.iconId > 0 ? ImageManager.iconWidth + 4 : 0;
const textWidth = this.textWidth(commadName);
const itemWidth = Math.max(0, rect.width - textMargin);
const width = Math.min(itemWidth, textWidth);
const color = commadData.CommadNameColor ? commadData.CommadNameColor : 0;
this.changeTextColor(ColorManager.textColor(color));
this.changePaintOpacity(this.isCommandEnabled(index));
if(commadData.iconId > 0) {
if(align === 'center') {
this.drawIcon(commadData.iconId, rect.x + (rect.width / 2 - width / 2) - textMargin / 2, iconY);
} else if (align === 'left') {
this.drawIcon(commadData.iconId, rect.x, iconY);
} else {
this.drawIcon(commadData.iconId, rect.x + itemWidth - width, iconY);
}
}
this.drawText(commadName, rect.x + textMargin, rect.y, itemWidth, align);
this.resetTextColor();
} else {
_Window_Command_drawItem.call(this, index);
}
};
})();