From 9538a73ecc46395b3aff7241fdd8ac5a11422b3d Mon Sep 17 00:00:00 2001
From: David Gilbert <gilbert@vr.rwth-aachen.de>
Date: Mon, 5 Aug 2024 13:40:13 +0200
Subject: [PATCH] feature(replication, cave): Adds support for multiple
 clusters joining the same server. For that, the attachment process of the
 DCRA is adjusted. Additionally, this should further decouple cluster plugin
 and toolkit.

---
 Content/Pawn/BP_RWTHVRPawn_Default.uasset     | Bin 55011 -> 57410 bytes
 Content/Pawn/Base/BP_RWTHVRPawn_Base.uasset   | Bin 25965 -> 27162 bytes
 .../Private/Core/RWTHVRGameModeBase.cpp       |  50 +++++-
 .../Private/Core/RWTHVRPlayerState.cpp        |  30 ++++
 .../Pawn/ClusterRepresentationActor.cpp       | 142 ++++++++++++++++++
 .../RWTHVRToolkit/Private/Pawn/RWTHVRPawn.cpp |  42 +++---
 .../Public/Core/RWTHVRGameModeBase.h          |   7 +
 .../Public/Core/RWTHVRPlayerState.h           |  20 +++
 .../Public/Pawn/ClusterRepresentationActor.h  |  29 ++++
 Source/RWTHVRToolkit/Public/Pawn/RWTHVRPawn.h |   8 +-
 10 files changed, 298 insertions(+), 30 deletions(-)
 create mode 100644 Source/RWTHVRToolkit/Private/Pawn/ClusterRepresentationActor.cpp
 create mode 100644 Source/RWTHVRToolkit/Public/Pawn/ClusterRepresentationActor.h

diff --git a/Content/Pawn/BP_RWTHVRPawn_Default.uasset b/Content/Pawn/BP_RWTHVRPawn_Default.uasset
index cb05e67f79561281c52e04b21e9bd67726871dbb..145ddf5f938d0a3612c7a609aafa75a30d82063f 100644
GIT binary patch
literal 57410
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
z%0A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
U$$QTtkmb~VP0-jcNDQPN0G+a^;Q#;t

literal 55011
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

diff --git a/Content/Pawn/Base/BP_RWTHVRPawn_Base.uasset b/Content/Pawn/Base/BP_RWTHVRPawn_Base.uasset
index 3616819e69aa1ac0f21047b036be9244b1597c76..cba6c2e1875f45603f51e234dbb9b066017654f9 100644
GIT binary patch
literal 27162
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

delta 7909
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

diff --git a/Source/RWTHVRToolkit/Private/Core/RWTHVRGameModeBase.cpp b/Source/RWTHVRToolkit/Private/Core/RWTHVRGameModeBase.cpp
index 4d9b4b6e..a30a7ab1 100644
--- a/Source/RWTHVRToolkit/Private/Core/RWTHVRGameModeBase.cpp
+++ b/Source/RWTHVRToolkit/Private/Core/RWTHVRGameModeBase.cpp
@@ -7,9 +7,15 @@
 #include "GameFramework/SpectatorPawn.h"
 #include "Kismet/GameplayStatics.h"
 #include "Logging/StructuredLog.h"
+#include "Pawn/ClusterRepresentationActor.h"
 #include "Utility/RWTHVRUtilities.h"
 
 
+ARWTHVRGameModeBase::ARWTHVRGameModeBase(const FObjectInitializer& ObjectInitializer)
+{
+	PlayerStateClass = ARWTHVRPlayerState::StaticClass();
+}
+
 FString ARWTHVRGameModeBase::InitNewPlayer(APlayerController* NewPlayerController, const FUniqueNetIdRepl& UniqueId,
 										   const FString& Options, const FString& Portal)
 {
@@ -17,6 +23,7 @@ FString ARWTHVRGameModeBase::InitNewPlayer(APlayerController* NewPlayerControlle
 	// but I don't really want to introduce a hard dependency here.
 	const FString NodeNameKey = "node";
 	const FString PrimaryNodeIdKey = "PrimaryNodeId";
+	const FString ClusterIdKey = "ClusterId";
 
 	// Check if we're using our custom PlayerState so that we can save the player type there.
 	// If not, just ingore all related args.
@@ -24,6 +31,7 @@ FString ARWTHVRGameModeBase::InitNewPlayer(APlayerController* NewPlayerControlle
 
 	if (State != nullptr)
 	{
+		int32 ClusterId = -1;
 		if (UGameplayStatics::HasOption(Options, PrimaryNodeIdKey))
 		{
 			const FString PrimaryNodeId = UGameplayStatics::ParseOption(Options, PrimaryNodeIdKey);
@@ -34,10 +42,51 @@ FString ARWTHVRGameModeBase::InitNewPlayer(APlayerController* NewPlayerControlle
 				? UGameplayStatics::ParseOption(Options, NodeNameKey)
 				: PrimaryNodeId;
 
+			ClusterId = UGameplayStatics::HasOption(Options, ClusterIdKey)
+				? TextKeyUtil::HashString(*UGameplayStatics::ParseOption(Options, ClusterIdKey))
+				: -1;
+
 			const EPlayerType Type =
 				NodeName == PrimaryNodeId ? EPlayerType::nDisplayPrimary : EPlayerType::nDisplaySecondary;
 			State->RequestSetPlayerType(Type);
 		}
+		else if (GetNetMode() == NM_Standalone && URWTHVRUtilities::IsRoomMountedMode())
+		{
+			ClusterId = 0;
+		}
+
+		// If we're in none-standalone netmode, this is only executed on the server, as the GM only exists there.
+		// On standalone, this is executed on every node.
+
+		State->SetCorrespondingClusterId(ClusterId);
+
+		auto* ClusterRepresentation = ConnectedClusters.Find(ClusterId);
+		if (!ClusterRepresentation)
+		{
+			// No actor there yet, spawn it
+			FActorSpawnParameters SpawnParameters;
+			SpawnParameters.Name = FName(*FString::Printf(TEXT("ClusterRepresentation_%d"), ClusterId));
+			ClusterRepresentation = GetWorld()->SpawnActor<AClusterRepresentationActor>(SpawnParameters);
+			ClusterRepresentation->ClusterId = ClusterId;
+			UE_LOGFMT(Toolkit, Display,
+					  "ARWTHVRGameModeBase: Spawned ClusterRepresentationActor {Name} for Cluster {Id}",
+					  ClusterRepresentation->GetName(), ClusterId);
+		}
+
+		UE_LOGFMT(Toolkit, Display, "ARWTHVRGameModeBase: Using ClusterRepresentationActor {Name} for Cluster {Id}",
+				  ClusterRepresentation->GetName(), ClusterId);
+
+		// Double check for sanity
+		check(ClusterId == ClusterRepresentation->ClusterId);
+
+		State->SetCorrespondingClusterActor(ClusterRepresentation);
+		State->SetCorrespondingClusterId(ClusterId);
+
+		if (State->GetPlayerType() == EPlayerType::nDisplayPrimary)
+		{
+			// We're the owner of the actor!
+			ClusterRepresentation->SetOwner(NewPlayerController);
+		}
 	}
 
 	return Super::InitNewPlayer(NewPlayerController, UniqueId, Options, Portal);
@@ -88,6 +137,5 @@ void ARWTHVRGameModeBase::PostLogin(APlayerController* NewPlayer)
 		NewPlayer->Possess(ResultPawn);
 	}
 
-
 	Super::PostLogin(NewPlayer);
 }
diff --git a/Source/RWTHVRToolkit/Private/Core/RWTHVRPlayerState.cpp b/Source/RWTHVRToolkit/Private/Core/RWTHVRPlayerState.cpp
index 0ad60f0c..4ae4795c 100644
--- a/Source/RWTHVRToolkit/Private/Core/RWTHVRPlayerState.cpp
+++ b/Source/RWTHVRToolkit/Private/Core/RWTHVRPlayerState.cpp
@@ -3,8 +3,10 @@
 
 #include "Core/RWTHVRPlayerState.h"
 
+#include "Logging/StructuredLog.h"
 #include "Net/UnrealNetwork.h"
 #include "Net/Core/PushModel/PushModel.h"
+#include "Utility/RWTHVRUtilities.h"
 
 // Boilerplate, copies properties to new state
 void ARWTHVRPlayerState::CopyProperties(class APlayerState* PlayerState)
@@ -17,6 +19,8 @@ void ARWTHVRPlayerState::CopyProperties(class APlayerState* PlayerState)
 		if (IsValid(RWTHVRPlayerState))
 		{
 			RWTHVRPlayerState->SetPlayerType(GetPlayerType());
+			RWTHVRPlayerState->SetCorrespondingClusterId(CorrespondingClusterId);
+			RWTHVRPlayerState->SetCorrespondingClusterActor(CorrespondingClusterActor);
 		}
 	}
 }
@@ -32,6 +36,8 @@ void ARWTHVRPlayerState::OverrideWith(class APlayerState* PlayerState)
 		if (IsValid(RWTHVRPlayerState))
 		{
 			SetPlayerType(RWTHVRPlayerState->GetPlayerType());
+			SetCorrespondingClusterId(RWTHVRPlayerState->CorrespondingClusterId);
+			SetCorrespondingClusterActor(RWTHVRPlayerState->CorrespondingClusterActor);
 		}
 	}
 }
@@ -45,6 +51,8 @@ void ARWTHVRPlayerState::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& O
 	SharedParams.bIsPushBased = true;
 
 	DOREPLIFETIME_WITH_PARAMS_FAST(ARWTHVRPlayerState, PlayerType, SharedParams);
+	DOREPLIFETIME_WITH_PARAMS_FAST(ARWTHVRPlayerState, CorrespondingClusterId, SharedParams);
+	DOREPLIFETIME_WITH_PARAMS_FAST(ARWTHVRPlayerState, CorrespondingClusterActor, SharedParams);
 }
 
 void ARWTHVRPlayerState::ServerSetPlayerTypeRpc_Implementation(const EPlayerType NewPlayerType)
@@ -57,6 +65,28 @@ void ARWTHVRPlayerState::SetPlayerType(const EPlayerType NewPlayerType)
 	MARK_PROPERTY_DIRTY_FROM_NAME(ARWTHVRPlayerState, PlayerType, this);
 	PlayerType = NewPlayerType;
 }
+void ARWTHVRPlayerState::SetCorrespondingClusterId(int32 NewCorrespondingClusterId)
+{
+	if (!HasAuthority())
+	{
+		UE_LOGFMT(Toolkit, Warning, "ARWTHVRPlayerState: Cannot set cluster Id on non-authority!");
+		return;
+	}
+
+	MARK_PROPERTY_DIRTY_FROM_NAME(ARWTHVRPlayerState, CorrespondingClusterId, this);
+	CorrespondingClusterId = NewCorrespondingClusterId;
+}
+void ARWTHVRPlayerState::SetCorrespondingClusterActor(AClusterRepresentationActor* NewCorrespondingClusterActor)
+{
+	if (!HasAuthority())
+	{
+		UE_LOGFMT(Toolkit, Warning, "ARWTHVRPlayerState: Cannot set cluster actor ref on non-authority!");
+		return;
+	}
+
+	MARK_PROPERTY_DIRTY_FROM_NAME(ARWTHVRPlayerState, CorrespondingClusterActor, this);
+	CorrespondingClusterActor = NewCorrespondingClusterActor;
+}
 
 void ARWTHVRPlayerState::RequestSetPlayerType(const EPlayerType NewPlayerType)
 {
diff --git a/Source/RWTHVRToolkit/Private/Pawn/ClusterRepresentationActor.cpp b/Source/RWTHVRToolkit/Private/Pawn/ClusterRepresentationActor.cpp
new file mode 100644
index 00000000..f3ec515b
--- /dev/null
+++ b/Source/RWTHVRToolkit/Private/Pawn/ClusterRepresentationActor.cpp
@@ -0,0 +1,142 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "Pawn/ClusterRepresentationActor.h"
+
+#include "DisplayClusterRootActor.h"
+#include "IDisplayCluster.h"
+#include "Config/IDisplayClusterConfigManager.h"
+#include "Core/RWTHVRPlayerState.h"
+#include "Game/IDisplayClusterGameManager.h"
+#include "Kismet/GameplayStatics.h"
+#include "Logging/StructuredLog.h"
+#include "Utility/RWTHVRUtilities.h"
+
+// Sets default values
+AClusterRepresentationActor::AClusterRepresentationActor()
+{
+	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
+	PrimaryActorTick.bCanEverTick = false;
+	bReplicates = true;
+	SetActorEnableCollision(false);
+
+	SetRootComponent(CreateDefaultSubobject<USceneComponent>(TEXT("Origin")));
+}
+
+void AClusterRepresentationActor::BeginPlay()
+{
+	Super::BeginPlay();
+
+	// We need to identify the correct ClusterRepresentationActor to do the attachment.
+	// 1. Either we are the local net owner -> Primary Node Pawn
+	// This is hard to do as things might not be synchronized yet.
+	// In this case I think this is save to do because either:
+	// - We are in standalone mode, then attach it for all nodes
+	// - If we are a client, this actor has been spawned on the server only. Therefore I assume that if we
+	//   have replicated this actor to our client, we're good to go.
+
+	if (!URWTHVRUtilities::IsRoomMountedMode())
+		return;
+
+	// This should give us the first local player controller
+	const auto* PlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0);
+	
+	// Only run this for the local controller - redundant, but double check
+	if (!PlayerController || !PlayerController->IsLocalController())
+		return;
+
+	const auto* PlayerState = PlayerController->GetPlayerState<ARWTHVRPlayerState>();
+	if (!PlayerState)
+	{
+		UE_LOGFMT(
+			Toolkit, Error,
+			"AClusterRepresentationActor::BeginPlay: PlayerState is not valid or not of type ARWTHVRPlayerState.");
+		return;
+	}
+
+	// The local player this is executed on corresponds to this actor
+	if (PlayerState->GetCorrespondingClusterActor() == this)
+	{
+		check(PlayerState->GetCorrespondingClusterId() == ClusterId);
+		UE_LOGFMT(Toolkit, Display, "AClusterRepresentationActor::BeginPlay: Attaching DCRA to {Name} with Id: {Id}.",
+				  GetName(), ClusterId);
+
+		AttachDCRA();
+	}
+}
+
+bool AClusterRepresentationActor::AttachDCRA()
+{
+
+#if PLATFORM_SUPPORTS_CLUSTER
+	// Add an nDisplay Parent Sync Component. It syncs the parent's transform from master to clients.
+	// This is required because for collision based movement, it can happen that the physics engine
+	// for some reason acts different on the nodes, therefore leading to a potential desync when
+	// e.g. colliding with an object while moving.
+
+	if (URWTHVRUtilities::IsRoomMountedMode())
+	{
+		UE_LOGFMT(Toolkit, Display, "{Name}: Trying to attach DCRA for ClusterId {Id}", GetName(), ClusterId);
+		auto DCRA = IDisplayCluster::Get().GetGameMgr()->GetRootActor();
+
+		if (!IsValid(DCRA))
+		{
+			UE_LOGFMT(Toolkit, Display, "No Valid DCRA in BeginPlay. Spawning manually.");
+
+			DCRA = SpawnDCRA();
+			if (!IsValid(DCRA))
+			{
+				UE_LOGFMT(Toolkit, Error, "Failed to spawn correct DCRA, cannot attach it to ClusterRepresentation.");
+				return false;
+			}
+		}
+		else // if we just spawned the DCRA, it is not yet the primary one and this check makes no sense
+		{
+			if (!DCRA->IsPrimaryRootActor())
+			{
+				UE_LOGFMT(Toolkit, Error, "Found DCRA {Name} is not the primary DCRA of Cluster with Id {Id}!",
+						  DCRA->GetName(), ClusterId);
+				return false;
+			}
+		}
+
+		bool bAttached = DCRA->AttachToActor(this, FAttachmentTransformRules::SnapToTargetNotIncludingScale);
+		UE_LOGFMT(Toolkit, Display, "Attaching {This} to DCRA {DCRA} returned {Res}", GetName(), DCRA->GetName(),
+				  bAttached);
+
+		DCRA->SetActorEnableCollision(false);
+	}
+#endif
+	return true;
+}
+
+ADisplayClusterRootActor* AClusterRepresentationActor::SpawnDCRA()
+{
+	UDisplayClusterConfigurationData* ConfigData = IDisplayCluster::Get().GetConfigMgr()->GetConfig();
+
+
+	// Function similar to the one from DisplayClusterGameManager.
+	ADisplayClusterRootActor* RootActor = nullptr;
+	// We need to use generated class as it's the only one available in packaged buidls
+	const FString AssetPath =
+		(ConfigData->Info.AssetPath.EndsWith(TEXT("_C")) ? ConfigData->Info.AssetPath
+														 : ConfigData->Info.AssetPath + TEXT("_C"));
+
+	if (UClass* ActorClass = Cast<UClass>(StaticLoadObject(UClass::StaticClass(), nullptr, *AssetPath)))
+	{
+		// Spawn the actor
+		if (AActor* NewActor = GetWorld()->SpawnActor<AActor>(ActorClass))
+		{
+			RootActor = Cast<ADisplayClusterRootActor>(NewActor);
+
+			if (RootActor)
+			{
+				UE_LOG(Toolkit, Log, TEXT("Instantiated DCRA from asset '%s'"), *ConfigData->Info.AssetPath);
+
+				// Override actor settings in case the config file contains some updates
+				RootActor->OverrideFromConfig(ConfigData);
+			}
+		}
+	}
+	return RootActor;
+}
\ No newline at end of file
diff --git a/Source/RWTHVRToolkit/Private/Pawn/RWTHVRPawn.cpp b/Source/RWTHVRToolkit/Private/Pawn/RWTHVRPawn.cpp
index d5057853..0d11d17c 100644
--- a/Source/RWTHVRToolkit/Private/Pawn/RWTHVRPawn.cpp
+++ b/Source/RWTHVRToolkit/Private/Pawn/RWTHVRPawn.cpp
@@ -8,8 +8,8 @@
 #include "ILiveLinkClient.h"
 #include "InputMappingContext.h"
 #include "Core/RWTHVRPlayerState.h"
-#include "Kismet/GameplayStatics.h"
 #include "Logging/StructuredLog.h"
+#include "Pawn/ClusterRepresentationActor.h"
 #include "Pawn/InputExtensionInterface.h"
 #include "Pawn/Navigation/CollisionHandlingMovement.h"
 #include "Pawn/ReplicatedCameraComponent.h"
@@ -61,7 +61,7 @@ void ARWTHVRPawn::Tick(float DeltaSeconds)
  * as connections now send their playertype over.
  */
 // This pawn's controller has changed! This is called on both server and owning client. If we are the owning client
-// and the master, request that the DCRA is attached to us.
+// and the master, request that the Cluster is attached to us.
 void ARWTHVRPawn::NotifyControllerChanged()
 {
 	Super::NotifyControllerChanged();
@@ -71,7 +71,7 @@ void ARWTHVRPawn::NotifyControllerChanged()
 	if (HasAuthority())
 	{
 		UE_LOG(Toolkit, Display,
-			   TEXT("ARWTHVRPawn: Player Controller has changed, trying to change DCRA attachment if possible..."));
+			   TEXT("ARWTHVRPawn: Player Controller has changed, trying to change Cluster attachment if possible..."));
 		if (const ARWTHVRPlayerState* State = GetPlayerState<ARWTHVRPlayerState>())
 		{
 			const EPlayerType Type = State->GetPlayerType();
@@ -80,8 +80,8 @@ void ARWTHVRPawn::NotifyControllerChanged()
 			// For all other player types this is a race condition
 			if (Type == EPlayerType::nDisplayPrimary || GetNetMode() == NM_Standalone)
 			{
-				UE_LOGFMT(Toolkit, Display, "ARWTHVRPawn: Attaching DCRA to Pawn {Pawn}.", GetName());
-				AttachDCRAtoPawn();
+				UE_LOGFMT(Toolkit, Display, "ARWTHVRPawn: Attaching Cluster to Pawn {Pawn}.", GetName());
+				AttachClustertoPawn();
 			}
 		}
 	}
@@ -259,31 +259,27 @@ void ARWTHVRPawn::MulticastAddDCSyncComponent_Implementation()
 #endif
 }
 
-// Executed on the server only: Finds and attaches the CaveSetup Actor, which contains the DCRA to the Pawn.
+// Executed on the server only: Attaches the ClusterRepresentation Actor, which contains the DCRA to the Pawn.
 // It is only executed on the server because attachments are synced to all clients, but not from client to server.
-void ARWTHVRPawn::AttachDCRAtoPawn()
+void ARWTHVRPawn::AttachClustertoPawn()
 {
-	if (!CaveSetupActorClass || !CaveSetupActorClass->IsValidLowLevelFast())
-	{
-		UE_LOGFMT(Toolkit, Warning, "No CaveSetup Actor class set in pawn!");
-		return;
-	}
-
-	// Find our CaveSetup actor
-	TArray<AActor*> FoundActors;
-	UGameplayStatics::GetAllActorsOfClass(GetWorld(), CaveSetupActorClass, FoundActors);
 
-	if (!FoundActors.IsEmpty())
+	if (const ARWTHVRPlayerState* State = GetPlayerState<ARWTHVRPlayerState>())
 	{
-		const auto CaveSetupActor = FoundActors[0];
-		FAttachmentTransformRules AttachmentRules = FAttachmentTransformRules::SnapToTargetNotIncludingScale;
-		CaveSetupActor->AttachToActor(this, AttachmentRules);
-		UE_LOGFMT(Toolkit, Display, "VirtualRealityPawn: Attaching CaveSetup to our pawn!");
+		if (!State->GetCorrespondingClusterActor())
+			UE_LOGFMT(Toolkit, Error,
+					  "ARWTHVRPawn::AttachClustertoPawn: GetCorrespondingClusterActor returned null! This won't work on "
+					  "the Cave.");
+
+		const FAttachmentTransformRules AttachmentRules = FAttachmentTransformRules::SnapToTargetNotIncludingScale;
+		bool bAttached = State->GetCorrespondingClusterActor()->AttachToComponent(GetRootComponent(), AttachmentRules);
+		//State->GetCorrespondingClusterActor()->OnAttached();
+		UE_LOGFMT(Toolkit, Display, "ARWTHVRPawn: Attaching corresponding cluster actor to our pawn returned: {Attached}", bAttached);
 	}
 	else
 	{
-		UE_LOGFMT(Toolkit, Warning,
-				  "No CaveSetup Actor found which can be attached to the Pawn! This won't work on the Cave.");
+		UE_LOGFMT(Toolkit, Error,
+				  "ARWTHVRPawn::AttachClustertoPawn: No ARWTHVRPlayerState set! This won't work on the Cave.");
 	}
 
 	// if (HasAuthority()) // Should always be the case here, but double check
diff --git a/Source/RWTHVRToolkit/Public/Core/RWTHVRGameModeBase.h b/Source/RWTHVRToolkit/Public/Core/RWTHVRGameModeBase.h
index 1469ac36..d4b93350 100644
--- a/Source/RWTHVRToolkit/Public/Core/RWTHVRGameModeBase.h
+++ b/Source/RWTHVRToolkit/Public/Core/RWTHVRGameModeBase.h
@@ -4,6 +4,7 @@
 
 #include "CoreMinimal.h"
 #include "GameFramework/GameModeBase.h"
+#include "Pawn/ClusterRepresentationActor.h"
 #include "RWTHVRGameModeBase.generated.h"
 
 /**
@@ -15,6 +16,9 @@ UCLASS()
 class RWTHVRTOOLKIT_API ARWTHVRGameModeBase : public AGameModeBase
 {
 	GENERATED_BODY()
+public:
+	
+	ARWTHVRGameModeBase(const FObjectInitializer& ObjectInitializer);
 
 protected:
 	/**
@@ -29,4 +33,7 @@ protected:
 	 * possess. If not, spawn a DefaultPawnClass Pawn and Possess it (Should be BP_VirtualRealityPawn to make sense).
 	 */
 	virtual void PostLogin(APlayerController* NewPlayer) override;
+
+private:
+	TMap<int32, AClusterRepresentationActor> ConnectedClusters;
 };
diff --git a/Source/RWTHVRToolkit/Public/Core/RWTHVRPlayerState.h b/Source/RWTHVRToolkit/Public/Core/RWTHVRPlayerState.h
index 4c709e20..c5e8f46f 100644
--- a/Source/RWTHVRToolkit/Public/Core/RWTHVRPlayerState.h
+++ b/Source/RWTHVRToolkit/Public/Core/RWTHVRPlayerState.h
@@ -7,6 +7,8 @@
 #include "GameFramework/PlayerState.h"
 #include "RWTHVRPlayerState.generated.h"
 
+
+class AClusterRepresentationActor;
 enum class EPlayerType : uint8;
 /**
  * Extension of the PlayerState that additionally holds information about what type the player is.
@@ -22,6 +24,15 @@ private:
 	UPROPERTY(Replicated, Category = PlayerState, BlueprintGetter = GetPlayerType, meta = (AllowPrivateAccess))
 	EPlayerType PlayerType = EPlayerType::Desktop;
 
+	/** Replicated cluster ID for this player. Is -1 in case player is not a cluster*/
+	UPROPERTY(Replicated, Category = PlayerState, BlueprintGetter = GetCorrespondingClusterId, meta = (AllowPrivateAccess))
+	int32 CorrespondingClusterId = -1;
+
+	/** Replicated cluster actor for this player. Is nullptr in case player is not a cluster*/
+	UPROPERTY(Replicated, Category = PlayerState, BlueprintGetter = GetCorrespondingClusterActor,
+			  meta = (AllowPrivateAccess))
+	AClusterRepresentationActor* CorrespondingClusterActor = nullptr;
+	
 	UFUNCTION(Reliable, Server)
 	void ServerSetPlayerTypeRpc(EPlayerType NewPlayerType);
 
@@ -31,6 +42,15 @@ public:
 	UFUNCTION(BlueprintGetter)
 	EPlayerType GetPlayerType() const { return PlayerType; }
 
+	UFUNCTION(BlueprintGetter)
+	int32 GetCorrespondingClusterId() const { return CorrespondingClusterId; }
+
+	UFUNCTION(BlueprintGetter)
+	AClusterRepresentationActor* GetCorrespondingClusterActor() const { return CorrespondingClusterActor; }
+	
+	void SetCorrespondingClusterId(int32 NewCorrespondingClusterId);
+	void SetCorrespondingClusterActor(AClusterRepresentationActor* NewCorrespondingClusterActor);
+
 	UFUNCTION(BlueprintCallable)
 	void RequestSetPlayerType(EPlayerType NewPlayerType);
 
diff --git a/Source/RWTHVRToolkit/Public/Pawn/ClusterRepresentationActor.h b/Source/RWTHVRToolkit/Public/Pawn/ClusterRepresentationActor.h
new file mode 100644
index 00000000..1db7a420
--- /dev/null
+++ b/Source/RWTHVRToolkit/Public/Pawn/ClusterRepresentationActor.h
@@ -0,0 +1,29 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+
+#include "ClusterRepresentationActor.generated.h"
+
+
+class ADisplayClusterRootActor;
+UCLASS()
+class RWTHVRTOOLKIT_API AClusterRepresentationActor : public AActor
+{
+	GENERATED_BODY()
+
+public:
+	// Sets default values for this actor's properties
+	AClusterRepresentationActor();
+
+	UPROPERTY(VisibleAnywhere, BlueprintReadOnly)
+	int32 ClusterId = -1;
+
+	virtual void BeginPlay() override;
+	
+
+private:
+	bool AttachDCRA();
+	ADisplayClusterRootActor* SpawnDCRA();
+};
diff --git a/Source/RWTHVRToolkit/Public/Pawn/RWTHVRPawn.h b/Source/RWTHVRToolkit/Public/Pawn/RWTHVRPawn.h
index 260cdc04..cd81e497 100644
--- a/Source/RWTHVRToolkit/Public/Pawn/RWTHVRPawn.h
+++ b/Source/RWTHVRToolkit/Public/Pawn/RWTHVRPawn.h
@@ -79,10 +79,6 @@ public:
 	UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "Pawn|LiveLink")
 	bool bWorldTransform = false;
 
-	/* The class which to search for DCRA attachment. TODO: Make this better it's ugly */
-	UPROPERTY(BlueprintReadOnly, EditAnywhere, Category = "Pawn|LiveLink")
-	TSubclassOf<AActor> CaveSetupActorClass;
-
 protected:
 	virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
 	void AddInputMappingContext(const APlayerController* PC, const UInputMappingContext* Context) const;
@@ -107,8 +103,8 @@ protected:
 	UFUNCTION(Reliable, NetMulticast)
 	void MulticastAddDCSyncComponent();
 
-	/* Attaches the DCRA to the pawn */
-	void AttachDCRAtoPawn();
+	/* Attaches the Cluster representation to the pawn */
+	void AttachClustertoPawn();
 
 	/* Set device specific motion controller sources (None, L/R, Livelink) */
 	void SetupMotionControllerSources();
-- 
GitLab