feat: time scaling
This commit is contained in:
parent
2be99d2142
commit
80202d4a07
@ -32,11 +32,21 @@ public interface IGameManager : IEntity, IEnumerable<IHierarchyObject>
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
event HierarchyObjectUnRegisteredEventHandler? OnHierarchyObjectUnRegistered;
|
event HierarchyObjectUnRegisteredEventHandler? OnHierarchyObjectUnRegistered;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Current time scale the <see cref="IGameManager"/> operates on.
|
||||||
|
/// </summary>
|
||||||
|
float TimeScale { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Contains time data related to this <see cref="IGameManager"/>.
|
/// Contains time data related to this <see cref="IGameManager"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
EngineTime Time { get; }
|
EngineTime Time { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Contains unscaled time data related to this <see cref="IGameManager"/>.
|
||||||
|
/// </summary>
|
||||||
|
EngineTime UnscaledTime { 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>
|
||||||
|
@ -18,6 +18,7 @@ public class GameManager : BaseEntity, IGameManager
|
|||||||
public event IGameManager.HierarchyObjectUnRegisteredEventHandler? OnHierarchyObjectUnRegistered = null;
|
public event IGameManager.HierarchyObjectUnRegisteredEventHandler? OnHierarchyObjectUnRegistered = null;
|
||||||
|
|
||||||
private readonly List<IHierarchyObject> _hierarchyObjects = new(Constants.GAME_OBJECTS_SIZE_INITIAL);
|
private readonly List<IHierarchyObject> _hierarchyObjects = new(Constants.GAME_OBJECTS_SIZE_INITIAL);
|
||||||
|
private float _timeScale = 1f;
|
||||||
|
|
||||||
public IReadOnlyList<IHierarchyObject> HierarchyObjects => _hierarchyObjects;
|
public IReadOnlyList<IHierarchyObject> HierarchyObjects => _hierarchyObjects;
|
||||||
|
|
||||||
@ -37,6 +38,12 @@ public class GameManager : BaseEntity, IGameManager
|
|||||||
}
|
}
|
||||||
|
|
||||||
public EngineTime Time { get; private set; } = new();
|
public EngineTime Time { get; private set; } = new();
|
||||||
|
public EngineTime UnscaledTime { get; private set; } = new();
|
||||||
|
public float TimeScale
|
||||||
|
{
|
||||||
|
get => _timeScale;
|
||||||
|
set => _timeScale = value.Max(0f);
|
||||||
|
}
|
||||||
|
|
||||||
public void Register(IHierarchyObject hierarchyObject)
|
public void Register(IHierarchyObject hierarchyObject)
|
||||||
{
|
{
|
||||||
@ -113,14 +120,15 @@ public class GameManager : BaseEntity, IGameManager
|
|||||||
|
|
||||||
public void Update(EngineTime engineTime)
|
public void Update(EngineTime engineTime)
|
||||||
{
|
{
|
||||||
Time = engineTime;
|
UnscaledTime = engineTime;
|
||||||
|
Time = new(TimeSpan.FromTicks((long)(Time.TimeSinceStart.Ticks + engineTime.DeltaSpan.Ticks * TimeScale)), TimeSpan.FromTicks((long)(engineTime.DeltaSpan.Ticks * TimeScale)));
|
||||||
|
|
||||||
OnPreUpdate?.Invoke(this, engineTime);
|
OnPreUpdate?.Invoke(this, Time);
|
||||||
|
|
||||||
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, engineTime);
|
OnUpdate?.Invoke(this, Time);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PreDraw()
|
public void PreDraw()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user