Files
doom-dm/Engine/src/Util/Timer.cs
2025-01-04 22:44:43 +03:00

62 lines
1.1 KiB
C#

namespace Engine.Util;
public class Timer
{
public event Action? OnFinished;
public event Action<double>? OnUpdate;
public double TotalTime
{
get => _totalTime;
set
{
if (value <= 0)
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(value);
_totalTime = value;
CurrentTime = value;
}
}
public double CurrentTime
{
get => _currentTime;
set
{
if (value < 0)
value = 0;
if (value > TotalTime)
value = TotalTime;
_currentTime = value;
OnUpdate?.Invoke(value);
if (IsFinished)
OnFinished?.Invoke();
}
}
public bool IsFinished => _currentTime <= 0;
private double _totalTime;
private double _currentTime;
public Timer(double parTotalTime)
{
if (parTotalTime <= 0)
ArgumentOutOfRangeException.ThrowIfNegativeOrZero(parTotalTime);
_totalTime = parTotalTime;
_currentTime = parTotalTime;
}
public void Update(double parDeltaTime)
{
CurrentTime -= parDeltaTime;
}
public void Reset()
{
CurrentTime = TotalTime;
}
}