Firstborn/Assets/Sky/SunLightManager.cs

158 lines
4.1 KiB
C#
Raw Normal View History

using UnityEngine;
using RPGCreationKit;
using RPGCreationKit.SaveSystem;
namespace RPGCreationKit
{
[ExecuteAlways]
public class SunLightManager : MonoBehaviour
{
public static SunLightManager instance;
private bool Loaded = false;
private float TimeTrigger = 0f;
[Header("References")]
[SerializeField] private Light DirectionalLight;
[SerializeField] public SunLightPreset Preset;
[SerializeField] private Transform StarsSky;
[SerializeField] private Transform Player;
[SerializeField] private LightingSettings InteriorLS;
[SerializeField] private LightingSettings ExteriorLS;
[Header("Time")]
[SerializeField] public int Year = 0;
[SerializeField] public int Month = 1;
[SerializeField] public int Day = 1;
[SerializeField, Range(0, 24)] public float TimeOfDay;
private Material StarsMat;
public bool IsInterior = false;
void Start() {
StarsMat = null;
StarsMat = StarsSky.GetComponent<ParticleSystem>().GetComponent<Renderer>().sharedMaterial;
Year = SaveSystemManager.instance.saveFile.Environment.Year;
Month = SaveSystemManager.instance.saveFile.Environment.Month;
Day = SaveSystemManager.instance.saveFile.Environment.Day;
TimeOfDay = SaveSystemManager.instance.saveFile.Environment.TimeOfDay;
Loaded = true;
}
// Update is called once per frame
void Update() {
if (TimeTrigger > TimeOfDay) { // Should only trigger once a day.
Day += 1;
}
TimeTrigger = TimeOfDay;
if (Day > 28) {
Day = 1;
Month += 1;
}
if (Month > 13) {
Month = 1;
Year += 1;
}
if (Loaded == false) {
return;
}
if (Preset == null) {
return;
}
if (Application.isPlaying) {
TimeOfDay += (Time.deltaTime / 180f);
TimeOfDay %= 24;
float TimePercent = TimeOfDay / 24f;
Color WorldBrightness = Preset.WorldBrightness.Evaluate(TimePercent);
if (IsInterior == false) {
// Setting the Sun
if (DirectionalLight.gameObject.activeSelf == true) {
if (RenderSettings.sun != DirectionalLight) {
RenderSettings.sun = DirectionalLight;
}
}
// Setting the Sun
Color DirectionalTempColor = Preset.DirectionalColor.Evaluate(TimePercent);
DirectionalLight.color = DirectionalTempColor;
RenderSettings.skybox.SetFloat("_Exposure", (DirectionalTempColor.a * 5));
// Setting the Ambiance Lighting
//InteriorLS.indirectScale = WorldBrightness.a * 1.5f;
} else {
//ExteriorLS.indirectScale = WorldBrightness.a * 1.5f;
}
UpdateLighting(TimePercent);
}
}
private void UpdateLighting(float TimePercent) {
RenderSettings.ambientLight = Preset.AmbientColor.Evaluate(TimePercent);
// Fog
Color FogTempColor = Preset.FogColor.Evaluate(TimePercent);
RenderSettings.fogColor = FogTempColor;
RenderSettings.fogDensity = ((FogTempColor.a / 10) * 2);
// Setting the stars
StarsSky.position = Player.position;
Color StarsColor = Preset.StarsVisability.Evaluate(TimePercent);
Color color = StarsMat.color;
color.a = StarsColor.a;
StarsMat.color = color;
// Sun Intensity (Item reflections power)
Color SunTempInt = Preset.SunIntensity.Evaluate(TimePercent);
DirectionalLight.intensity = ((SunTempInt.a) * 1.5f);
if (DirectionalLight != null) {
DirectionalLight.transform.localRotation = Quaternion.Euler(new Vector3((TimePercent * 360f) -90f, 170f, 0f));
StarsSky.localRotation = Quaternion.Euler(new Vector3((TimePercent * 360f) -90f, -100, 40));
}
}
public string GetMonth(int A) { // Ari, Tau, Gen, Can, Le, Ver, Lib, Sco, Sol, Sag, Cap, Aua, Pis.
if (A == 0) {
return "Aries";
} else if (A == 1) {
return "Taurus";
} else if (A == 2) {
return "Gemini";
} else if (A == 3) {
return "Cancer";
} else if (A == 4) {
return "Leo";
} else if (A == 5) {
return "Virgo";
} else if (A == 6) {
return "Libra";
} else if (A == 7) {
return "Scorpio";
} else if (A == 8) {
return "Sol";
} else if (A == 9) {
return "Sagittarius";
} else if (A == 10) {
return "Capricorn";
} else if (A == 11) {
return "Aquarius";
} else {
return "Pisces";
}
}
}
}