feat: universe pre register and unregister events

This commit is contained in:
Syntriax 2025-08-03 09:22:22 +03:00
parent f6e52abcc1
commit 93a79cd075
2 changed files with 16 additions and 0 deletions

View File

@ -37,11 +37,21 @@ public interface IUniverse : IEntity, IEnumerable<IUniverseObject>
/// </summary>
Event<IUniverse> OnPostDraw { get; }
/// <summary>
/// Event triggered when a <see cref="IUniverseObject"/> is about to be registered to the <see cref="IUniverse"/>.
/// </summary>
Event<IUniverse, UniverseObjectRegisteredArguments> OnPreUniverseObjectRegistered { get; }
/// <summary>
/// Event triggered when a <see cref="IUniverseObject"/> is registered to the <see cref="IUniverse"/>.
/// </summary>
Event<IUniverse, UniverseObjectRegisteredArguments> OnUniverseObjectRegistered { get; }
/// <summary>
/// Event triggered when a <see cref="IUniverseObject"/> is about to be unregistered from the <see cref="IUniverse"/>.
/// </summary>
Event<IUniverse, UniverseObjectUnRegisteredArguments> OnPreUniverseObjectUnRegistered { get; }
/// <summary>
/// Event triggered when a <see cref="IUniverseObject"/> is unregistered from the <see cref="IUniverse"/>.
/// </summary>

View File

@ -13,7 +13,9 @@ public class Universe : BaseEntity, IUniverse
public Event<IUniverse> OnPreDraw { get; } = new();
public Event<IUniverse> OnDraw { get; } = new();
public Event<IUniverse> OnPostDraw { get; } = new();
public Event<IUniverse, IUniverse.UniverseObjectRegisteredArguments> OnPreUniverseObjectRegistered { get; } = new();
public Event<IUniverse, IUniverse.UniverseObjectRegisteredArguments> OnUniverseObjectRegistered { get; } = new();
public Event<IUniverse, IUniverse.UniverseObjectUnRegisteredArguments> OnPreUniverseObjectUnRegistered { get; } = new();
public Event<IUniverse, IUniverse.UniverseObjectUnRegisteredArguments> OnUniverseObjectUnRegistered { get; } = new();
public Event<IUniverse, IUniverse.TimeScaleChangedArguments> OnTimeScaleChanged { get; } = new();
@ -53,6 +55,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)}.");
OnPreUniverseObjectRegistered?.Invoke(this, new(universeObject));
universeObject.OnFinalized.AddListener(delegateOnUniverseObjectFinalize);
universeObject.OnExitedUniverse.AddListener(delegateOnUniverseObjectExitedUniverse);
@ -88,6 +92,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)}.");
OnPreUniverseObjectUnRegistered?.Invoke(this, new(universeObject));
universeObject.OnFinalized.RemoveListener(delegateOnUniverseObjectFinalize);
universeObject.OnExitedUniverse.RemoveListener(delegateOnUniverseObjectExitedUniverse);