Files
grow-ai-unity/Assets/Scripts/Managers/TimeManager.cs
j.mei7 2e92ba6ea4 a
2022-03-16 18:16:19 +01:00

103 lines
2.8 KiB
C#

using System;
using System.Globalization;
using System.Collections.Generic;
using UnityEngine;
public class TimeManager : MonoBehaviour
{
public static Action OnTimeUpdate;
public static Action OnSecondUpdate;
public static Action OnMinuteUpdate;
public static Action OnHourUpdate;
public static Action OnDayUpdate;
public static Action OnMonthUpdate;
public static Action OnYearUpdate;
public static TimeManager instance;
public enum PartOfDay
{
MORNING,
AFTERNOON,
EVENING,
NIGHT
}
public PartOfDay partOfDay;
[SerializeField]
float intervalTime = 1.0f; // 1.0f -> 1 real second is 1 ingame minute
int minutesPerInterval = 1;
public CultureInfo cultureInfo = new CultureInfo("en-us");
DateTime dateTime = new DateTime(1, 1, 1, 23, 0, 0);
DateTime prevDateTime;
float timer;
public DateTime GetDateTime() => dateTime;
public string GetTime() => dateTime.ToString("hh:mm tt", cultureInfo);
public string GetDate() => dateTime.ToString("dd/MM/yyyy", cultureInfo);
public float GetintervalTime() => intervalTime;
[Header("ReadOnly")]
[SerializeField]
string readOnlyTimeString;
private void Awake()
{
if (instance == null)
instance = this;
}
void Start()
{
timer = intervalTime;
prevDateTime = dateTime;
}
void Update()
{
timer -= Time.deltaTime;
if (timer <= 0)
{
prevDateTime = dateTime;
dateTime = dateTime.AddMinutes(minutesPerInterval);
CheckPartsOfDay();
timer = intervalTime;
readOnlyTimeString = GetTime() + " " + GetDate();
if (prevDateTime.Second != dateTime.Second)
OnSecondUpdate?.Invoke();
if (prevDateTime.Minute != dateTime.Minute)
OnMinuteUpdate?.Invoke();
if (prevDateTime.Hour != dateTime.Hour)
OnHourUpdate?.Invoke();
if (prevDateTime.Day != dateTime.Day)
OnDayUpdate?.Invoke();
if (prevDateTime.Month != dateTime.Month)
OnMonthUpdate?.Invoke();
if (dateTime.Year != dateTime.Year)
OnYearUpdate?.Invoke();
OnTimeUpdate?.Invoke();
}
}
void CheckPartsOfDay()
{
if (dateTime.Hour >= 22)
partOfDay = PartOfDay.NIGHT;
else if (dateTime.Hour < 6)
partOfDay = PartOfDay.NIGHT;
else if (dateTime.Hour >= 6 && dateTime.Hour < 12)
partOfDay = PartOfDay.MORNING;
else if (dateTime.Hour >= 12 && dateTime.Hour < 17)
partOfDay = PartOfDay.AFTERNOON;
else if (dateTime.Hour >= 17 && dateTime.Hour < 22)
partOfDay = PartOfDay.EVENING;
}
}