diff --git a/Engine.Core/Abstract/IUniverse.cs b/Engine.Core/Abstract/IUniverse.cs index 116967b..5f99c8c 100644 --- a/Engine.Core/Abstract/IUniverse.cs +++ b/Engine.Core/Abstract/IUniverse.cs @@ -37,11 +37,21 @@ public interface IUniverse : IEntity, IEnumerable /// Event OnPostDraw { get; } + /// + /// Event triggered when a is about to be registered to the . + /// + Event OnPreUniverseObjectRegistered { get; } + /// /// Event triggered when a is registered to the . /// Event OnUniverseObjectRegistered { get; } + /// + /// Event triggered when a is about to be unregistered from the . + /// + Event OnPreUniverseObjectUnRegistered { get; } + /// /// Event triggered when a is unregistered from the . /// diff --git a/Engine.Core/Universe.cs b/Engine.Core/Universe.cs index f0f82a4..f60c7ae 100644 --- a/Engine.Core/Universe.cs +++ b/Engine.Core/Universe.cs @@ -13,7 +13,9 @@ public class Universe : BaseEntity, IUniverse public Event OnPreDraw { get; } = new(); public Event OnDraw { get; } = new(); public Event OnPostDraw { get; } = new(); + public Event OnPreUniverseObjectRegistered { get; } = new(); public Event OnUniverseObjectRegistered { get; } = new(); + public Event OnPreUniverseObjectUnRegistered { get; } = new(); public Event OnUniverseObjectUnRegistered { get; } = new(); public Event 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);