Skip to content
Snippets Groups Projects
Commit 76bfe18c authored by Qurabi's avatar Qurabi
Browse files

Folgende Methoden hinzugefügt:

void HandleMovementInput(float Value, FVector Direction);
void VRFlyingMode(float Value, FVector Direction);
parent 2ba9bebd
Branches
No related tags found
No related merge requests found
...@@ -68,13 +68,13 @@ AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitial ...@@ -68,13 +68,13 @@ AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitial
void AVirtualRealityPawn::OnForward_Implementation(float Value) void AVirtualRealityPawn::OnForward_Implementation(float Value)
{ {
VRWalkingMode(Value, RightHand->GetForwardVector()); HandleMovementInput(Value, RightHand->GetForwardVector());
} }
void AVirtualRealityPawn::OnRight_Implementation(float Value) void AVirtualRealityPawn::OnRight_Implementation(float Value)
{ {
VRWalkingMode(Value, RightHand->GetRightVector()); HandleMovementInput(Value, RightHand->GetRightVector());
} }
void AVirtualRealityPawn::OnTurnRate_Implementation(float Rate) void AVirtualRealityPawn::OnTurnRate_Implementation(float Rate)
...@@ -454,6 +454,20 @@ void AVirtualRealityPawn::CheckForPhysWalkingCollision() ...@@ -454,6 +454,20 @@ void AVirtualRealityPawn::CheckForPhysWalkingCollision()
} }
} }
void AVirtualRealityPawn::HandleMovementInput(float Value, FVector Direction)
{
if (RightHand) {
if (NavigationMode == EVRNavigationModes::nav_mode_walk)
{
VRWalkingMode(Value, Direction);
}
else if (NavigationMode == EVRNavigationModes::nav_mode_fly)
{
VRFlyingMode(Value, Direction);
}
}
}
void AVirtualRealityPawn::VRWalkingMode(float Value, FVector Direction) void AVirtualRealityPawn::VRWalkingMode(float Value, FVector Direction)
{ {
Direction.Z = 0.0f;//walking Direction.Z = 0.0f;//walking
...@@ -461,7 +475,18 @@ void AVirtualRealityPawn::VRWalkingMode(float Value, FVector Direction) ...@@ -461,7 +475,18 @@ void AVirtualRealityPawn::VRWalkingMode(float Value, FVector Direction)
FHitResult FHitResultVR; FHitResult FHitResultVR;
CapsuleColliderComponent->AddWorldOffset(End* DeltaTime*Value, true, &FHitResultVR); CapsuleColliderComponent->AddWorldOffset(End* DeltaTime*Value, true, &FHitResultVR);
if (FVector::Distance(FHitResultVR.Location, CapsuleColliderComponent->GetComponentLocation()) > CapsuleColliderComponent->GetScaledCapsuleRadius() && RightHand && (NavigationMode == EVRNavigationModes::nav_mode_walk || UVirtualRealityUtilities::IsDesktopMode() || UVirtualRealityUtilities::IsHeadMountedMode() || UVirtualRealityUtilities::IsRoomMountedMode())) if (UVirtualRealityUtilities::IsDesktopMode() || UVirtualRealityUtilities::IsHeadMountedMode() || UVirtualRealityUtilities::IsRoomMountedMode())
{
if (FVector::Distance(FHitResultVR.Location, CapsuleColliderComponent->GetComponentLocation()) > CapsuleColliderComponent->GetScaledCapsuleRadius())
{
AddMovementInput(Direction, Value);
}
}
}
void AVirtualRealityPawn::VRFlyingMode(float Value, FVector Direction)
{
if (UVirtualRealityUtilities::IsDesktopMode() || UVirtualRealityUtilities::IsHeadMountedMode() || UVirtualRealityUtilities::IsRoomMountedMode())
{ {
AddMovementInput(Direction, Value); AddMovementInput(Direction, Value);
} }
...@@ -568,19 +593,19 @@ FHitResult AVirtualRealityPawn::CreateLineTrace(FVector Direction, const FVector ...@@ -568,19 +593,19 @@ FHitResult AVirtualRealityPawn::CreateLineTrace(FVector Direction, const FVector
FHitResult AVirtualRealityPawn::CreateMultiLineTrace(FVector Direction, const FVector Start, float Radius, bool Visibility) FHitResult AVirtualRealityPawn::CreateMultiLineTrace(FVector Direction, const FVector Start, float Radius, bool Visibility)
{ {
TArray<FVector> Vectors; TArray<FVector> StartVectors;
TArray<FHitResult> OutHits; TArray<FHitResult> OutHits;
FHitResult HitDetailsMultiLineTrace; FHitResult HitDetailsMultiLineTrace;
HitDetailsMultiLineTrace.Distance = -1.0f;//(Distance=-1) not existing, but to know if this Variable not Initialized(when all Traces not compatible) HitDetailsMultiLineTrace.Distance = -1.0f;//(Distance=-1) not existing, but to know if this Variable not Initialized(when all Traces not compatible)
Vectors.Add(Start); //LineTraceCenter StartVectors.Add(Start); //LineTraceCenter
Vectors.Add(Start + FVector(0, -Radius, 0)); //LineTraceLeft StartVectors.Add(Start + FVector(0, -Radius, 0)); //LineTraceLeft
Vectors.Add(Start + FVector(0, +Radius, 0)); //LineTraceRight StartVectors.Add(Start + FVector(0, +Radius, 0)); //LineTraceRight
Vectors.Add(Start + FVector(+Radius, 0, 0)); //LineTraceFront StartVectors.Add(Start + FVector(+Radius, 0, 0)); //LineTraceFront
Vectors.Add(Start + FVector(-Radius, 0, 0)); //LineTraceBehind StartVectors.Add(Start + FVector(-Radius, 0, 0)); //LineTraceBehind
// loop through TArray // loop through TArray
for (FVector& Vector : Vectors) for (FVector& Vector : StartVectors)
{ {
OutHits.Add(CreateLineTrace(Direction, Vector, Visibility)); OutHits.Add(CreateLineTrace(Direction, Vector, Visibility));
} }
... ...
......
...@@ -138,7 +138,9 @@ private: ...@@ -138,7 +138,9 @@ private:
FHitResult CreateMultiLineTrace(FVector Direction, const FVector Start, float Radius, bool Visibility); FHitResult CreateMultiLineTrace(FVector Direction, const FVector Start, float Radius, bool Visibility);
void SetCapsuleColliderCharacterSizeVR(); void SetCapsuleColliderCharacterSizeVR();
void CheckForPhysWalkingCollision(); void CheckForPhysWalkingCollision();
void HandleMovementInput(float Value, FVector Direction);
void VRWalkingMode(float Value, FVector Direction); void VRWalkingMode(float Value, FVector Direction);
void VRFlyingMode(float Value, FVector Direction);
void MoveByGravityOrStepUp(float DeltaSeconds); void MoveByGravityOrStepUp(float DeltaSeconds);
void InitRoomMountedComponentReferences(); void InitRoomMountedComponentReferences();
}; };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment