fgm24/Assets/Scripts/Utilities/Timer.cs

78 lines
1.8 KiB
C#

using System;
namespace Utilities {
public abstract class Timer {
protected float initialTime;
protected float Time { get; set; }
public bool IsRunning { get; protected set; }
public float Progress => Time / initialTime;
public Action OnTimerStart = delegate { };
public Action OnTimerStop = delegate { };
protected Timer(float value) {
initialTime = value;
IsRunning = false;
}
public void Start() {
Time = initialTime;
if (!IsRunning) {
IsRunning = true;
OnTimerStart.Invoke();
}
}
public void Stop() {
if (IsRunning) {
IsRunning = false;
OnTimerStop.Invoke();
}
}
public void Resume() => IsRunning = true;
public void Pause() => IsRunning = false;
public abstract void Tick(float deltaTime);
}
public class CountdownTimer : Timer {
public CountdownTimer(float value) : base(value) { }
public override void Tick(float deltaTime) {
if (IsRunning && Time > 0) {
Time -= deltaTime;
}
if (IsRunning && Time <= 0) {
Stop();
}
}
public bool IsFinished => Time <= 0;
public void Reset() => Time = initialTime;
public void Reset(float newTime) {
initialTime = newTime;
Reset();
}
}
public class StopwatchTimer : Timer {
public StopwatchTimer() : base(0) { }
public override void Tick(float deltaTime) {
if (IsRunning) {
Time += deltaTime;
}
}
public void Reset() => Time = 0;
public float GetTime() => Time;
}
}