8#include "Engine/World.h"
9#include "TimerManager.h"
13 Super::Initialize(Collection);
18 if (
auto World = GetWorld())
20 FTimerManager& TM = World->GetTimerManager();
24 FTimerHandle TempHandle = KVP.Value.TimerHandle;
25 World->GetTimerManager().ClearTimer(TempHandle);
31 Super::Deinitialize();
36 return Delay(Owner, Seconds, [Callback]() {
37 if (Callback.IsBound())
45 if (!GetWorld() || Seconds < 0.f || !Action)
54 GetWorld()->GetTimerManager().SetTimer(Handle, D, Seconds,
false);
58 E.
Action = MoveTemp(Action);
74 if (!GetWorld() || !Action)
84 GetWorld()->GetTimerManager().SetTimer(Handle, D, 0.0f,
false);
88 E.
Action = MoveTemp(Action);
103 if (!GetWorld() || !Handle.
IsValid())
110 GetWorld()->GetTimerManager().ClearTimer(Entry.
TimerHandle);
120 if (!GetWorld() || !Owner)
128 FTimerManager& TM = GetWorld()->GetTimerManager();
130 for (uint64 Seq : Ids)
133 if (
Entries.RemoveAndCopyValue(Seq, Entry))
144 if (!
Entries.RemoveAndCopyValue(SeqIndex, Entry))
149 const bool bOwnerValid = Entry.
Owner.IsValid();
150 if (bOwnerValid && Entry.
Action )
162 OwnerIndex.RemoveSingle(Found->Owner, SeqIndex);
UDelayTaskManager 클래스를 선언합니다.
bool Cancel(const FDelayHandle &Handle)
void RemoveEntryById(uint64 SeqIndex)
void ExecuteById(uint64 SeqIndex)
void CancelAll(UObject *Owner)
TMultiMap< TWeakObjectPtr< UObject >, uint64 > OwnerIndex
virtual void Deinitialize() override
FDelayHandle DelayCallBack(UObject *Owner, float Seconds, FDelayCallback Callback)
FDelayHandle Delay(UObject *Owner, float Seconds, TFunction< void()> Action)
FDelayHandle NextTick(UObject *Owner, TFunction< void()> Action)
TMap< uint64, FEntry > Entries
virtual void Initialize(FSubsystemCollectionBase &Collection) override
UDelayTaskManager에 의해 생성된 지연 작업을 식별하고 제어하기 위한 핸들입니다.
TWeakObjectPtr< UObject > Owner
TFunction< void()> Action