Skip to content
Snippets Groups Projects
Select Git revision
  • e16f499aa2b5d37d0775873715e715c329d467f1
  • 5.4 default protected
  • 5.5
  • dev/5.5
  • dev/5.4
  • dev/5.3_downgrade
  • feature/experimenttime_hack
  • 5.3 protected
  • _IntenSelect5.3
  • IntenSelect5.3
  • 4.27 protected
  • 4.26 protected
  • 5.0 protected
  • 4.22 protected
  • 4.21 protected
  • UE5.4-2024.1
  • UE5.4-2024.1-rc1
  • UE5.3-2023.1-rc3
  • UE5.3-2023.1-rc2
  • UE5.3-2023.1-rc
20 results

VRPawnMovement.h

Blame
  • CAVEOverlayController.cpp 10.74 KiB
    #include "CAVEOverlay/CAVEOverlayController.h"
    
    #include "CoreMinimal.h"
    #include "IDisplayCluster.h"
    #include "Camera/CameraComponent.h"
    #include "CAVEOverlay/DoorOverlayData.h"
    #include "Cluster/DisplayClusterClusterEvent.h"
    #include "Cluster/IDisplayClusterClusterManager.h"
    #include "Components/StaticMeshComponent.h"
    #include "Engine/CollisionProfile.h"
    #include "Logging/StructuredLog.h"
    #include "Materials/MaterialInstanceDynamic.h"
    #include "Pawn/VirtualRealityPawn.h"
    #include "Utility/VirtualRealityUtilities.h"
    #include "MotionControllerComponent.h"
    
    
    DEFINE_LOG_CATEGORY(LogCAVEOverlay);
    
    bool ContainsFString(const TArray<FString>& Array, const FString& Entry)
    {
    	for (FString Current_Entry : Array)
    	{
    		if (Current_Entry.Equals(Entry, ESearchCase::IgnoreCase)) return true;
    	}
    	return false;
    }
    
    UStaticMeshComponent* ACAVEOverlayController::CreateMeshComponent(const FName& Name, USceneComponent* Parent)
    {
    	UStaticMeshComponent* Result = CreateDefaultSubobject<UStaticMeshComponent>(Name);
    	Result->SetupAttachment(Parent);
    	Result->SetVisibility(false);
    	Result->SetCollisionProfileName(UCollisionProfile::NoCollision_ProfileName);
    	return Result;
    }
    
    // Sets default values
    ACAVEOverlayController::ACAVEOverlayController()
    {
    	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
    	PrimaryActorTick.bCanEverTick = true;
    	bAllowTickBeforeBeginPlay = false;
    
    	//Creation of sub-components
    	Root = CreateDefaultSubobject<USceneComponent>("DefaultSceneRoot");
    	SetRootComponent(Root);
    
    	Tape = CreateMeshComponent("Tape", Root);
    	SignRightHand = CreateMeshComponent("SignRightHand", Root);
    	SignLeftHand = CreateMeshComponent("SignLeftHand", Root);
    }
    
    void ACAVEOverlayController::CycleDoorType()
    {
    	DoorCurrentMode = static_cast<EDoorMode>((DoorCurrentMode + 1) % DOOR_NUM_MODES);
    
    	if (auto* const Manager = IDisplayCluster::Get().GetClusterMgr())
    	{
    		FDisplayClusterClusterEventJson cluster_event;
    		cluster_event.Name = "CAVEOverlay Change Door to " + DoorModeNames[DoorCurrentMode];
    		cluster_event.Type = "DoorChange";
    		cluster_event.Category = "CAVEOverlay";
    		cluster_event.Parameters.Add("NewDoorState", FString::FromInt(DoorCurrentMode));
    		Manager->EmitClusterEventJson(cluster_event, true);
    	}
    }
    
    void ACAVEOverlayController::HandleClusterEvent(const FDisplayClusterClusterEventJson& Event)
    {