diff --git a/Source/Engine/AI/Behavior.cpp b/Source/Engine/AI/Behavior.cpp index 4f4d9b94d..19102063e 100644 --- a/Source/Engine/AI/Behavior.cpp +++ b/Source/Engine/AI/Behavior.cpp @@ -13,6 +13,7 @@ class BehaviorSystem : public TaskGraphSystem { public: Array Behaviors; + void Job(int32 index); void Execute(TaskGraph* graph) override; }; @@ -20,6 +21,8 @@ public: class BehaviorService : public EngineService { public: + Array UpdateList; + BehaviorService() : EngineService(TEXT("Behaviors"), 0) { @@ -30,7 +33,6 @@ public: }; BehaviorService BehaviorServiceInstance; -Array UpdateList; TaskGraphSystem* Behavior::System = nullptr; void BehaviorSystem::Job(int32 index) @@ -42,10 +44,10 @@ void BehaviorSystem::Job(int32 index) void BehaviorSystem::Execute(TaskGraph* graph) { // Copy list of behaviors to update (in case one of them gets disabled during async jobs) - if (UpdateList.Count() == 0) + if (BehaviorServiceInstance.UpdateList.Count() == 0) return; Behaviors.Clear(); - Behaviors.Add(UpdateList); + Behaviors.Add(BehaviorServiceInstance.UpdateList); // Schedule work to update all behaviors in async Function job; @@ -62,7 +64,7 @@ bool BehaviorService::Init() void BehaviorService::Dispose() { - UpdateList.Resize(0); + BehaviorServiceInstance.UpdateList.Resize(0); SAFE_DELETE(Behavior::System); } @@ -155,12 +157,12 @@ void Behavior::ResetLogic() void Behavior::OnEnable() { - UpdateList.Add(this); + BehaviorServiceInstance.UpdateList.Add(this); if (AutoStart) StartLogic(); } void Behavior::OnDisable() { - UpdateList.Remove(this); + BehaviorServiceInstance.UpdateList.Remove(this); } diff --git a/Source/Engine/Animations/Animations.cpp b/Source/Engine/Animations/Animations.cpp index 7dd2834bf..6599bebac 100644 --- a/Source/Engine/Animations/Animations.cpp +++ b/Source/Engine/Animations/Animations.cpp @@ -12,6 +12,8 @@ class AnimationsService : public EngineService { public: + Array UpdateList; + AnimationsService() : EngineService(TEXT("Animations"), -10) { @@ -25,6 +27,7 @@ class AnimationsSystem : public TaskGraphSystem { public: float DeltaTime, UnscaledDeltaTime, Time, UnscaledTime; + void Job(int32 index); void Execute(TaskGraph* graph) override; void PostExecute(TaskGraph* graph) override; @@ -47,7 +50,6 @@ namespace } AnimationsService AnimationManagerInstance; -Array UpdateList; TaskGraphSystem* Animations::System = nullptr; #if USE_EDITOR Delegate Animations::DebugFlow; @@ -79,7 +81,7 @@ void AnimationsService::Dispose() void AnimationsSystem::Job(int32 index) { PROFILE_CPU_NAMED("Animations.Job"); - auto animatedModel = UpdateList[index]; + auto animatedModel = AnimationManagerInstance.UpdateList[index]; if (CanUpdateModel(animatedModel)) { auto graph = animatedModel->AnimationGraph.Get(); @@ -112,7 +114,7 @@ void AnimationsSystem::Job(int32 index) void AnimationsSystem::Execute(TaskGraph* graph) { - if (UpdateList.Count() == 0) + if (AnimationManagerInstance.UpdateList.Count() == 0) return; // Setup data for async update @@ -131,7 +133,7 @@ void AnimationsSystem::Execute(TaskGraph* graph) // Schedule work to update all animated models in async Function job; job.Bind(this); - graph->DispatchJob(job, UpdateList.Count()); + graph->DispatchJob(job, AnimationManagerInstance.UpdateList.Count()); } void AnimationsSystem::PostExecute(TaskGraph* graph) @@ -139,9 +141,9 @@ void AnimationsSystem::PostExecute(TaskGraph* graph) PROFILE_CPU_NAMED("Animations.PostExecute"); // Update gameplay - for (int32 index = 0; index < UpdateList.Count(); index++) + for (int32 index = 0; index < AnimationManagerInstance.UpdateList.Count(); index++) { - auto animatedModel = UpdateList[index]; + auto animatedModel = AnimationManagerInstance.UpdateList[index]; if (CanUpdateModel(animatedModel)) { animatedModel->OnAnimationUpdated_Sync(); @@ -149,15 +151,15 @@ void AnimationsSystem::PostExecute(TaskGraph* graph) } // Cleanup - UpdateList.Clear(); + AnimationManagerInstance.UpdateList.Clear(); } void Animations::AddToUpdate(AnimatedModel* obj) { - UpdateList.Add(obj); + AnimationManagerInstance.UpdateList.Add(obj); } void Animations::RemoveFromUpdate(AnimatedModel* obj) { - UpdateList.Remove(obj); + AnimationManagerInstance.UpdateList.Remove(obj); }