Skip to content
Snippets Groups Projects
Commit 7f507ac1 authored by David Gilbert's avatar David Gilbert :bug:
Browse files

Merge branch 'dev/5.4' into 'dev/5.5'

Pull dev/5.4 changes forward into dev/5.5

See merge request !12
parents 47a698d4 61aad441
Branches
No related tags found
1 merge request!12Pull dev/5.4 changes forward into dev/5.5
......@@ -40,7 +40,7 @@ include:
# Use the UNREAL_VERSION variable to adjust to your preferred Unreal version.
variables:
UNREAL_VERSION: "5.5"
UNREAL_VERSION: "5.4"
stages:
- analyze
......@@ -81,7 +81,7 @@ Generate_Project:
RUN_SETUP: "false"
GEN_DEPENDENCIES: "(
[master@UnrealDTrackPlugin]='https://github.com/VRGroupRWTH/UnrealDTrackPlugin.git'
[dev/5.5@RWTHVRToolkit]='https://git-ce.rwth-aachen.de/vr-vis/VR-Group/unreal-development/plugins/rwth-vr-toolkit.git'
[dev/5.4@RWTHVRToolkit]='https://git-ce.rwth-aachen.de/vr-vis/VR-Group/unreal-development/plugins/rwth-vr-toolkit.git'
)"
Generate_Project_Without_Toolkit:
......
......@@ -149,6 +149,10 @@ void ACAVEOverlayController::BeginPlay()
if (GetNetMode() != NM_Standalone)
return;
// If we're not in room-mounted mode, return as well
if (!URWTHVRClusterUtilities::IsRoomMountedMode())
return;
// This should return the respective client's local playercontroller or, if we're a listen server, our own PC.
auto* PC = GetWorld() ? GetWorld()->GetFirstPlayerController() : nullptr;
......@@ -157,7 +161,7 @@ void ACAVEOverlayController::BeginPlay()
// Not sure which place would be best...
const bool bValidPC = PC && PC->GetLocalPlayer();
if (!bValidPC || !URWTHVRClusterUtilities::IsRoomMountedMode())
if (!bValidPC)
return;
// Input config
......@@ -229,11 +233,33 @@ void ACAVEOverlayController::BeginPlay()
return;
}
PC->OnPossessedPawnChanged.AddUniqueDynamic(this, &ACAVEOverlayController::UpdatePossessedPawn);
// I think this breaks in multiplayer mode
InitFromPawn(PC->GetPawn());
// Create dynamic material for tape
TapeMaterialDynamic = Tape->CreateDynamicMaterialInstance(0);
UE_LOGFMT(LogCAVEOverlay, Display, "CaveOverlay Initialization was successfull.");
}
void ACAVEOverlayController::UpdatePossessedPawn(APawn* OldPawn, APawn* NewPawn) { InitFromPawn(NewPawn); }
void ACAVEOverlayController::InitFromPawn(const APawn* CurrentPawn)
{
// Clear previous properties. We could reuse the SMCs and MIDs, clearing them might be dangerous.
// Too much in a hurry here to make this better.
MotionControllers.Empty();
SignsStaticMeshComponents.Empty();
SignsMIDs.Empty();
// Get the pawn so we can have access to head and hand positions
if (const auto* VRPawn = Cast<APawn>(PC->GetPawnOrSpectator()))
if (CurrentPawn)
{
PawnCamera = VRPawn->GetComponentByClass<UCameraComponent>();
auto FoundMotionControllers = VRPawn->K2_GetComponentsByClass(UMotionControllerComponent::StaticClass());
PawnCamera = CurrentPawn->GetComponentByClass<UCameraComponent>();
auto FoundMotionControllers = CurrentPawn->K2_GetComponentsByClass(UMotionControllerComponent::StaticClass());
for (const auto FoundMotionController : FoundMotionControllers)
{
......@@ -267,13 +293,9 @@ void ACAVEOverlayController::BeginPlay()
}
else
{
bInitialized = false;
UE_LOGFMT(LogCAVEOverlay, Error, "No VirtualRealityPawn found which we could attach to!");
}
// Create dynamic material for tape
TapeMaterialDynamic = Tape->CreateDynamicMaterialInstance(0);
UE_LOGFMT(LogCAVEOverlay, Display, "CaveOverlay Initialization was successfull.");
}
void ACAVEOverlayController::EndPlay(const EEndPlayReason::Type EndPlayReason)
......@@ -392,6 +414,12 @@ void ACAVEOverlayController::Tick(float DeltaTime)
// Hand Logic
for (int i = 0; i < MotionControllers.Num(); i++)
{
if (MotionControllers[i] == nullptr)
{
UE_LOGFMT(LogCAVEOverlay, Error, "Motion Controller was nullptr, disabling overlay!");
bInitialized = false;
return;
}
const FVector HandPosition = MotionControllers[i]->GetRelativeLocation();
// Set the position rotation, opacity, visibility of the hand warning signs.
......
......@@ -78,6 +78,12 @@ private:
const float WallWarningDistance = 40; // cm, distance on which the tape turns red, measured from wall
float DoorCurrentOpeningWidthAbsolute = 0;
// Function that initializes things from the currently possessed pawn
void InitFromPawn(const APawn* CurrentPawn);
UFUNCTION()
void UpdatePossessedPawn(APawn* OldPawn, APawn* NewPawn);
// Helper function to create a mesh component in the constructor
UStaticMeshComponent* CreateMeshComponent(const FName& Name, USceneComponent* Parent);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment