//============================================================================= // SaltedFish Plugins - Input Bind Control // SF_InputBindControl.js //============================================================================= "use strict"; var Imported = Imported || {}; Imported.SF_InputBindControl = true; var SF_Plugins = SF_Plugins || {}; //============================================================================= /*: * @plugindesc v1.0 support add anf remove input event listener * @author SaltedFish * * @help * ============================================================================ * Introduction * ============================================================================ * * This plugin support add and remove input event listener. * * ============================================================================ * Plugin Commands * ============================================================================ * * SF_InputBind Remove TouchInput * SF_InputBind Remove Input * * to remove input / touchinput event listener * * ----------------------------------------------------------------------------- * * SF_InputBind Setup TouchInput * SF_InputBind Setup Input * * to rebind input / touchinput event listener * * ============================================================================ * Script Calls * ============================================================================ * * TouchInput.removeEventHandlers() * Input.removeEventHandlers() * * to remove input / touchinput event listener * * ----------------------------------------------------------------------------- * * TouchInput._setupEventHandlers() * Input._setupEventHandlers() * * to rebind input / touchinput event listener * * ============================================================================ * Changelog * ============================================================================ * * Version 1.0: * - Finished plugin */ //============================================================================= (function () { var SF_InputBindControl = {}; SF_Plugins.SF_InputBindControl = SF_InputBindControl; SF_InputBindControl.version = 1.0; //============================================================================= // TouchInput //============================================================================= //remove touch input event listener TouchInput.removeEventHandlers = function () { document.removeEventListener('mousedown', this._onMouseDownBind); document.removeEventListener('mousemove', this._onMouseMoveBind); document.removeEventListener('mouseup', this._onMouseUpBind); document.removeEventListener('wheel', this._onWheelBind); document.removeEventListener('touchstart', this._onTouchStartBind); document.removeEventListener('touchmove', this._onTouchMoveBind); document.removeEventListener('touchend', this._onTouchEndBind); document.removeEventListener('touchcancel', this._onTouchCancelBind); document.removeEventListener('pointerdown', this._onPointerDownBind); } //setup touch input event listener TouchInput._setupEventHandlers = function () { var isSupportPassive = Utils.isSupportPassiveEvent(); this._onMouseDownBind = this._onMouseDown.bind(this); this._onMouseMoveBind = this._onMouseMove.bind(this); this._onMouseUpBind = this._onMouseUp.bind(this); this._onWheelBind = this._onWheel.bind(this); this._onTouchStartBind = this._onTouchStart.bind(this); this._onTouchMoveBind = this._onTouchMove.bind(this); this._onTouchEndBind = this._onTouchEnd.bind(this); this._onTouchCancelBind = this._onTouchCancel.bind(this); this._onPointerDownBind = this._onPointerDown.bind(this); document.addEventListener('mousedown', this._onMouseDownBind); document.addEventListener('mousemove', this._onMouseMoveBind); document.addEventListener('mouseup', this._onMouseUpBind); document.addEventListener('wheel', this._onWheelBind, isSupportPassive ? { passive: false } : false); document.addEventListener('touchstart', this._onTouchStartBind, isSupportPassive ? { passive: false } : false); document.addEventListener('touchmove', this._onTouchMoveBind, isSupportPassive ? { passive: false } : false); document.addEventListener('touchend', this._onTouchEndBind); document.addEventListener('touchcancel', this._onTouchCancelBind); document.addEventListener('pointerdown', this._onPointerDownBind); } //============================================================================= // Input //============================================================================= //remove input event listener Input.removeEventHandlers = function () { document.removeEventListener('keydown', this._onKeyDownBind); document.removeEventListener('keyup', this._onKeyUpBind); window.removeEventListener('blur', this._onLostFocusBind); } //setup input event listener Input._setupEventHandlers = function () { this._onKeyDownBind = this._onKeyDown.bind(this); this._onKeyUpBind = this._onKeyUp.bind(this); this._onLostFocusBind = this._onLostFocus.bind(this); document.addEventListener('keydown', this._onKeyDownBind); document.addEventListener('keyup', this._onKeyUpBind); window.addEventListener('blur', this._onLostFocusBind); } //============================================================================= // Plugin Command //============================================================================= SF_InputBindControl.Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function (command, args) { SF_InputBindControl.Game_Interpreter_pluginCommand.call(this, command, args); if (command.toLowerCase() === 'sf_inputbind') { switch (args[0].toLowerCase()) { case 'remove': switch (args[1].toLowerCase()) { case 'touchinput': TouchInput.removeEventHandlers(); break; case 'input': Input.removeEventHandlers(); break; } break; case 'setup': switch (args[1].toLowerCase()) { case 'touchinput': TouchInput._setupEventHandlers(); break; case 'input': Input._setupEventHandlers(); break; } break; } } } //============================================================================= // TouchInput //============================================================================= SF_InputBindControl.TouchInput__onMouseMove = TouchInput._onMouseMove; TouchInput._onMouseMove = function (event) { SF_InputBindControl.TouchInput__onMouseMove.call(this, event); this._mouseOverX = Graphics.pageToCanvasX(event.pageX); this._mouseOverY = Graphics.pageToCanvasY(event.pageY); } SF_InputBindControl.TouchInput_clear = TouchInput.clear; TouchInput.clear = function () { SF_InputBindControl.TouchInput_clear.call(this); this._mouseOverX = -1; this._mouseOverY = -1; } })()