Firstborn/Assets/Sky/SunLightManager.cs
Schaken-Mods 774d18a99d 5/18/2023 Update
made most of the game Moddable. There is an in editor tool to make the mods and set them all up, and im making an external tool that will show your mods, lets you edit any information and it will pack it up and upload it. currently working on the uploading. Next I will make the game able to download and install. - Fuck Nexus.
2023-05-18 20:28:45 -05:00

158 lines
4.1 KiB
C#

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";
}
}
}
}