using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UltraCombos.Utility; using System.Linq; using UltraCombos.Utility.Attributes; namespace UltraCombos.Frozen { public enum State { Standby, Day, Night, Night1, Night2, Night3, Night4, Night5, } public enum Form { FullSpace, SingleWall, } public class SceneController : Singleton { public State state = State.Standby; public Form format = Form.FullSpace; public UnityEvent onStart = new UnityEvent(); public UnityEvent onSceneStandby = new UnityEvent(); public UnityEvent onSceneDay = new UnityEvent(); public UnityEvent onSceneNight = new UnityEvent(); [Header("Debug")] [Range(0, 1), ReadOnly] public float rate = 0.0f; float target_rate = 0.0f; [ReadOnly] public List spaceMaterials = new List(); [ReadOnly, SerializeField] List characters; private IEnumerator Start() { characters = FindObjectsOfType().ToList(); switch (state) { case State.Standby: GoStandby(); break; case State.Day: GoDay(); break; case State.Night: GoNight(); break; case State.Night1: GoNight1(); break; case State.Night2: GoNight2(); break; case State.Night3: GoNight3(); break; case State.Night4: GoNight4(); break; case State.Night5: GoNight5(); break; } yield return new WaitForSeconds(1); onStart.Invoke(); } private void Update() { rate = Mathf.Lerp(rate, target_rate, 0.02f); foreach (var mat in spaceMaterials) mat.SetFloat("_Rate", rate); foreach (var chr in characters) chr.Active = chr.appearSataes.List.Contains(state); } public void GoStandby() { state = State.Standby; target_rate = 0.0f; onSceneStandby.Invoke(); } public void GoDay() { state = State.Day; target_rate = 0.0f; onSceneDay.Invoke(); } public void GoNight() { state = State.Night; target_rate = 1.0f; onSceneNight.Invoke(); } public void GoNight1() { state = State.Night1; target_rate = 1.0f; } public void GoNight2() { state = State.Night2; target_rate = 1.0f; } public void GoNight3() { state = State.Night3; target_rate = 1.0f; } public void GoNight4() { state = State.Night4; target_rate = 1.0f; } public void GoNight5() { state = State.Night5; target_rate = 1.0f; } } }