feat: added post, regular & post events for Update and Draw

This commit is contained in:
Syntriax 2025-05-22 23:10:47 +03:00
parent 3b6a93d37a
commit 37b87f0f85
2 changed files with 28 additions and 7 deletions

View File

@ -18,9 +18,24 @@ public interface IUniverse : IEntity, IEnumerable<IUniverseObject>
event UpdateEventHandler? OnUpdate; event UpdateEventHandler? OnUpdate;
/// <summary> /// <summary>
/// Event triggered when <see cref="PreDraw"/> is called on the <see cref="IUniverse"/>. /// Event triggered after <see cref="Update(UniverseTime)"/> is called on the <see cref="IUniverse"/>.
/// </summary> /// </summary>
event PreDrawEventHandler? OnPreDraw; event UpdateEventHandler? OnPostUpdate;
/// <summary>
/// Event triggered when <see cref="Draw"/> is about to be called called on the <see cref="IUniverse"/>.
/// </summary>
event DrawEventHandler? OnPreDraw;
/// <summary>
/// Event triggered when <see cref="Draw"/> is called on the <see cref="IUniverse"/>.
/// </summary>
event DrawEventHandler? OnDraw;
/// <summary>
/// Event triggered after <see cref="Draw"/> is called on the <see cref="IUniverse"/>.
/// </summary>
event DrawEventHandler? OnPostDraw;
/// <summary> /// <summary>
/// Event triggered when a <see cref="IUniverseObject"/> is registered to the <see cref="IUniverse"/>. /// Event triggered when a <see cref="IUniverseObject"/> is registered to the <see cref="IUniverse"/>.
@ -84,14 +99,14 @@ public interface IUniverse : IEntity, IEnumerable<IUniverseObject>
void Update(UniverseTime universeTime); void Update(UniverseTime universeTime);
/// <summary> /// <summary>
/// Performs operations that should be done before the draw calls. /// Performs operations that should be done to the draw.
/// </summary> /// </summary>
void PreDraw(); void Draw();
delegate void TimeScaleChangedEventHandler(IUniverse sender, float previousTimeScale); 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 DrawEventHandler(IUniverse sender);
delegate void UniverseObjectRegisteredEventHandler(IUniverse sender, IUniverseObject universeObjectRegistered); delegate void UniverseObjectRegisteredEventHandler(IUniverse sender, IUniverseObject universeObjectRegistered);
delegate void UniverseObjectUnRegisteredEventHandler(IUniverse sender, IUniverseObject universeObjectUnregistered); delegate void UniverseObjectUnRegisteredEventHandler(IUniverse sender, IUniverseObject universeObjectUnregistered);

View File

@ -9,7 +9,10 @@ public class Universe : BaseEntity, IUniverse
{ {
public event IUniverse.UpdateEventHandler? OnPreUpdate = null; public event IUniverse.UpdateEventHandler? OnPreUpdate = null;
public event IUniverse.UpdateEventHandler? OnUpdate = null; public event IUniverse.UpdateEventHandler? OnUpdate = null;
public event IUniverse.PreDrawEventHandler? OnPreDraw = null; public event IUniverse.UpdateEventHandler? OnPostUpdate = null;
public event IUniverse.DrawEventHandler? OnPreDraw = null;
public event IUniverse.DrawEventHandler? OnDraw = null;
public event IUniverse.DrawEventHandler? OnPostDraw = null;
public event IUniverse.UniverseObjectRegisteredEventHandler? OnUniverseObjectRegistered = null; public event IUniverse.UniverseObjectRegisteredEventHandler? OnUniverseObjectRegistered = null;
public event IUniverse.UniverseObjectUnRegisteredEventHandler? OnUniverseObjectUnRegistered = null; public event IUniverse.UniverseObjectUnRegisteredEventHandler? OnUniverseObjectUnRegistered = null;
@ -121,9 +124,10 @@ public class Universe : BaseEntity, IUniverse
UniverseObjects[i].BehaviourController.Update(); UniverseObjects[i].BehaviourController.Update();
OnUpdate?.InvokeSafe(this, Time); OnUpdate?.InvokeSafe(this, Time);
OnPostUpdate?.InvokeSafe(this, Time);
} }
public void PreDraw() public void Draw()
{ {
Debug.Assert.AssertInitialized(this); Debug.Assert.AssertInitialized(this);
@ -131,6 +135,8 @@ public class Universe : BaseEntity, IUniverse
UniverseObjects[i].BehaviourController.UpdatePreDraw(); UniverseObjects[i].BehaviourController.UpdatePreDraw();
OnPreDraw?.InvokeSafe(this); OnPreDraw?.InvokeSafe(this);
OnDraw?.InvokeSafe(this);
OnPostDraw?.InvokeSafe(this);
} }
private void OnUniverseObjectFinalize(IInitializable initializable) private void OnUniverseObjectFinalize(IInitializable initializable)