diff --git a/Content/Blueprints/Input/IMC_AuraContext.uasset b/Content/Blueprints/Input/IMC_AuraContext.uasset new file mode 100644 index 0000000..b024bb1 Binary files /dev/null and b/Content/Blueprints/Input/IMC_AuraContext.uasset differ diff --git a/Content/Blueprints/Input/InputActions/IA_Move.uasset b/Content/Blueprints/Input/InputActions/IA_Move.uasset new file mode 100644 index 0000000..09fdec3 Binary files /dev/null and b/Content/Blueprints/Input/InputActions/IA_Move.uasset differ diff --git a/Content/Blueprints/Player/BP_AuraPlayerController.uasset b/Content/Blueprints/Player/BP_AuraPlayerController.uasset new file mode 100644 index 0000000..e030fa0 Binary files /dev/null and b/Content/Blueprints/Player/BP_AuraPlayerController.uasset differ diff --git a/Source/Aura/Aura.Build.cs b/Source/Aura/Aura.Build.cs index 2eceeef..47d9087 100644 --- a/Source/Aura/Aura.Build.cs +++ b/Source/Aura/Aura.Build.cs @@ -8,7 +8,7 @@ public class Aura : ModuleRules { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; - PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" }); + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput" }); PrivateDependencyModuleNames.AddRange(new string[] { }); diff --git a/Source/Aura/Private/Player/AuraPlayerController.cpp b/Source/Aura/Private/Player/AuraPlayerController.cpp new file mode 100644 index 0000000..7fb7c9d --- /dev/null +++ b/Source/Aura/Private/Player/AuraPlayerController.cpp @@ -0,0 +1,55 @@ +// Copyright; GhostPacket Games + + +#include "Player/AuraPlayerController.h" + +#include "EnhancedInputSubsystems.h" +#include "EnhancedInputComponent.h" + +AAuraPlayerController::AAuraPlayerController() +{ + bReplicates = true; +} + +void AAuraPlayerController::BeginPlay() +{ + Super::BeginPlay(); + check(AuraContext); // checks it's set + + UEnhancedInputLocalPlayerSubsystem *Subsystem = ULocalPlayer::GetSubsystem (GetLocalPlayer ()); + check (Subsystem); + Subsystem->AddMappingContext (AuraContext, 0); + + bShowMouseCursor = true; + DefaultMouseCursor = EMouseCursor::Default; + + FInputModeGameAndUI InputModeData; + InputModeData.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock); + InputModeData.SetHideCursorDuringCapture(false); + SetInputMode (InputModeData); +} + +void AAuraPlayerController::SetupInputComponent() +{ + Super::SetupInputComponent(); + + UEnhancedInputComponent *EnhancedInputComponent = CastChecked(InputComponent); + EnhancedInputComponent->BindAction (MoveAction, ETriggerEvent::Triggered, this, &AAuraPlayerController::Move); +} + +void AAuraPlayerController::Move(const FInputActionValue& InputActionValue) +{ + const FVector2D InputAxisVector = InputActionValue.Get(); + const FRotator Rotation = GetControlRotation (); + const FRotator YawRotation(0.f, Rotation.Yaw, 0.f); + + const FVector ForwardDirection = FRotationMatrix (YawRotation).GetUnitAxis(EAxis::X); + const FVector RightDirection = FRotationMatrix (YawRotation).GetUnitAxis (EAxis::Y); + + APawn *ControlledPawn = GetPawn(); + if (!ControlledPawn) + return; + + ControlledPawn->AddMovementInput(ForwardDirection, InputAxisVector.Y); + ControlledPawn->AddMovementInput(RightDirection, InputAxisVector.X); +} diff --git a/Source/Aura/Public/Player/AuraPlayerController.h b/Source/Aura/Public/Player/AuraPlayerController.h new file mode 100644 index 0000000..87219f5 --- /dev/null +++ b/Source/Aura/Public/Player/AuraPlayerController.h @@ -0,0 +1,34 @@ +// Copyright; GhostPacket Games + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/PlayerController.h" +#include "AuraPlayerController.generated.h" + +class UInputMappingContext; +class UInputAction; + +struct FInputActionValue; + +UCLASS() +class AURA_API AAuraPlayerController : public APlayerController +{ + GENERATED_BODY() + +public: + AAuraPlayerController (); + +protected: + virtual void BeginPlay() override; + virtual void SetupInputComponent() override; + +private: + UPROPERTY (EditAnywhere, Category = "Input") + TObjectPtr AuraContext; + + UPROPERTY (EditAnywhere, Category = "Input") + TObjectPtr MoveAction; + + void Move (const FInputActionValue &InputActionValue); +};