Files
fatal-exception/Assets/Scripts/LogoIntroCutscene.cs
2020-01-30 21:25:07 -05:00

94 lines
2.7 KiB
C#

using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;
public class LogoIntroCutscene : Cutscene
{
[SerializeField]
GameObject logoCubic = null;
[SerializeField]
GameObject logoFull = null;
[SerializeField]
SpriteRenderer logoFullRenderer = null;
protected override void OnSceneStart()
{
logoFull.SetActive(false);
}
protected override IEnumerator OnScenePlay()
{
yield return RotateCube();
yield return new WaitForSeconds(.2f);
yield return FadeInLogo();
yield return new WaitForSeconds(1.1f);
yield return FadeOutLogo();
yield return new WaitForSeconds(.2f);
}
protected override void OnSceneEnd()
{
var nextIndex = SceneManager.GetActiveScene().buildIndex + 1;
if (SceneManager.sceneCountInBuildSettings > nextIndex)
SceneManager.LoadScene(nextIndex);
}
IEnumerator RotateCube()
{
const int maxTicks = 120;
var scale = logoCubic.transform.localScale;
var angle = logoCubic.transform.eulerAngles;
for (int i = 0; i <= maxTicks; i++)
{
var scaleTime = Easing.SineOut(Mathf.Clamp(1f * i / (maxTicks * .5f), 0f, 1f));
var rotTime = Easing.SineOut(1f * i / maxTicks);
var scaleLerp = new Vector3(
Mathf.Lerp(0f, scale.x, scaleTime),
Mathf.Lerp(0f, scale.y, scaleTime),
Mathf.Lerp(0f, scale.z, scaleTime));
var angleLerp = new Vector3(
Mathf.Lerp(angle.x, angle.x + 360f, rotTime),
Mathf.Lerp(angle.y, angle.y + 360f, rotTime),
Mathf.Lerp(angle.z, angle.z + 360f, rotTime));
logoCubic.transform.localScale = scaleLerp;
logoCubic.transform.eulerAngles = angleLerp;
yield return null;
}
}
IEnumerator FadeInLogo()
{
const int maxTicks = 45;
var clearWhite = new Color(1f, 1f, 1f, 0f);
logoFull.SetActive(true);
for (int i = 0; i <= maxTicks; i++)
{
var percent = Easing.SineIn(1f * i / maxTicks);
logoFullRenderer.color = Color.Lerp(clearWhite, Color.white, percent);
yield return null;
}
}
IEnumerator FadeOutLogo()
{
const int maxTicks = 45;
var clearWhite = new Color(1f, 1f, 1f, 0f);
logoCubic.SetActive(false);
for (int i = 0; i <= maxTicks; i++)
{
var percent = Easing.SineOut(1f * i / maxTicks);
logoFullRenderer.color = Color.Lerp(Color.white, clearWhite, percent);
yield return null;
}
}
}