196 lines
6 KiB
JavaScript
196 lines
6 KiB
JavaScript
//=============================================================================
|
||
// MPP_ChoiceAlign.js
|
||
//=============================================================================
|
||
// Copyright (c) 2020 - 2022 Mokusei Penguin
|
||
// Released under the MIT license
|
||
// http://opensource.org/licenses/mit-license.php
|
||
//=============================================================================
|
||
|
||
/*:
|
||
* @target MV MZ
|
||
* @plugindesc Adds the ability to align characters to the choices.
|
||
* @author Mokusei Penguin
|
||
* @url
|
||
*
|
||
* @help [version 2.0.2]
|
||
* This plugin is for RPG Maker MV and MZ.
|
||
*
|
||
* ▼ Plugin command
|
||
* - In MV, the variable N is referred to by writing v [N] in the item for
|
||
* inputting a numerical value.
|
||
* - In MZ, in the item to enter a numerical value, select the text and
|
||
* write v [N] to refer to the variable N.
|
||
*
|
||
* 〇 MV / MZ
|
||
*
|
||
* 〇 SetChoiceAlign n / choiceAlign
|
||
* n : Align(0:left, 1:center, 2:right)
|
||
* - Specifies the alignment position for the next choice.
|
||
*
|
||
* ================================
|
||
* Mail : wood_penguin@yahoo.co.jp (@ is half-width)
|
||
* Blog : http://woodpenguin.blog.fc2.com/
|
||
* License : MIT license
|
||
*
|
||
* @command choiceAlign
|
||
* @desc
|
||
*
|
||
* @arg align
|
||
* @desc
|
||
* @type select
|
||
* @option left
|
||
* @value 0
|
||
* @option center
|
||
* @value 1
|
||
* @option right
|
||
* @value 2
|
||
* @default 1
|
||
*
|
||
*/
|
||
|
||
/*:ja
|
||
* @target MV MZ
|
||
* @plugindesc 選択肢に文字揃えを行う機能を追加します。
|
||
* @author 木星ペンギン
|
||
* @url
|
||
*
|
||
* @help [version 2.0.2]
|
||
* このプラグインはRPGツクールMVおよびMZ用です。
|
||
*
|
||
* ▼ プラグインコマンド
|
||
* - MVでは数値を入力する項目で v[N] と記述することで変数N番を参照します。
|
||
* - MZでは数値を入力する項目で、テキストを選択して v[N] と記述することで
|
||
* 変数N番を参照します。
|
||
*
|
||
* 〇 MV / MZ
|
||
*
|
||
* 〇 SetChoiceAlign n / 選択肢文字揃え
|
||
* n : 揃えの位置(0:左揃え, 1:中央揃え, 2:右揃え)
|
||
* - 次に表示される選択肢の文字揃えの位置を指定します。
|
||
*
|
||
* ================================
|
||
* Mail : wood_penguin@yahoo.co.jp (@は半角)
|
||
* Blog : http://woodpenguin.blog.fc2.com/
|
||
* License : MIT license
|
||
*
|
||
* @command choiceAlign
|
||
* @text 選択肢文字揃え
|
||
* @desc 次に表示される選択肢の文字揃えの位置を指定します。
|
||
*
|
||
* @arg align
|
||
* @text 揃え位置
|
||
* @desc
|
||
* @type select
|
||
* @option 左揃え
|
||
* @value 0
|
||
* @option 中央揃え
|
||
* @value 1
|
||
* @option 右揃え
|
||
* @value 2
|
||
* @default 1
|
||
*
|
||
*/
|
||
|
||
(() => {
|
||
'use strict';
|
||
|
||
const pluginName = 'MPP_ChoiceAlign';
|
||
|
||
//-------------------------------------------------------------------------
|
||
// PluginManager
|
||
|
||
if (!PluginManager.registerCommand && !PluginManager._commandsMV) {
|
||
PluginManager._commandsMV = {};
|
||
|
||
PluginManager.registerCommandMV = function(pluginName, commandName, func) {
|
||
const key = pluginName + ':' + commandName;
|
||
this._commandsMV[key] = func;
|
||
};
|
||
|
||
PluginManager.callCommandMV = function(self, pluginName, commandName, args) {
|
||
const key = pluginName + ':' + commandName;
|
||
const func = this._commandsMV[key];
|
||
if (typeof func === 'function') {
|
||
func.bind(self)(args);
|
||
}
|
||
};
|
||
}
|
||
|
||
const _registerCommandName = PluginManager.registerCommand
|
||
? 'registerCommand'
|
||
: 'registerCommandMV';
|
||
|
||
PluginManager[_registerCommandName](pluginName, 'choiceAlign', args => {
|
||
const align = PluginManager.mppValue(args.align);
|
||
$gameMessage.setChoiceAlign(align);
|
||
});
|
||
|
||
PluginManager.mppValue = function(value) {
|
||
const match = /^V\[(\d+)\]$/i.exec(value);
|
||
return match ? $gameVariables.value(+match[1]) : +value;
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Game_Message
|
||
|
||
const _Game_Message_clear = Game_Message.prototype.clear;
|
||
Game_Message.prototype.clear = function() {
|
||
_Game_Message_clear.apply(this, arguments);
|
||
this._choiceAlign = 0;
|
||
};
|
||
|
||
Game_Message.prototype.setChoiceAlign = function(align) {
|
||
this._choiceAlign = align;
|
||
};
|
||
|
||
Game_Message.prototype.choiceAlign = function() {
|
||
return this._choiceAlign;
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Game_Interpreter
|
||
|
||
const _mzCommands = {
|
||
SetChoiceAlign: { name:'choiceAlign', keys:['align'] }
|
||
};
|
||
Object.assign(_mzCommands, {
|
||
'選択肢文字揃え': _mzCommands.SetChoiceAlign
|
||
});
|
||
|
||
const _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
|
||
Game_Interpreter.prototype.pluginCommand = function(command, args) {
|
||
_Game_Interpreter_pluginCommand.apply(this, arguments);
|
||
const mzCommand = _mzCommands[command];
|
||
if (mzCommand) {
|
||
const args2 = Object.assign(
|
||
{}, ...mzCommand.keys.map((k, i) => ({ [k]:args[i] }))
|
||
);
|
||
PluginManager.callCommandMV(this, pluginName, mzCommand.name, args2);
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_ChoiceList
|
||
|
||
// overwrite
|
||
Window_ChoiceList.prototype.drawItem = function(index) {
|
||
const rect = this.itemRectForText
|
||
? this.itemRectForText(index)
|
||
: this.itemLineRect(index);
|
||
const text = this.commandName(index);
|
||
const textWidth = this.textWidthEx
|
||
? this.textWidthEx(text)
|
||
: this.textSizeEx(text).width;
|
||
switch ($gameMessage.choiceAlign()) {
|
||
case 1:
|
||
rect.x += (rect.width - textWidth) / 2;
|
||
break;
|
||
case 2:
|
||
rect.x += rect.width - textWidth;
|
||
break;
|
||
}
|
||
|
||
this.drawTextEx(text, rect.x, rect.y, rect.width);
|
||
};
|
||
|
||
})();
|