Fix double inputs when using emulated MKB with Remote Play

This commit is contained in:
redphx 2024-04-29 11:40:26 +07:00
parent 99aec0a60c
commit a546b921f4
2 changed files with 51 additions and 8 deletions

View File

@ -51,6 +51,7 @@ export class MkbHandler {
#nativeGetGamepads = window.navigator.getGamepads.bind(window.navigator);
#enabled = false;
#isPolling = false;
#prevWheelCode = null;
#wheelStoppedTimeout?: number | null;
@ -162,12 +163,18 @@ export class MkbHandler {
const isKeyDown = e.type === 'keydown';
// Toggle MKB feature
if (isKeyDown && e.code === 'F8') {
if (isKeyDown) {
if (e.code === 'F8') {
e.preventDefault();
this.toggle();
return;
}
if (!this.#isPolling) {
return;
}
}
const buttonIndex = this.#CURRENT_PRESET_DATA.mapping[e.code]!;
if (typeof buttonIndex === 'undefined') {
return;
@ -396,6 +403,7 @@ export class MkbHandler {
}
destroy = () => {
this.#isPolling = false;
this.#enabled = false;
this.stop();
@ -412,6 +420,7 @@ export class MkbHandler {
}
start = () => {
this.#isPolling = true;
window.navigator.getGamepads = this.#patchedGetGamepads;
this.#resetGamepad();
@ -435,6 +444,7 @@ export class MkbHandler {
}
stop = () => {
this.#isPolling = false;
// Dispatch "gamepaddisconnected" event
const virtualGamepad = this.#getVirtualGamepad();

View File

@ -395,15 +395,47 @@ window.BX_EXPOSED.onPollingModeChanged && window.BX_EXPOSED.onPollingModeChanged
}
// Find the next "{" backet
index = str.indexOf('{', index) + 1;
let backetIndex = str.indexOf('{', index);
// Get param name
const params = str.substring(index, backetIndex).match(/\(([^)]+)\)/)![1];
const titleInfoVar = params.split(',')[0];
const newCode = `
e = window.BX_EXPOSED.modifyTitleInfo(e);
console.log(e);
${titleInfoVar} = window.BX_EXPOSED.modifyTitleInfo(${titleInfoVar});
console.log(${titleInfoVar});
`;
str = str.substring(0, index) + newCode + str.substring(index);
str = str.substring(0, backetIndex + 1) + newCode + str.substring(backetIndex + 1);
return str;
},
patchRemotePlayMkb(str: string) {
const text = 'async homeConsoleConnect';
let index = str.indexOf(text);
if (index === -1) {
return false;
}
// Find the next "{" backet
let backetIndex = str.indexOf('{', index);
// Get param name
const params = str.substring(index, backetIndex).match(/\(([^)]+)\)/)![1];
const configsVar = params.split(',')[1];
const newCode = `
Object.assign(${configsVar}.inputConfiguration, {
enableMouseInput: false,
enableKeyboardInput: false,
enableAbsoluteMouse: false,
});
console.log(${configsVar});
`;
str = str.substring(0, backetIndex + 1) + newCode + str.substring(backetIndex + 1);
return str;
},
};
let PATCH_ORDERS = [
@ -451,6 +483,7 @@ let PATCH_ORDERS = [
// Only when playing
const PLAYING_PATCH_ORDERS = [
['patchXcloudTitleInfo'],
getPref(PrefKey.REMOTE_PLAY_ENABLED) && ['patchRemotePlayMkb'],
getPref(PrefKey.REMOTE_PLAY_ENABLED) && ['remotePlayConnectMode'],
getPref(PrefKey.REMOTE_PLAY_ENABLED) && ['remotePlayGuideWorkaround'],