mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
67 lines
2.3 KiB
C#
67 lines
2.3 KiB
C#
using NewHorizons.Utility.OWML;
|
|
using System;
|
|
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
namespace NewHorizons.Handlers
|
|
{
|
|
/// <summary>
|
|
/// copied from LoadManager.
|
|
/// exists so we can do things after the fade without patching.
|
|
/// </summary>
|
|
public static class FadeHandler
|
|
{
|
|
public static void FadeOut(float length) => Delay.StartCoroutine(FadeOutCoroutine(length));
|
|
|
|
public static void FadeIn(float length) => Delay.StartCoroutine(FadeInCoroutine(length));
|
|
|
|
private static IEnumerator FadeOutCoroutine(float length)
|
|
{
|
|
LoadManager.s_instance._fadeCanvas.enabled = true;
|
|
float startTime = Time.unscaledTime;
|
|
float endTime = Time.unscaledTime + length;
|
|
|
|
while (Time.unscaledTime < endTime)
|
|
{
|
|
var t = Mathf.Clamp01((Time.unscaledTime - startTime) / length);
|
|
LoadManager.s_instance._fadeImage.color = Color.Lerp(Color.clear, Color.black, t);
|
|
AudioListener.volume = 1f - t;
|
|
yield return new WaitForEndOfFrame();
|
|
}
|
|
|
|
LoadManager.s_instance._fadeImage.color = Color.black;
|
|
AudioListener.volume = 0;
|
|
yield return new WaitForEndOfFrame();
|
|
}
|
|
|
|
private static IEnumerator FadeInCoroutine(float length)
|
|
{
|
|
float startTime = Time.unscaledTime;
|
|
float endTime = Time.unscaledTime + length;
|
|
|
|
while (Time.unscaledTime < endTime)
|
|
{
|
|
var t = Mathf.Clamp01((Time.unscaledTime - startTime) / length);
|
|
LoadManager.s_instance._fadeImage.color = Color.Lerp(Color.black, Color.clear, t);
|
|
AudioListener.volume = t;
|
|
yield return new WaitForEndOfFrame();
|
|
}
|
|
|
|
AudioListener.volume = 1;
|
|
LoadManager.s_instance._fadeCanvas.enabled = false;
|
|
LoadManager.s_instance._fadeImage.color = Color.clear;
|
|
|
|
yield return new WaitForEndOfFrame();
|
|
}
|
|
|
|
public static void FadeThen(float length, Action action) => Delay.StartCoroutine(FadeThenCoroutine(length, action));
|
|
|
|
private static IEnumerator FadeThenCoroutine(float length, Action action)
|
|
{
|
|
yield return FadeOutCoroutine(length);
|
|
|
|
action?.Invoke();
|
|
}
|
|
}
|
|
}
|