Files
SimUL/Assets/Scripts/TimeManager.cs
T
2023-02-28 23:41:38 +02:00

90 lines
2.5 KiB
C#

using System;
using UnityEngine;
public class TimeManager : MonoBehaviour
{
public static Action OnMinuteChanged;
[SerializeField]
private float _startHour;
//[SerializeField]
//private Light _sunLight;
[SerializeField]
private float _sunriseHour;
[SerializeField]
private float _sunsetHour;
private TimeSpan _sunriseTime;
private TimeSpan _sunsetTime;
private float _timer;
private float _sunInitialIntensity;
[SerializeField]
private float _minuteToRealTime = 0.05f;
private static TimeSpan _currentTime;
public static TimeSpan CurrentTime => _currentTime;
// Start is called before the first frame update
void Start()
{
// _sunInitialIntensity = _sunLight.intensity;
_timer = _minuteToRealTime;
_currentTime = TimeSpan.Zero + TimeSpan.FromHours(_startHour);
_sunriseTime = TimeSpan.FromHours(_sunriseHour);
_sunsetTime = TimeSpan.FromHours(_sunsetHour);
}
// Update is called once per frame
void Update()
{
UpdateTime();
RotateSun();
}
private void UpdateTime()
{
_timer -= Time.deltaTime;
if (_timer <= 0)
{
_currentTime = _currentTime.Add(TimeSpan.FromMinutes(1));
OnMinuteChanged?.Invoke();
_timer = _minuteToRealTime;
}
}
private void RotateSun()
{
float intensityMultiplier = 1;
float timeofDay = (float)(CurrentTime.TotalDays - CurrentTime.Days);
//_sunLight.transform.localRotation = Quaternion.Euler((timeofDay * 360f) - 90, 170, 0);
if (timeofDay > _sunriseTime.TotalDays && timeofDay < _sunsetTime.TotalDays)
{
if (timeofDay <= _sunsetTime.TotalDays)
intensityMultiplier = Mathf.Clamp01((timeofDay - ((float)_sunsetTime.TotalDays - 0.02f)) * (1 / 0.02f));
if (timeofDay >= _sunriseTime.TotalDays)
intensityMultiplier = Mathf.Clamp01(1 - (timeofDay - ((float)_sunriseTime.TotalDays - 0.02f) * (1 / 0.02f)));
}
else
{
intensityMultiplier = 0;
}
// _sunLight.intensity = _sunInitialIntensity * intensityMultiplier;
}
private TimeSpan CalculateTimeDifference(TimeSpan from, TimeSpan to)
{
TimeSpan diff = to - from;
if (diff.TotalSeconds < 0)
{
diff += TimeSpan.FromHours(24);
}
return diff;
}
}