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