Skip to content
Snippets Groups Projects
Commit 9d60046b authored by Andrea Bönsch's avatar Andrea Bönsch
Browse files

Merge branch 'feature/vr_utils' into 'develop'

Feature/vr utils

See merge request VR-Group/unreal-development/ndisplayextensions!12
parents 7d7a9da8 eeb6651c
No related branches found
No related tags found
No related merge requests found
#include "VirtualRealityPawn.h" #include "VirtualRealityPawn.h"
#include "Camera/CameraComponent.h"
#include "Cluster/IDisplayClusterClusterManager.h" #include "Cluster/IDisplayClusterClusterManager.h"
#include "Engine/Engine.h"
#include "Engine/World.h" #include "Engine/World.h"
#include "Game/IDisplayClusterGameManager.h" #include "Game/IDisplayClusterGameManager.h"
#include "GameFramework/InputSettings.h" #include "GameFramework/InputSettings.h"
...@@ -8,11 +10,7 @@ ...@@ -8,11 +10,7 @@
#include "Kismet/GameplayStatics.h" #include "Kismet/GameplayStatics.h"
#include "DisplayClusterSettings.h" #include "DisplayClusterSettings.h"
#include "IDisplayCluster.h" #include "IDisplayCluster.h"
#include "VirtualRealityUtilities.h"
#include "IDisplayClusterConfigManager.h"
#include "IXRTrackingSystem.h"
#include "Engine/Engine.h"
#include "Camera/CameraComponent.h"
AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{ {
...@@ -51,7 +49,7 @@ AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitial ...@@ -51,7 +49,7 @@ AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitial
void AVirtualRealityPawn::OnForward_Implementation(float Value) void AVirtualRealityPawn::OnForward_Implementation(float Value)
{ {
// Check if this function triggers correctly on ROLV. // Check if this function triggers correctly on ROLV.
if (RightHand && (NavigationMode == EVRNavigationModes::nav_mode_fly || IsDesktopMode() || IsHeadMountedMode())) if (RightHand && (NavigationMode == EVRNavigationModes::nav_mode_fly || UVirtualRealityUtilities::IsDesktopMode() || UVirtualRealityUtilities::IsHeadMountedMode()))
{ {
AddMovementInput(RightHand->GetForwardVector(), Value); AddMovementInput(RightHand->GetForwardVector(), Value);
} }
...@@ -59,7 +57,7 @@ void AVirtualRealityPawn::OnForward_Implementation(float Value) ...@@ -59,7 +57,7 @@ void AVirtualRealityPawn::OnForward_Implementation(float Value)
void AVirtualRealityPawn::OnRight_Implementation(float Value) void AVirtualRealityPawn::OnRight_Implementation(float Value)
{ {
if (RightHand && (NavigationMode == EVRNavigationModes::nav_mode_fly || IsDesktopMode() || IsHeadMountedMode())) if (RightHand && (NavigationMode == EVRNavigationModes::nav_mode_fly || UVirtualRealityUtilities::IsDesktopMode() || UVirtualRealityUtilities::IsHeadMountedMode()))
{ {
AddMovementInput(RightHand->GetRightVector(), Value); AddMovementInput(RightHand->GetRightVector(), Value);
} }
...@@ -85,7 +83,7 @@ void AVirtualRealityPawn::OnTurnRate_Implementation(float Rate) ...@@ -85,7 +83,7 @@ void AVirtualRealityPawn::OnTurnRate_Implementation(float Rate)
void AVirtualRealityPawn::OnLookUpRate_Implementation(float Rate) void AVirtualRealityPawn::OnLookUpRate_Implementation(float Rate)
{ {
if (IsRoomMountedMode()) if (UVirtualRealityUtilities::IsRoomMountedMode())
{ {
// User-centered projection causes simulation sickness on look up interaction hence not implemented. // User-centered projection causes simulation sickness on look up interaction hence not implemented.
} }
...@@ -103,31 +101,6 @@ void AVirtualRealityPawn::OnAction_Implementation(bool Pressed, int32 Index) ...@@ -103,31 +101,6 @@ void AVirtualRealityPawn::OnAction_Implementation(bool Pressed, int32 Index)
{ {
} }
bool AVirtualRealityPawn::IsDesktopMode()
{
return !IsRoomMountedMode() && !IsHeadMountedMode();
}
bool AVirtualRealityPawn::IsRoomMountedMode()
{
return IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster;
}
bool AVirtualRealityPawn::IsHeadMountedMode()
{
return GEngine->XRSystem.IsValid() && GEngine->XRSystem->IsHeadTrackingAllowed();
}
FString AVirtualRealityPawn::GetNodeName()
{
return IsRoomMountedMode() ? IDisplayCluster::Get().GetClusterMgr()->GetNodeId() : FString(TEXT("Localhost"));
}
float AVirtualRealityPawn::GetEyeDistance()
{
return IDisplayCluster::Get().GetConfigMgr()->GetConfigStereo().EyeDist;
}
float AVirtualRealityPawn::GetBaseTurnRate() const float AVirtualRealityPawn::GetBaseTurnRate() const
{ {
return BaseTurnRate; return BaseTurnRate;
...@@ -203,11 +176,6 @@ USceneComponent* AVirtualRealityPawn::GetShutterGlassesComponent() ...@@ -203,11 +176,6 @@ USceneComponent* AVirtualRealityPawn::GetShutterGlassesComponent()
return ShutterGlasses; return ShutterGlasses;
} }
UDisplayClusterSceneComponent* AVirtualRealityPawn::GetClusterComponent(const FString& Name)
{
return IDisplayCluster::Get().GetGameMgr()->GetNodeById(Name);
}
void AVirtualRealityPawn::ClusterExecute(const FString& Command) void AVirtualRealityPawn::ClusterExecute(const FString& Command)
{ {
FDisplayClusterClusterEvent event; FDisplayClusterClusterEvent event;
...@@ -243,14 +211,14 @@ void AVirtualRealityPawn::BeginPlay() ...@@ -243,14 +211,14 @@ void AVirtualRealityPawn::BeginPlay()
BaseTurnRate = Settings->RotationSpeed; BaseTurnRate = Settings->RotationSpeed;
} }
if (IsRoomMountedMode()) if (UVirtualRealityUtilities::IsRoomMountedMode())
{ {
UInputSettings::GetInputSettings()->RemoveAxisMapping(FInputAxisKeyMapping("TurnRate", EKeys::MouseX)); UInputSettings::GetInputSettings()->RemoveAxisMapping(FInputAxisKeyMapping("TurnRate", EKeys::MouseX));
UInputSettings::GetInputSettings()->RemoveAxisMapping(FInputAxisKeyMapping("LookUpRate", EKeys::MouseY)); UInputSettings::GetInputSettings()->RemoveAxisMapping(FInputAxisKeyMapping("LookUpRate", EKeys::MouseY));
InitRoomMountedComponentReferences(); InitRoomMountedComponentReferences();
} }
else if (IsHeadMountedMode()) else if (UVirtualRealityUtilities::IsHeadMountedMode())
{ {
UInputSettings::GetInputSettings()->RemoveAxisMapping(FInputAxisKeyMapping("TurnRate", EKeys::MouseX)); UInputSettings::GetInputSettings()->RemoveAxisMapping(FInputAxisKeyMapping("TurnRate", EKeys::MouseX));
UInputSettings::GetInputSettings()->RemoveAxisMapping(FInputAxisKeyMapping("LookUpRate", EKeys::MouseY)); UInputSettings::GetInputSettings()->RemoveAxisMapping(FInputAxisKeyMapping("LookUpRate", EKeys::MouseY));
...@@ -334,20 +302,20 @@ UPawnMovementComponent* AVirtualRealityPawn::GetMovementComponent() const ...@@ -334,20 +302,20 @@ UPawnMovementComponent* AVirtualRealityPawn::GetMovementComponent() const
void AVirtualRealityPawn::InitRoomMountedComponentReferences() void AVirtualRealityPawn::InitRoomMountedComponentReferences()
{ {
if (!IsRoomMountedMode()) return; if (!UVirtualRealityUtilities::IsRoomMountedMode()) return;
//check whether the nodes already exist (otherwise GetClusterComponent() returns nullptr and prints a warning) and assign them //check whether the nodes already exist (otherwise GetClusterComponent() returns nullptr and prints a warning) and assign them
if (!TrackingOrigin) TrackingOrigin = GetClusterComponent("cave_origin"); if (!TrackingOrigin) TrackingOrigin = UVirtualRealityUtilities::GetClusterComponent("cave_origin");
if (!TrackingOrigin) TrackingOrigin = GetClusterComponent("rolv_origin"); if (!TrackingOrigin) TrackingOrigin = UVirtualRealityUtilities::GetClusterComponent("rolv_origin");
if (!CaveCenter) CaveCenter = GetClusterComponent("cave_center"); if (!CaveCenter) CaveCenter = UVirtualRealityUtilities::GetClusterComponent("cave_center");
if (!ShutterGlasses) if (!ShutterGlasses)
{ {
ShutterGlasses = GetClusterComponent("shutter_glasses"); ShutterGlasses = UVirtualRealityUtilities::GetClusterComponent("shutter_glasses");
Head->AttachToComponent(ShutterGlasses, FAttachmentTransformRules::KeepRelativeTransform); Head->AttachToComponent(ShutterGlasses, FAttachmentTransformRules::KeepRelativeTransform);
} }
if (!Flystick) if (!Flystick)
{ {
Flystick = GetClusterComponent("flystick"); Flystick = UVirtualRealityUtilities::GetClusterComponent("flystick");
if (AttachRightHandInCAVE == EAttachementType::AT_FLYSTICK) if (AttachRightHandInCAVE == EAttachementType::AT_FLYSTICK)
RightHand->AttachToComponent(Flystick, FAttachmentTransformRules::KeepRelativeTransform); RightHand->AttachToComponent(Flystick, FAttachmentTransformRules::KeepRelativeTransform);
if (AttachLeftHandInCAVE == EAttachementType::AT_FLYSTICK) if (AttachLeftHandInCAVE == EAttachementType::AT_FLYSTICK)
...@@ -355,46 +323,14 @@ void AVirtualRealityPawn::InitRoomMountedComponentReferences() ...@@ -355,46 +323,14 @@ void AVirtualRealityPawn::InitRoomMountedComponentReferences()
} }
if (!LeftHandTarget) if (!LeftHandTarget)
{ {
LeftHandTarget = GetClusterComponent("left_hand_target"); LeftHandTarget = UVirtualRealityUtilities::GetClusterComponent("left_hand_target");
if (AttachLeftHandInCAVE == EAttachementType::AT_HANDTARGET) if (AttachLeftHandInCAVE == EAttachementType::AT_HANDTARGET)
LeftHand->AttachToComponent(LeftHandTarget, FAttachmentTransformRules::KeepRelativeTransform); LeftHand->AttachToComponent(LeftHandTarget, FAttachmentTransformRules::KeepRelativeTransform);
} }
if (!RightHandTarget) if (!RightHandTarget)
{ {
RightHandTarget = GetClusterComponent("right_hand_target"); RightHandTarget = UVirtualRealityUtilities::GetClusterComponent("right_hand_target");
if (AttachRightHandInCAVE == EAttachementType::AT_HANDTARGET) if (AttachRightHandInCAVE == EAttachementType::AT_HANDTARGET)
RightHand->AttachToComponent(RightHandTarget, FAttachmentTransformRules::KeepRelativeTransform); RightHand->AttachToComponent(RightHandTarget, FAttachmentTransformRules::KeepRelativeTransform);
} }
} }
EEyeType AVirtualRealityPawn::GetNodeEyeType()
{
FDisplayClusterConfigClusterNode CurrentNodeConfig;
IDisplayCluster::Get().GetConfigMgr()->GetClusterNode(GetNodeName(), CurrentNodeConfig);
FString s = CurrentNodeConfig.ToString();
if (s.Contains("mono_eye"))
{
TArray<FString> stringArray;
int32 count = s.ParseIntoArray(stringArray, TEXT(","));
for (int x = 0; x < count; x++)
{
if (!stringArray[x].Contains("mono_eye")) continue;
if (stringArray[x].Contains("left"))
{
return EEyeType::ET_STEREO_LEFT;
}
if (stringArray[x].Contains("right"))
{
return EEyeType::ET_STEREO_RIGHT;
}
}
}
else
{
return EEyeType::ET_MONO;
}
return EEyeType::ET_MONO;
}
\ No newline at end of file
#include "VirtualRealityUtilities.h"
#include "Cluster/IDisplayClusterClusterManager.h"
#include "Engine/Engine.h"
#include "Game/IDisplayClusterGameManager.h"
#include "IDisplayCluster.h"
#include "IDisplayClusterConfigManager.h"
#include "IXRTrackingSystem.h"
bool UVirtualRealityUtilities::IsDesktopMode()
{
return !IsRoomMountedMode() && !IsHeadMountedMode();
}
bool UVirtualRealityUtilities::IsRoomMountedMode()
{
return IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster;
}
bool UVirtualRealityUtilities::IsHeadMountedMode()
{
return GEngine->XRSystem.IsValid() && GEngine->XRSystem->IsHeadTrackingAllowed();
}
FString UVirtualRealityUtilities::GetNodeName()
{
return IsRoomMountedMode() ? IDisplayCluster::Get().GetClusterMgr()->GetNodeId() : FString(TEXT("Localhost"));
}
float UVirtualRealityUtilities::GetEyeDistance()
{
return IDisplayCluster::Get().GetConfigMgr()->GetConfigStereo().EyeDist;
}
EEyeType UVirtualRealityUtilities::GetNodeEyeType()
{
FDisplayClusterConfigClusterNode CurrentNodeConfig;
IDisplayCluster::Get().GetConfigMgr()->GetClusterNode(GetNodeName(), CurrentNodeConfig);
FString s = CurrentNodeConfig.ToString();
if (s.Contains("mono_eye"))
{
TArray<FString> stringArray;
int32 count = s.ParseIntoArray(stringArray, TEXT(","));
for (int x = 0; x < count; x++)
{
if (!stringArray[x].Contains("mono_eye")) continue;
if (stringArray[x].Contains("left"))
{
return EEyeType::ET_STEREO_LEFT;
}
if (stringArray[x].Contains("right"))
{
return EEyeType::ET_STEREO_RIGHT;
}
}
}
else
{
return EEyeType::ET_MONO;
}
return EEyeType::ET_MONO;
}
UDisplayClusterSceneComponent* UVirtualRealityUtilities::GetClusterComponent(const FString& Name)
{
return IDisplayCluster::Get().GetGameMgr()->GetNodeById(Name);
}
#pragma once #pragma once
#include "GameFramework/FloatingPawnMovement.h"
#include "GameFramework/PawnMovementComponent.h"
#include "GameFramework/RotatingMovementComponent.h"
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "Cluster/DisplayClusterClusterEvent.h"
#include "Cluster/IDisplayClusterClusterManager.h"
#include "DisplayClusterPawn.h" #include "DisplayClusterPawn.h"
#include "DisplayClusterSceneComponent.h" #include "DisplayClusterSceneComponent.h"
#include "Cluster/IDisplayClusterClusterManager.h" #include "GameFramework/FloatingPawnMovement.h"
#include "Cluster/DisplayClusterClusterEvent.h" #include "GameFramework/PawnMovementComponent.h"
#include "GameFramework/RotatingMovementComponent.h"
#include "MotionControllerComponent.h" #include "MotionControllerComponent.h"
#include "VirtualRealityPawn.generated.h" #include "VirtualRealityPawn.generated.h"
...@@ -18,14 +18,6 @@ enum class EVRNavigationModes : uint8 ...@@ -18,14 +18,6 @@ enum class EVRNavigationModes : uint8
nav_mode_fly UMETA(DisplayName = "Navigation Mode Fly") nav_mode_fly UMETA(DisplayName = "Navigation Mode Fly")
}; };
UENUM(BlueprintType)
enum class EEyeType : uint8
{
ET_MONO UMETA(DisplayName = "mono"),
ET_STEREO_RIGHT UMETA(DisplayName = "stero_right"),
ET_STEREO_LEFT UMETA(DisplayName = "stereo_left")
};
UENUM(BlueprintType) UENUM(BlueprintType)
enum class EAttachementType : uint8 enum class EAttachementType : uint8
{ {
...@@ -47,16 +39,6 @@ public: ...@@ -47,16 +39,6 @@ public:
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, BlueprintCallable, Category = "Pawn") void OnFire(bool Pressed); UFUNCTION(BlueprintNativeEvent, BlueprintCallable, BlueprintCallable, Category = "Pawn") void OnFire(bool Pressed);
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnAction(bool Pressed, int32 Index); UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnAction(bool Pressed, int32 Index);
UFUNCTION(BlueprintPure, Category = "Pawn") static bool IsDesktopMode();
UFUNCTION(BlueprintPure, Category = "Pawn") static bool IsRoomMountedMode();
UFUNCTION(BlueprintPure, Category = "Pawn") static bool IsHeadMountedMode();
UFUNCTION(BlueprintPure, Category = "Pawn") static FString GetNodeName();
UFUNCTION(BlueprintPure, Category = "Pawn") static float GetEyeDistance();
UFUNCTION(BlueprintPure, Category = "Pawn") static EEyeType GetNodeEyeType();
UFUNCTION(Category = "Pawn") float GetBaseTurnRate() const; UFUNCTION(Category = "Pawn") float GetBaseTurnRate() const;
UFUNCTION(Category = "Pawn") void SetBaseTurnRate(float Value); UFUNCTION(Category = "Pawn") void SetBaseTurnRate(float Value);
UFUNCTION(Category = "Pawn") UFloatingPawnMovement* GetFloatingPawnMovement(); UFUNCTION(Category = "Pawn") UFloatingPawnMovement* GetFloatingPawnMovement();
...@@ -79,10 +61,6 @@ private: ...@@ -79,10 +61,6 @@ private:
UFUNCTION(Category = "Pawn") USceneComponent* GetShutterGlassesComponent(); UFUNCTION(Category = "Pawn") USceneComponent* GetShutterGlassesComponent();
public: public:
//Get Compenent of Display Cluster by it's name, which is specified in the nDisplay config
UFUNCTION(BlueprintPure, BlueprintCallable, Category = "Pawn") static UDisplayClusterSceneComponent* GetClusterComponent(const FString& Name);
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") EVRNavigationModes NavigationMode = EVRNavigationModes::nav_mode_fly; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") EVRNavigationModes NavigationMode = EVRNavigationModes::nav_mode_fly;
//Execute specified console command on all nDisplayCluster Nodes //Execute specified console command on all nDisplayCluster Nodes
...@@ -132,7 +110,6 @@ protected: ...@@ -132,7 +110,6 @@ protected:
// Holding the Shutter Glasses Component that is attached to this Pawn // Holding the Shutter Glasses Component that is attached to this Pawn
UPROPERTY() USceneComponent* ShutterGlasses = nullptr; UPROPERTY() USceneComponent* ShutterGlasses = nullptr;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") bool ShowHMDControllers = true; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") bool ShowHMDControllers = true;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") EAttachementType AttachRightHandInCAVE = EAttachementType::AT_FLYSTICK; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") EAttachementType AttachRightHandInCAVE = EAttachementType::AT_FLYSTICK;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") EAttachementType AttachLeftHandInCAVE = EAttachementType::AT_NONE; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") EAttachementType AttachLeftHandInCAVE = EAttachementType::AT_NONE;
......
#pragma once
#include "CoreMinimal.h"
#include "DisplayClusterSceneComponent.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "VirtualRealityUtilities.generated.h"
UENUM(BlueprintType)
enum class EEyeType : uint8
{
ET_MONO UMETA(DisplayName = "mono"),
ET_STEREO_RIGHT UMETA(DisplayName = "stero_right"),
ET_STEREO_LEFT UMETA(DisplayName = "stereo_left")
};
UCLASS()
class DISPLAYCLUSTEREXTENSIONS_API UVirtualRealityUtilities : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintPure, Category = "DisplayCluster") static bool IsDesktopMode();
UFUNCTION(BlueprintPure, Category = "DisplayCluster") static bool IsRoomMountedMode();
UFUNCTION(BlueprintPure, Category = "DisplayCluster") static bool IsHeadMountedMode();
UFUNCTION(BlueprintPure, Category = "DisplayCluster") static FString GetNodeName();
UFUNCTION(BlueprintPure, Category = "DisplayCluster") static float GetEyeDistance();
UFUNCTION(BlueprintPure, Category = "DisplayCluster") static EEyeType GetNodeEyeType();
//Get Compenent of Display Cluster by it's name, which is specified in the nDisplay config
UFUNCTION(BlueprintPure, BlueprintCallable, Category = "DisplayCluster") static UDisplayClusterSceneComponent* GetClusterComponent(const FString& Name);
};
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment