// Copyright (c) Meta Platforms, Inc. and affiliates. #pragma once #include "openxr/OculusXRBodyTrackingXR.h" #include "openxr/OculusXREyeTrackingXR.h" #include "openxr/OculusXRFaceTrackingXR.h" #include "OculusXRMovement.h" #include "OculusXRMovementLiveLink.h" #include "IOculusXRMovementModule.h" #include "ILiveLinkSource.h" #define LOCTEXT_NAMESPACE "OculusXRMovement" //------------------------------------------------------------------------------------------------- // FOculusXRMovementModule //------------------------------------------------------------------------------------------------- typedef TSharedPtr<XRMovement::FBodyTrackingXR, ESPMode::ThreadSafe> FBodyTrackingXRPtr; typedef TSharedPtr<XRMovement::FEyeTrackingXR, ESPMode::ThreadSafe> FEyeTrackingXRPtr; typedef TSharedPtr<XRMovement::FFaceTrackingXR, ESPMode::ThreadSafe> FFaceTrackingXRPtr; class FOculusXRMovementModule : public IOculusXRMovementModule { public: FOculusXRMovementModule(); static inline FOculusXRMovementModule& Get() { return FModuleManager::LoadModuleChecked<FOculusXRMovementModule>("OculusXRMovement"); } virtual void StartupModule() override; virtual void ShutdownModule() override; /* Live link */ virtual TSharedPtr<ILiveLinkSource> GetLiveLinkSource() override; virtual bool IsLiveLinkSourceValid() const override; virtual void AddLiveLinkSource() override; virtual void RemoveLiveLinkSource() override; FBodyTrackingXRPtr GetXrBodyTracker() { return BodyTrackingXR; } FEyeTrackingXRPtr GetXrEyeTracker() { return EyeTrackingXR; } FFaceTrackingXRPtr GetXrFaceTracker() { return FaceTrackingXR; } private: FBodyTrackingXRPtr BodyTrackingXR; FEyeTrackingXRPtr EyeTrackingXR; FFaceTrackingXRPtr FaceTrackingXR; TSharedPtr<MetaXRMovement::LiveLinkSource> MovementSource{ nullptr }; }; #undef LOCTEXT_NAMESPACE