refactor: got rid of the static Time class and implemented EngineTime on IGameManager

This commit is contained in:
Syntriax 2025-03-30 20:19:03 +03:00
parent 82705ba378
commit b73c9ed0ae
5 changed files with 21 additions and 31 deletions

View File

@ -8,7 +8,7 @@ namespace Syntriax.Engine.Core.Abstract;
public interface IGameManager : IEntity public interface IGameManager : IEntity
{ {
/// <summary> /// <summary>
/// Event triggered when <see cref="Update(EngineTime)"/> is called on the <see cref="IGameManager"/>. /// Event triggered when <see cref="Update(double)"/> is called on the <see cref="IGameManager"/>.
/// </summary> /// </summary>
event UpdateEventHandler? OnUpdate; event UpdateEventHandler? OnUpdate;
@ -27,6 +27,11 @@ public interface IGameManager : IEntity
/// </summary> /// </summary>
event HierarchyObjectUnRegisteredEventHandler? OnHierarchyObjectUnRegistered; event HierarchyObjectUnRegisteredEventHandler? OnHierarchyObjectUnRegistered;
/// <summary>
/// Contains time data related to this <see cref="IGameManager"/>.
/// </summary>
EngineTime Time { get; }
/// <summary> /// <summary>
/// Gets a read-only list of <see cref="IHierarchyObject"/>s managed by the <see cref="IGameManager"/>. /// Gets a read-only list of <see cref="IHierarchyObject"/>s managed by the <see cref="IGameManager"/>.
/// </summary> /// </summary>
@ -53,17 +58,17 @@ public interface IGameManager : IEntity
void Remove(IHierarchyObject hierarchyObject); void Remove(IHierarchyObject hierarchyObject);
/// <summary> /// <summary>
/// Updates the <see cref="IGameManager"/> with the given engine time data. /// Updates the <see cref="IGameManager"/> with the given delta time.
/// </summary> /// </summary>
/// <param name="time">The engine time.</param> /// <param name="engineTime">Delta time.</param>
void Update(EngineTime time); void Update(EngineTime engineTime);
/// <summary> /// <summary>
/// Performs operations that should be done before the draw calls. /// Performs operations that should be done before the draw calls.
/// </summary> /// </summary>
void PreDraw(); void PreDraw();
delegate void UpdateEventHandler(IGameManager sender, EngineTime time); delegate void UpdateEventHandler(IGameManager sender, EngineTime engineTime);
delegate void PreDawEventHandler(IGameManager sender); delegate void PreDawEventHandler(IGameManager sender);
delegate void HierarchyObjectRegisteredEventHandler(IGameManager sender, IHierarchyObject hierarchyObjectRegistered); delegate void HierarchyObjectRegisteredEventHandler(IGameManager sender, IHierarchyObject hierarchyObjectRegistered);

View File

@ -2,10 +2,10 @@ using System;
namespace Syntriax.Engine.Core; namespace Syntriax.Engine.Core;
public readonly struct EngineTime(TimeSpan Total, TimeSpan Elapsed) public readonly struct EngineTime(TimeSpan TimeSinceStart, TimeSpan TimeDelta)
{ {
public readonly TimeSpan Total = Total; public readonly TimeSpan TimeSinceStart = TimeSinceStart;
public readonly TimeSpan Elapsed = Elapsed; public readonly TimeSpan DeltaSpan = TimeDelta;
public readonly float DeltaTimeFrame = (float)Elapsed.TotalMilliseconds * .001f; public readonly float DeltaTime = (float)TimeDelta.TotalSeconds;
} }

View File

@ -19,7 +19,6 @@ public class GameManager : BaseEntity, IGameManager
private readonly List<IHierarchyObject> _hierarchyObjects = new(Constants.GAME_OBJECTS_SIZE_INITIAL); private readonly List<IHierarchyObject> _hierarchyObjects = new(Constants.GAME_OBJECTS_SIZE_INITIAL);
private HierarchyObjectFactory _hierarchyObjectFactory = null!; private HierarchyObjectFactory _hierarchyObjectFactory = null!;
private HierarchyObjectFactory HierarchyObjectFactory private HierarchyObjectFactory HierarchyObjectFactory
{ {
get get
@ -46,6 +45,8 @@ public class GameManager : BaseEntity, IGameManager
} }
} }
public EngineTime Time { get; private set; } = new();
public void Register(IHierarchyObject hierarchyObject) public void Register(IHierarchyObject hierarchyObject)
{ {
if (_hierarchyObjects.Contains(hierarchyObject)) if (_hierarchyObjects.Contains(hierarchyObject))
@ -113,13 +114,14 @@ public class GameManager : BaseEntity, IGameManager
HierarchyObjects[i].Finalize(); HierarchyObjects[i].Finalize();
} }
public void Update(EngineTime time) public void Update(EngineTime engineTime)
{ {
Time.SetTime(time); Time = engineTime;
for (int i = 0; i < HierarchyObjects.Count; i++) for (int i = 0; i < HierarchyObjects.Count; i++)
HierarchyObjects[i].BehaviourController.Update(); HierarchyObjects[i].BehaviourController.Update();
OnUpdate?.Invoke(this, time); OnUpdate?.Invoke(this, engineTime);
} }
public void PreDraw() public void PreDraw()
@ -130,8 +132,6 @@ public class GameManager : BaseEntity, IGameManager
OnPreDraw?.Invoke(this); OnPreDraw?.Invoke(this);
} }
/////////////////////////////////////////////////////////////////
private void OnHierarchyObjectFinalize(IInitializable initializable) private void OnHierarchyObjectFinalize(IInitializable initializable)
{ {
if (initializable is IHierarchyObject hierarchyObject) if (initializable is IHierarchyObject hierarchyObject)

View File

@ -1,15 +0,0 @@
using System;
namespace Syntriax.Engine.Core;
public static class Time
{
private static EngineTime _engineTime = new(TimeSpan.Zero, TimeSpan.Zero);
public static TimeSpan Total => _engineTime.Total;
public static TimeSpan Elapsed => _engineTime.Elapsed;
public static float DeltaTimeFrame => _engineTime.DeltaTimeFrame;
public static void SetTime(EngineTime engineTime) => _engineTime = engineTime;
}

View File

@ -51,7 +51,7 @@ public class PhysicsCoroutineManager : HierarchyObject
gameManager.OnUpdate -= OnUpdate; gameManager.OnUpdate -= OnUpdate;
} }
private void OnUpdate(IGameManager sender, EngineTime time) private void OnUpdate(IGameManager sender, EngineTime engineTime)
{ {
if (GameManager is not IGameManager gameManager) if (GameManager is not IGameManager gameManager)
return; return;