145 lines
4.9 KiB
C#
145 lines
4.9 KiB
C#
// Distant Lands 2024
|
|
// COZY: Stylized Weather 3
|
|
// All code included in this file is protected under the Unity Asset Store Eula
|
|
|
|
using System;
|
|
using UnityEngine;
|
|
#if UNITY_EDITOR
|
|
using UnityEditor;
|
|
#endif
|
|
|
|
namespace DistantLands.Cozy
|
|
{
|
|
public class SystemTimeModule : CozyTimeModule
|
|
{
|
|
|
|
[MeridiemTimeAttriute]
|
|
[SerializeField]
|
|
private float m_SystemTime = 0.5f;
|
|
[SerializeField]
|
|
private bool pauseTime;
|
|
[Tooltip("How many times should the COZY day complete per real world day.")]
|
|
public float timeMultiplier = 1;
|
|
[Tooltip("How many times should the COZY year complete per real world year.")]
|
|
public float dateMultiplier = 1;
|
|
|
|
public enum TimeGatherMode { Local, UTC }
|
|
|
|
public TimeGatherMode timeGatherMode;
|
|
[Tooltip("Adds an offset to the gathered time in hours.")]
|
|
public float hourOffset;
|
|
|
|
internal override bool CheckIfModuleCanBeAdded(out string warning)
|
|
{
|
|
if (weatherSphere.moduleHolder.GetComponents<CozyTimeModule>().Length != 1)
|
|
{
|
|
warning = "Time Module";
|
|
return false;
|
|
}
|
|
warning = "";
|
|
return true;
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
if (weatherSphere.timeModule == null)
|
|
weatherSphere.timeModule = this;
|
|
|
|
if (!pauseTime)
|
|
{
|
|
if (timeGatherMode == TimeGatherMode.Local)
|
|
{
|
|
m_SystemTime = (hourOffset * 3600000 + (float)DateTime.Now.TimeOfDay.TotalMilliseconds) * timeMultiplier / 86400000 % 1;
|
|
yearPercentage = (float)DateTime.Now.DayOfYear / 365 * dateMultiplier % 1;
|
|
}
|
|
else
|
|
{
|
|
m_SystemTime = (hourOffset * 3600000 + (float)DateTime.UtcNow.TimeOfDay.TotalMilliseconds) * timeMultiplier / 86400000 % 1;
|
|
yearPercentage = (float)DateTime.UtcNow.DayOfYear / 365 * dateMultiplier % 1;
|
|
}
|
|
currentTime = m_SystemTime;
|
|
modifiedDayPercentage = transit ? transit.ModifyDayPercentage(m_SystemTime) / 360 : m_SystemTime;
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
public new float modifiedTimeSpeed
|
|
{
|
|
get
|
|
{
|
|
return timeMultiplier / 86400;
|
|
}
|
|
}
|
|
}
|
|
#if UNITY_EDITOR
|
|
[CustomEditor(typeof(SystemTimeModule))]
|
|
[CanEditMultipleObjects]
|
|
public class E_SystemTimeModule : E_CozyModule
|
|
{
|
|
|
|
SerializedProperty currentTimePercent;
|
|
SerializedProperty timeMultiplier;
|
|
SerializedProperty dateMultiplier;
|
|
SerializedProperty pauseTime;
|
|
SerializedProperty offset;
|
|
SerializedProperty timeGatherMode;
|
|
public static bool isSelectionWindowOpen;
|
|
public static bool isCurrentSettingsWindowOpen;
|
|
public static bool isLengthWindowOpen;
|
|
public static bool isMovementWindowOpen;
|
|
SystemTimeModule timeModule;
|
|
|
|
public override GUIContent GetGUIContent()
|
|
{
|
|
|
|
//Place your module's GUI content here.
|
|
return new GUIContent(" System Time", (Texture)Resources.Load("CozySystemTime"), "Link your in-game time to the real world time.");
|
|
|
|
}
|
|
|
|
public override void OpenDocumentationURL()
|
|
{
|
|
Application.OpenURL("https://distant-lands.gitbook.io/cozy-stylized-weather-documentation/how-it-works/modules/system-time-module");
|
|
}
|
|
public override void GetReportsInformation()
|
|
{
|
|
|
|
EditorGUILayout.LabelField(GetGUIContent(), EditorStyles.toolbar);
|
|
EditorGUILayout.HelpBox("Currently it is " + timeModule.currentTime.ToString() + " on " + timeModule.MonthTitle(timeModule.GetCurrentYearPercentage()) + ".", MessageType.None, true);
|
|
|
|
}
|
|
|
|
void OnEnable()
|
|
{
|
|
timeModule = (SystemTimeModule)target;
|
|
currentTimePercent = serializedObject.FindProperty("m_SystemTime");
|
|
timeMultiplier = serializedObject.FindProperty("timeMultiplier");
|
|
dateMultiplier = serializedObject.FindProperty("dateMultiplier");
|
|
timeGatherMode = serializedObject.FindProperty("timeGatherMode");
|
|
offset = serializedObject.FindProperty("hourOffset");
|
|
pauseTime = serializedObject.FindProperty("pauseTime");
|
|
|
|
}
|
|
|
|
public override void DisplayInCozyWindow()
|
|
{
|
|
EditorGUI.indentLevel = 0;
|
|
serializedObject.Update();
|
|
|
|
EditorGUILayout.PropertyField(currentTimePercent);
|
|
EditorGUILayout.PropertyField(pauseTime);
|
|
EditorGUILayout.Space();
|
|
EditorGUILayout.PropertyField(timeGatherMode);
|
|
EditorGUILayout.PropertyField(offset);
|
|
EditorGUILayout.PropertyField(timeMultiplier);
|
|
EditorGUILayout.PropertyField(dateMultiplier);
|
|
|
|
serializedObject.ApplyModifiedProperties();
|
|
|
|
}
|
|
|
|
}
|
|
#endif
|
|
} |