using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; namespace UltraCombos.Frozen { public enum State { Standby, Day, Night, } public class SceneController : Singleton { [SerializeField] GlobalMKHookInput inputModule; public State state = State.Standby; public float standbyTime = 10.0f; [Range(0, 1)] public float rate = 0.0f; [SerializeField] UniformBlendedStructuredBuffer uniform; //[SerializeField] 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; [SerializeField] BlendedCosineGradient cosineGradient; // [SerializeField] // KinectOpticalFlow kinect; [SerializeField] float nightKinectAmount = 30.0f; [SerializeField] ParticleViewerProcedural particleViewer; [SerializeField, Range(0, 1)] float dayParticleRate = 1.0f; 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")] bool mode = false; float stamp = 0.0f; private void Start() { var cbs = FindObjectsOfType(); characters = new List(cbs); //debug = false; } 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; if (GetKeyDown(KeyCode.DownArrow)) { GoDay(); } } else if (state == State.Day) { target_rate = 0.0f; if (GetKeyDown(KeyCode.UpArrow)) { GoStandby(); } else if (GetKeyDown(KeyCode.DownArrow)) { GoNight(); } } else if (state == State.Night) { target_rate = 1.0f; if (GetKeyDown(KeyCode.UpArrow)) { GoStandby(); } else if (GetKeyDown(KeyCode.DownArrow)) { GoStandby(); } } rate = Mathf.Lerp(rate, target_rate, 0.02f); // uniform.rate = rate; foreach (var mat in spaceMaterials) mat.SetFloat("_Rate", rate); //snowMaterial.SetFloat("_Size", Mathf.Lerp(0.0f, snowSize, rate)); snowMaterial.SetFloat("_Size", Mathf.Lerp(daySnowSize, nightSnowSize, rate)); // cosineGradient.rate = rate; // kinect.kinectAmount = Mathf.Lerp(1.0f, nightKinectAmount, rate); // particleViewer.VertexCount = (int)(Mathf.Lerp(dayParticleRate, 1.0f, rate) * particleViewer.buffer.count); foreach (var chr in characters) { chr.Active = chr.appearSataes.Contains(state); } } private bool GetKeyDown(KeyCode key) { if (Application.isFocused) { return Input.GetKeyDown(key); } else { return inputModule.GetButtonDown(key.ToString()); } } 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(); } } }