Skip to content
Snippets Groups Projects
Commit 13c2634a authored by Sebastian Pape's avatar Sebastian Pape
Browse files

Adding cluster events for F10, reworking the cluster component finding and refactoring

parent 7293e584
No related branches found
No related tags found
2 merge requests!10Develop,!9Feature/cluster events f10
......@@ -111,6 +111,22 @@ 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()
......@@ -135,7 +151,25 @@ void ACAVEOverlayController::PostInitializeComponents()
void ACAVEOverlayController::CycleDoorType()
{
Door_Current_Mode = static_cast<EDoor_Mode>((Door_Current_Mode + 1) % DOOR_NUM_MODES);
SetDoorMode(Door_Current_Mode);
IDisplayClusterClusterManager* const Manager = IDisplayCluster::Get().GetClusterMgr();
if (Manager)
{
FDisplayClusterClusterEvent cluster_event;
cluster_event.Name = "CAVEOverlay Change Door to " + Door_Mode_Names[Door_Current_Mode];
cluster_event.Type = "DoorChange";
cluster_event.Category = "CAVEOverlay";
cluster_event.Parameters.Add("NewDoorState", FString::FromInt(Door_Current_Mode));
Manager->EmitClusterEvent(cluster_event, true);
}
}
void ACAVEOverlayController::HandleClusterEvent(const FDisplayClusterClusterEvent& Event)
{
if (Event.Category.Equals("CAVEOverlay") && Event.Type.Equals("DoorChange") && Event.Parameters.Contains("NewDoorState"))
{
SetDoorMode(static_cast<EDoor_Mode>(FCString::Atoi(*Event.Parameters["NewDoorState"])));
}
}
void ACAVEOverlayController::SetDoorMode(EDoor_Mode M)
......@@ -182,15 +216,15 @@ void ACAVEOverlayController::BeginPlay()
Super::BeginPlay();
//Read situation
if (IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster) {
if (IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster)
{
auto ClusterConfigCustom = IDisplayCluster::Get().GetConfigMgr()->GetConfigCustom();
bCAVE_Mode = ClusterConfigCustom.Args.Contains("Hardware_Platform") && ClusterConfigCustom.Args.Find("Hardware_Platform")->Equals("aixcave", ESearchCase::IgnoreCase);
}
if (!bCAVE_Mode) return; // Not our business
//Input config
InputComponent->BindAction("Action4", EInputEvent::IE_Pressed, this, &ACAVEOverlayController::CycleDoorType);
InputComponent->BindKey(EKeys::F10, EInputEvent::IE_Pressed, this, &ACAVEOverlayController::CycleDoorType);
//Determine the screen-type for later usage
......@@ -242,13 +276,8 @@ bool ACAVEOverlayController::PositionInDoorOpening(FVector Position)
void ACAVEOverlayController::RefreshPawnComponents()
{
TArray<UDisplayClusterSceneComponent*> Pawn_Components;
Player_Pawn->GetComponents<UDisplayClusterSceneComponent>(Pawn_Components);
for (UDisplayClusterSceneComponent* c : Pawn_Components)
{
if (c->GetName().Equals("cave_origin", ESearchCase::IgnoreCase)) Cave_Origin = c;
if (c->GetName().Equals("shutter_glasses", ESearchCase::IgnoreCase)) Shutter_Glasses = c;
}
Cave_Origin = Player_Pawn->GetCaveOriginComponent();
Shutter_Glasses = Player_Pawn->GetShutterGlassesComponent();
}
// Called every frame
......@@ -258,7 +287,11 @@ void ACAVEOverlayController::Tick(float DeltaTime)
if (!bCAVE_Mode) return; // Not our business
RefreshPawnComponents();
if (!Cave_Origin || !Shutter_Glasses)
{
RefreshPawnComponents();
}
if (!bAttached && Cave_Origin)
{
AttachToComponent(Cave_Origin, FAttachmentTransformRules::SnapToTargetNotIncludingScale);
......@@ -266,7 +299,8 @@ void ACAVEOverlayController::Tick(float DeltaTime)
}
//FPS Counter
if (Overlay) {
if (Overlay)
{
if (Door_Current_Mode == EDoor_Mode::DOOR_DEBUG && ContainsFString(Screens_FPS, IDisplayCluster::Get().GetClusterMgr()->GetNodeId()))
{
Overlay->FPS->SetText(FText::FromString(FString::Printf(TEXT("FPS: %.1f"), 1.0f / DeltaTime)));
......@@ -276,7 +310,7 @@ void ACAVEOverlayController::Tick(float DeltaTime)
Overlay->FPS->SetText(FText::FromString(""));
}
}
if (!Shutter_Glasses) return; //Display Cluster not initialized
//Tape Logic
......
......@@ -12,6 +12,8 @@
#include "Materials/MaterialInstanceDynamic.h"
#include "DisplayClusterExtensions/Public/VirtualRealityPawn.h"
#include "DisplayCluster/Public/DisplayClusterSceneComponent.h"
#include "Cluster/DisplayClusterClusterEvent.h"
#include "Cluster/IDisplayClusterClusterManager.h"
#include "CAVEOverlayController.generated.h"
DECLARE_LOG_CATEGORY_EXTERN(LogCAVEOverlay, Log, All);
......@@ -22,6 +24,7 @@ class CAVEOVERLAY_API ACAVEOverlayController : public AActor
GENERATED_BODY()
public:
ACAVEOverlayController();
~ACAVEOverlayController();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
......@@ -68,8 +71,12 @@ private:
bool bAttached = false;
void RefreshPawnComponents();
AVirtualRealityPawn* Player_Pawn;
UDisplayClusterSceneComponent* Cave_Origin;
UDisplayClusterSceneComponent* Shutter_Glasses;
USceneComponent* Cave_Origin;
USceneComponent* Shutter_Glasses;
//Cluster Events
FOnClusterEventListener ClusterEventListenerDelegate;
void HandleClusterEvent(const FDisplayClusterClusterEvent& Event);
public:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment