using TMPro; using UnityEngine; public class TimeManager : MonoBehaviour { private const int HOURS_PER_DAY = 24; private const int MINUTES_PER_HOUR = 60; public const int SECONDS_PER_MINUTE = 2; [SerializeField] private int currentHour = 12; private int currentMinute = 0; private float currentSecond = 0; // Update is called once per frame void Update() { StepTime(); } private void StepTime() { currentSecond += Time.deltaTime; if (currentSecond > SECONDS_PER_MINUTE) { currentSecond = 0; currentMinute += 1; } if (currentMinute > MINUTES_PER_HOUR - 1) { currentMinute = 0; currentHour += 1; } if (currentHour > (HOURS_PER_DAY - 1)) { currentHour = 0; } } /// /// Get the current second within the current minute /// /// Current second within the current minute public float GetCurrentSecond() { return currentSecond; } /// /// Get the current minute within the current hour /// /// Current minute within the current hour public int GetCurrentMinute() { return currentMinute; } /// /// Get the current hour within the current day /// /// Current hour within the current day public int GetCurrentHour() { return currentHour; } /// /// Gets a formatted time string /// /// Returns a formatted string with the hour, minute, and second public string GetTimeString() { string formattedHour = currentHour.ToString("00"); string formattedMinute = currentMinute.ToString("00"); string formattedSecond = currentSecond.ToString("00.00"); return $"{formattedHour}:{formattedMinute}:{formattedSecond}"; } #region Time Save/Load public void SaveTime(ref TimeSaveData data) { data.hour = currentHour; data.minute = currentMinute; data.second = currentSecond; } public void LoadTime(TimeSaveData data) { currentHour = data.hour; currentMinute = data.minute; currentSecond = data.second; } #endregion } [System.Serializable] public struct TimeSaveData { public int hour; public int minute; public float second; }