From a7d628416fca2289e0268ab61b047ad7c2710930 Mon Sep 17 00:00:00 2001 From: OleSTEEP Date: Sat, 17 Feb 2024 14:19:58 +0300 Subject: [PATCH] PIXI Controls: Improve physical gamepads support --- www.rus/js/plugins/VND_ONSControls.js | 40 ++++++++++++++------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/www.rus/js/plugins/VND_ONSControls.js b/www.rus/js/plugins/VND_ONSControls.js index 42d0dd7..3bad4c6 100644 --- a/www.rus/js/plugins/VND_ONSControls.js +++ b/www.rus/js/plugins/VND_ONSControls.js @@ -476,30 +476,36 @@ VirtualGamepad.gamepad = { //============================================================================= // * Replace first gamepad with virtual //============================================================================= -VirtualGamepad.replaceNavigator = function() { - var gamepads = navigator.getGamepads(); +VirtualGamepad._originalNavigator = navigator.getGamepads; +VirtualGamepad.updateNavigator = function() { + var gamepads = VirtualGamepad._originalNavigator.call(navigator); + console.log(gamepads); navigator.getGamepads = function() { var index = ONSControls.options.gamepadIndex; gamepads[index] = VirtualGamepad.gamepad; return gamepads; } + console.log("ONSControls: Navigator updated"); } //============================================================================= // * Connect virtual gamepad //============================================================================= -VirtualGamepad.originalNavigator = navigator.getGamepads; VirtualGamepad.connect = function () { - this.replaceNavigator(); - const event = new Event("gamepadconnected"); - event.gamepad = this.gamepad; - window.dispatchEvent(event); + this.updateNavigator(); console.log(`ONSControls: Virtual gamepad connected with index ${this.gamepad.index}`); } //============================================================================= // * Disconnect virtual gamepad //============================================================================= VirtualGamepad.disconnect = function () { - const event = new Event("gamepaddisconnected"); + this.clearState(); + //VirtualGamepad.originalNavigator.getGamepads.call(); + console.log(`ONSControls: Virtual gamepad disconnected with index ${this.gamepad.index}`); +} +//============================================================================= +// * Clear state of all buttons +//============================================================================= +VirtualGamepad.clearState = function() { this.gamepad.axes = [0, 0, 0, 0]; this.gamepad.buttons = Array.apply(0, Array(17)).map(function () { return { @@ -508,19 +514,15 @@ VirtualGamepad.disconnect = function () { value: 0 }; }) - window.dispatchEvent(event); - //VirtualGamepad.originalNavigator.getGamepads.call(); - console.log(`ONSControls: Virtual gamepad disconnected with index ${this.gamepad.index}`); } //============================================================================= -// * Clear state of all buttons +// * Initialize virtual gamepad //============================================================================= -VirtualGamepad.clearState = function() { - for (button of VirtualGamepad.gamepad.buttons) { - button.pressed = false; - button.touched = false; - button.value = 0; - } +VirtualGamepad.initialize = function() { + this._originalNavigator.call(navigator); + this.connect(); + window.addEventListener('gamepadconnected', this.updateNavigator); + window.addEventListener('gamepaddisconnected', this.updateNavigator); } @@ -1001,6 +1003,6 @@ ONSControls.initialize = function() { this.setupInteractive(); this.disableTouch(); this.replaceBackEvent(); - VirtualGamepad.connect(); + VirtualGamepad.initialize(); Window_OmoMenuOptionsONSControls.prototype.add(); } \ No newline at end of file