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:
@@ -4,8 +4,10 @@ namespace Syntriax.Engine.Physics2D;
|
||||
|
||||
public class PhysicsEngine2D : UniverseObject, IPhysicsEngine2D
|
||||
{
|
||||
public event IPhysicsEngine2D.PhysicsIterationEventHandler? OnPhysicsIteration = null;
|
||||
public event IPhysicsEngine2D.PhysicsStepEventHandler? OnPhysicsStep = null;
|
||||
public Event<IPhysicsEngine2D, float> OnPhysicsIteration { get; } = new();
|
||||
public Event<IPhysicsEngine2D, float> OnPhysicsStep { get; } = new();
|
||||
|
||||
private readonly Event<IUniverse, IUniverse.UpdateArguments>.EventHandler delegateOnPreUpdate = null!;
|
||||
|
||||
private float physicsTicker = 0f;
|
||||
private int _iterationPerStep = 1;
|
||||
@@ -178,7 +180,7 @@ public class PhysicsEngine2D : UniverseObject, IPhysicsEngine2D
|
||||
colliderCollector.Assign(universe);
|
||||
rigidBodyCollector.Assign(universe);
|
||||
|
||||
universe.OnPreUpdate += OnEnginePreUpdate;
|
||||
universe.OnPreUpdate.AddListener(OnEnginePreUpdate);
|
||||
}
|
||||
|
||||
protected override void OnExitingUniverse(IUniverse universe)
|
||||
@@ -189,12 +191,12 @@ public class PhysicsEngine2D : UniverseObject, IPhysicsEngine2D
|
||||
colliderCollector.Unassign();
|
||||
rigidBodyCollector.Unassign();
|
||||
|
||||
universe.OnPreUpdate -= OnEnginePreUpdate;
|
||||
universe.OnPreUpdate.RemoveListener(OnEnginePreUpdate);
|
||||
}
|
||||
|
||||
private void OnEnginePreUpdate(IUniverse sender, UniverseTime engineTime)
|
||||
private void OnEnginePreUpdate(IUniverse sender, IUniverse.UpdateArguments args)
|
||||
{
|
||||
physicsTicker += engineTime.DeltaTime;
|
||||
physicsTicker += args.EngineTime.DeltaTime;
|
||||
|
||||
while (physicsTicker >= IterationPeriod)
|
||||
{
|
||||
@@ -207,11 +209,15 @@ public class PhysicsEngine2D : UniverseObject, IPhysicsEngine2D
|
||||
{
|
||||
collisionDetector = new CollisionDetector2D();
|
||||
collisionResolver = new CollisionResolver2D();
|
||||
|
||||
delegateOnPreUpdate = OnEnginePreUpdate;
|
||||
}
|
||||
|
||||
public PhysicsEngine2D(ICollisionDetector2D collisionDetector, ICollisionResolver2D collisionResolver)
|
||||
{
|
||||
this.collisionDetector = collisionDetector;
|
||||
this.collisionResolver = collisionResolver;
|
||||
|
||||
delegateOnPreUpdate = OnEnginePreUpdate;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user