migrate the static getworld to sgengineutils

This commit is contained in:
Mamadou Babaei
2024-06-07 13:25:09 +02:00
parent 868c993ce9
commit f956c8d5ce
7 changed files with 191 additions and 193 deletions
@@ -37,9 +37,6 @@
#include "Containers/Array.h"
#include "Containers/Map.h"
#if WITH_EDITOR
#include "Editor.h"
#endif /* WITH_EDITOR */
#include "Engine/Engine.h"
#include "Engine/SkeletalMesh.h"
#include "Engine/World.h"
@@ -49,9 +46,6 @@
#include "OpenXRCore.h"
#include "OpenXRHMD/Private/OpenXRHMD.h"
#include "Runtime/Launch/Resources/Version.h"
#if WITH_EDITOR
#include "Subsystems/UnrealEditorSubsystem.h"
#endif /* WITH_EDITOR */
#include "SGBackend/SGBackend.h"
#include "SGCore/SGHapticGlove.h"
@@ -62,6 +56,7 @@
#include "SGTracking/SGXRHandState.h"
#include "SGTypes/SGCoreTypes.h"
#include "SGTypes/SGTrackingTypes.h"
#include "SGUtils/SGEngineUtils.h"
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION <= 3
void EnumerateOpenXRApiLayers(TArray<XrApiLayerProperties>& OutProperties)
@@ -90,8 +85,6 @@ struct FSGXRTracker::FImpl
* Static methods
************************/
static UWorld* GetWorld();
FORCEINLINE static bool ShouldFallbackToHandTrackingIfNoGloveDetected()
{
const USGSettings* Settings{USGSettings::GetInstance()};
@@ -511,87 +504,6 @@ struct FSGXRTracker::FImpl
bool UpdateSGHandState(const EControllerHand DeviceHand, FSGXRHandState& OutHandState) const;
};
UWorld* FSGXRTracker::FImpl::GetWorld()
{
UWorld* World{nullptr};
#if WITH_EDITOR
if (GIsEditor)
{
if (IsValid(GEditor))
{
const bool bIsPIE = GPlayInEditorID != -1;
if (!bIsPIE)
{
const FWorldContext* WorldContext{GEditor->GetPIEWorldContext(1)};
if (WorldContext)
{
World = WorldContext->World();
}
}
else
{
const FWorldContext* WorldContext{GEditor->GetPIEWorldContext(GPlayInEditorID)};
if (WorldContext)
{
World = WorldContext->World();
}
}
/// NOTE
// IsInGameThread() check is to avoid EngineScriptHelpers::CheckIfInEditorAndPIE emitting:
// "You are not on the main thread."
// !(GEditor->PlayWorld || GIsPlayInEditorWorld) check is to avoid
// EngineScriptHelpers::CheckIfInEditorAndPIE emitting:
// The Editor is currently in a play mode.
if (!IsValid(World) && IsInGameThread() && !(GEditor->PlayWorld || GIsPlayInEditorWorld))
{
UUnrealEditorSubsystem* UnrealEditorSubsystem{GEditor->GetEditorSubsystem<UUnrealEditorSubsystem>()};
if (IsValid(UnrealEditorSubsystem))
{
/// NOTE
// This is exactly UnrealEditorSubsystem->GetEditorWorld() without all the annoying warnings that
// pollutes the logs. It's safe since we've already done all the checks.
World = GEditor->GetEditorWorldContext(false).World();
}
}
}
if (!IsValid(World) && IsValid(GEngine))
{
const UGameViewportClient* Viewport{GEngine->GameViewport};
if (IsValid(Viewport))
{
World = Viewport->GetWorld();
}
}
}
else
{
if (IsValid(GEngine))
{
World = GEngine->GetCurrentPlayWorld(nullptr);
}
}
#else /* WITH_EDITOR */
if (IsValid(GEngine))
{
World = GEngine->GetCurrentPlayWorld(nullptr);
}
#endif /* WITH_EDITOR */
if (!IsValid(World) && IsValid(GEngine))
{
UEngineSubsystem* EngineSubsystem{GEngine->GetEngineSubsystem<UEngineSubsystem>()};
if (IsValid(EngineSubsystem))
{
World = EngineSubsystem->GetWorld();
}
}
return World;
}
ESGPositionalTrackingHardware FSGXRTracker::FImpl::GetPositionalTrackingHardware()
{
ESGPositionalTrackingHardware TrackerHardware = GetWristTrackingSettings().TrackingHardware;
@@ -748,7 +660,7 @@ USGBasicHandModel* FSGXRTracker::FImpl::GetHandModel(const bool bRight)
const TArray<FVector> StartPositions{GetFingerStartPositions(bRight)};
const TArray<FQuat> StartRotations{GetFingerStartRotations(bRight)};
UWorld* World{GetWorld()};
UWorld* World{FSGEngineUtils::GetWorld()};
USGBasicHandModel* HandModel{
USGBasicHandModel::NewBasicHandModel(World, bRight, FingerLengths, StartPositions, StartRotations)
@@ -765,7 +677,7 @@ USGHandPose* FSGXRTracker::FImpl::GetHandPose(const bool bRight)
return nullptr;
}
UWorld* World{GetWorld()};
UWorld* World{FSGEngineUtils::GetWorld()};
const USGBasicHandModel* HandModel{GetHandModel(bRight)};
USGHandPose* HandPose{nullptr};
@@ -1536,7 +1448,7 @@ bool FSGXRTracker::FImpl::GetOpenXRHandTrackingWristTransform(
return false;
}
UWorld* World{GetWorld()};
UWorld* World{FSGEngineUtils::GetWorld()};
FXRMotionControllerData MotionControllerData;
XRTrackingSystem->GetMotionControllerData(World, DeviceHand, MotionControllerData);
@@ -1561,7 +1473,7 @@ bool FSGXRTracker::FImpl::GetOpenXRWristTransform(
{
static constexpr int32 CurrentPlayerControllerIndex = 0;
const UWorld* World{GetWorld()};
const UWorld* World{FSGEngineUtils::GetWorld()};
const float WorldToMetersScale = World ? World->GetWorldSettings()->WorldToMeters : 100.0f;
FVector TrackerLocation;