diff --git a/Engine.Core/Abstract/IUniverse.cs b/Engine.Core/Abstract/IUniverse.cs index 99017c2..4667819 100644 --- a/Engine.Core/Abstract/IUniverse.cs +++ b/Engine.Core/Abstract/IUniverse.cs @@ -32,6 +32,11 @@ public interface IUniverse : IEntity, IEnumerable /// event UniverseObjectUnRegisteredEventHandler? OnUniverseObjectUnRegistered; + /// + /// Event triggered when is changed on the . + /// + event TimeScaleChangedEventHandler? OnTimeScaleChanged; + /// /// Current time scale the operates on. /// @@ -83,6 +88,8 @@ public interface IUniverse : IEntity, IEnumerable /// void PreDraw(); + delegate void TimeScaleChangedEventHandler(IUniverse sender, float previousTimeScale); + delegate void UpdateEventHandler(IUniverse sender, UniverseTime engineTime); delegate void PreDrawEventHandler(IUniverse sender); diff --git a/Engine.Core/Universe.cs b/Engine.Core/Universe.cs index 38b74fe..449830d 100644 --- a/Engine.Core/Universe.cs +++ b/Engine.Core/Universe.cs @@ -16,6 +16,8 @@ public class Universe : BaseEntity, IUniverse public event IUniverse.UniverseObjectRegisteredEventHandler? OnUniverseObjectRegistered = null; public event IUniverse.UniverseObjectUnRegisteredEventHandler? OnUniverseObjectUnRegistered = null; + public event IUniverse.TimeScaleChangedEventHandler? OnTimeScaleChanged = null; + private readonly List _universeObjects = new(Constants.UNIVERSE_OBJECTS_SIZE_INITIAL); private float _timeScale = 1f; @@ -26,7 +28,16 @@ public class Universe : BaseEntity, IUniverse public float TimeScale { get => _timeScale; - set => _timeScale = value.Max(0f); + set + { + value = value.Max(0f); + if (value == _timeScale) + return; + + float previousTimeScale = _timeScale; + _timeScale = value; + OnTimeScaleChanged?.InvokeSafe(this, previousTimeScale); + } } public void Register(IUniverseObject universeObject)