|
|
|
|
|
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<SceneController>
|
|
|
|
|
|
{
|
|
|
|
|
|
public State state = State.Standby;
|
|
|
|
|
|
public float standbyTime = 10.0f;
|
|
|
|
|
|
|
|
|
|
|
|
[Range(0, 1)]
|
|
|
|
|
|
public float rate = 0.0f;
|
|
|
|
|
|
|
|
|
|
|
|
// [SerializeField]
|
|
|
|
|
|
// UniformBlendedStructuredBuffer uniform;
|
|
|
|
|
|
|
|
|
|
|
|
//[SerializeField]
|
|
|
|
|
|
public List<Material> spaceMaterials = new List<Material>();
|
|
|
|
|
|
|
|
|
|
|
|
[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<CharacterBehaviour> 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<CharacterBehaviour>();
|
|
|
|
|
|
characters = new List<CharacterBehaviour>(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)
|
|
|
|
|
|
{
|
|
|
|
|
|
return Input.GetKeyDown(key);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|