ExoWest/Source/Exo/Private/Player/ExoPlayerController.cpp
Kubson96 b97d63bad5 feat: add interaction input, implement in controller
Added interaction input.
Modified InteractionComponent - write ptr to hit object.
Implemented interact action in player controller.
2025-02-17 15:28:18 +01:00

77 lines
2.3 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#include "Player/ExoPlayerController.h"
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"
#include "GameFramework/Character.h"
AExoPlayerController::AExoPlayerController()
{
PrimaryActorTick.bCanEverTick = true;
}
void AExoPlayerController::BeginPlay()
{
Super::BeginPlay();
check(InputContext);
UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(GetLocalPlayer());
if (Subsystem)
{
Subsystem->AddMappingContext(InputContext, 0);
}
PlayerCharacter = GetPawn<ACharacter>();
InteractionComponent = PlayerCharacter->FindComponentByClass<UInteractionComponent>();
}
void AExoPlayerController::PlayerTick(float DeltaTime)
{
Super::PlayerTick(DeltaTime);
}
void AExoPlayerController::SetupInputComponent()
{
Super::SetupInputComponent();
UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(InputComponent);
EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AExoPlayerController::Move);
EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &AExoPlayerController::Look);
EnhancedInputComponent->BindAction(InteractAction, ETriggerEvent::Triggered, this, &AExoPlayerController::Interact);
}
void AExoPlayerController::Move(const FInputActionValue& InputActionValue)
{
const FVector2D InputAxisVector = InputActionValue.Get<FVector2D>();
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);
if (PlayerCharacter)
{
PlayerCharacter->AddMovementInput(ForwardDirection, InputAxisVector.X);
PlayerCharacter->AddMovementInput(RightDirection, InputAxisVector.Y);
}
}
void AExoPlayerController::Look(const FInputActionValue& InputActionValue)
{
FVector2D InputAxisVector = InputActionValue.Get<FVector2D>();
AddYawInput(InputAxisVector.X);
AddPitchInput(InputAxisVector.Y);
}
void AExoPlayerController::Interact(const FInputActionValue& InputActionValue)
{
if (InteractionComponent->InteractedActor)
IInteractable::Execute_Interact(InteractionComponent->InteractedActor);
}