From a546b921f4f1a4ed21c2e353565ce7ed267640eb Mon Sep 17 00:00:00 2001 From: redphx <96280+redphx@users.noreply.github.com> Date: Mon, 29 Apr 2024 11:40:26 +0700 Subject: [PATCH] Fix double inputs when using emulated MKB with Remote Play --- src/modules/mkb/mkb-handler.ts | 18 +++++++++++---- src/modules/patcher.ts | 41 ++++++++++++++++++++++++++++++---- 2 files changed, 51 insertions(+), 8 deletions(-) diff --git a/src/modules/mkb/mkb-handler.ts b/src/modules/mkb/mkb-handler.ts index 9aafa29..09585e4 100644 --- a/src/modules/mkb/mkb-handler.ts +++ b/src/modules/mkb/mkb-handler.ts @@ -51,6 +51,7 @@ export class MkbHandler { #nativeGetGamepads = window.navigator.getGamepads.bind(window.navigator); #enabled = false; + #isPolling = false; #prevWheelCode = null; #wheelStoppedTimeout?: number | null; @@ -162,10 +163,16 @@ export class MkbHandler { const isKeyDown = e.type === 'keydown'; // Toggle MKB feature - if (isKeyDown && e.code === 'F8') { - e.preventDefault(); - this.toggle(); - return; + if (isKeyDown) { + if (e.code === 'F8') { + e.preventDefault(); + this.toggle(); + return; + } + + if (!this.#isPolling) { + return; + } } const buttonIndex = this.#CURRENT_PRESET_DATA.mapping[e.code]!; @@ -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(); diff --git a/src/modules/patcher.ts b/src/modules/patcher.ts index 687f4fe..fb2ee2c 100644 --- a/src/modules/patcher.ts +++ b/src/modules/patcher.ts @@ -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'],