using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UltraCombos.Utility; namespace UltraCombos.Frozen { public enum State { Standby, Day, Night, } public class SceneController : Singleton { public State state = State.Standby; public float standbyTime = 10.0f; [Range(0, 1)] public float rate = 0.0f; public List spaceMaterials = new List(); [SerializeField, Range(0.0f, 0.1f)] float daySnowSize = 0.01f; [SerializeField, Range(0.0f, 0.1f)] float nightSnowSize = 0.01f; [SerializeField] Material snowMaterial; List characters; float target_rate = 0.0f; public UnityEvent onSceneStandby = new UnityEvent(); public UnityEvent onSceneDay = new UnityEvent(); public UnityEvent onSceneNight = new UnityEvent(); [SerializeField, Header("Debug")] float stamp = 0.0f; private void Start() { var cbs = FindObjectsOfType(); characters = new List(cbs); } private void Update() { if (standbyTime > 0.0f) { if (state == State.Standby) { if (Time.time - stamp > standbyTime) { stamp = Time.time; GoDay(); } } } if (state == State.Standby) { target_rate = 0.0f; } else if (state == State.Day) { target_rate = 0.0f; } else if (state == State.Night) { target_rate = 1.0f; } rate = Mathf.Lerp(rate, target_rate, 0.02f); foreach (var mat in spaceMaterials) mat.SetFloat("_Rate", rate); snowMaterial.SetFloat("_Size", Mathf.Lerp(daySnowSize, nightSnowSize, rate)); foreach (var chr in characters) { chr.Active = chr.appearSataes.List.Contains(state); } } public void GoStandby() { state = State.Standby; onSceneStandby.Invoke(); stamp = Time.time; } public void GoDay() { state = State.Day; onSceneDay.Invoke(); } public void GoNight() { state = State.Night; onSceneNight.Invoke(); } } }