diff --git a/Engine.Core/Systems/DrawManager.cs b/Engine.Core/Systems/DrawManager.cs index bad774c..d924f37 100644 --- a/Engine.Core/Systems/DrawManager.cs +++ b/Engine.Core/Systems/DrawManager.cs @@ -3,9 +3,11 @@ namespace Syntriax.Engine.Core; public class DrawManager : UniverseObject { - private readonly BehaviourCollector preDrawEntities = new(); - private readonly BehaviourCollector drawEntities = new(); - private readonly BehaviourCollector postDrawEntities = new(); + private static System.Comparison SortByPriority() => (x, y) => y.Priority.CompareTo(x.Priority); + + private readonly ActiveBehaviourCollectorSorted preDrawEntities = new() { SortBy = SortByPriority() }; + private readonly ActiveBehaviourCollectorSorted drawEntities = new() { SortBy = SortByPriority() }; + private readonly ActiveBehaviourCollectorSorted postDrawEntities = new() { SortBy = SortByPriority() }; private void OnPreDraw(IUniverse sender) { diff --git a/Engine.Core/Systems/UpdateManager.cs b/Engine.Core/Systems/UpdateManager.cs index a2371f5..7e27e6d 100644 --- a/Engine.Core/Systems/UpdateManager.cs +++ b/Engine.Core/Systems/UpdateManager.cs @@ -5,10 +5,12 @@ namespace Syntriax.Engine.Core; public class UpdateManager : UniverseObject { - private readonly BehaviourCollector firstFrameUpdates = new(); - private readonly BehaviourCollector preUpdateEntities = new(); - private readonly BehaviourCollector updateEntities = new(); - private readonly BehaviourCollector postUpdateEntities = new(); + private static System.Comparison SortByPriority() => (x, y) => y.Priority.CompareTo(x.Priority); + + private readonly ActiveBehaviourCollectorSorted firstFrameUpdates = new() { SortBy = SortByPriority() }; + private readonly ActiveBehaviourCollectorSorted preUpdateEntities = new() { SortBy = SortByPriority() }; + private readonly ActiveBehaviourCollectorSorted updateEntities = new() { SortBy = SortByPriority() }; + private readonly ActiveBehaviourCollectorSorted postUpdateEntities = new() { SortBy = SortByPriority() }; private readonly List toCallFirstFrameUpdates = [];