62 lines
1.6 KiB
C++
62 lines
1.6 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "MoveState.h"
|
|
#include "Camera/CameraComponent.h"
|
|
#include "PilotCamera.generated.h"
|
|
|
|
class FMoveState;
|
|
|
|
|
|
UCLASS(Blueprintable, ClassGroup=Camera, meta=(BlueprintSpawnableComponent))
|
|
class MONOLITH_API UPilotCamera : public UCameraComponent
|
|
{
|
|
GENERATED_BODY()
|
|
using FOVs = std::tuple<float, float, float>;
|
|
#define ARE(Stand, Walk, Sprint) std::make_tuple(Stand, Walk, Sprint)
|
|
|
|
void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction);
|
|
inline bool isMoveStateSet() const;
|
|
bool TrySetMoveState();
|
|
|
|
// FOV
|
|
FOVs TargetFOVs = ARE(87.f, 92.f, 100.f);
|
|
const float RateOfChange = 30;
|
|
float GetTargetFOV() const;
|
|
void UpdateFOV(float DeltaTime);
|
|
|
|
// Roll
|
|
float TargetRoll = 0;
|
|
// Max amount of roll applied when strafing
|
|
UPROPERTY(EditDefaultsOnly, Category = "Move State", meta = (AllowPrivateAccess = "true"))
|
|
float MaxStrafeRoll = 3;
|
|
// Amount of roll applied per second
|
|
UPROPERTY(EditDefaultsOnly, Category = "Move State", meta = (AllowPrivateAccess = "true"))
|
|
float RollRateOfChange = 15;
|
|
void UpdateRoll(float DeltaTime);
|
|
|
|
// TODO - Implement these
|
|
void ApplyImpulseFOV();
|
|
void ImpactCameraShake();
|
|
|
|
FMoveState* MoveState;
|
|
};
|
|
|
|
inline float UPilotCamera::GetTargetFOV() const
|
|
{
|
|
auto[stand, walk, sprint] = TargetFOVs;
|
|
if (MoveState->Is(SPRINT)) return sprint;
|
|
if (!MoveState->Is(STILL)
|
|
&& !MoveState->Is(STRAFE_R)
|
|
&& !MoveState->Is(STRAFE_L)) return walk;
|
|
return stand;
|
|
}
|
|
|
|
inline bool UPilotCamera::isMoveStateSet() const
|
|
{
|
|
return MoveState != nullptr;
|
|
}
|
|
|