using Google.Impl; 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; public TextMeshProUGUI timer; public GameObject timerObj; public GameObject gameoverPanelObj; public UnityEvent TimerEnded = new UnityEvent(); private float _levelStartTime; private const string LevelTimeKey = "LastLevelTimeSpent"; private void Start() { _levelStartTime = Time.time; // Start tracking level time if (GamePlayManager.isTimerLevel) { timerObj.SetActive(true); InitializeTimer(0, 2, 0); // Default 2 mins, adjust if needed } else { timerObj.SetActive(false); } } public void InitializeTimer(int hours, int minutes, int seconds) { _initialTime = new TimeSpan(hours, minutes, seconds); _remainingTime = _initialTime; StartTimer(); } public void StartTimer() { if (_remainingTime.TotalSeconds > 0 && !_isTimerRunning) { _isTimerRunning = true; } } public void StopTimer() { _isTimerRunning = false; } public void ResetTimer() { StopTimer(); _remainingTime = _initialTime; } public TimeSpan GetRemainingTime() { return _remainingTime; } void Update() { if (_isTimerRunning) { _remainingTime = _remainingTime.Subtract(TimeSpan.FromSeconds(Time.deltaTime)); timer.text = _remainingTime.ToString("m\\:ss"); if (_remainingTime.TotalSeconds <= 0) { _remainingTime = TimeSpan.Zero; _isTimerRunning = false; SaveTimeSpent(); // Save how much time was spent TimerEnded?.Invoke(); } } } public void SaveTimeSpent() { float timeSpent = Time.time - _levelStartTime; PlayerPrefs.SetFloat(LevelTimeKey, timeSpent); PlayerPrefs.Save(); } public static string GetFormattedLastLevelTime() { float rawSeconds = PlayerPrefs.GetFloat(LevelTimeKey, 0f); int minutes = Mathf.FloorToInt(rawSeconds / 60f); int seconds = Mathf.FloorToInt(rawSeconds % 60f); return $"{minutes}m and {seconds}s"; } }