diff --git a/Frontend/library/src/Config/Config.ts b/Frontend/library/src/Config/Config.ts index 5c84a86d..cbcefc62 100644 --- a/Frontend/library/src/Config/Config.ts +++ b/Frontend/library/src/Config/Config.ts @@ -31,6 +31,7 @@ export class Flags { static EnableMouseInput = 'EnableMouseInput' as const; static EnableTouchInput = 'EnableTouchInput' as const; static EnableGamePadInput = 'EnableGamePadInput' as const; + static EnableXRControllerInput = 'EnableXRControllerInput' as const; } export type FlagsKeys = Exclude; @@ -446,6 +447,17 @@ export class Config { ) ); + this.flags.set( + Flags.EnableXRControllerInput, + new SettingFlag( + Flags.EnableXRControllerInput, + 'Enable XR controller input', + 'If enabled, send XR controller events to streamer', + true, + useUrlParams + ) + ); + /** * Numeric parameters */ diff --git a/Frontend/library/src/WebXR/WebXRController.ts b/Frontend/library/src/WebXR/WebXRController.ts index c2d087b6..d0c759f0 100644 --- a/Frontend/library/src/WebXR/WebXRController.ts +++ b/Frontend/library/src/WebXR/WebXRController.ts @@ -6,6 +6,7 @@ import { WebGLUtils } from '../Util/WebGLUtils'; import { Controller } from '../Inputs/GamepadTypes'; import { XRGamepadController } from '../Inputs/XRGamepadController'; import { XrFrameEvent } from '../Util/EventEmitter' +import { Flags } from '../pixelstreamingfrontend'; export class WebXRController { private xrSession: XRSession; @@ -190,16 +191,18 @@ export class WebXRController { this.render(this.webRtcController.videoPlayer.getVideoElement()); } - this.xrSession.inputSources.forEach( - (source: XRInputSource, index: number, array: XRInputSource[]) => { - this.xrGamepadController.updateStatus( - source, - frame, - this.xrRefSpace - ); - }, - this - ); + if (this.webRtcController.config.isFlagEnabled(Flags.EnableXRControllerInput)) { + this.xrSession.inputSources.forEach( + (source: XRInputSource, index: number, array: XRInputSource[]) => { + this.xrGamepadController.updateStatus( + source, + frame, + this.xrRefSpace + ); + }, + this + ); + } this.xrSession.requestAnimationFrame( (time: DOMHighResTimeStamp, frame: XRFrame) => diff --git a/Frontend/ui-library/src/Config/ConfigUI.ts b/Frontend/ui-library/src/Config/ConfigUI.ts index aadd6652..32e49b7b 100644 --- a/Frontend/ui-library/src/Config/ConfigUI.ts +++ b/Frontend/ui-library/src/Config/ConfigUI.ts @@ -238,6 +238,11 @@ export class ConfigUI { this.flagsUi.get(Flags.EnableGamePadInput) ); + this.addSettingFlag( + viewSettingsSection, + this.flagsUi.get(Flags.EnableXRControllerInput) + ); + this.addSettingFlag(viewSettingsSection, this.flagsUi.get(LightMode)); /* Setup all encoder related settings under this section */