feat: IUniverse.OnTimeChanged event added

This commit is contained in:
Syntriax 2025-04-14 12:19:23 +03:00
parent 5c1c025fe3
commit 94d01521d4
2 changed files with 19 additions and 1 deletions

View File

@ -32,6 +32,11 @@ public interface IUniverse : IEntity, IEnumerable<IUniverseObject>
/// </summary> /// </summary>
event UniverseObjectUnRegisteredEventHandler? OnUniverseObjectUnRegistered; event UniverseObjectUnRegisteredEventHandler? OnUniverseObjectUnRegistered;
/// <summary>
/// Event triggered when <see cref="TimeScale"/> is changed on the <see cref="IUniverse"/>.
/// </summary>
event TimeScaleChangedEventHandler? OnTimeScaleChanged;
/// <summary> /// <summary>
/// Current time scale the <see cref="IUniverse"/> operates on. /// Current time scale the <see cref="IUniverse"/> operates on.
/// </summary> /// </summary>
@ -83,6 +88,8 @@ public interface IUniverse : IEntity, IEnumerable<IUniverseObject>
/// </summary> /// </summary>
void PreDraw(); void PreDraw();
delegate void TimeScaleChangedEventHandler(IUniverse sender, float previousTimeScale);
delegate void UpdateEventHandler(IUniverse sender, UniverseTime engineTime); delegate void UpdateEventHandler(IUniverse sender, UniverseTime engineTime);
delegate void PreDrawEventHandler(IUniverse sender); delegate void PreDrawEventHandler(IUniverse sender);

View File

@ -16,6 +16,8 @@ public class Universe : BaseEntity, IUniverse
public event IUniverse.UniverseObjectRegisteredEventHandler? OnUniverseObjectRegistered = null; public event IUniverse.UniverseObjectRegisteredEventHandler? OnUniverseObjectRegistered = null;
public event IUniverse.UniverseObjectUnRegisteredEventHandler? OnUniverseObjectUnRegistered = null; public event IUniverse.UniverseObjectUnRegisteredEventHandler? OnUniverseObjectUnRegistered = null;
public event IUniverse.TimeScaleChangedEventHandler? OnTimeScaleChanged = null;
private readonly List<IUniverseObject> _universeObjects = new(Constants.UNIVERSE_OBJECTS_SIZE_INITIAL); private readonly List<IUniverseObject> _universeObjects = new(Constants.UNIVERSE_OBJECTS_SIZE_INITIAL);
private float _timeScale = 1f; private float _timeScale = 1f;
@ -26,7 +28,16 @@ public class Universe : BaseEntity, IUniverse
public float TimeScale public float TimeScale
{ {
get => _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) public void Register(IUniverseObject universeObject)