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, } public enum Form { FullSpace, SingleWall, } public class SceneController : Singleton { public State state = State.Standby; public Form format = Form.FullSpace; public float standbyTime = 10.0f; public UnityEvent onSceneStandby = new UnityEvent(); public UnityEvent onSceneDay = new UnityEvent(); public UnityEvent onSceneNight = new UnityEvent(); [Header("Debug")] [SerializeField] float stamp = 0.0f; [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 void Start() { characters = FindObjectsOfType().ToList(); } private void Update() { if (standbyTime > 0.0f) { if (state == State.Standby) { if (Time.time - stamp > standbyTime) { stamp = Time.time; GoDay(); } } } if (state == State.Standby || 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); 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(); } } }