phantom-soul-sword-lambda-n.../www/js/plugins/TouchBindToKey.js
2025-07-11 18:31:55 -07:00

151 lines
5.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.

//=============================================================================
// TouchBindToKey.js
// ----------------------------------------------------------------------------
// Copyright (c) 2015 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 1.0.0 2016/02/27 初版
// ----------------------------------------------------------------------------
// [Blog] : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================
/*:
* @plugindesc マウス入力のキーバインドプラグイン
* @author トリアコンタン
*
* @param 左クリックボタン
* @desc 左クリックに対応するボタンです。
* @default
*
* @param 中央クリックボタン
* @desc 中央(ホイール)クリックに対応するボタンです。
* @default
*
* @param 右クリックボタン
* @desc 右クリックに対応するボタンです。
* @default
*
* @param 元の動作を抑制
* @desc もともとマウスに割り当てられていた機能を抑制します。
* @default OFF
*
* @help マウスクリックを特定のボタンに紐付けます。
* 紐付けた場合、クリックのもともとの動作は無効になります。
*
* ・パラメータに指定可能な文字列一覧
* tab
* ok
* shift
* control
* escape
* pageup
* pagedown
* left
* up
* right
* down
* debug
* menu
*
* 注意!
* 現状、マウス(PC)専用プラグインです。タッチ操作には対応していません。
*
* このプラグインにはプラグインコマンドはありません。
*
* 利用規約:
* 作者に無断で改変、再配布が可能で、利用形態商用、18禁利用等
* についても制限はありません。
* このプラグインはもうあなたのものです。
*/
(function () {
'use strict';
var pluginName = 'TouchBindToKey';
var getParamString = function(paramNames, lowerFlg) {
var value = getParamOther(paramNames);
return value == null ? '' : lowerFlg ? value.toLowerCase() : value;
};
var getParamBoolean = function(paramNames) {
var value = getParamOther(paramNames);
return (value || '').toUpperCase() == 'ON';
};
var getParamOther = function(paramNames) {
if (!Array.isArray(paramNames)) paramNames = [paramNames];
for (var i = 0; i < paramNames.length; i++) {
var name = PluginManager.parameters(pluginName)[paramNames[i]];
if (name) return name;
}
return null;
};
var paramBindLeft = getParamString(['BindLeft', '左クリックボタン']);
var paramBindMiddle = getParamString(['BindMiddle', '中央クリックボタン']);
var paramBindRight = getParamString(['BindRight', '右クリックボタン']);
var paramSuppress = getParamBoolean(['Suppress', '元の動作を抑制']);
//=============================================================================
// TouchInput
// 動作をキー入力情報に送信します。
//=============================================================================
var _TouchInput_update = TouchInput.update;
TouchInput.update = function() {
_TouchInput_update.apply(this, arguments);
if (paramSuppress) {
if (paramBindLeft) {
this._mousePressed = false;
this._released = false;
this._triggered = false;
this._pressedTime = 0;
}
if (paramBindRight) {
this._cancelled = false;
}
}
};
var _TouchInput__onLeftButtonDown = TouchInput._onLeftButtonDown;
TouchInput._onLeftButtonDown = function(event) {
_TouchInput__onLeftButtonDown.apply(this, arguments);
if (paramBindLeft) Input.setCurrentStateForMouseBind(paramBindLeft, true);
};
var _TouchInput__onMiddleButtonDown = TouchInput._onMiddleButtonDown;
TouchInput._onMiddleButtonDown = function(event) {
_TouchInput__onMiddleButtonDown.apply(this, arguments);
if (paramBindMiddle) Input.setCurrentStateForMouseBind(paramBindMiddle, true);
};
var _TouchInput__onRightButtonDown = TouchInput._onRightButtonDown;
TouchInput._onRightButtonDown = function(event) {
_TouchInput__onRightButtonDown.apply(this, arguments);
if (paramBindRight) Input.setCurrentStateForMouseBind(paramBindRight, true);
};
var _TouchInput__onMouseUp = TouchInput._onMouseUp;
TouchInput._onMouseUp = function(event) {
_TouchInput__onMouseUp.apply(this, arguments);
if (event.button === 0) {
if (paramBindLeft) Input.setCurrentStateForMouseBind(paramBindLeft, false);
} else if (event.button === 1) {
if (paramBindMiddle) Input.setCurrentStateForMouseBind(paramBindMiddle, false);
} else if (event.button === 2) {
if (paramBindRight) Input.setCurrentStateForMouseBind(paramBindRight, false);
}
};
//=============================================================================
// Input
// TouchInputから送信された情報を受け取ります。
//=============================================================================
Input.setCurrentStateForMouseBind = function(button, value) {
this._currentState[button] = !!value;
};
})();