perf: regular events to custom events
This commit is contained in:
@@ -10,17 +10,17 @@ public interface ICollider2D : IBehaviour
|
||||
/// <summary>
|
||||
/// Event triggered when a collision is detected.
|
||||
/// </summary>
|
||||
event CollisionDetectedEventHandler? OnCollisionDetected;
|
||||
Event<ICollider2D, CollisionDetectionInformation> OnCollisionDetected { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when a collision is resolved.
|
||||
/// </summary>
|
||||
event CollisionResolvedEventHandler? OnCollisionResolved;
|
||||
Event<ICollider2D, CollisionDetectionInformation> OnCollisionResolved { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when another <see cref="ICollider2D"/> triggers this <see cref="ICollider2D"/>.
|
||||
/// </summary>
|
||||
event TriggeredEventHandler? OnTriggered;
|
||||
Event<ICollider2D, ICollider2D> OnTriggered { get; }
|
||||
|
||||
/// <inheritdoc cref="ITransform2D" />
|
||||
ITransform2D Transform { get; }
|
||||
|
@@ -1,3 +1,5 @@
|
||||
using Syntriax.Engine.Core;
|
||||
|
||||
namespace Syntriax.Engine.Physics2D;
|
||||
|
||||
/// <summary>
|
||||
@@ -8,12 +10,12 @@ public interface IPhysicsEngine2D
|
||||
/// <summary>
|
||||
/// Event triggered when the <see cref="IPhysicsEngine2D"/> has done a single physics iteration.
|
||||
/// </summary>
|
||||
event PhysicsIterationEventHandler? OnPhysicsIteration;
|
||||
Event<IPhysicsEngine2D, float> OnPhysicsIteration { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Event triggered when the <see cref="IPhysicsEngine2D"/> has done a full physics step/>.
|
||||
/// </summary>
|
||||
event PhysicsStepEventHandler? OnPhysicsStep;
|
||||
Event<IPhysicsEngine2D, float> OnPhysicsStep { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The number of iterations the <see cref="IPhysicsEngine2D"/> performs per step.
|
||||
|
@@ -4,9 +4,9 @@ namespace Syntriax.Engine.Physics2D;
|
||||
|
||||
public abstract class Collider2DBehaviourBase : Behaviour2D, ICollider2D
|
||||
{
|
||||
public event ICollider2D.CollisionDetectedEventHandler? OnCollisionDetected = null;
|
||||
public event ICollider2D.CollisionResolvedEventHandler? OnCollisionResolved = null;
|
||||
public event ICollider2D.TriggeredEventHandler? OnTriggered = null;
|
||||
public Event<ICollider2D, CollisionDetectionInformation> OnCollisionDetected { get; private set; } = new();
|
||||
public Event<ICollider2D, CollisionDetectionInformation> OnCollisionResolved { get; private set; } = new();
|
||||
public Event<ICollider2D, ICollider2D> OnTriggered { get; private set; } = new();
|
||||
|
||||
protected bool NeedsRecalculation { get; set; } = true;
|
||||
protected IRigidBody2D? _rigidBody2D = null;
|
||||
@@ -29,13 +29,13 @@ public abstract class Collider2DBehaviourBase : Behaviour2D, ICollider2D
|
||||
{
|
||||
BehaviourController.TryGetBehaviourInParent(out _rigidBody2D);
|
||||
|
||||
BehaviourController.OnBehaviourAdded += OnBehaviourAddedToController;
|
||||
BehaviourController.OnBehaviourRemoved += OnBehaviourRemovedFromController;
|
||||
BehaviourController.OnBehaviourAdded.AddListener(OnBehaviourAddedToController);
|
||||
BehaviourController.OnBehaviourRemoved.AddListener(OnBehaviourRemovedFromController);
|
||||
|
||||
Transform.OnPositionChanged += SetNeedsRecalculationFromPosition;
|
||||
Transform.OnRotationChanged += SetNeedsRecalculationFromRotation;
|
||||
Transform.OnScaleChanged += SetNeedsRecalculationFromScale;
|
||||
UniverseObject.OnParentChanged += UpdateRigidBody2D;
|
||||
Transform.OnPositionChanged.AddListener(SetNeedsRecalculationFromPosition);
|
||||
Transform.OnRotationChanged.AddListener(SetNeedsRecalculationFromRotation);
|
||||
Transform.OnScaleChanged.AddListener(SetNeedsRecalculationFromScale);
|
||||
UniverseObject.OnParentChanged.AddListener(UpdateRigidBody2D);
|
||||
}
|
||||
|
||||
private void UpdateRigidBody2D(IUniverseObject sender, IUniverseObject? previousParent, IUniverseObject? newParent)
|
||||
@@ -61,12 +61,12 @@ public abstract class Collider2DBehaviourBase : Behaviour2D, ICollider2D
|
||||
|
||||
protected override void OnFinalize()
|
||||
{
|
||||
BehaviourController.OnBehaviourAdded -= OnBehaviourAddedToController;
|
||||
BehaviourController.OnBehaviourRemoved -= OnBehaviourRemovedFromController;
|
||||
Transform.OnScaleChanged -= SetNeedsRecalculationFromScale;
|
||||
BehaviourController.OnBehaviourAdded.RemoveListener(OnBehaviourAddedToController);
|
||||
BehaviourController.OnBehaviourRemoved.RemoveListener(OnBehaviourRemovedFromController);
|
||||
Transform.OnScaleChanged.RemoveListener(SetNeedsRecalculationFromScale);
|
||||
|
||||
Transform.OnPositionChanged -= SetNeedsRecalculationFromPosition;
|
||||
Transform.OnRotationChanged -= SetNeedsRecalculationFromRotation;
|
||||
Transform.OnPositionChanged.RemoveListener(SetNeedsRecalculationFromPosition);
|
||||
Transform.OnRotationChanged.RemoveListener(SetNeedsRecalculationFromRotation);
|
||||
}
|
||||
|
||||
public void Detect(CollisionDetectionInformation collisionDetectionInformation) => OnCollisionDetected?.Invoke(this, collisionDetectionInformation);
|
||||
|
@@ -25,9 +25,9 @@ public class PhysicsCoroutineManager : UniverseObject
|
||||
{
|
||||
physicsEngine = universe.GetUniverseObject<IPhysicsEngine2D>();
|
||||
if (physicsEngine is IPhysicsEngine2D foundPhysicsEngine)
|
||||
foundPhysicsEngine.OnPhysicsStep += OnPhysicsStep;
|
||||
foundPhysicsEngine.OnPhysicsStep.RemoveListener(OnPhysicsStep);
|
||||
else
|
||||
universe.OnUpdate += OnUpdate;
|
||||
universe.OnUpdate.AddListener(OnUpdate);
|
||||
}
|
||||
|
||||
private void OnPhysicsStep(IPhysicsEngine2D sender, float stepDeltaTime)
|
||||
@@ -45,8 +45,8 @@ public class PhysicsCoroutineManager : UniverseObject
|
||||
protected override void OnExitingUniverse(IUniverse universe)
|
||||
{
|
||||
if (physicsEngine is IPhysicsEngine2D existingPhysicsEngine)
|
||||
existingPhysicsEngine.OnPhysicsStep -= OnPhysicsStep;
|
||||
universe.OnUpdate -= OnUpdate;
|
||||
existingPhysicsEngine.OnPhysicsStep.RemoveListener(OnPhysicsStep);
|
||||
universe.OnUpdate.RemoveListener(OnUpdate);
|
||||
}
|
||||
|
||||
private void OnUpdate(IUniverse sender, UniverseTime engineTime)
|
||||
@@ -57,8 +57,8 @@ public class PhysicsCoroutineManager : UniverseObject
|
||||
physicsEngine = universe.GetUniverseObject<IPhysicsEngine2D>();
|
||||
if (physicsEngine is IPhysicsEngine2D foundPhysicsEngine)
|
||||
{
|
||||
foundPhysicsEngine.OnPhysicsStep += OnPhysicsStep;
|
||||
universe.OnUpdate -= OnUpdate;
|
||||
foundPhysicsEngine.OnPhysicsStep.AddListener(OnPhysicsStep);
|
||||
universe.OnUpdate.RemoveListener(OnUpdate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -4,8 +4,8 @@ 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; private set; } = new();
|
||||
public Event<IPhysicsEngine2D, float> OnPhysicsStep { get; private set; } = new();
|
||||
|
||||
private float physicsTicker = 0f;
|
||||
private int _iterationPerStep = 1;
|
||||
@@ -178,7 +178,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,7 +189,7 @@ public class PhysicsEngine2D : UniverseObject, IPhysicsEngine2D
|
||||
colliderCollector.Unassign();
|
||||
rigidBodyCollector.Unassign();
|
||||
|
||||
universe.OnPreUpdate -= OnEnginePreUpdate;
|
||||
universe.OnPreUpdate.RemoveListener(OnEnginePreUpdate);
|
||||
}
|
||||
|
||||
private void OnEnginePreUpdate(IUniverse sender, UniverseTime engineTime)
|
||||
|
@@ -6,8 +6,8 @@ namespace Syntriax.Engine.Physics2D;
|
||||
|
||||
public class PhysicsEngine2DStandalone : IPhysicsEngine2D
|
||||
{
|
||||
public event IPhysicsEngine2D.PhysicsIterationEventHandler? OnPhysicsIteration = null;
|
||||
public event IPhysicsEngine2D.PhysicsStepEventHandler? OnPhysicsStep = null;
|
||||
public Event<IPhysicsEngine2D, float> OnPhysicsIteration { get; private set; } = new();
|
||||
public Event<IPhysicsEngine2D, float> OnPhysicsStep { get; private set; } = new();
|
||||
|
||||
private readonly List<IRigidBody2D> rigidBodies = new(32);
|
||||
private readonly List<ICollider2D> colliders = new(64);
|
||||
@@ -29,13 +29,16 @@ public class PhysicsEngine2DStandalone : IPhysicsEngine2D
|
||||
foreach (ICollider2D collider2D in rigidBody.BehaviourController.GetBehaviours<ICollider2D>())
|
||||
colliders.Add(collider2D);
|
||||
|
||||
rigidBody.BehaviourController.OnBehaviourAdded += OnBehaviourAdded;
|
||||
rigidBody.BehaviourController.OnBehaviourRemoved += OnBehaviourRemoved;
|
||||
rigidBody.BehaviourController.OnBehaviourAdded.AddListener(OnBehaviourAdded);
|
||||
rigidBody.BehaviourController.OnBehaviourRemoved.AddListener(OnBehaviourRemoved);
|
||||
}
|
||||
|
||||
public void RemoveRigidBody(IRigidBody2D rigidBody)
|
||||
{
|
||||
rigidBodies.Remove(rigidBody);
|
||||
|
||||
rigidBody.BehaviourController.OnBehaviourAdded.RemoveListener(OnBehaviourAdded);
|
||||
rigidBody.BehaviourController.OnBehaviourRemoved.RemoveListener(OnBehaviourRemoved);
|
||||
}
|
||||
|
||||
public void Step(float deltaTime)
|
||||
|
Reference in New Issue
Block a user