using System; namespace Script.FrameWork.Time { public class Timer { private float _duration; private Action _updateAction; private Action _completeAction; public bool Finished; public Timer(float duration, Action updateAction = null, Action completeAction = null) { _duration = duration; _updateAction = updateAction; _completeAction = completeAction; } public void Cancel(bool destroyImmediately = false) { Finished = true; if (destroyImmediately) Destroy(); } public void Update(float dt) { _duration -= dt; if (_duration <= 0) { _completeAction?.Invoke(); Finished = true; return; } _updateAction?.Invoke(_duration); } public void Destroy() { _completeAction = null; _updateAction = null; } } }