From 3ee5edb54a59f027b457190d28de3287b39c7210 Mon Sep 17 00:00:00 2001
From: Sebastian Pape <Sebastian.Pape@rwth-aachen.de>
Date: Wed, 27 Nov 2019 11:57:25 +0100
Subject: [PATCH] Moved Clusterevents to BeginPlay and EndPlay

---
 .../Private/CAVEOverlayController.cpp         | 33 ++++++++++---------
 .../Public/CAVEOverlayController.h            |  3 +-
 2 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/Source/CAVEOverlay/Private/CAVEOverlayController.cpp b/Source/CAVEOverlay/Private/CAVEOverlayController.cpp
index 9301e07..a28b0e5 100644
--- a/Source/CAVEOverlay/Private/CAVEOverlayController.cpp
+++ b/Source/CAVEOverlay/Private/CAVEOverlayController.cpp
@@ -111,22 +111,6 @@ ACAVEOverlayController::ACAVEOverlayController()
 	Sign_Positive_Y->SetRelativeScale3D(FVector(0.5f));
 	Sign_Negative_X->SetRelativeScale3D(FVector(0.5f));
 	Sign_Positive_X->SetRelativeScale3D(FVector(0.5f));
-
-	IDisplayClusterClusterManager* ClusterManager = IDisplayCluster::Get().GetClusterMgr();
-	if (ClusterManager && !ClusterEventListenerDelegate.IsBound())
-	{
-		ClusterEventListenerDelegate = FOnClusterEventListener::CreateUObject(this, &ACAVEOverlayController::HandleClusterEvent);
-		ClusterManager->AddClusterEventListener(ClusterEventListenerDelegate);
-	}
-}
-
-ACAVEOverlayController::~ACAVEOverlayController()
-{
-	IDisplayClusterClusterManager* ClusterManager = IDisplayCluster::Get().GetClusterMgr();
-	if (ClusterManager && ClusterEventListenerDelegate.IsBound())
-	{
-		ClusterManager->RemoveClusterEventListener(ClusterEventListenerDelegate);
-	}
 }
 
 void ACAVEOverlayController::PostInitializeComponents()
@@ -226,6 +210,12 @@ void ACAVEOverlayController::BeginPlay()
 
 	//Input config
 	InputComponent->BindKey(EKeys::F10, EInputEvent::IE_Pressed, this, &ACAVEOverlayController::CycleDoorType);
+	IDisplayClusterClusterManager* ClusterManager = IDisplayCluster::Get().GetClusterMgr();
+	if (ClusterManager && !ClusterEventListenerDelegate.IsBound())
+	{
+		ClusterEventListenerDelegate = FOnClusterEventListener::CreateUObject(this, &ACAVEOverlayController::HandleClusterEvent);
+		ClusterManager->AddClusterEventListener(ClusterEventListenerDelegate);
+	}
 
 	//Determine the screen-type for later usage
 	if (IDisplayCluster::Get().GetClusterMgr()->GetNodeId().Equals(Screen_Main, ESearchCase::IgnoreCase))
@@ -260,6 +250,17 @@ void ACAVEOverlayController::BeginPlay()
 	}
 }
 
+void ACAVEOverlayController::EndPlay(const EEndPlayReason::Type EndPlayReason)
+{
+	IDisplayClusterClusterManager* ClusterManager = IDisplayCluster::Get().GetClusterMgr();
+	if (ClusterManager && ClusterEventListenerDelegate.IsBound())
+	{
+		ClusterManager->RemoveClusterEventListener(ClusterEventListenerDelegate);
+	}
+
+	Super::EndPlay(EndPlayReason);
+}
+
 float ACAVEOverlayController::CalculateOpacityFromPosition(FVector Position)
 {
 	return FMath::Max(
diff --git a/Source/CAVEOverlay/Public/CAVEOverlayController.h b/Source/CAVEOverlay/Public/CAVEOverlayController.h
index 6daa7e9..73760b6 100644
--- a/Source/CAVEOverlay/Public/CAVEOverlayController.h
+++ b/Source/CAVEOverlay/Public/CAVEOverlayController.h
@@ -22,12 +22,13 @@ UCLASS()
 class CAVEOVERLAY_API ACAVEOverlayController : public AActor
 {
 	GENERATED_BODY()
+	
 public:
 	ACAVEOverlayController();
-	~ACAVEOverlayController();
 protected:
 	// Called when the game starts or when spawned
 	virtual void BeginPlay() override;
+	virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
 	virtual void PostInitializeComponents() override;
 
 private:
-- 
GitLab