From b8217f2106dd056c0a1d9eb591e2513e466b2389 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Sun, 3 Aug 2025 09:43:18 +0300 Subject: [PATCH] feat: last active frame interface --- Engine.Core/Systems/Abstract/ILastFrameUpdate.cs | 6 ++++++ Engine.Core/Systems/UpdateManager.cs | 9 +++++++++ 2 files changed, 15 insertions(+) create mode 100644 Engine.Core/Systems/Abstract/ILastFrameUpdate.cs diff --git a/Engine.Core/Systems/Abstract/ILastFrameUpdate.cs b/Engine.Core/Systems/Abstract/ILastFrameUpdate.cs new file mode 100644 index 0000000..9957da1 --- /dev/null +++ b/Engine.Core/Systems/Abstract/ILastFrameUpdate.cs @@ -0,0 +1,6 @@ +namespace Syntriax.Engine.Core; + +public interface ILastFrameUpdate : IBehaviour +{ + void LastActiveFrame(); +} diff --git a/Engine.Core/Systems/UpdateManager.cs b/Engine.Core/Systems/UpdateManager.cs index 20e5f58..0777f47 100644 --- a/Engine.Core/Systems/UpdateManager.cs +++ b/Engine.Core/Systems/UpdateManager.cs @@ -8,6 +8,7 @@ public class UpdateManager : Behaviour private static Comparer SortByAscendingPriority() => Comparer.Create((x, y) => x.Priority.CompareTo(y.Priority)); private readonly ActiveBehaviourCollectorSorted firstFrameUpdates = new() { SortBy = SortByAscendingPriority() }; + private readonly ActiveBehaviourCollector lastFrameUpdates = new(); private readonly ActiveBehaviourCollectorSorted preUpdateEntities = new() { SortBy = SortByAscendingPriority() }; private readonly ActiveBehaviourCollectorSorted updateEntities = new() { SortBy = SortByAscendingPriority() }; private readonly ActiveBehaviourCollectorSorted postUpdateEntities = new() { SortBy = SortByAscendingPriority() }; @@ -17,6 +18,7 @@ public class UpdateManager : Behaviour protected override void OnEnteredUniverse(IUniverse universe) { firstFrameUpdates.Assign(universe); + lastFrameUpdates.Assign(universe); preUpdateEntities.Assign(universe); updateEntities.Assign(universe); postUpdateEntities.Assign(universe); @@ -29,6 +31,7 @@ public class UpdateManager : Behaviour protected override void OnExitedUniverse(IUniverse universe) { firstFrameUpdates.Unassign(); + lastFrameUpdates.Unassign(); preUpdateEntities.Unassign(); updateEntities.Unassign(); postUpdateEntities.Unassign(); @@ -67,8 +70,14 @@ public class UpdateManager : Behaviour toCallFirstFrameUpdates.Add(args.BehaviourCollected); } + private void OnLastFrameRemoved(IBehaviourCollector sender, IBehaviourCollector.BehaviourRemovedArguments args) + { + args.BehaviourRemoved.LastActiveFrame(); + } + public UpdateManager() { firstFrameUpdates.OnCollected.AddListener(OnFirstFrameCollected); + lastFrameUpdates.OnRemoved.AddListener(OnLastFrameRemoved); } }