8#include "Engine/GameViewportClient.h"
11#include "Async/ParallelFor.h"
38 Super::EndPlay(EndPlayReason);
55 if (GEngine || GEngine->GameViewport)
57 UWorld* World = GEngine->GameViewport->GetWorld();
66 case ETickType::FullFrameTaskParallel:
69 case ETickType::LateTickParallel:
73 UE_LOG(LogTemp, Warning, TEXT(
"TickManager.cpp: Unsupported ETickType in AddTick."));
92 FullFrameTask = FFunctionGraphTask::CreateAndDispatchWhenReady([
this, DeltaSeconds]()
95 }, TStatId(),
nullptr, ENamedThreads::AnyBackgroundHiPriTask);
110 FTaskGraphInterface::Get().WaitUntilTaskCompletes(
FullFrameTask);
118 const int32 size = functions.size();
119 ParallelFor(size, [&](int32 index)
122 if (tickEntry.
Owner !=
nullptr)
124 tickEntry.Tick(DeltaTime);
126 }, EParallelForFlags::Unbalanced);
138 case ETickType::FullFrameTaskParallel:
141 case ETickType::LateTickParallel:
145 UE_LOG(LogTemp, Warning, TEXT(
"TickManager.cpp: Unsupported ETickType in RemoveTick."));
160 UE_LOG(LogTemp, Warning, TEXT(
"TickManager.cpp: Destroying as there are no more ticks."));
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
FDelegateHandle OnPreTickDelegate
static std::vector< FTickEntry > LateTickFunctions
static std::vector< FTickEntry > TicksToRemove
void PreTick(UWorld *World, ELevelTick TickType, float DeltaSeconds)
void PostTick(UWorld *World, ELevelTick TickType, float DeltaSeconds)
static void AddTickInternal(std::vector< FTickEntry > &to, const FTickEntry &newTickEntry)
FGraphEventRef FullFrameTask
FDelegateHandle OnPostTickDelegate
static void RemoveTick(FTickEntry TickEntry)
static ATickManager * Instance
static std::vector< FTickEntry > FullFrameTaskFunctions
virtual void BeginPlay() override
void TickFunctionsParallel(std::vector< FTickEntry > &functions, const float DeltaTime)
static void RemoveTickInternal(std::vector< FTickEntry > &from, FTickEntry tickEntry)
static FTickEntry AddTick(UObject *Object, std::function< void(float)> Function, ETickType Type)