Don't disable touch on native touch-supported games

This commit is contained in:
redphx 2024-04-29 14:54:35 +07:00
parent 3c7976de37
commit 3562d0318e
2 changed files with 45 additions and 35 deletions

View File

@ -323,26 +323,12 @@ if (match) {
return false; return false;
} }
let newCode = ''; const newCode = `
if (getPref(PrefKey.STREAM_TOUCH_CONTROLLER) === 'off') { const titleInfo = window.BX_EXPOSED.getTitleInfo();
newCode = 'return;'; if (!titleInfo.details.hasTouchSupport) {
} else {
newCode = `
const gamepads = window.navigator.getGamepads();
let gamepadFound = false;
for (let gamepad of gamepads) {
if (gamepad && gamepad.connected) {
gamepadFound = true;
break;
}
}
if (gamepadFound) {
return; return;
} }
`; `;
}
str = str.replace(text, newCode + text); str = str.replace(text, newCode + text);
return str; return str;
@ -492,7 +478,7 @@ const PLAYING_PATCH_ORDERS = [
['playVibration'], ['playVibration'],
STATES.hasTouchSupport && getPref(PrefKey.STREAM_TOUCH_CONTROLLER) === 'all' && ['exposeTouchLayoutManager'], STATES.hasTouchSupport && getPref(PrefKey.STREAM_TOUCH_CONTROLLER) === 'all' && ['exposeTouchLayoutManager'],
STATES.hasTouchSupport && (getPref(PrefKey.STREAM_TOUCH_CONTROLLER) === 'off' || getPref(PrefKey.STREAM_TOUCH_CONTROLLER_AUTO_OFF)) && ['disableTakRenderer'], STATES.hasTouchSupport && getPref(PrefKey.STREAM_TOUCH_CONTROLLER) === 'off' && ['disableTakRenderer'],
BX_FLAGS.EnableXcloudLogging && ['enableConsoleLogging'], BX_FLAGS.EnableXcloudLogging && ['enableConsoleLogging'],

View File

@ -36,17 +36,39 @@ export const BxExposed = {
} }
}, },
getTitleInfo: () => STATES.currentStream.titleInfo,
modifyTitleInfo: (titleInfo: XcloudTitleInfo): XcloudTitleInfo => { modifyTitleInfo: (titleInfo: XcloudTitleInfo): XcloudTitleInfo => {
// Clone the object since the original is read-only // Clone the object since the original is read-only
titleInfo = structuredClone(titleInfo); titleInfo = structuredClone(titleInfo);
const touchControllerAvailability = getPref(PrefKey.STREAM_TOUCH_CONTROLLER); if (STATES.hasTouchSupport) {
let touchControllerAvailability = getPref(PrefKey.STREAM_TOUCH_CONTROLLER);
let supportedInputTypes = titleInfo.details.supportedInputTypes; let supportedInputTypes = titleInfo.details.supportedInputTypes;
// Disable touch control when gamepad found
if (touchControllerAvailability !== 'off' && getPref(PrefKey.STREAM_TOUCH_CONTROLLER_AUTO_OFF)) {
const gamepads = window.navigator.getGamepads();
let gamepadFound = false;
for (let gamepad of gamepads) {
if (gamepad && gamepad.connected) {
gamepadFound = true;
break;
}
}
gamepadFound && (touchControllerAvailability = 'off');
}
// Remove MKB support on mobile browsers // Remove MKB support on mobile browsers
if (UserAgent.isMobile()) { if (UserAgent.isMobile()) {
supportedInputTypes = supportedInputTypes.filter(i => i !== 'MKB'); supportedInputTypes = supportedInputTypes.filter(i => i !== InputType.MKB);
}
if (touchControllerAvailability === 'off') {
// Disable touch on all games (not native touch)
supportedInputTypes = supportedInputTypes.filter(i => i !== InputType.CUSTOM_TOUCH_OVERLAY && i !== InputType.GENERIC_TOUCH);
} }
// Pre-check supported input types // Pre-check supported input types
@ -55,11 +77,13 @@ export const BxExposed = {
!supportedInputTypes.includes(InputType.CUSTOM_TOUCH_OVERLAY) && !supportedInputTypes.includes(InputType.CUSTOM_TOUCH_OVERLAY) &&
!supportedInputTypes.includes(InputType.GENERIC_TOUCH); !supportedInputTypes.includes(InputType.GENERIC_TOUCH);
// Add generic touch support for non touch-supported games
if (!titleInfo.details.hasTouchSupport && touchControllerAvailability === 'all') { if (!titleInfo.details.hasTouchSupport && touchControllerAvailability === 'all') {
// Add generic touch support for non touch-supported games
supportedInputTypes.push(InputType.GENERIC_TOUCH); supportedInputTypes.push(InputType.GENERIC_TOUCH);
} }
titleInfo.details.supportedInputTypes = supportedInputTypes; titleInfo.details.supportedInputTypes = supportedInputTypes;
}
// Save this info in STATES // Save this info in STATES
STATES.currentStream.titleInfo = titleInfo; STATES.currentStream.titleInfo = titleInfo;