Skip to content
Snippets Groups Projects
Commit 10a6ed64 authored by Sebastian Pape's avatar Sebastian Pape
Browse files

After first tests seems to now work on Desktop

parent 6028d654
No related branches found
No related tags found
No related merge requests found

#include "VRPawnMovement.h" #include "VRPawnMovement.h"
#include "DrawDebugHelpers.h" #include "DrawDebugHelpers.h"
UVRPawnMovement::UVRPawnMovement(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) UVRPawnMovement::UVRPawnMovement(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{ {
CapsuleColliderComponent = CreateDefaultSubobject<UCapsuleComponent>(TEXT("CapsuleCollider")); CapsuleColliderComponent = CreateDefaultSubobject<UCapsuleComponent>(TEXT("CapsuleCollider"));
CapsuleColliderComponent->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics); CapsuleColliderComponent->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
CapsuleColliderComponent->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore); CapsuleColliderComponent->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore);
CapsuleColliderComponent->SetCollisionResponseToChannel(ECollisionChannel::ECC_WorldStatic, ECollisionResponse::ECR_Block); CapsuleColliderComponent->SetCollisionResponseToChannel(ECollisionChannel::ECC_WorldStatic, ECollisionResponse::ECR_Block);
CapsuleColliderComponent->SetCapsuleSize(40.0f, 96.0f); CapsuleColliderComponent->SetCapsuleSize(40.0f, 96.0f);
CameraComponent = GetOwner()->FindComponentByClass<UCameraComponent>();
CapsuleColliderComponent->SetupAttachment(CameraComponent);
} }
void UVRPawnMovement::TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction){ void UVRPawnMovement::TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction){
...@@ -60,6 +59,13 @@ bool UVRPawnMovement::CheckForVirtualMovCollision(FVector PositionChange, float ...@@ -60,6 +59,13 @@ bool UVRPawnMovement::CheckForVirtualMovCollision(FVector PositionChange, float
return false; return false;
} }
void UVRPawnMovement::SetCameraComponent(UCameraComponent* NewCameraComponent)
{
CameraComponent = NewCameraComponent;
CapsuleColliderComponent->SetupAttachment(CameraComponent);
}
void UVRPawnMovement::SetCapsuleColliderToUserSize() void UVRPawnMovement::SetCapsuleColliderToUserSize()
{ {
float CharachterSize = abs(UpdatedComponent->GetComponentLocation().Z - CameraComponent->GetComponentLocation().Z); float CharachterSize = abs(UpdatedComponent->GetComponentLocation().Z - CameraComponent->GetComponentLocation().Z);
......
...@@ -21,8 +21,15 @@ AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitial ...@@ -21,8 +21,15 @@ AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitial
AutoPossessPlayer = EAutoReceiveInput::Player0; // Necessary for receiving motion controller events. AutoPossessPlayer = EAutoReceiveInput::Player0; // Necessary for receiving motion controller events.
SetRootComponent(CreateDefaultSubobject<USceneComponent>(TEXT("Root")));
CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
CameraComponent->SetupAttachment(RootComponent);
CameraComponent->SetAbsolute();
PawnMovement = CreateDefaultSubobject<UVRPawnMovement>(TEXT("Pawn Movement")); PawnMovement = CreateDefaultSubobject<UVRPawnMovement>(TEXT("Pawn Movement"));
PawnMovement->SetUpdatedComponent(RootComponent); PawnMovement->SetUpdatedComponent(RootComponent);
PawnMovement->SetCameraComponent(CameraComponent);
Head = CreateDefaultSubobject<UUniversalTrackedComponent>(TEXT("Head")); Head = CreateDefaultSubobject<UUniversalTrackedComponent>(TEXT("Head"));
Head->ProxyType = ETrackedComponentType::TCT_HEAD; Head->ProxyType = ETrackedComponentType::TCT_HEAD;
...@@ -38,14 +45,6 @@ AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitial ...@@ -38,14 +45,6 @@ AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitial
LeftHand->AttachementType = EAttachementType::AT_HANDTARGET; LeftHand->AttachementType = EAttachementType::AT_HANDTARGET;
LeftHand->SetupAttachment(RootComponent); LeftHand->SetupAttachment(RootComponent);
Tracker1 = CreateDefaultSubobject<UUniversalTrackedComponent>(TEXT("Vive Tracker 1"));
Tracker1->ProxyType = ETrackedComponentType::TCT_TRACKER_1;
Tracker1->SetupAttachment(RootComponent);
Tracker2 = CreateDefaultSubobject<UUniversalTrackedComponent>(TEXT("Vive Tracker 2"));
Tracker2->ProxyType = ETrackedComponentType::TCT_TRACKER_2;
Tracker2->SetupAttachment(RootComponent);
BasicVRInteraction = CreateDefaultSubobject<UBasicVRInteractionComponent>(TEXT("Basic VR Interaction")); BasicVRInteraction = CreateDefaultSubobject<UBasicVRInteractionComponent>(TEXT("Basic VR Interaction"));
BasicVRInteraction->Initialize(RightHand); BasicVRInteraction->Initialize(RightHand);
} }
...@@ -53,8 +52,8 @@ AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitial ...@@ -53,8 +52,8 @@ AVirtualRealityPawn::AVirtualRealityPawn(const FObjectInitializer& ObjectInitial
void AVirtualRealityPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) void AVirtualRealityPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{ {
Super::SetupPlayerInputComponent(PlayerInputComponent); Super::SetupPlayerInputComponent(PlayerInputComponent);
if (PlayerInputComponent) if (!PlayerInputComponent) return;
{
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("TurnRate", this, &AVirtualRealityPawn::OnTurnRate); PlayerInputComponent->BindAxis("TurnRate", this, &AVirtualRealityPawn::OnTurnRate);
...@@ -64,16 +63,6 @@ void AVirtualRealityPawn::SetupPlayerInputComponent(UInputComponent* PlayerInput ...@@ -64,16 +63,6 @@ void AVirtualRealityPawn::SetupPlayerInputComponent(UInputComponent* PlayerInput
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);
} }
}
void AVirtualRealityPawn::BeginPlay()
{
if(!UVirtualRealityUtilities::IsDesktopMode()) /* Disable to not get cyber sick as fast */
{
UInputSettings::GetInputSettings()->RemoveAxisMapping(FInputAxisKeyMapping("TurnRate", EKeys::MouseX));
UInputSettings::GetInputSettings()->RemoveAxisMapping(FInputAxisKeyMapping("LookUpRate", EKeys::MouseY));
}
}
void AVirtualRealityPawn::OnForward_Implementation(float Value) void AVirtualRealityPawn::OnForward_Implementation(float Value)
{ {
...@@ -92,14 +81,18 @@ void AVirtualRealityPawn::OnRight_Implementation(float Value) ...@@ -92,14 +81,18 @@ void AVirtualRealityPawn::OnRight_Implementation(float Value)
} }
void AVirtualRealityPawn::OnTurnRate_Implementation(float Rate) void AVirtualRealityPawn::OnTurnRate_Implementation(float Rate)
{
/* Turning the user externally will make them sick */
if (UVirtualRealityUtilities::IsDesktopMode())
{ {
AddControllerYawInput(Rate * BaseTurnRate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation); AddControllerYawInput(Rate * BaseTurnRate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
} }
}
void AVirtualRealityPawn::OnLookUpRate_Implementation(float Rate) void AVirtualRealityPawn::OnLookUpRate_Implementation(float Rate)
{ {
// User-centered projection causes simulation sickness on look up interaction hence not implemented. /* Turning the user externally will make them sick */
if (!UVirtualRealityUtilities::IsRoomMountedMode()) if (UVirtualRealityUtilities::IsDesktopMode())
{ {
AddControllerPitchInput(Rate * BaseTurnRate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation); AddControllerPitchInput(Rate * BaseTurnRate * GetWorld()->GetDeltaSeconds() * CustomTimeDilation);
} }
...@@ -114,8 +107,3 @@ void AVirtualRealityPawn::OnEndFire_Implementation() ...@@ -114,8 +107,3 @@ void AVirtualRealityPawn::OnEndFire_Implementation()
{ {
BasicVRInteraction->EndInteraction(); BasicVRInteraction->EndInteraction();
} }
UPawnMovementComponent* AVirtualRealityPawn::GetMovementComponent() const
{
return PawnMovement;
}
...@@ -38,6 +38,8 @@ public: ...@@ -38,6 +38,8 @@ public:
virtual void TickComponent(float DeltaTime, enum ELevelTick TickType, virtual void TickComponent(float DeltaTime, enum ELevelTick TickType,
FActorComponentTickFunction* ThisTickFunction) override; FActorComponentTickFunction* ThisTickFunction) override;
void SetCameraComponent(UCameraComponent* NewCameraComponent);
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VR Movement") UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "VR Movement")
EVRNavigationModes NavigationMode = EVRNavigationModes::Walk; EVRNavigationModes NavigationMode = EVRNavigationModes::Walk;
......
...@@ -20,20 +20,24 @@ class DISPLAYCLUSTEREXTENSIONS_API AVirtualRealityPawn : public APawn ...@@ -20,20 +20,24 @@ class DISPLAYCLUSTEREXTENSIONS_API AVirtualRealityPawn : public APawn
public: public:
AVirtualRealityPawn(const FObjectInitializer& ObjectInitializer); AVirtualRealityPawn(const FObjectInitializer& ObjectInitializer);
/* Proxy Components */ /* Proxy */
UPROPERTY() UUniversalTrackedComponent* Head; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn|Proxy Objects") UUniversalTrackedComponent* Head;
UPROPERTY() UUniversalTrackedComponent* RightHand; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn|Proxy Objects") UUniversalTrackedComponent* RightHand;
UPROPERTY() UUniversalTrackedComponent* LeftHand; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn|Proxy Objects") UUniversalTrackedComponent* LeftHand;
UPROPERTY() UUniversalTrackedComponent* Tracker1; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn|Proxy Objects") UUniversalTrackedComponent* Tracker1;
UPROPERTY() UUniversalTrackedComponent* Tracker2; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn|Proxy Objects") UUniversalTrackedComponent* Tracker2;
UPROPERTY() UBasicVRInteractionComponent* BasicVRInteraction;
/* Interaction */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn|Interaction") UBasicVRInteractionComponent* BasicVRInteraction;
/* Movement */ /* Movement */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn|Movement") UVRPawnMovement* PawnMovement; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Pawn|Movement") UVRPawnMovement* PawnMovement;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn|Movement") float BaseTurnRate = 45.0f; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn|Movement") float BaseTurnRate = 45.0f;
/* CameraComponent */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Pawn|Camera") UCameraComponent* CameraComponent;
protected: protected:
virtual void BeginPlay() override;
virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override; virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
/* Movement */ /* Movement */
...@@ -45,7 +49,4 @@ protected: ...@@ -45,7 +49,4 @@ protected:
/* Interaction */ /* Interaction */
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();
/* APawn Interface to be able to use AddMovementInput() */
virtual UPawnMovementComponent* GetMovementComponent() const override;
}; };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment