You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
3.4 KiB

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<SceneController>
{
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<Material> spaceMaterials = new List<Material>();
[ReadOnly, SerializeField]
List<CharacterBehaviour> characters;
private IEnumerator Start()
{
characters = FindObjectsOfType<CharacterBehaviour>().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;
}
}
}