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

Merge branch 'fix/caveoverlay' into 'dev/5.4'

Hotfix: Modifies CaveOverlay to be able to handle Pawn changes

See merge request !7
parents fde8f4d1 14df091a
Branches
No related tags found
3 merge requests!12Pull dev/5.4 changes forward into dev/5.5,!7Hotfix: Modifies CaveOverlay to be able to handle Pawn changes,!5Release dev to main branch
Pipeline #579185 passed
......@@ -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
......@@ -223,11 +227,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)
{
......@@ -261,13 +287,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)
......@@ -386,6 +408,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