PIXI Controls: Improve physical gamepads support

This commit is contained in:
OleSTEEP 2024-02-17 14:19:58 +03:00
parent c5b1581019
commit a7d628416f

View file

@ -476,30 +476,36 @@ VirtualGamepad.gamepad = {
//============================================================================= //=============================================================================
// * Replace first gamepad with virtual // * Replace first gamepad with virtual
//============================================================================= //=============================================================================
VirtualGamepad.replaceNavigator = function() { VirtualGamepad._originalNavigator = navigator.getGamepads;
var gamepads = navigator.getGamepads(); VirtualGamepad.updateNavigator = function() {
var gamepads = VirtualGamepad._originalNavigator.call(navigator);
console.log(gamepads);
navigator.getGamepads = function() { navigator.getGamepads = function() {
var index = ONSControls.options.gamepadIndex; var index = ONSControls.options.gamepadIndex;
gamepads[index] = VirtualGamepad.gamepad; gamepads[index] = VirtualGamepad.gamepad;
return gamepads; return gamepads;
} }
console.log("ONSControls: Navigator updated");
} }
//============================================================================= //=============================================================================
// * Connect virtual gamepad // * Connect virtual gamepad
//============================================================================= //=============================================================================
VirtualGamepad.originalNavigator = navigator.getGamepads;
VirtualGamepad.connect = function () { VirtualGamepad.connect = function () {
this.replaceNavigator(); this.updateNavigator();
const event = new Event("gamepadconnected");
event.gamepad = this.gamepad;
window.dispatchEvent(event);
console.log(`ONSControls: Virtual gamepad connected with index ${this.gamepad.index}`); console.log(`ONSControls: Virtual gamepad connected with index ${this.gamepad.index}`);
} }
//============================================================================= //=============================================================================
// * Disconnect virtual gamepad // * Disconnect virtual gamepad
//============================================================================= //=============================================================================
VirtualGamepad.disconnect = function () { 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.axes = [0, 0, 0, 0];
this.gamepad.buttons = Array.apply(0, Array(17)).map(function () { this.gamepad.buttons = Array.apply(0, Array(17)).map(function () {
return { return {
@ -508,19 +514,15 @@ VirtualGamepad.disconnect = function () {
value: 0 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() { VirtualGamepad.initialize = function() {
for (button of VirtualGamepad.gamepad.buttons) { this._originalNavigator.call(navigator);
button.pressed = false; this.connect();
button.touched = false; window.addEventListener('gamepadconnected', this.updateNavigator);
button.value = 0; window.addEventListener('gamepaddisconnected', this.updateNavigator);
}
} }
@ -1001,6 +1003,6 @@ ONSControls.initialize = function() {
this.setupInteractive(); this.setupInteractive();
this.disableTouch(); this.disableTouch();
this.replaceBackEvent(); this.replaceBackEvent();
VirtualGamepad.connect(); VirtualGamepad.initialize();
Window_OmoMenuOptionsONSControls.prototype.add(); Window_OmoMenuOptionsONSControls.prototype.add();
} }