From 94d01521d4403133c143093c344b8f301903aa53 Mon Sep 17 00:00:00 2001 From: Syntriax Date: Mon, 14 Apr 2025 12:19:23 +0300 Subject: [PATCH] feat: IUniverse.OnTimeChanged event added --- Engine.Core/Abstract/IUniverse.cs | 7 +++++++ Engine.Core/Universe.cs | 13 ++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) 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)