using System; using TMPro; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; public class TimerManager : MonoBehaviour { public TimeSpan _remainingTime; public TimeSpan _initialTime; private bool _isTimerRunning; // Event triggered when the timer starts public event Action TimerStarted; // Event triggered when the timer ends //public event Action TimerEnded; public UnityEvent TimerEnded = new UnityEvent(); public TextMeshProUGUI timer; public GameObject timerObj; public GameObject gameoverPanelObj; //public Textmeshprougui timertext; private void Start() { if (GamePlayManager.isTimerLevel) { timerObj.SetActive(true); InitializeTimer(0, 2, 0); } else timerObj.SetActive(false); } // Initialize the timer with hours, minutes, and seconds public void InitializeTimer(int hours, int minutes, int seconds) { _initialTime = new TimeSpan(hours, minutes, seconds); _remainingTime = _initialTime; StartTimer(); } // Start the timer public void StartTimer() { if (_remainingTime.TotalSeconds > 0 && !_isTimerRunning) { _isTimerRunning = true; TimerStarted?.Invoke(); // Trigger the TimerStarted event } } // Stop the timer public void StopTimer() { _isTimerRunning = false; } // Reset the timer to its initial value public void ResetTimer() { StopTimer(); _remainingTime = _initialTime; } // Get the remaining time public TimeSpan GetRemainingTime() { return _remainingTime; } // Update is called once per frame void Update() { if (_isTimerRunning) { // Subtract deltaTime from the remaining time _remainingTime = _remainingTime.Subtract(TimeSpan.FromSeconds(Time.deltaTime)); timer.text = _remainingTime.ToString("m\\:ss"); // If the timer has reached 0 or less, stop it if (_remainingTime.TotalSeconds <= 0) { _remainingTime = TimeSpan.Zero; _isTimerRunning = false; TimerEnded?.Invoke(); // Trigger the TimerEnded event } } } }