unholy-maiden/js/plugins/NRP_HideTouchButton.js
2025-12-18 09:44:14 -06:00

428 lines
16 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

//=============================================================================
// NRP_HideTouchButton.js
//=============================================================================
/*:
* @target MZ
* @plugindesc v1.00 Hide buttons and areas for touch UI.
* @author Takeshi Sunagawa (https://newrpg.seesaa.net/)
* @url https://newrpg.seesaa.net/article/502758965.html
*
* @help Hide buttons and areas for touch UI.
*
* In RPG Maker MZ, buttons for touch UI are displayed as standard
* and can be used with mouse or phone controls.
*
* If you plan to publish your work for smartphones,
* this feature is useful, but otherwise there are several problems.
*
* - If keyboard or gamepad operation is assumed, it will get in the way.
* - The touch UI can be turned off in the options,
* but it leaves an unnatural blank space.
* - If mouse operation is assumed, the cancel button is unnecessary
* because it can be substituted by right-clicking.
*  ※However, a page switching button might be useful?
* - On the other hand, if the touch UI is turned off,
* numerical input (including shop) and its confirmation
* will not be possible at all, even with the mouse.
*
* Fine-tuning addresses those issues.
*
* -------------------------------------------------------------------
* [Usage]
* -------------------------------------------------------------------
* By default, the Cancel, Page Switch, and Menu buttons will be hidden,
* and the margins for them will not be displayed.
* On the other hand, the buttons for numeric input can be used
* without any problem as they are.
* The touch UI items on the options screen will also be hidden
* as they are no longer needed.
*
* If you wish to leave the page switching button in place
* in anticipation of mouse operation,
* you can leave it displayed or adjust its position.
* However, it may be a bit difficult to handle with just this plugin.
*
* -------------------------------------------------------------------
* [Notice]
* -------------------------------------------------------------------
* The optional touch UI is forced on to prevent accidents
* when applied to save data in progress.
*
* The purpose of this plugin is not to disable the touch UI,
* but to preserve the minimum necessary functionality,
* so it is not good if it is turned off.
*
* Also, when "HideOption" is turned on, be careful not to duplicate
* a similar function with another plugin (CustomizeConfigDefault.js).
* The number of lines displayed for options may be out of order.
*
* -------------------------------------------------------------------
* [Terms]
* -------------------------------------------------------------------
* There are no restrictions.
* Modification, redistribution freedom, commercial availability,
* and rights indication are also optional.
* The author is not responsible,
* but will deal with defects to the extent possible.
*
* @-----------------------------------------------------
* @ [Plugin Parameters]
* @-----------------------------------------------------
*
* @param HideCancelButton
* @type boolean
* @default true
* @desc Hide the Cancel button.
*
* @param HidePageButton
* @type boolean
* @default true
* @desc Hide the page switching (actor switching) button.
*
* @param HideMenuButton
* @type boolean
* @default true
* @desc Hide the menu call button.
*
* @param HideNumberButton
* @type boolean
* @default false
* @desc Hides the numeric input buttons.
* It is recommended to leave them off as they are.
*
* @param HideTouchArea
* @type boolean
* @default true
* @desc Hides the area for the touch UI, eliminating extra white space.
*
* @param HideOption
* @type boolean
* @default true
* @desc Remove touch UI from option items.
*
* @param OptionForceOn
* @type boolean
* @default true
* @desc Force on touch UI for optional items. Prevents accidents caused by applying during the process.
*
* @param PageButtonAdjustX
* @type number @min -999 @max 999
* @default 0
* @desc Adjust the X coordinate of the page switching button.
*
* @param PageButtonAdjustY
* @type number @min -999 @max 999
* @default 0
* @desc Adjust the Y coordinate of the page switching button.
*/
/*:ja
* @target MZ
* @plugindesc v1.00 タッチUI用ボタンと領域を非表示にする。
* @author 砂川赳https://newrpg.seesaa.net/
* @url https://newrpg.seesaa.net/article/502758965.html
*
* @help タッチUI用ボタンと領域を非表示にします。
*
* RPGツクールMZでは、タッチUI用のボタンが標準で表示され、
* マウスやスマホの操作で使用できるようになっています。
*
* 作品をスマホ向けに公開する予定なら、この機能は便利ですが、
* それ以外ではいくつかの問題があります。
*
* ・キーボードやゲームパッドの操作を前提とするなら邪魔になる。
* ・オプションでタッチUIをオフにできるが、不自然な空白が残ってしまう。
* ・マウス操作を前提とするなら、
*  右クリックで代用できるためキャンセルボタンは不要。
*  ※ただし、ページ切替(アクター切替)ボタンはあると便利かも?
* ・一方でタッチUIをオフにした場合は、
*  数値入力(ショップ含む)とその確定がマウスでも一切できなくなってしまう。
*
* 細かい調整によって、それらの問題に対処します。
*
* -------------------------------------------------------------------
* ■使用方法
* -------------------------------------------------------------------
* 初期設定でキャンセルボタン、ページ切替(アクター切替)ボタン、
* メニューボタンが非表示になり、その分の余白も表示されなくなります。
* 一方で数値入力用のボタンはそのまま問題なく使えます。
* 不要となるため、オプション画面のタッチUI項目も非表示になります。
*
* もし、マウス操作を想定してページ切替ボタンを残しておきたい場合は、
* 表示を残したり、位置調整することもできます。
* ただし、このプラグインだけで対応するのはちょっと大変かもしれません。
*
* -------------------------------------------------------------------
* ■注意点
* -------------------------------------------------------------------
* 途中セーブデータに適用した際の事故防止のため、
* オプションのタッチUIは強制的にオンとなります。
*
* 当プラグインの目的はタッチUIを無効にするのではなく、
* 必要最低限の機能を残すことなので、オフでは困るためです。
*
* また『オプションから削除』をオンにする場合、
* 同様の機能を他のプラグインCustomizeConfigDefault.js
* 重複してやらないように注意してください。
* オプションの表示行数が狂ってしまう可能性があります。
*
* -------------------------------------------------------------------
* ■利用規約
* -------------------------------------------------------------------
* 特に制約はありません。
* 改変、再配布自由、商用可、権利表示も任意です。
* 作者は責任を負いませんが、不具合については可能な範囲で対応します。
*
* @-----------------------------------------------------
* @ プラグインパラメータ
* @-----------------------------------------------------
*
* @param HideCancelButton
* @text キャンセルを非表示
* @type boolean
* @default true
* @desc キャンセルボタンを非表示にします。
*
* @param HidePageButton
* @text ページ切替を非表示
* @type boolean
* @default true
* @desc ページ切替(アクター切替)ボタンを非表示にします。
*
* @param HideMenuButton
* @text メニュー呼出を非表示
* @type boolean
* @default true
* @desc メニュー呼出ボタンを非表示にします。
*
* @param HideNumberButton
* @text 数値入力を非表示
* @type boolean
* @default false
* @desc 数値入力ボタンを非表示にします。
* そのままオフにしておくことを推奨します。
*
* @param HideTouchArea
* @text タッチ領域を非表示
* @type boolean
* @default true
* @desc タッチUI用の領域を非表示にし、余分な空白をなくします。
*
* @param HideOption
* @text オプションから削除
* @type boolean
* @default true
* @desc オプション項目からタッチUIを削除します。
*
* @param OptionForceOn
* @text オプションを強制オン
* @type boolean
* @default true
* @desc オプション項目のタッチUIを強制的にオンにしておきます。途中適用による事故防止用の項目です。
*
* @param PageButtonAdjustX
* @text ページボタンのX座標調整
* @type number @min -999 @max 999
* @default 0
* @desc ページ切替ボタンのX座標を調整します。
*
* @param PageButtonAdjustY
* @text ページボタンのY座標調整
* @type number @min -999 @max 999
* @default 0
* @desc ページ切替ボタンのY座標を調整します。
*/
(function() {
"use strict";
function toNumber(str, def) {
if (str == undefined || str == "") {
return def;
}
return isNaN(str) ? def : +(str || def);
}
function toBoolean(str, def) {
if (str === true || str === "true") {
return true;
} else if (str === false || str === "false") {
return false;
}
return def;
}
function setDefault(str, def) {
if (str == undefined || str == "") {
return def;
}
return str;
}
const PLUGIN_NAME = "NRP_HideTouchButton";
const parameters = PluginManager.parameters(PLUGIN_NAME);
const pHideCancelButton = toBoolean(parameters["HideCancelButton"], false);
const pHidePageButton = toBoolean(parameters["HidePageButton"], false);
const pHideMenuButton = toBoolean(parameters["HideMenuButton"], false);
const pHideNumberButton = toBoolean(parameters["HideNumberButton"], false);
const pHideTouchArea = toBoolean(parameters["HideTouchArea"], false);
const pHideOption = toBoolean(parameters["HideOption"], false);
const pOptionForceOn = toBoolean(parameters["OptionForceOn"], false);
const pPageButtonAdjustX = toNumber(parameters["PageButtonAdjustX"], 0);
const pPageButtonAdjustY = toNumber(parameters["PageButtonAdjustY"], 0);
// ----------------------------------------------------------------------------
// Scene_Base
// ----------------------------------------------------------------------------
if (pHideTouchArea) {
/**
* 【上書】タッチUI領域を消去
*/
Scene_Base.prototype.buttonAreaHeight = function() {
return 0;
};
}
// ----------------------------------------------------------------------------
// Sprite_Button
// ※汎用性を考慮し、SceneやWindowsではなくこちらで制御する。
// ----------------------------------------------------------------------------
/**
* ●ボタンの生成
*/
const _Sprite_Button_setupFrames = Sprite_Button.prototype.setupFrames;
Sprite_Button.prototype.setupFrames = function() {
// cancel:キャンセルボタン
// pageup:前のアクター
// pagedown:次のアクター
//
// down:数値1減らす
// up:数値1増やす
// down2:数値10減らす
// up2:数値10増やす
// ok:数値の確定
//
// menu:メニューの表示
const hideButtonTypes = [];
// キャンセルボタン非表示
if (pHideCancelButton) {
hideButtonTypes.push("cancel");
}
// ページ切替ボタン非表示
if (pHidePageButton) {
hideButtonTypes.push("pageup");
hideButtonTypes.push("pagedown");
}
// メニューボタン非表示
if (pHideMenuButton) {
hideButtonTypes.push("menu");
}
// 数値入力ボタン非表示
if (pHideNumberButton) {
hideButtonTypes.push("down");
hideButtonTypes.push("up");
hideButtonTypes.push("down2");
hideButtonTypes.push("up2");
hideButtonTypes.push("ok");
}
// 無効なボタンの場合はボタンタイプをnullで上書きする。
if (hideButtonTypes.includes(this._buttonType)) {
this._buttonType = null;
}
_Sprite_Button_setupFrames.apply(this, arguments);
};
/**
* ●ボタンの配置と幅の設定
*/
const _Sprite_Button_buttonData = Sprite_Button.prototype.buttonData;
Sprite_Button.prototype.buttonData = function() {
// ボタンタイプがnullの場合は幅を0に。
if (!this._buttonType) {
return { x: 0, w: 0};
}
return _Sprite_Button_buttonData.apply(this, arguments);
};
/**
* ●ボタン更新
*/
const _Sprite_Button_update = Sprite_Button.prototype.update;
Sprite_Button.prototype.update = function() {
// ボタンタイプがnullの場合は制御しない。
if (!this._buttonType) {
return;
}
_Sprite_Button_update.apply(this, arguments);
};
// ----------------------------------------------------------------------------
// Scene_MenuBase
// ----------------------------------------------------------------------------
/**
* ●ページボタンの生成
*/
const _Scene_MenuBase_createPageButtons = Scene_MenuBase.prototype.createPageButtons;
Scene_MenuBase.prototype.createPageButtons = function() {
_Scene_MenuBase_createPageButtons.apply(this, arguments);
// 座標調整
this._pageupButton.x += pPageButtonAdjustX;
this._pageupButton.y += pPageButtonAdjustY;
this._pagedownButton.x += pPageButtonAdjustX;
this._pagedownButton.y += pPageButtonAdjustY;
};
// ----------------------------------------------------------------------------
// オプションの設定
// ----------------------------------------------------------------------------
if (pHideOption) {
/**
* ●オプション項目の登録
*/
const _Window_Options_addGeneralOptions = Window_Options.prototype.addGeneralOptions;
Window_Options.prototype.addGeneralOptions = function() {
_Window_Options_addGeneralOptions.apply(this, arguments);
// タッチUIを除去する。
for (let i = 0; i < this._list.length; i++) {
if (this._list[i].symbol === "touchUI") {
this._list.splice(i, 1);
break;
}
}
};
/**
* ●最大コマンド数
*/
const _Scene_Options_maxCommands = Scene_Options.prototype.maxCommands;
Scene_Options.prototype.maxCommands = function() {
// コマンド数を-1する。
return _Scene_Options_maxCommands.apply(this, arguments) - 1;
};
}
/**
* ●途中適用による事故防止のため、タッチUIを強制的にオンにしておく。
*/
if (pOptionForceOn) {
/**
* ●コンフィグの反映
*/
const _ConfigManager_applyData = ConfigManager.applyData;
ConfigManager.applyData = function(config) {
_ConfigManager_applyData.apply(this, arguments);
this.touchUI = true;
};
}
})();