using JetBrains.Annotations; using UnityEngine; using UnityEngine.Events; namespace JohnsonUtils.Common { public class TimerWrapper : MonoBehaviour { [PublicAPI] public UnityAction OnTimerOver; [SerializeField, Min(0)] private float startTime; [SerializeField] private bool countDown = true; [SerializeField] private bool startOnAwake; [SerializeField] private bool startOnStart; private Timer _timer; [PublicAPI] public bool IsRunning => _timer.IsRunning; [PublicAPI] public float CurrentTime => _timer.CurrentTime; private void Awake() { _timer = new Timer(startTime, countDown); _timer.OnTimeOver += OnTimeOver; if (startOnAwake) _timer.Start(); } private void Start() { if (startOnStart) _timer.Start(); } private void Update() { _timer.Tick(Time.deltaTime); } [PublicAPI] public void StartTimer() => _timer.Start(); [PublicAPI] public void PauseTimer() => _timer.Pause(); [PublicAPI] public void StopTimer() => _timer.Stop(); [PublicAPI] public void ResetTimer() => _timer.Reset(); private void OnTimeOver() => OnTimerOver?.Invoke(); } }