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
//=============================================================================
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();
}