108 lines
2.5 KiB
C++
Executable File
108 lines
2.5 KiB
C++
Executable File
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "GameFramework/Pawn.h"
|
|
#include "Kismet/KismetMathLibrary.h"
|
|
#include "GameFramework/CharacterMovementComponent.h"
|
|
#include "GameFramework/FloatingPawnMovement.h"
|
|
#include "BasePawn.generated.h"
|
|
|
|
class UCameraComponent;
|
|
|
|
//enum movement_t : uint8
|
|
//{
|
|
// UP,
|
|
// DOWN,
|
|
// LEFT,
|
|
// RIGHT
|
|
//};
|
|
|
|
UCLASS()
|
|
class PRESIDENTSBRIGADE_API ABasePawn : public APawn
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
// Sets default values for this pawn's properties
|
|
ABasePawn(const FObjectInitializer &object_initializer);
|
|
|
|
// Called every frame
|
|
virtual void Tick(float DeltaTime) override;
|
|
|
|
// Called to bind functionality to input
|
|
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
|
|
protected:
|
|
// Called when the game starts or when spawned
|
|
virtual void BeginPlay() override;
|
|
|
|
virtual UPawnMovementComponent* GetMovementComponent() const;
|
|
|
|
UPROPERTY(EditAnywhere, Category="Player")
|
|
UCameraComponent* main_camera;
|
|
|
|
UPROPERTY(EditAnywhere, Category="Player")
|
|
UStaticMeshComponent* player_mesh;
|
|
|
|
UPROPERTY(EditAnywhere, Category="Player")
|
|
UFloatingPawnMovement* movement_component;
|
|
|
|
// Accel max time.
|
|
UPROPERTY(EditDefaultsOnly, Category="Gameplay")
|
|
float accel_max_time;
|
|
|
|
// Maximum horizontal speed.
|
|
UPROPERTY(EditDefaultsOnly, Category="Gameplay")
|
|
float horizontal_speed_max;
|
|
|
|
// Maximum vertical speed.
|
|
UPROPERTY(EditDefaultsOnly, Category="Gameplay")
|
|
float vertical_speed_max;
|
|
|
|
private:
|
|
struct AccelerationAnim
|
|
{
|
|
float start;
|
|
float end;
|
|
float max_time;
|
|
|
|
float time_elapsed;
|
|
|
|
void set(float _start, float _end, float _max_time)
|
|
{
|
|
start = _start;
|
|
end = _end;
|
|
max_time = _max_time;
|
|
time_elapsed = 0;
|
|
};
|
|
|
|
float update(const float delta_time)
|
|
{
|
|
float percentage = time_elapsed / max_time;
|
|
|
|
// Animation is complete.
|
|
if (time_elapsed > max_time)
|
|
{
|
|
percentage = 1;
|
|
}
|
|
|
|
time_elapsed += delta_time;
|
|
return UKismetMathLibrary::Lerp(start, end, percentage);
|
|
};
|
|
};
|
|
|
|
USceneComponent* root_component;
|
|
|
|
// DECLARE_DELEGATE_TwoParams(FMovementDelegate, const movement_t, const int);
|
|
// void handle_move_input(const movement_t move_type, const int direction);
|
|
void handle_move_right(float axis);
|
|
void handle_move_forward(float axis);
|
|
|
|
float horizontal_speed;
|
|
float vertical_speed;
|
|
|
|
AccelerationAnim horizontal_accel;
|
|
AccelerationAnim vertical_accel;
|
|
};
|