Create TankPlayerCharacter

This commit is contained in:
baz 2024-06-04 00:43:52 +01:00
parent cec5f2e90d
commit eb3f255098
6 changed files with 138 additions and 0 deletions

BIN
Content/Input/IA_Movement.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/Input/IA_Yaw.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/Input/IMC_Player.uasset (Stored with Git LFS) Normal file

Binary file not shown.

BIN
Content/Player/BP_TankPlayerCharacter.uasset (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -0,0 +1,74 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "TankPlayerCharacter.h"
#include "TankPlayerController.h"
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"
#include "InputMappingContext.h"
// Sets default values
ATankPlayerCharacter::ATankPlayerCharacter()
{
// Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void ATankPlayerCharacter::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void ATankPlayerCharacter::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
// Called to bind functionality to input
void ATankPlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
if (ATankPlayerController* TankPlayerController = Cast<ATankPlayerController>(GetController()))
{
if (UEnhancedInputLocalPlayerSubsystem* InputSystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(TankPlayerController->GetLocalPlayer()))
{
if (!InputMappingContext.IsNull())
{
InputSystem->AddMappingContext(InputMappingContext.LoadSynchronous(), 0);
}
}
}
if (UEnhancedInputComponent* Input = Cast<UEnhancedInputComponent>(PlayerInputComponent))
{
if (MovementAction)
{
Input->BindAction(MovementAction, ETriggerEvent::Triggered, this, &ATankPlayerCharacter::MovementCallback);
}
if (YawAction)
{
Input->BindAction(YawAction, ETriggerEvent::Triggered, this, &ATankPlayerCharacter::RotationCallback);
}
}
}
void ATankPlayerCharacter::MovementCallback(const FInputActionInstance& Instance)
{
float Movement = Instance.GetValue().Get<float>();
AddMovementInput(GetActorForwardVector(), Movement);
}
void ATankPlayerCharacter::RotationCallback(const FInputActionInstance& Instance)
{
float Rotation = Instance.GetValue().Get<float>();
AddControllerYawInput(Rotation);
}

View File

@ -0,0 +1,52 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "TankPlayerCharacter.generated.h"
class UInputMappingContext;
class UInputAction;
UCLASS()
class TANK_API ATankPlayerCharacter : public ACharacter
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
TSoftObjectPtr<UInputMappingContext> InputMappingContext;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
UInputAction* MovementAction;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
UInputAction* YawAction;
public:
// Sets default values for this character's properties
ATankPlayerCharacter();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
private:
UFUNCTION()
void MovementCallback(const FInputActionInstance& Instance);
UFUNCTION()
void RotationCallback(const FInputActionInstance& Instance);
};