perf!: events refactored throughout all the project to use Event<> class

All delegate events are refactored to use the Event<TSender> and Event<TSender, TArgument> for performance issues regarding delegate events creating garbage, also this gives us better control on event invocation since C# Delegates did also create unnecessary garbage during Delegate.DynamicInvoke
This commit is contained in:
2025-05-31 00:14:43 +03:00
parent 996e61d0ad
commit 61e2761580
58 changed files with 637 additions and 485 deletions

View File

@@ -1,4 +1,3 @@
namespace Syntriax.Engine.Core;
public class DrawManager : UniverseObject
@@ -33,9 +32,9 @@ public class DrawManager : UniverseObject
drawEntities.Assign(universe);
postDrawEntities.Assign(universe);
universe.OnPreDraw += OnPreDraw;
universe.OnDraw += OnDraw;
universe.OnPostDraw += OnPostDraw;
universe.OnPreDraw.AddListener(OnPreDraw);
universe.OnDraw.AddListener(OnDraw);
universe.OnPostDraw.AddListener(OnPostDraw);
}
protected override void OnExitingUniverse(IUniverse universe)
@@ -44,8 +43,8 @@ public class DrawManager : UniverseObject
drawEntities.Unassign();
postDrawEntities.Unassign();
universe.OnPreDraw -= OnPreDraw;
universe.OnDraw -= OnDraw;
universe.OnPostDraw -= OnPostDraw;
universe.OnPreDraw.RemoveListener(OnPreDraw);
universe.OnDraw.RemoveListener(OnDraw);
universe.OnPostDraw.RemoveListener(OnPostDraw);
}
}

View File

@@ -1,4 +1,3 @@
using System.Collections.Generic;
namespace Syntriax.Engine.Core;
@@ -21,9 +20,9 @@ public class UpdateManager : UniverseObject
updateEntities.Assign(universe);
postUpdateEntities.Assign(universe);
universe.OnPreUpdate += OnPreUpdate;
universe.OnUpdate += OnUpdate;
universe.OnPostUpdate += OnPostUpdate;
universe.OnPreUpdate.AddListener(OnPreUpdate);
universe.OnUpdate.AddListener(OnUpdate);
universe.OnPostUpdate.AddListener(OnPostUpdate);
}
protected override void OnExitingUniverse(IUniverse universe)
@@ -33,12 +32,12 @@ public class UpdateManager : UniverseObject
updateEntities.Unassign();
postUpdateEntities.Unassign();
universe.OnPreUpdate -= OnPreUpdate;
universe.OnUpdate -= OnUpdate;
universe.OnPostUpdate -= OnPostUpdate;
universe.OnPreUpdate.RemoveListener(OnPreUpdate);
universe.OnUpdate.RemoveListener(OnUpdate);
universe.OnPostUpdate.RemoveListener(OnPostUpdate);
}
private void OnPreUpdate(IUniverse sender, UniverseTime engineTime)
private void OnPreUpdate(IUniverse sender, IUniverse.UpdateArguments args)
{
for (int i = toCallFirstFrameUpdates.Count - 1; i >= 0; i--)
{
@@ -50,25 +49,25 @@ public class UpdateManager : UniverseObject
preUpdateEntities[i].PreUpdate();
}
private void OnUpdate(IUniverse sender, UniverseTime engineTime)
private void OnUpdate(IUniverse sender, IUniverse.UpdateArguments args)
{
for (int i = updateEntities.Count - 1; i >= 0; i--)
updateEntities[i].Update();
}
private void OnPostUpdate(IUniverse sender, UniverseTime engineTime)
private void OnPostUpdate(IUniverse sender, IUniverse.UpdateArguments args)
{
for (int i = postUpdateEntities.Count - 1; i >= 0; i--)
postUpdateEntities[i].PostUpdate();
}
private void OnFirstFrameCollected(IBehaviourCollector<IFirstFrameUpdate> sender, IFirstFrameUpdate behaviourCollected)
private void OnFirstFrameCollected(IBehaviourCollector<IFirstFrameUpdate> sender, IBehaviourCollector<IFirstFrameUpdate>.BehaviourCollectedArguments args)
{
toCallFirstFrameUpdates.Add(behaviourCollected);
toCallFirstFrameUpdates.Add(args.BehaviourCollected);
}
public UpdateManager()
{
firstFrameUpdates.OnCollected += OnFirstFrameCollected;
firstFrameUpdates.OnCollected.AddListener(OnFirstFrameCollected);
}
}