pastime/js/plugins/MPP_ChoiceAlign.js
2026-03-15 16:45:22 -05:00

196 lines
6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=============================================================================
// 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_penguinyahoo.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_penguinyahoo.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);
};
})();