Skip to content
Snippets Groups Projects
Commit 80c81f22 authored by Ali Can Demiralp's avatar Ali Can Demiralp
Browse files

Updated from turbulent_flow. Now depends on nDisplayInput.

parent d3790522
No related branches found
No related tags found
No related merge requests found
Showing
with 208 additions and 304 deletions
using UnrealBuildTool; using UnrealBuildTool;
public class nDisplayExtensions : ModuleRules public class DisplayClusterExtensions : ModuleRules
{ {
public nDisplayExtensions(ReadOnlyTargetRules Target) : base(Target) public DisplayClusterExtensions(ReadOnlyTargetRules Target) : base(Target)
{ {
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
...@@ -28,6 +28,7 @@ public class nDisplayExtensions : ModuleRules ...@@ -28,6 +28,7 @@ public class nDisplayExtensions : ModuleRules
"Core", "Core",
"CoreUObject", "CoreUObject",
"DisplayCluster", "DisplayCluster",
"DisplayClusterInput",
"Engine", "Engine",
"InputCore" "InputCore"
} }
......
#include "DisplayClusterExtensions.h"
#define LOCTEXT_NAMESPACE "FnDisplayExtensionsModule"
void FDisplayClusterExtensionsModule::StartupModule ()
{
}
void FDisplayClusterExtensionsModule::ShutdownModule()
{
}
#undef LOCTEXT_NAMESPACE
IMPLEMENT_MODULE(FDisplayClusterExtensionsModule, DisplayClusterExtensions)
\ No newline at end of file
#include "DisplayClusterPawnCAVE.h"
#include "Cluster/IDisplayClusterClusterManager.h"
#include "Engine/World.h"
#include "Game/IDisplayClusterGameManager.h"
#include "GameFramework/WorldSettings.h"
#include "Input/IDisplayClusterInputManager.h"
#include "Kismet/GameplayStatics.h"
#include "DisplayClusterSettings.h"
#include "IDisplayCluster.h"
ADisplayClusterPawnCAVE::ADisplayClusterPawnCAVE(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
MovementComponent = CreateDefaultSubobject<UFloatingPawnMovement> (TEXT("MovementComponent0"));
MovementComponent->UpdatedComponent = RootComponent;
RotatingComponent = CreateDefaultSubobject<URotatingMovementComponent>(TEXT("RotatingComponent0"));
RotatingComponent->UpdatedComponent = RootComponent;
RotatingComponent->bRotationInLocalSpace = false;
RotatingComponent->PivotTranslation = FVector::ZeroVector;
RotatingComponent->RotationRate = FRotator::ZeroRotator;
}
void ADisplayClusterPawnCAVE::OnForward_Implementation (float Value)
{
if (Flystick)
{
if (IDisplayCluster::Get().GetClusterMgr()->IsMaster())
AddMovementInput(Flystick->GetForwardVector(), Value);
}
else
{
AddMovementInput((TranslationDirection ? TranslationDirection : RootComponent)->GetForwardVector(), Value);
}
}
void ADisplayClusterPawnCAVE::OnRight_Implementation (float Value)
{
if (Flystick)
{
if (IDisplayCluster::Get().GetClusterMgr()->IsMaster())
AddMovementInput(Flystick->GetRightVector(), Value);
}
else
{
AddMovementInput((TranslationDirection ? TranslationDirection : RootComponent)->GetRightVector(), Value);
}
}
void ADisplayClusterPawnCAVE::OnTurnRate_Implementation (float Rate )
{
if (Flystick)
{
if (!RotatingComponent->UpdatedComponent || !IDisplayCluster::Get().GetGameMgr() || !IDisplayCluster::Get().GetGameMgr()->GetActiveCamera()) return;
const FVector CameraLocation = IDisplayCluster::Get().GetGameMgr()->GetActiveCamera()->GetComponentLocation();
RotatingComponent->PivotTranslation = RotatingComponent->UpdatedComponent->GetComponentTransform().InverseTransformPositionNoScale(CameraLocation);
RotatingComponent->RotationRate = FRotator(RotatingComponent->RotationRate.Pitch, Rate * BaseTurnRate, 0.0f);
}
else
{
AddControllerYawInput(BaseTurnRate * Rate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
}
}
void ADisplayClusterPawnCAVE::OnLookUpRate_Implementation(float Rate )
{
if (Flystick)
{
// User-centered projection causes motion sickness on look up interaction hence not implemented.
}
else
{
AddControllerPitchInput(BaseTurnRate * Rate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
}
}
void ADisplayClusterPawnCAVE::OnFire_Implementation ()
{
}
void ADisplayClusterPawnCAVE::OnAction_Implementation (int32 Index)
{
}
void ADisplayClusterPawnCAVE::BeginPlay ()
{
Super::BeginPlay();
if (!IDisplayCluster::Get().IsModuleInitialized() || !IDisplayCluster::Get().IsAvailable()) return;
auto IsCluster = (IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster);
bUseControllerRotationYaw = !IsCluster;
bUseControllerRotationPitch = !IsCluster;
bUseControllerRotationRoll = !IsCluster;
TArray<AActor*> SettingsActors;
UGameplayStatics::GetAllActorsOfClass(GetWorld(), ADisplayClusterSettings::StaticClass(), SettingsActors);
if (SettingsActors.Num() == 0) return;
ADisplayClusterSettings* Settings = Cast<ADisplayClusterSettings>(SettingsActors[0]);
MovementComponent->MaxSpeed = Settings->MovementMaxSpeed ;
MovementComponent->Acceleration = Settings->MovementAcceleration;
MovementComponent->Deceleration = Settings->MovementDeceleration;
MovementComponent->TurningBoost = Settings->MovementTurningBoost;
BaseTurnRate = Settings->RotationSpeed ;
}
void ADisplayClusterPawnCAVE::Tick (float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
// Is this really necessary?
const float Mult = GetWorld()->GetWorldSettings()->WorldToMeters / 100.f;
SetActorScale3D(FVector(Mult, Mult, Mult));
if (!Flystick)
Flystick = IDisplayCluster::Get().GetGameMgr()->GetNodeById(TEXT("flystick")); // There MUST be an scene node called flystick in the config.
}
void ADisplayClusterPawnCAVE::BeginDestroy ()
{
Super::BeginDestroy();
}
void ADisplayClusterPawnCAVE::SetupPlayerInputComponent (UInputComponent* PlayerInputComponent)
{
check(PlayerInputComponent);
Super::SetupPlayerInputComponent(PlayerInputComponent);
if (PlayerInputComponent)
{
PlayerInputComponent->BindAxis ("MoveForward" , this, &ADisplayClusterPawnCAVE::OnForward );
PlayerInputComponent->BindAxis ("MoveRight" , this, &ADisplayClusterPawnCAVE::OnRight );
PlayerInputComponent->BindAxis ("TurnRate" , this, &ADisplayClusterPawnCAVE::OnTurnRate );
PlayerInputComponent->BindAxis ("LookUpRate" , this, &ADisplayClusterPawnCAVE::OnLookUpRate);
PlayerInputComponent->BindAction ("Fire" , IE_Pressed , this, &ADisplayClusterPawnCAVE::OnFire );
PlayerInputComponent->BindAction<FButtonDelegate>("Action1" , IE_Pressed , this, &ADisplayClusterPawnCAVE::OnAction , 1);
PlayerInputComponent->BindAction<FButtonDelegate>("Action2" , IE_Pressed , this, &ADisplayClusterPawnCAVE::OnAction , 2);
PlayerInputComponent->BindAction<FButtonDelegate>("Action3" , IE_Pressed , this, &ADisplayClusterPawnCAVE::OnAction , 3);
PlayerInputComponent->BindAction<FButtonDelegate>("Action4" , IE_Pressed , this, &ADisplayClusterPawnCAVE::OnAction , 4);
PlayerInputComponent->BindAction<FButtonDelegate>("Action5" , IE_Pressed , this, &ADisplayClusterPawnCAVE::OnAction , 5);
}
}
UPawnMovementComponent* ADisplayClusterPawnCAVE::GetMovementComponent () const
{
return MovementComponent;
}
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include "CoreMinimal.h" #include "CoreMinimal.h"
#include "Modules/ModuleManager.h" #include "Modules/ModuleManager.h"
class NDISPLAYEXTENSIONS_API FnDisplayExtensionsModule : public IModuleInterface class FDisplayClusterExtensionsModule : public IModuleInterface
{ {
public: public:
virtual void StartupModule () override; virtual void StartupModule () override;
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
#include "DisplayClusterGameModeCAVE.generated.h" #include "DisplayClusterGameModeCAVE.generated.h"
UCLASS() UCLASS()
class NDISPLAYEXTENSIONS_API ADisplayClusterGameModeCAVE : public ADisplayClusterGameMode class DISPLAYCLUSTEREXTENSIONS_API ADisplayClusterGameModeCAVE : public ADisplayClusterGameMode
{ {
GENERATED_BODY() GENERATED_BODY()
......
#pragma once
#include "GameFramework/FloatingPawnMovement.h"
#include "GameFramework/PawnMovementComponent.h"
#include "GameFramework/RotatingMovementComponent.h"
#include "CoreMinimal.h"
#include "DisplayClusterPawn.h"
#include "DisplayClusterSceneComponent.h"
#include "DisplayClusterPawnCAVE.generated.h"
UCLASS()
class DISPLAYCLUSTEREXTENSIONS_API ADisplayClusterPawnCAVE : public ADisplayClusterPawn
{
GENERATED_UCLASS_BODY()
public:
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnForward (float Value);
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnRight (float Value);
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnTurnRate (float Rate );
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnLookUpRate(float Rate );
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnFire ();
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn") void OnAction (int32 Index);
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") float BaseTurnRate = 45.0f ;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") UDisplayClusterSceneComponent* Flystick = nullptr;
protected:
DECLARE_DELEGATE_OneParam(FButtonDelegate, int32);
virtual void BeginPlay () override;
virtual void Tick (float DeltaSeconds ) override;
virtual void BeginDestroy () override;
virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
virtual UPawnMovementComponent* GetMovementComponent () const override;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn", meta = (AllowPrivateAccess = "true")) UFloatingPawnMovement* MovementComponent = nullptr;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn", meta = (AllowPrivateAccess = "true")) URotatingMovementComponent* RotatingComponent = nullptr;
};
#include "DisplayClusterPawnBase.h"
#include "Engine/World.h"
#include "Game/IDisplayClusterGameManager.h"
#include "GameFramework/WorldSettings.h"
#include "DisplayClusterSceneComponentSyncParent.h"
#include "DisplayClusterSettings.h"
#include "DisplayClusterGameMode.h"
#include "IDisplayCluster.h"
#include "Kismet/GameplayStatics.h"
ADisplayClusterPawnBase::ADisplayClusterPawnBase(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
MovementComponent = CreateDefaultSubobject<UFloatingPawnMovement> (TEXT("MovementComponent0"));
MovementComponent->UpdatedComponent = RootComponent;
RotatingComponent = CreateDefaultSubobject<URotatingMovementComponent>(TEXT("RotatingComponent0"));
RotatingComponent->UpdatedComponent = RootComponent;
RotatingComponent->bRotationInLocalSpace = true;
RotatingComponent->PivotTranslation = FVector::ZeroVector;
RotatingComponent->RotationRate = FRotator::ZeroRotator;
RotatingComponent2 = CreateDefaultSubobject<URotatingMovementComponent>(TEXT("RotatingComponent1"));
RotatingComponent2->UpdatedComponent = RootComponent;
RotatingComponent2->bRotationInLocalSpace = false;
RotatingComponent2->PivotTranslation = FVector::ZeroVector;
RotatingComponent2->RotationRate = FRotator::ZeroRotator;
BaseTurnRate = 45.f;
BaseLookUpRate = 45.f;
}
void ADisplayClusterPawnBase::MoveForward (float Value)
{
if (Value == 0.f) return;
AddMovementInput((TranslationDirection ? TranslationDirection : RootComponent)->GetForwardVector(), Value);
}
void ADisplayClusterPawnBase::MoveRight (float Value)
{
if (Value == 0.f) return;
AddMovementInput((TranslationDirection ? TranslationDirection : RootComponent)->GetRightVector (), Value);
}
void ADisplayClusterPawnBase::MoveUp (float Value)
{
if (Value == 0.f) return;
AddMovementInput((TranslationDirection ? TranslationDirection : RootComponent)->GetUpVector (), Value);
}
void ADisplayClusterPawnBase::TurnAtRate (float Rate )
{
if (IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster)
{
if (!RotatingComponent->UpdatedComponent) return;
auto Manager = IDisplayCluster::Get().GetGameMgr();
if (!Manager) return;
auto Camera = Manager->GetActiveCamera();
if (!Camera ) return;
const FTransform TransformToRotate = RotatingComponent->UpdatedComponent->GetComponentTransform();
const FVector RotateAroundPivot = TransformToRotate.InverseTransformPositionNoScale(Camera->GetComponentLocation());
RotatingComponent->PivotTranslation = RotateAroundPivot;
RotatingComponent->RotationRate = FRotator(RotatingComponent->RotationRate.Pitch, Rate * BaseTurnRate, 0.f);
}
else if (Rate != 0.f)
AddControllerYawInput(BaseTurnRate * Rate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
}
void ADisplayClusterPawnBase::TurnAtRate2 (float Rate )
{
if (IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster)
{
if (!RotatingComponent2->UpdatedComponent) return;
auto Manager = IDisplayCluster::Get().GetGameMgr();
if (!Manager) return;
auto Camera = Manager->GetActiveCamera();
if (!Camera ) return;
const FTransform TransformToRotate = RotatingComponent2->UpdatedComponent->GetComponentTransform();
const FVector RotateAroundPivot = TransformToRotate.InverseTransformPositionNoScale(Camera->GetComponentLocation());
RotatingComponent2->PivotTranslation = RotateAroundPivot;
RotatingComponent2->RotationRate = FRotator(RotatingComponent2->RotationRate.Pitch, Rate * BaseTurnRate, 0.f);
}
else if (Rate != 0.f)
AddControllerYawInput(BaseTurnRate * Rate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
}
void ADisplayClusterPawnBase::LookUpAtRate(float Rate )
{
if (IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster)
{
//@note: usually CAVE-like systems don't use roll and pitch rotation since it can cause dizziness.
#if 0
//@todo: rotate around active camera
auto Manager = IDisplayCluster::Get().GetGameMgr();
if (!Manager) return;
auto Camera = Manager->GetActiveCamera();
if (!Camera ) return;
RotatingComponent->bRotationInLocalSpace = true;
RotatingComponent->PivotTranslation = FVector::ZeroVector;
#endif
}
else if (Rate != 0.f)
{
AddControllerPitchInput(BaseTurnRate * Rate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
}
}
void ADisplayClusterPawnBase::BeginPlay ()
{
Super::BeginPlay();
if (!IDisplayCluster::Get().IsModuleInitialized() || !IDisplayCluster::Get().IsAvailable()) return;
auto IsCluster = (IDisplayCluster::Get().GetOperationMode() == EDisplayClusterOperationMode::Cluster);
bUseControllerRotationYaw = !IsCluster;
bUseControllerRotationPitch = !IsCluster;
bUseControllerRotationRoll = !IsCluster;
TArray<AActor*> SettingsActors;
UGameplayStatics::GetAllActorsOfClass(GetWorld(), ADisplayClusterSettings::StaticClass(), SettingsActors);
if (SettingsActors.Num() == 0) return;
ADisplayClusterSettings* Settings = Cast<ADisplayClusterSettings>(SettingsActors[0]);
MovementComponent->MaxSpeed = Settings->MovementMaxSpeed;
MovementComponent->Acceleration = Settings->MovementAcceleration;
MovementComponent->Deceleration = Settings->MovementDeceleration;
MovementComponent->TurningBoost = Settings->MovementTurningBoost;
BaseTurnRate = Settings->RotationSpeed;
BaseLookUpRate = Settings->RotationSpeed;
}
void ADisplayClusterPawnBase::Tick (float DeltaSeconds)
{
Super::Tick(DeltaSeconds);
const float Mult = GetWorld()->GetWorldSettings()->WorldToMeters / 100.f;
SetActorScale3D(FVector(Mult, Mult, Mult));
}
void ADisplayClusterPawnBase::BeginDestroy()
{
Super::BeginDestroy();
}
UPawnMovementComponent* ADisplayClusterPawnBase::GetMovementComponent() const
{
return MovementComponent;
}
void ADisplayClusterPawnBase::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
check(PlayerInputComponent);
Super::SetupPlayerInputComponent(PlayerInputComponent);
if (PlayerInputComponent)
{
PlayerInputComponent->BindAxis("MoveForward", this, &ADisplayClusterPawnBase::MoveForward );
PlayerInputComponent->BindAxis("MoveRight" , this, &ADisplayClusterPawnBase::MoveRight );
PlayerInputComponent->BindAxis("MoveUp" , this, &ADisplayClusterPawnBase::MoveUp );
PlayerInputComponent->BindAxis("TurnRate" , this, &ADisplayClusterPawnBase::TurnAtRate2 );
PlayerInputComponent->BindAxis("LookUpRate" , this, &ADisplayClusterPawnBase::LookUpAtRate);
}
}
#include "DisplayClusterPawnCAVE.h"
#include "Cluster/IDisplayClusterClusterManager.h"
#include "Game/IDisplayClusterGameManager.h"
#include "Input/IDisplayClusterInputManager.h"
#include "IDisplayCluster.h"
void ADisplayClusterPawnCAVE::OnAxisEvent_Implementation (FVector2D Value )
{
if (!IDisplayCluster::Get().GetClusterMgr()->IsMaster()) return;
AddMovementInput(Flystick->GetRightVector (), Value[0]);
AddMovementInput(Flystick->GetForwardVector(), Value[1]);
}
void ADisplayClusterPawnCAVE::OnTriggerEvent_Implementation(bool Pressed )
{
}
void ADisplayClusterPawnCAVE::OnButtonEvent_Implementation (bool Pressed , int32 Index)
{
}
void ADisplayClusterPawnCAVE::BeginPlay ()
{
Super::BeginPlay();
}
void ADisplayClusterPawnCAVE::Tick (float DeltaSeconds)
{
// Due to these declarations, this class is bound to aixcave.cfg.
static const auto flystick_name = FString(TEXT("flystick" ));
static const auto axis_name = FString(TEXT("dtrack_axis" ));
static const auto buttons_name = FString(TEXT("dtrack_buttons"));
Super::Tick(DeltaSeconds);
if (!Flystick) Flystick = IDisplayCluster::Get().GetGameMgr()->GetNodeById(flystick_name);
if (!Flystick) return;
FVector2D Axes;
IDisplayCluster::Get().GetInputMgr()->GetAxis(axis_name, 0, Axes[0]);
IDisplayCluster::Get().GetInputMgr()->GetAxis(axis_name, 1, Axes[1]);
if (Axes[0] != 0.0f || Axes[1] != 0.0f) OnAxisEvent_Implementation(Axes);
bool TriggerPressed = false, TriggerReleased = false;
IDisplayCluster::Get().GetInputMgr()->WasButtonPressed (buttons_name, 0, TriggerPressed );
IDisplayCluster::Get().GetInputMgr()->WasButtonReleased(buttons_name, 0, TriggerReleased);
if (TriggerPressed ) OnTriggerEvent_Implementation(true );
if (TriggerReleased) OnTriggerEvent_Implementation(false);
for (auto i = 1; i < 6; ++i)
{
bool ButtonPressed = false, ButtonReleased = false;
IDisplayCluster::Get().GetInputMgr()->WasButtonPressed (buttons_name, i, ButtonPressed );
IDisplayCluster::Get().GetInputMgr()->WasButtonReleased(buttons_name, i, ButtonReleased);
if (ButtonPressed ) OnButtonEvent_Implementation(true , i);
if (ButtonReleased) OnButtonEvent_Implementation(false, i);
}
}
void ADisplayClusterPawnCAVE::BeginDestroy ()
{
Super::BeginDestroy();
}
\ No newline at end of file
#include "nDisplayExtensions.h"
#define LOCTEXT_NAMESPACE "FnDisplayExtensionsModule"
void FnDisplayExtensionsModule::StartupModule ()
{
}
void FnDisplayExtensionsModule::ShutdownModule()
{
}
#undef LOCTEXT_NAMESPACE
IMPLEMENT_MODULE(FnDisplayExtensionsModule, nDisplayExtensions)
\ No newline at end of file
#pragma once
#include "Components/InputComponent.h"
#include "GameFramework/FloatingPawnMovement.h"
#include "GameFramework/PawnMovementComponent.h"
#include "GameFramework/RotatingMovementComponent.h"
#include "CoreMinimal.h"
#include "DisplayClusterPawn.h"
#include "DisplayClusterPawnBase.generated.h"
UCLASS()
class NDISPLAYEXTENSIONS_API ADisplayClusterPawnBase : public ADisplayClusterPawn
{
GENERATED_UCLASS_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "Pawn") virtual void MoveForward (float Value);
UFUNCTION(BlueprintCallable, Category = "Pawn") virtual void MoveRight (float Value);
UFUNCTION(BlueprintCallable, Category = "Pawn") virtual void MoveUp (float Value);
UFUNCTION(BlueprintCallable, Category = "Pawn") virtual void TurnAtRate (float Rate );
UFUNCTION(BlueprintCallable, Category = "Pawn") virtual void TurnAtRate2 (float Rate );
UFUNCTION(BlueprintCallable, Category = "Pawn") virtual void LookUpAtRate(float Rate );
virtual void BeginPlay () override;
virtual void Tick (float DeltaSeconds) override;
virtual void BeginDestroy () override;
virtual UPawnMovementComponent* GetMovementComponent() const override;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") float BaseTurnRate ;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn") float BaseLookUpRate;
protected:
virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
UPROPERTY(Category = Pawn, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) UFloatingPawnMovement* MovementComponent ;
UPROPERTY(Category = Pawn, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) URotatingMovementComponent* RotatingComponent ;
UPROPERTY(Category = Pawn, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) URotatingMovementComponent* RotatingComponent2;
};
\ No newline at end of file
#pragma once
#include "CoreMinimal.h"
#include "DisplayClusterPawnBase.h"
#include "DisplayClusterSceneComponent.h"
#include "DisplayClusterPawnCAVE.generated.h"
UCLASS()
class NDISPLAYEXTENSIONS_API ADisplayClusterPawnCAVE : public ADisplayClusterPawnBase
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Input") void OnAxisEvent (FVector2D Value );
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Input") void OnButtonEvent (bool Pressed, int32 Index);
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Input") void OnTriggerEvent(bool Pressed);
protected:
virtual void BeginPlay () override;
virtual void Tick (float DeltaSeconds) override;
virtual void BeginDestroy() override;
UDisplayClusterSceneComponent* Flystick = nullptr;
};
...@@ -13,9 +13,10 @@ ...@@ -13,9 +13,10 @@
"CanContainContent": true, "CanContainContent": true,
"IsBetaVersion": false, "IsBetaVersion": false,
"Installed": false, "Installed": false,
"EnabledByDefault": true,
"Modules": [ "Modules": [
{ {
"Name": "nDisplayExtensions", "Name": "DisplayClusterExtensions",
"Type": "Developer", "Type": "Developer",
"LoadingPhase": "Default" "LoadingPhase": "Default"
} }
...@@ -24,6 +25,10 @@ ...@@ -24,6 +25,10 @@
{ {
"Name": "nDisplay", "Name": "nDisplay",
"Enabled": true "Enabled": true
},
{
"Name": "nDisplayInput",
"Enabled": true
} }
] ]
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment