mirror of
https://github.com/redphx/better-xcloud.git
synced 2025-06-06 23:57:19 +02:00
Add "Xbox button > Press" shortcut
This commit is contained in:
parent
7206c9e8bc
commit
5381575048
@ -1,6 +1,8 @@
|
|||||||
export const enum ShortcutAction {
|
export const enum ShortcutAction {
|
||||||
BETTER_XCLOUD_SETTINGS_SHOW = 'bx.settings.show',
|
BETTER_XCLOUD_SETTINGS_SHOW = 'bx.settings.show',
|
||||||
|
|
||||||
|
CONTROLLER_XBOX_BUTTON_PRESS = 'controller.xbox.press',
|
||||||
|
|
||||||
STREAM_VIDEO_TOGGLE = 'stream.video.toggle',
|
STREAM_VIDEO_TOGGLE = 'stream.video.toggle',
|
||||||
STREAM_SCREENSHOT_CAPTURE = 'stream.screenshot.capture',
|
STREAM_SCREENSHOT_CAPTURE = 'stream.screenshot.capture',
|
||||||
|
|
||||||
|
@ -16,6 +16,17 @@ export const SHORTCUT_ACTIONS: ShortcutActions = {
|
|||||||
[ShortcutAction.BETTER_XCLOUD_SETTINGS_SHOW]: [t('settings'), t('show')],
|
[ShortcutAction.BETTER_XCLOUD_SETTINGS_SHOW]: [t('settings'), t('show')],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// MKB
|
||||||
|
...(STATES.browser.capabilities.mkb ? {
|
||||||
|
[t('mouse-and-keyboard')]: {
|
||||||
|
[ShortcutAction.MKB_TOGGLE]: [t('toggle')],
|
||||||
|
},
|
||||||
|
} : {}),
|
||||||
|
|
||||||
|
[t('controller')]: {
|
||||||
|
[ShortcutAction.CONTROLLER_XBOX_BUTTON_PRESS]: [t('button-xbox'), t('press')],
|
||||||
|
},
|
||||||
|
|
||||||
// Device
|
// Device
|
||||||
...(!!AppInterface ? {
|
...(!!AppInterface ? {
|
||||||
[t('device')]: {
|
[t('device')]: {
|
||||||
@ -45,13 +56,6 @@ export const SHORTCUT_ACTIONS: ShortcutActions = {
|
|||||||
[ShortcutAction.STREAM_MICROPHONE_TOGGLE]: [t('microphone'), t('toggle')],
|
[ShortcutAction.STREAM_MICROPHONE_TOGGLE]: [t('microphone'), t('toggle')],
|
||||||
},
|
},
|
||||||
|
|
||||||
// MKB
|
|
||||||
...(STATES.browser.capabilities.mkb ? {
|
|
||||||
[t('mouse-and-keyboard')]: {
|
|
||||||
[ShortcutAction.MKB_TOGGLE]: [t('toggle')],
|
|
||||||
},
|
|
||||||
} : {}),
|
|
||||||
|
|
||||||
// Other
|
// Other
|
||||||
[t('other')]: {
|
[t('other')]: {
|
||||||
[ShortcutAction.TRUE_ACHIEVEMENTS_OPEN]: [t('true-achievements'), t('show')],
|
[ShortcutAction.TRUE_ACHIEVEMENTS_OPEN]: [t('true-achievements'), t('show')],
|
||||||
|
21
src/modules/shortcuts/virtual-controller-shortcut.ts
Normal file
21
src/modules/shortcuts/virtual-controller-shortcut.ts
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
import { generateVirtualControllerMapping } from "@/utils/gamepad";
|
||||||
|
|
||||||
|
export class VirtualControllerShortcut {
|
||||||
|
static pressXboxButton(): void {
|
||||||
|
const streamSession = window.BX_EXPOSED.streamSession;
|
||||||
|
if (!streamSession) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const released = generateVirtualControllerMapping();
|
||||||
|
const pressed = generateVirtualControllerMapping({
|
||||||
|
Nexus: 1,
|
||||||
|
VirtualPhysicality: 1024, // Home
|
||||||
|
});
|
||||||
|
|
||||||
|
streamSession.onVirtualGamepadInput('systemMenu', performance.now(), [pressed]);
|
||||||
|
setTimeout(() => {
|
||||||
|
streamSession.onVirtualGamepadInput('systemMenu', performance.now(), [released]);
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
|
}
|
@ -57,3 +57,36 @@ export function hasGamepad() {
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function generateVirtualControllerMapping(override: {}={}) {
|
||||||
|
const mapping = {
|
||||||
|
GamepadIndex: 0,
|
||||||
|
A: 0,
|
||||||
|
B: 0,
|
||||||
|
X: 0,
|
||||||
|
Y: 0,
|
||||||
|
LeftShoulder: 0,
|
||||||
|
RightShoulder: 0,
|
||||||
|
LeftTrigger: 0,
|
||||||
|
RightTrigger: 0,
|
||||||
|
View: 0,
|
||||||
|
Menu: 0,
|
||||||
|
LeftThumb: 0,
|
||||||
|
RightThumb: 0,
|
||||||
|
DPadUp: 0,
|
||||||
|
DPadDown: 0,
|
||||||
|
DPadLeft: 0,
|
||||||
|
DPadRight: 0,
|
||||||
|
Nexus: 0,
|
||||||
|
LeftThumbXAxis: 0,
|
||||||
|
LeftThumbYAxis: 0,
|
||||||
|
RightThumbXAxis: 0,
|
||||||
|
RightThumbYAxis: 0,
|
||||||
|
PhysicalPhysicality: 0,
|
||||||
|
VirtualPhysicality: 0,
|
||||||
|
Dirty: false,
|
||||||
|
Virtual: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
return Object.assign({}, mapping, override);
|
||||||
|
}
|
||||||
|
@ -10,6 +10,7 @@ import { EmulatedMkbHandler } from "@/modules/mkb/mkb-handler";
|
|||||||
import { RendererShortcut } from "@/modules/shortcuts/renderer-shortcut";
|
import { RendererShortcut } from "@/modules/shortcuts/renderer-shortcut";
|
||||||
import { TrueAchievements } from "./true-achievements";
|
import { TrueAchievements } from "./true-achievements";
|
||||||
import { NativeMkbHandler } from "@/modules/mkb/native-mkb-handler";
|
import { NativeMkbHandler } from "@/modules/mkb/native-mkb-handler";
|
||||||
|
import { VirtualControllerShortcut } from "@/modules/shortcuts/virtual-controller-shortcut";
|
||||||
|
|
||||||
export class ShortcutHandler {
|
export class ShortcutHandler {
|
||||||
static runAction(action: ShortcutAction) {
|
static runAction(action: ShortcutAction) {
|
||||||
@ -69,6 +70,10 @@ export class ShortcutHandler {
|
|||||||
case ShortcutAction.TRUE_ACHIEVEMENTS_OPEN:
|
case ShortcutAction.TRUE_ACHIEVEMENTS_OPEN:
|
||||||
TrueAchievements.getInstance().open(false);
|
TrueAchievements.getInstance().open(false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case ShortcutAction.CONTROLLER_XBOX_BUTTON_PRESS:
|
||||||
|
VirtualControllerShortcut.pressXboxButton();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,8 @@ export const SUPPORTED_LANGUAGES = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const Texts = {
|
const Texts = {
|
||||||
|
"button-xbox": "Xbox button",
|
||||||
|
"press": "Press",
|
||||||
"activate": "Activate",
|
"activate": "Activate",
|
||||||
"activated": "Activated",
|
"activated": "Activated",
|
||||||
"active": "Active",
|
"active": "Active",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user