333 lines
12 KiB
JavaScript
333 lines
12 KiB
JavaScript
//=============================================================================
|
||
// MouseWheelExtend.js
|
||
// ----------------------------------------------------------------------------
|
||
// (C)2016 Triacontane
|
||
// This software is released under the MIT License.
|
||
// http://opensource.org/licenses/mit-license.php
|
||
// ----------------------------------------------------------------------------
|
||
// Version
|
||
// 1.3.0 2023/07/05 MZで動作するよう修正
|
||
// 1.2.0 2017/05/18 ホイールクリックしたときにスイッチを切り替えられる機能を追加
|
||
// 1.1.0 2016/07/04 マウスホイールの状態をスイッチや変数に格納する機能など4種類の機能を追加
|
||
// 1.0.0 2016/07/03 初版
|
||
// ----------------------------------------------------------------------------
|
||
// [Blog] : http://triacontane.blogspot.jp/
|
||
// [Twitter]: https://twitter.com/triacontane/
|
||
// [GitHub] : https://github.com/triacontane/
|
||
//=============================================================================
|
||
|
||
/*:
|
||
* @plugindesc マウスホイール拡張プラグイン
|
||
* @target MZ
|
||
* @url https://github.com/triacontane/RPGMakerMV/tree/mz_master/MouseWheelExtend.js
|
||
* @base PluginCommonBase
|
||
* @orderAfter PluginCommonBase
|
||
* @author トリアコンタン
|
||
*
|
||
* @param scrollMessage
|
||
* @text スクロールでメッセージ送り
|
||
* @desc マウスホイールを手前に回転させてメッセージ送りをします。戻すことはできません。
|
||
* @default true
|
||
* @type boolean
|
||
*
|
||
* @param scrollCursor
|
||
* @text スクロールでカーソル移動
|
||
* @desc マウスホイールを動かしてウィンドウのカーソルを移動します。
|
||
* @default true
|
||
* @type boolean
|
||
*
|
||
* @param scrollDirection
|
||
* @text スクロールで方向ボタン操作
|
||
* @desc マウスホイールのスクロールに方向ボタンと同等の機能を持たせます。
|
||
* @default false
|
||
* @type boolean
|
||
*
|
||
* @param scrollVariable
|
||
* @text スクロールで変数代入
|
||
* @desc マウスホイールのスクロールで任意の変数に値を設定します。
|
||
* 下:2 左:4 右:6 上:8 マップ画面でのみ有効です。
|
||
* @default 0
|
||
* @type variable
|
||
*
|
||
* @param click
|
||
* @text クリック操作
|
||
* @desc マウスホイールをクリックしたときの操作を選択します。
|
||
* @default ok
|
||
* @type select
|
||
* @option なし
|
||
* @value
|
||
* @option 決定
|
||
* @value ok
|
||
* @option キャンセル
|
||
* @value cancel
|
||
* @option スイッチ(指定した番号のスイッチON)
|
||
* @value switch
|
||
* @option トグル(指定した番号のスイッチ切り替え)
|
||
* @value toggle
|
||
*
|
||
* @param clickSwitch
|
||
* @text クリックスイッチ番号
|
||
* @desc クリック操作をスイッチ、トグルに指定した場合の対象スイッチ番号です。
|
||
* @default 0
|
||
* @type switch
|
||
*
|
||
* @param sensitivityY
|
||
* @text 感度Y
|
||
* @desc マウスホイールの縦回転の感度です。通常はこのままでOKです。
|
||
* @default 4
|
||
*
|
||
* @param sensitivityX
|
||
* @text 感度X
|
||
* @desc マウスホイールの横回転の感度です。通常はこのままでOKです。
|
||
* @default 4
|
||
*
|
||
* @help MouseWheelExtend.js
|
||
*
|
||
* あまり使用されていないマウスホイールの機能を拡張します。
|
||
* 個別に使用可否を設定できます。
|
||
* マウスホイールのない環境(スマートフォン、一部のPC)では意味がないので
|
||
* 注意してください。マウスによっては左右スクロールがない or 正しく取得できない
|
||
* 場合があります。
|
||
*
|
||
* ・メッセージ送り
|
||
* マウスホイールを手前に回転させてメッセージ送りをします。戻すことはできません。
|
||
*
|
||
* ・カーソル移動
|
||
* マウスホイールを動かしてウィンドウのカーソルを移動します。
|
||
*
|
||
* ・クリックで決定、キャンセル
|
||
* マウスホイールのクリックに決定、キャンセルボタンと同等の機能を持たせます。
|
||
* 両方指定すると決定ボタンが優先されます。
|
||
*
|
||
* ・クリックでスイッチ、トグル
|
||
* マウスホイールのクリックで任意のスイッチをONにします。マップ画面でのみ有効です。
|
||
* コモンイベントのトリガー等に使用できます。
|
||
* トグルの場合はクリックするたびにスイッチのON/OFFが切り替わります。
|
||
*
|
||
* ・スクロールで十字キー
|
||
* マウスホイールのスクロールに十字キーと同等の機能を持たせます。
|
||
*
|
||
* ・スクロールで変数
|
||
* マウスホイールのスクロールで任意の変数に値を設定します。
|
||
* 下:2 左:4 右:6 上:8 マップ画面でのみ有効です。
|
||
*
|
||
* このプラグインにはプラグインコマンドはありません。
|
||
*
|
||
* 利用規約:
|
||
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
|
||
* についても制限はありません。
|
||
* このプラグインはもうあなたのものです。
|
||
*/
|
||
|
||
(() => {
|
||
"use strict";
|
||
const script = document.currentScript;
|
||
const param = PluginManagerEx.createParameter(script);
|
||
const ButtonName = {
|
||
OK: "ok",
|
||
CANCEL: "escape",
|
||
UP: "up",
|
||
DOWN: "down",
|
||
RIGHT: "right",
|
||
LEFT: "left",
|
||
};
|
||
|
||
const _Game_Map_update = Game_Map.prototype.update;
|
||
Game_Map.prototype.update = function (sceneActive) {
|
||
_Game_Map_update.apply(this, arguments);
|
||
this.updateWheelTrigger();
|
||
};
|
||
|
||
Game_Map.prototype.updateWheelTrigger = function () {
|
||
if (TouchInput.isMiddleTriggered()) {
|
||
if (param.click === "switch") {
|
||
$gameSwitches.setValue(param.clickSwitch, true);
|
||
} else if (param.click === "toggle") {
|
||
$gameSwitches.setValue(
|
||
param.clickSwitch,
|
||
!$gameSwitches.value(param.clickSwitch)
|
||
);
|
||
}
|
||
}
|
||
if (param.scrollVariable) {
|
||
const prevValue = $gameVariables.value(param.scrollVariable);
|
||
let value = 0;
|
||
if (TouchInput.isValidWheelX(false)) {
|
||
value = 4;
|
||
}
|
||
if (TouchInput.isValidWheelX(true)) {
|
||
value = 6;
|
||
}
|
||
if (TouchInput.isValidWheelY(false)) {
|
||
value = 2;
|
||
}
|
||
if (TouchInput.isValidWheelY(true)) {
|
||
value = 8;
|
||
}
|
||
if (prevValue !== value) {
|
||
$gameVariables.setValue(param.scrollVariable, value);
|
||
}
|
||
}
|
||
};
|
||
|
||
if (param.scrollMessage) {
|
||
//=============================================================================
|
||
// Window_Message
|
||
// ホイールでメッセージ送りをします。
|
||
//=============================================================================
|
||
const _Window_Message_isTriggered = Window_Message.prototype.isTriggered;
|
||
Window_Message.prototype.isTriggered = function () {
|
||
return (
|
||
_Window_Message_isTriggered.apply(this, arguments) ||
|
||
TouchInput.isValidWheelY(false)
|
||
);
|
||
};
|
||
}
|
||
|
||
if (param.scrollCursor) {
|
||
//=============================================================================
|
||
// Window_Selectable
|
||
// ホイールでカーソル移動をします。
|
||
//=============================================================================
|
||
const _Window_Selectable_processCursorMove =
|
||
Window_Selectable.prototype.processCursorMove;
|
||
Window_Selectable.prototype.processCursorMove = function () {
|
||
const lastIndex = this.index();
|
||
_Window_Selectable_processCursorMove.apply(this, arguments);
|
||
if (this.index() !== lastIndex) return;
|
||
if (this.isCursorMovable()) {
|
||
if (TouchInput.isValidWheelY(false)) {
|
||
this.cursorDown(false);
|
||
}
|
||
if (TouchInput.isValidWheelY(true)) {
|
||
this.cursorUp(false);
|
||
}
|
||
if (TouchInput.isValidWheelX(true)) {
|
||
this.cursorLeft(false);
|
||
}
|
||
if (TouchInput.isValidWheelX(false)) {
|
||
this.cursorRight(false);
|
||
}
|
||
if (this.index() !== lastIndex) {
|
||
SoundManager.playCursor();
|
||
}
|
||
}
|
||
};
|
||
}
|
||
|
||
//=============================================================================
|
||
// TouchInput
|
||
// ホイールクリックを決定ボタンにリンクします。
|
||
//=============================================================================
|
||
const _TouchInput_update = TouchInput.update;
|
||
TouchInput.update = function () {
|
||
_TouchInput_update.apply(this, arguments);
|
||
this._middleTriggered = this._onMiddleTriggered;
|
||
this._onMiddleTriggered = false;
|
||
};
|
||
|
||
TouchInput.isValidWheelX = function (minus) {
|
||
return minus
|
||
? this.wheelX <= -param.sensitivityX
|
||
: this.wheelX >= param.sensitivityX;
|
||
};
|
||
|
||
TouchInput.isValidWheelY = function (minus) {
|
||
return minus
|
||
? this.wheelY <= -param.sensitivityY
|
||
: this.wheelY >= param.sensitivityY;
|
||
};
|
||
|
||
const _TouchInput__onMiddleButtonDown = TouchInput._onMiddleButtonDown;
|
||
TouchInput._onMiddleButtonDown = function (event) {
|
||
_TouchInput__onMiddleButtonDown.apply(this, arguments);
|
||
if (param.click === "ok") {
|
||
Input.setCurrentState(ButtonName.OK, true);
|
||
} else if (param.click === "cancel") {
|
||
Input.setCurrentState(ButtonName.CANCEL, true);
|
||
}
|
||
this._onMiddleTriggered = true;
|
||
};
|
||
|
||
const _TouchInput__onMouseUp = TouchInput._onMouseUp;
|
||
TouchInput._onMouseUp = function (event) {
|
||
_TouchInput__onMouseUp.apply(this, arguments);
|
||
if (event.button === 1) {
|
||
if (param.click === "ok") {
|
||
Input.setCurrentState(ButtonName.OK, false);
|
||
} else if (param.click === "cancel") {
|
||
Input.setCurrentState(ButtonName.CANCEL, false);
|
||
}
|
||
}
|
||
};
|
||
|
||
TouchInput.isMiddleTriggered = function () {
|
||
return this._middleTriggered;
|
||
};
|
||
|
||
if (param.scrollDirection) {
|
||
TouchInput._wheelValidFrame = 12;
|
||
|
||
const _TouchInput__onWheel = TouchInput._onWheel;
|
||
TouchInput._onWheel = function (event) {
|
||
_TouchInput__onWheel.apply(this, arguments);
|
||
if (event.deltaY <= -param.sensitivityY) {
|
||
this._wheelUp = TouchInput._wheelValidFrame;
|
||
Input.setCurrentState(ButtonName.UP, true);
|
||
}
|
||
if (event.deltaY >= param.sensitivityY) {
|
||
this._wheelDown = TouchInput._wheelValidFrame;
|
||
Input.setCurrentState(ButtonName.DOWN, true);
|
||
}
|
||
if (event.deltaX <= -param.sensitivityX) {
|
||
this._wheelRight = TouchInput._wheelValidFrame;
|
||
Input.setCurrentState(ButtonName.RIGHT, true);
|
||
}
|
||
if (event.deltaX >= param.sensitivityX) {
|
||
this._wheelLeft = TouchInput._wheelValidFrame;
|
||
Input.setCurrentState(ButtonName.LEFT, true);
|
||
}
|
||
};
|
||
|
||
const _TouchInput_update2 = TouchInput.update;
|
||
TouchInput.update = function () {
|
||
_TouchInput_update2.apply(this, arguments);
|
||
this.updateWheelDirection();
|
||
};
|
||
|
||
TouchInput.updateWheelDirection = function () {
|
||
if (this._wheelUp > 0) {
|
||
this._wheelUp--;
|
||
if (this._wheelUp <= 0) {
|
||
Input.setCurrentState(ButtonName.UP, false);
|
||
}
|
||
}
|
||
if (this._wheelDown > 0) {
|
||
this._wheelDown--;
|
||
if (this._wheelDown <= 0) {
|
||
Input.setCurrentState(ButtonName.DOWN, false);
|
||
}
|
||
}
|
||
if (this._wheelRight > 0) {
|
||
this._wheelRight--;
|
||
if (this._wheelRight <= 0) {
|
||
Input.setCurrentState(ButtonName.RIGHT, false);
|
||
}
|
||
}
|
||
if (this._wheelLeft > 0) {
|
||
this._wheelLeft--;
|
||
if (this._wheelLeft <= 0) {
|
||
Input.setCurrentState(ButtonName.LEFT, false);
|
||
}
|
||
}
|
||
};
|
||
}
|
||
|
||
//=============================================================================
|
||
// Input
|
||
// マウスホイールの情報をキー入力に変換します。
|
||
//=============================================================================
|
||
Input.setCurrentState = function (name, value) {
|
||
this._currentState[name] = !!value;
|
||
};
|
||
})();
|