diff --git a/Engine.Core/Systems/UpdateManager.cs b/Engine.Core/Systems/UpdateManager.cs index ac61131..1ee0257 100644 --- a/Engine.Core/Systems/UpdateManager.cs +++ b/Engine.Core/Systems/UpdateManager.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; namespace Engine.Core; @@ -23,6 +24,7 @@ public class UpdateManager : Behaviour updateEntities.Assign(universe); postUpdateEntities.Assign(universe); + universe.OnPreUpdate.AddListener(OnFirstUpdate, int.MaxValue); universe.OnPreUpdate.AddListener(OnPreUpdate); universe.OnUpdate.AddListener(OnUpdate); universe.OnPostUpdate.AddListener(OnPostUpdate); @@ -36,19 +38,23 @@ public class UpdateManager : Behaviour updateEntities.Unassign(); postUpdateEntities.Unassign(); + universe.OnPreUpdate.RemoveListener(OnFirstUpdate); universe.OnPreUpdate.RemoveListener(OnPreUpdate); universe.OnUpdate.RemoveListener(OnUpdate); universe.OnPostUpdate.RemoveListener(OnPostUpdate); } - private void OnPreUpdate(IUniverse sender, IUniverse.UpdateArguments args) + private void OnFirstUpdate(IUniverse sender, IUniverse.UpdateArguments args) { for (int i = toCallFirstFrameUpdates.Count - 1; i >= 0; i--) { toCallFirstFrameUpdates[i].FirstActiveFrame(); toCallFirstFrameUpdates.RemoveAt(i); } + } + private void OnPreUpdate(IUniverse sender, IUniverse.UpdateArguments args) + { for (int i = preUpdateEntities.Count - 1; i >= 0; i--) preUpdateEntities[i].PreUpdate(); }