diff --git a/Source/DisplayClusterExtensions/Private/VirtualRealityPawn.cpp b/Source/DisplayClusterExtensions/Private/VirtualRealityPawn.cpp index 4246a59b10481c80a795b8362024bc3d6fe3901c..3bdf59ed703923fddee28cb068bb3b511575632e 100644 --- a/Source/DisplayClusterExtensions/Private/VirtualRealityPawn.cpp +++ b/Source/DisplayClusterExtensions/Private/VirtualRealityPawn.cpp @@ -27,9 +27,9 @@ AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitial AutoPossessPlayer = EAutoReceiveInput::Player0; // Necessary for receiving motion controller events. - Movement = CreateDefaultSubobject<UWalkingPawnMovement>(TEXT("WalkingMovement")); - Movement->SetUpdatedComponent(RootComponent); - Movement->SetCameraComponent(CameraComponent); + WalkingMovement = CreateDefaultSubobject<UWalkingPawnMovement>(TEXT("WalkingMovement")); + WalkingMovement->SetUpdatedComponent(RootComponent); + WalkingMovement->SetCameraComponent(CameraComponent); RotatingMovement = CreateDefaultSubobject<URotatingMovementComponent>(TEXT("RotatingMovement")); RotatingMovement->UpdatedComponent = RootComponent; @@ -210,10 +210,10 @@ void AVirtualRealityPawn::BeginPlay() if (SettingsActors.Num() > 0) { ADisplayClusterSettings* Settings = Cast<ADisplayClusterSettings>(SettingsActors[0]); - Movement->MaxSpeed = Settings->MovementMaxSpeed; - Movement->Acceleration = Settings->MovementAcceleration; - Movement->Deceleration = Settings->MovementDeceleration; - Movement->TurningBoost = Settings->MovementTurningBoost; + WalkingMovement->MaxSpeed = Settings->MovementMaxSpeed; + WalkingMovement->Acceleration = Settings->MovementAcceleration; + WalkingMovement->Deceleration = Settings->MovementDeceleration; + WalkingMovement->TurningBoost = Settings->MovementTurningBoost; BaseTurnRate = Settings->RotationSpeed; } @@ -277,6 +277,9 @@ void AVirtualRealityPawn::BeginPlay() CollisionComponent->SetCollisionProfileName(FName("NoCollision")); CollisionComponent->SetCollisionEnabled(ECollisionEnabled::NoCollision); + + //if the navigation mode was changed in the editor, it should be updated in the actual movement component + SetNavigationMode(NavigationMode); } void AVirtualRealityPawn::EndPlay(const EEndPlayReason::Type EndPlayReason) @@ -417,7 +420,7 @@ FTwoVectors AVirtualRealityPawn::GetHandRay(float Length) UPawnMovementComponent* AVirtualRealityPawn::GetMovementComponent() const { - return Movement; + return WalkingMovement; } void AVirtualRealityPawn::InitRoomMountedComponentReferences() @@ -457,5 +460,6 @@ void AVirtualRealityPawn::InitRoomMountedComponentReferences() void AVirtualRealityPawn::SetNavigationMode(EVRNavigationModes Mode) { - Movement->NavigationMode = Mode; + NavigationMode = Mode; + WalkingMovement->NavigationMode = Mode; } diff --git a/Source/DisplayClusterExtensions/Public/VirtualRealityPawn.h b/Source/DisplayClusterExtensions/Public/VirtualRealityPawn.h index 94d1e8dc7147299b18c85e74db185d005451668d..2cf7a590291102c2f5fa14cf2ff417cbf9bae4e7 100644 --- a/Source/DisplayClusterExtensions/Public/VirtualRealityPawn.h +++ b/Source/DisplayClusterExtensions/Public/VirtualRealityPawn.h @@ -56,6 +56,8 @@ public: UFUNCTION(Category = "Pawn") USceneComponent* GetTrackingOriginComponent(); UFUNCTION(Category = "Pawn") void SetNavigationMode(EVRNavigationModes Mode); + //we also add this property so the navigation mode can be changed easier in the editor, will get forwarded to the movment comp on BeginPlay + UPROPERTY(Category = "Pawn", EditAnywhere, BlueprintReadOnly) EVRNavigationModes NavigationMode = EVRNavigationModes::nav_mode_fly; private: UFUNCTION(Category = "Pawn") USceneComponent* GetCaveCenterComponent(); @@ -78,7 +80,7 @@ protected: virtual UPawnMovementComponent* GetMovementComponent() const override; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn", meta = (AllowPrivateAccess = "true")) float BaseTurnRate = 45.0f; - UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn", meta = (AllowPrivateAccess = "true")) UWalkingPawnMovement* Movement = nullptr; + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn", meta = (AllowPrivateAccess = "true")) UWalkingPawnMovement* WalkingMovement = nullptr; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn", meta = (AllowPrivateAccess = "true")) URotatingMovementComponent* RotatingMovement = nullptr; // Use only when handling cross-device (PC, HMD, CAVE/ROLV) compatibility manually. CAVE/ROLV flystick.