Skip to content
Snippets Groups Projects
Commit a980db01 authored by Simon Oehrl's avatar Simon Oehrl
Browse files

Merge branch 'feature/desktop-interaction' into '4.26'

Improve desktop test interaction

See merge request VR-Group/unreal-development/plugins/rwth-vr-toolkit!15
parents b0cf4ff6 6aa47574
No related branches found
No related tags found
3 merge requests!22Get changes and fixes from 4.26 into 5 as well,!16update 4.27 branch to newest changes in 4.26,!15Improve desktop test interaction
Pipeline #167446 passed
...@@ -56,12 +56,37 @@ void AVirtualRealityPawn::SetupPlayerInputComponent(UInputComponent* PlayerInput ...@@ -56,12 +56,37 @@ void AVirtualRealityPawn::SetupPlayerInputComponent(UInputComponent* PlayerInput
PlayerInputComponent->BindAxis("MoveForward", this, &AVirtualRealityPawn::OnForward); PlayerInputComponent->BindAxis("MoveForward", this, &AVirtualRealityPawn::OnForward);
PlayerInputComponent->BindAxis("MoveRight", this, &AVirtualRealityPawn::OnRight); PlayerInputComponent->BindAxis("MoveRight", this, &AVirtualRealityPawn::OnRight);
PlayerInputComponent->BindAxis("MoveUp", this, &AVirtualRealityPawn::OnUp);
PlayerInputComponent->BindAxis("TurnRate", this, &AVirtualRealityPawn::OnTurnRate); PlayerInputComponent->BindAxis("TurnRate", this, &AVirtualRealityPawn::OnTurnRate);
PlayerInputComponent->BindAxis("LookUpRate", this, &AVirtualRealityPawn::OnLookUpRate); PlayerInputComponent->BindAxis("LookUpRate", this, &AVirtualRealityPawn::OnLookUpRate);
// function bindings for grabbing and releasing // function bindings for grabbing and releasing
PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &AVirtualRealityPawn::OnBeginFire); PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &AVirtualRealityPawn::OnBeginFire);
PlayerInputComponent->BindAction("Fire", IE_Released, this, &AVirtualRealityPawn::OnEndFire); PlayerInputComponent->BindAction("Fire", IE_Released, this, &AVirtualRealityPawn::OnEndFire);
// bind functions for desktop rotations only on holding down right mouse
if (UVirtualRealityUtilities::IsDesktopMode())
{
APlayerController* PC = Cast<APlayerController>(GetController());
if (PC)
{
PC->bShowMouseCursor = true;
PC->bEnableClickEvents = true;
PC->bEnableMouseOverEvents = true;
}
PlayerInputComponent->BindAction("EnableDesktopRotation", IE_Pressed, this, &AVirtualRealityPawn::StartDesktopRotation);
PlayerInputComponent->BindAction("EnableDesktopRotation", IE_Released, this, &AVirtualRealityPawn::EndDesktopRotation);
}
}
void AVirtualRealityPawn::StartDesktopRotation()
{
bApplyDesktopRotation = true;
}
void AVirtualRealityPawn::EndDesktopRotation()
{
bApplyDesktopRotation = false;
} }
void AVirtualRealityPawn::SetCameraOffset() const void AVirtualRealityPawn::SetCameraOffset() const
...@@ -74,6 +99,18 @@ void AVirtualRealityPawn::SetCameraOffset() const ...@@ -74,6 +99,18 @@ void AVirtualRealityPawn::SetCameraOffset() const
CameraComponent->SetWorldLocationAndRotation(Location, Rotation); CameraComponent->SetWorldLocationAndRotation(Location, Rotation);
} }
void AVirtualRealityPawn::UpdateRightHandForDesktopInteraction()
{
APlayerController* PC = Cast<APlayerController>(GetController());
if (PC)
{
FVector MouseLocation, MouseDirection;
PC->DeprojectMousePositionToWorld(MouseLocation, MouseDirection);
FRotator HandOrientation = MouseDirection.ToOrientationRotator();
RightHand->SetWorldRotation(HandOrientation);
}
}
void AVirtualRealityPawn::OnForward_Implementation(float Value) void AVirtualRealityPawn::OnForward_Implementation(float Value)
{ {
if (RightHand) if (RightHand)
...@@ -90,19 +127,31 @@ void AVirtualRealityPawn::OnRight_Implementation(float Value) ...@@ -90,19 +127,31 @@ void AVirtualRealityPawn::OnRight_Implementation(float Value)
} }
} }
void AVirtualRealityPawn::OnUp_Implementation(float Value)
{
if (RightHand)
{
AddMovementInput(RightHand->GetUpVector(), Value);
}
}
void AVirtualRealityPawn::OnTurnRate_Implementation(float Rate) void AVirtualRealityPawn::OnTurnRate_Implementation(float Rate)
{ {
/* Turning the user externally will make them sick */ /* Turning the user externally will make them sick */
if (UVirtualRealityUtilities::IsDesktopMode()) if (UVirtualRealityUtilities::IsDesktopMode() && bApplyDesktopRotation)
{ {
AddControllerYawInput(Rate * BaseTurnRate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation); AddControllerYawInput(Rate * BaseTurnRate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
} }
if (UVirtualRealityUtilities::IsDesktopMode())
{
UpdateRightHandForDesktopInteraction();
}
} }
void AVirtualRealityPawn::OnLookUpRate_Implementation(float Rate) void AVirtualRealityPawn::OnLookUpRate_Implementation(float Rate)
{ {
/* Turning the user externally will make them sick */ /* Turning the user externally will make them sick */
if (UVirtualRealityUtilities::IsDesktopMode()) if (UVirtualRealityUtilities::IsDesktopMode() && bApplyDesktopRotation)
{ {
AddControllerPitchInput(Rate * BaseTurnRate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation); AddControllerPitchInput(Rate * BaseTurnRate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
SetCameraOffset(); SetCameraOffset();
......
...@@ -40,6 +40,7 @@ protected: ...@@ -40,6 +40,7 @@ protected:
/* Movement */ /* Movement */
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn|Movement") void OnForward(float Value); UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn|Movement") void OnForward(float Value);
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn|Movement") void OnRight(float Value); UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn|Movement") void OnRight(float Value);
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn|Movement") void OnUp(float Value);
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn|Movement") void OnTurnRate(float Rate); UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn|Movement") void OnTurnRate(float Rate);
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn|Movement") void OnLookUpRate(float Rate); UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn|Movement") void OnLookUpRate(float Rate);
...@@ -47,5 +48,12 @@ protected: ...@@ -47,5 +48,12 @@ protected:
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn|Interaction") void OnBeginFire(); UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn|Interaction") void OnBeginFire();
UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn|Interaction") void OnEndFire(); UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "Pawn|Interaction") void OnEndFire();
/*Desktop Testing*/
// the idea is that you have to hold the right mouse button to do rotations
UFUNCTION() void StartDesktopRotation();
UFUNCTION() void EndDesktopRotation();
bool bApplyDesktopRotation = false;
void SetCameraOffset() const; void SetCameraOffset() const;
void UpdateRightHandForDesktopInteraction();
}; };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment