10#include "GameFramework/Character.h"
13#include "GameFramework/CharacterMovementComponent.h"
15UHitStopSystem::UHitStopSystem()
17 PrimaryComponentTick.bCanEverTick =
true;
18 PrimaryComponentTick.bTickEvenWhenPaused =
true;
21void UHitStopSystem::BeginPlay()
26void UHitStopSystem::InitSystem(ACharacter* InOwner )
28 this->Owner = InOwner;
30 MeshComp = Owner->GetMesh();
31 MoveComp = Owner->GetCharacterMovement();
33 if (
auto EventManager = UBroadcastManager::Get(
this))
35 EventManager->OnHitStop.AddDynamic(
this, &UHitStopSystem::OnHitStop);
39void UHitStopSystem::TickComponent(
float DeltaTime, ELevelTick TickType,
40 FActorComponentTickFunction* ThisTickFunction)
42 Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
47 const double Now = GetWorld()->GetRealTimeSeconds();
48 if (Now >= EndRealTimeSeconds)
52void UHitStopSystem::OnHitStop(AActor* Target,
const EDamageType Type)
60void UHitStopSystem::ApplyHitStop(
const EDamageType Type)
62 const double Now = GetWorld()->GetRealTimeSeconds();
65 if ( UGameDataManager::Get(GetWorld())->GetHitStopData(Type, Params) ==
false )
71 EndRealTimeSeconds = Now + Params.
Duration;
76 const bool Stronger = Params.
TimeDilation < LastParams.TimeDilation;
77 const bool Longer = (Now + Params.
Duration) > EndRealTimeSeconds;
82 Owner->CustomTimeDilation = FMath::Clamp(Params.
TimeDilation, 0.001f, 1.0f);
84 EndRealTimeSeconds = Now + Params.
Duration;
89void UHitStopSystem::BeginFreeze(
const FHitStopData& Params)
93 SavedCustomTimeDilation = Owner->CustomTimeDilation;
95 Owner->CustomTimeDilation = FMath::Clamp(Params.
TimeDilation, 0.001f, 1.0f);
96 MoveComp->StopMovementImmediately();
99void UHitStopSystem::EndFreeze()
101 Owner->CustomTimeDilation = SavedCustomTimeDilation;
UGameDataManager 클래스를 선언합니다.
UHitStopSystem 클래스를 선언합니다.