perf: regular events to custom events
This commit is contained in:
@@ -7,21 +7,28 @@ namespace Syntriax.Engine.Core;
|
||||
[System.Diagnostics.DebuggerDisplay("UniverseObject Count: {_universeObjects.Count}")]
|
||||
public class Universe : BaseEntity, IUniverse
|
||||
{
|
||||
public event IUniverse.UpdateEventHandler? OnPreUpdate = null;
|
||||
public event IUniverse.UpdateEventHandler? OnUpdate = null;
|
||||
public event IUniverse.UpdateEventHandler? OnPostUpdate = null;
|
||||
public event IUniverse.DrawEventHandler? OnPreDraw = null;
|
||||
public event IUniverse.DrawEventHandler? OnDraw = null;
|
||||
public event IUniverse.DrawEventHandler? OnPostDraw = null;
|
||||
public Event<IUniverse, UniverseTime> OnPreUpdate { get; set; } = new();
|
||||
public Event<IUniverse, UniverseTime> OnUpdate { get; set; } = new();
|
||||
public Event<IUniverse, UniverseTime> OnPostUpdate { get; set; } = new();
|
||||
public Event<IUniverse> OnPreDraw { get; set; } = new();
|
||||
public Event<IUniverse> OnDraw { get; set; } = new();
|
||||
public Event<IUniverse> OnPostDraw { get; set; } = new();
|
||||
public Event<IUniverse, IUniverseObject> OnUniverseObjectRegistered { get; set; } = new();
|
||||
public Event<IUniverse, IUniverseObject> OnUniverseObjectUnRegistered { get; set; } = new();
|
||||
public Event<IUniverse, float> OnTimeScaleChanged { get; set; } = new();
|
||||
|
||||
public event IUniverse.UniverseObjectRegisteredEventHandler? OnUniverseObjectRegistered = null;
|
||||
public event IUniverse.UniverseObjectUnRegisteredEventHandler? OnUniverseObjectUnRegistered = null;
|
||||
|
||||
public event IUniverse.TimeScaleChangedEventHandler? OnTimeScaleChanged = null;
|
||||
private readonly Action<IInitializable> cachedOnUniverseObjectFinalize = null!;
|
||||
private readonly Action<IUniverseObject, IUniverse> cachedOnUniverseObjectExitedUniverse = null!;
|
||||
|
||||
private readonly List<IUniverseObject> _universeObjects = new(Constants.UNIVERSE_OBJECTS_SIZE_INITIAL);
|
||||
private float _timeScale = 1f;
|
||||
|
||||
public Universe()
|
||||
{
|
||||
cachedOnUniverseObjectFinalize = OnUniverseObjectFinalize;
|
||||
cachedOnUniverseObjectExitedUniverse = OnUniverseObjectExitedUniverse;
|
||||
}
|
||||
|
||||
public IReadOnlyList<IUniverseObject> UniverseObjects => _universeObjects;
|
||||
|
||||
public UniverseTime Time { get; private set; } = new();
|
||||
@@ -46,8 +53,8 @@ public class Universe : BaseEntity, IUniverse
|
||||
if (_universeObjects.Contains(universeObject))
|
||||
throw new Exception($"{nameof(IUniverseObject)} named {universeObject.Name} is already registered to the {nameof(Universe)}.");
|
||||
|
||||
universeObject.OnFinalized += OnUniverseObjectFinalize;
|
||||
universeObject.OnExitedUniverse += OnUniverseObjectExitedUniverse;
|
||||
universeObject.OnFinalized.AddListener(cachedOnUniverseObjectFinalize);
|
||||
universeObject.OnExitedUniverse.AddListener(cachedOnUniverseObjectExitedUniverse);
|
||||
|
||||
if (!universeObject.Initialize())
|
||||
throw new Exception($"{universeObject.Name} can't be initialized");
|
||||
@@ -81,8 +88,8 @@ public class Universe : BaseEntity, IUniverse
|
||||
if (!_universeObjects.Contains(universeObject))
|
||||
throw new Exception($"{nameof(IUniverseObject)} named {universeObject.Name} is not registered to the {nameof(Universe)}.");
|
||||
|
||||
universeObject.OnFinalized -= OnUniverseObjectFinalize;
|
||||
universeObject.OnExitedUniverse -= OnUniverseObjectExitedUniverse;
|
||||
universeObject.OnFinalized.RemoveListener(cachedOnUniverseObjectFinalize);
|
||||
universeObject.OnExitedUniverse.RemoveListener(cachedOnUniverseObjectExitedUniverse);
|
||||
|
||||
for (int i = universeObject.Children.Count - 1; i >= 0; i--)
|
||||
Remove(universeObject.Children[i]);
|
||||
|
||||
Reference in New Issue
Block a user