fix: first frame updates not calling first, they are now set to be a high priority

This commit is contained in:
Syntriax 2025-08-09 22:29:44 +03:00
parent a4b83679b1
commit cf68f6ca6f

View File

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