194 lines
5.3 KiB
C++
194 lines
5.3 KiB
C++
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
|
|
#include "OculusXRMovement.h"
|
|
#include "OculusXRMovementLog.h"
|
|
#include "OculusXRMovementModule.h"
|
|
#include "OculusXRHMDPrivate.h"
|
|
#include "OculusXRHMD.h"
|
|
#include "OculusXRPluginWrapper.h"
|
|
#include "OculusXRMovementFunctionsOVR.h"
|
|
#include "OculusXRMovementFunctionsOpenXR.h"
|
|
#include "Logging/MessageLog.h"
|
|
|
|
#define LOCTEXT_NAMESPACE "OculusXRMovement"
|
|
|
|
bool OculusXRMovement::GetBodyState(FOculusXRBodyState& outOculusXRBodyState, float WorldToMeters)
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->GetBodyState(outOculusXRBodyState, WorldToMeters);
|
|
}
|
|
|
|
bool OculusXRMovement::GetBodySkeleton(FOculusXRBodySkeleton& outOculusXRBodyState, float WorldToMeters)
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->GetBodySkeleton(outOculusXRBodyState, WorldToMeters);
|
|
}
|
|
|
|
bool OculusXRMovement::IsBodyTrackingEnabled()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->IsBodyTrackingEnabled();
|
|
}
|
|
|
|
bool OculusXRMovement::IsBodyTrackingSupported()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->IsBodyTrackingSupported();
|
|
}
|
|
|
|
bool OculusXRMovement::RequestBodyTrackingFidelity(EOculusXRBodyTrackingFidelity fidelity)
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->RequestBodyTrackingFidelity(fidelity);
|
|
}
|
|
|
|
bool OculusXRMovement::ResetBodyTrackingCalibration()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->ResetBodyTrackingCalibration();
|
|
}
|
|
|
|
bool OculusXRMovement::SuggestBodyTrackingCalibrationOverride(float height)
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->SuggestBodyTrackingCalibrationOverride(height);
|
|
}
|
|
|
|
bool OculusXRMovement::StartBodyTracking()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->StartBodyTracking();
|
|
}
|
|
|
|
bool OculusXRMovement::StartBodyTrackingByJointSet(EOculusXRBodyJointSet jointSet)
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->StartBodyTrackingByJointSet(jointSet);
|
|
}
|
|
|
|
bool OculusXRMovement::StopBodyTracking()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->StopBodyTracking();
|
|
}
|
|
|
|
bool OculusXRMovement::GetFaceState(FOculusXRFaceState& outOculusXRFaceState)
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->GetFaceState(outOculusXRFaceState);
|
|
}
|
|
|
|
bool OculusXRMovement::IsFaceTrackingEnabled()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->IsFaceTrackingEnabled();
|
|
}
|
|
|
|
bool OculusXRMovement::IsFaceTrackingSupported()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->IsFaceTrackingSupported();
|
|
}
|
|
|
|
bool OculusXRMovement::IsFaceTrackingVisemesEnabled()
|
|
{
|
|
// Prevent calling plugin functions if the plugin is not available
|
|
if (!FOculusXRHMDModule::Get().IsOVRPluginAvailable())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool bResult = false;
|
|
|
|
ovrpBool IsEnabled = ovrpBool_False;
|
|
ovrpResult TrackingEnabledResult = FOculusXRHMDModule::GetPluginWrapper().GetFaceTrackingVisemesEnabled(&IsEnabled);
|
|
|
|
if (OVRP_SUCCESS(TrackingEnabledResult))
|
|
{
|
|
bResult = (IsEnabled == ovrpBool_True);
|
|
}
|
|
|
|
return bResult;
|
|
}
|
|
|
|
bool OculusXRMovement::IsFaceTrackingVisemesSupported()
|
|
{
|
|
// Prevent calling plugin functions if the plugin is not available
|
|
if (!FOculusXRHMDModule::Get().IsOVRPluginAvailable())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool bResult = false;
|
|
|
|
ovrpBool IsSupported = ovrpBool_False;
|
|
ovrpResult TrackingSupportedResult = FOculusXRHMDModule::GetPluginWrapper().GetFaceTrackingVisemesSupported(&IsSupported);
|
|
|
|
if (OVRP_SUCCESS(TrackingSupportedResult))
|
|
{
|
|
bResult = (IsSupported == ovrpBool_True);
|
|
}
|
|
|
|
return bResult;
|
|
}
|
|
|
|
bool OculusXRMovement::SetFaceTrackingVisemesEnabled(bool enabled)
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->SetFaceTrackingVisemesEnabled(enabled);
|
|
}
|
|
|
|
bool OculusXRMovement::GetFaceVisemesState(FOculusXRFaceVisemesState& outOculusXRFaceVisemesState)
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->GetFaceVisemesState(outOculusXRFaceVisemesState);
|
|
}
|
|
|
|
bool OculusXRMovement::StartFaceTracking()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->StartFaceTracking();
|
|
}
|
|
|
|
bool OculusXRMovement::StopFaceTracking()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->StopFaceTracking();
|
|
}
|
|
|
|
bool OculusXRMovement::GetEyeGazesState(FOculusXREyeGazesState& outOculusXREyeGazesState, float WorldToMeters)
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->GetEyeGazesState(outOculusXREyeGazesState, WorldToMeters);
|
|
}
|
|
|
|
bool OculusXRMovement::IsEyeTrackingEnabled()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->IsEyeTrackingEnabled();
|
|
}
|
|
|
|
bool OculusXRMovement::IsEyeTrackingSupported()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->IsEyeTrackingSupported();
|
|
}
|
|
|
|
bool OculusXRMovement::StartEyeTracking()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->StartEyeTracking();
|
|
}
|
|
|
|
bool OculusXRMovement::StopEyeTracking()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->StopEyeTracking();
|
|
}
|
|
|
|
bool OculusXRMovement::IsFullBodyTrackingEnabled()
|
|
{
|
|
return GetOculusXRMovementFunctionsImpl()->IsFullBodyTrackingEnabled();
|
|
}
|
|
|
|
TSharedPtr<IOculusXRMovementFunctions> OculusXRMovement::MovementFunctionsImpl = nullptr;
|
|
TSharedPtr<IOculusXRMovementFunctions> OculusXRMovement::GetOculusXRMovementFunctionsImpl()
|
|
{
|
|
if (MovementFunctionsImpl == nullptr)
|
|
{
|
|
const FName SystemName(TEXT("OpenXR"));
|
|
const bool IsOpenXR = GEngine->XRSystem.IsValid() && (GEngine->XRSystem->GetSystemName() == SystemName);
|
|
if (OculusXRHMD::FOculusXRHMD::GetOculusXRHMD() != nullptr)
|
|
{
|
|
MovementFunctionsImpl = MakeShared<FOculusXRMovementFunctionsOVR>();
|
|
}
|
|
else if (IsOpenXR)
|
|
{
|
|
MovementFunctionsImpl = MakeShared<FOculusXRMovementFunctionsOpenXR>();
|
|
}
|
|
}
|
|
|
|
check(MovementFunctionsImpl);
|
|
return MovementFunctionsImpl;
|
|
}
|
|
|
|
#undef LOCTEXT_NAMESPACE
|