using System; using UnityEngine; namespace Artngame.SKYMASTER { public class TimerSKYMASTER : MonoBehaviour { private SkyMasterManager skyManager; public bool realWorldTime; public bool staticReference; public bool startWithRealTime; public int startYear = 2016; public int startMonth = 6; public int startDay = 6; public int startHour = 12; public int currentYear = 2016; public int currentMonth = 6; public int currentDay = 6; private float shiftTime; public bool enableGUI; private float previousTime; private DateTime startGameTime; private DateTime startRealTime; private DateTime currentGameTime; private DateTime currentRealTime; private bool startedWithRealTime; [Tooltip("Game hours that correspond to one real world hour")] public float timeScaling = 10f; private void Start() { skyManager = GetComponent(); float num = DateTime.Now.Hour * 3600; float num2 = DateTime.Now.Minute * 60; float num3 = DateTime.Now.Second; float num4 = DateTime.Now.Millisecond; float num5 = num + num2 + num3 + num4 / 1000f; shiftTime = num5; skyManager.Current_Time = startHour; previousTime = skyManager.Current_Time; startGameTime = new DateTime(startYear, startMonth, startDay, startHour, 0, 0); startRealTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond); } private void Update() { if (!startedWithRealTime && startWithRealTime) { startGameTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond); startedWithRealTime = true; } float num = DateTime.Now.Hour * 3600; float num2 = DateTime.Now.Minute * 60; float num3 = DateTime.Now.Second; float num4 = DateTime.Now.Millisecond; float num5 = num + num2 + num3 + num4 / 1000f; if (realWorldTime) { skyManager.Auto_Cycle_Sky = true; skyManager.SPEED = 0.0001f * timeScaling; float num6 = num5 / (3600f / timeScaling); skyManager.Current_Time = num6 % 24f; currentGameTime = DateTime.Now; } else { skyManager.Auto_Cycle_Sky = true; skyManager.SPEED = 0.0001f * timeScaling; if (!staticReference) { float num7 = (num5 - shiftTime) / (3600f / timeScaling); skyManager.Current_Time = (skyManager.Current_Time + num7) % 24f; shiftTime = num5; } else { currentRealTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond); float num8 = (float)(currentRealTime - startRealTime).TotalSeconds; currentGameTime = startGameTime; currentGameTime = currentGameTime.AddSeconds(num8); float num9 = currentGameTime.Hour * 3600; float num10 = currentGameTime.Minute * 60; float num11 = currentGameTime.Second; float num12 = currentGameTime.Millisecond; float num13 = (num9 + num10 + num11 + num12 / 1000f) / (3600f / timeScaling); skyManager.Current_Time = num13 % 24f; } } if (skyManager.Current_Time < previousTime) { currentDay++; } currentMonth = currentDay / 30 % 12; currentYear = currentDay / 30 / 12; previousTime = skyManager.Current_Time; } private void OnGUI() { if (enableGUI) { GUI.TextField(new Rect(500f, 400f, 400f, 22f), "Game Date =" + currentGameTime.ToLongDateString()); GUI.TextField(new Rect(500f, 422f, 400f, 22f), "Game Time =" + currentGameTime.ToLongTimeString()); GUI.TextField(new Rect(500f, 444f, 400f, 22f), "Sky Master Day Time =" + skyManager.Current_Time); GUI.TextField(new Rect(500f, 466f, 400f, 22f), "Sky Master Day = " + (1 + currentDay % 30) + ", Month: " + (currentMonth + 1) + ", Year:" + (currentYear + 1)); } } } }