Files
JourneyToNowhere_Unity/Assets/Scripts/SingleUtils/LightControl.cs
T
2024-01-31 22:53:00 +08:00

128 lines
3.3 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class TimeController : MonoBehaviour
{
public TMP_Text TODIndicator;
public Slider TODSlider;
public bool UseLocalTime = false;
[HideInInspector]
public GameObject sun;
[HideInInspector]
public Light sunLight;
[Range(0, 24)]
public float timeOfDay = 12;
public float secondsPerMinute = 60;
[HideInInspector]
public float secondsPerHour;
[HideInInspector]
public float secondsPerDay;
// Realistic - 1
// Normal - 2400
public float timeMultiplier = 2400;
public static string PublicFormattedTimeOfDay = "00:00";
[ShowOnly]
public string StringTimeOfDay = "00:00";
public static bool MilitaryTime = false;
public float MinutesBy = 60;
void Start()
{
sun = gameObject;
sunLight = gameObject.GetComponent<Light>();
secondsPerHour = secondsPerMinute * 60;
secondsPerDay = secondsPerHour * 24;
}
// Update is called once per frame
void Update()
{
if (UseLocalTime)
{
timeOfDay = DateTime.Now.Hour + (DateTime.Now.Minute * 0.01f);
SunUpdate();
}
else
{
SunUpdate();
timeOfDay += (Time.deltaTime / secondsPerDay) * timeMultiplier;
if (timeOfDay >= 24)
timeOfDay = 0;
}
StringTimeOfDay = FormatTime(timeOfDay, MilitaryTime);
PublicFormattedTimeOfDay = StringTimeOfDay;
if (TODIndicator)
TODIndicator.text = StringTimeOfDay;
if (TODSlider)
{
TODSlider.onValueChanged.RemoveAllListeners();
TODSlider.onValueChanged.AddListener(delegate { UpdateTime(TODSlider.value); });
}
}
public void UpdateTime(Single ResultTime)
{
if (TODSlider)
timeOfDay = ResultTime;
}
public string FormatTime(float TimeOfDay, bool military = true)
{
TimeSpan timeSpan = TimeSpan.FromHours(TimeOfDay);
string hours = timeSpan.Hours.ToString();
string minutes = timeSpan.Minutes.ToString();
if (minutes == "0")
minutes += "0";
if (timeSpan.Minutes <= 9)
minutes = "0" + timeSpan.Minutes;
if (timeSpan.Hours < 10 && military)
{
if (hours == "0")
hours += "0";
else
hours = "0" + hours;
}
if (!military)
{
var IntHours = int.Parse(hours);
if (IntHours <= 12)
{
if (hours == "0")
hours = "12";
minutes += " AM";
}
else
{
minutes += " PM";
hours = (IntHours - 12).ToString();
}
};
var output = String.Format("{0}:{1}", hours, minutes);
return output;
}
public void SunUpdate()
{
if (TODSlider)
TODSlider.value = timeOfDay;
sun.transform.localRotation = Quaternion.Euler(((timeOfDay / 24) * 360f) - 90, 90, 0);
}
}