Files
2024-09-22 21:45:37 +02:00

86 lines
1.9 KiBLFS
C#

using System;
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
public class Fader : MonoBehaviour
{
private CanvasGroup canvasGroup;
[SerializeField] private float fadeDuration = 1f;
[SerializeField] private bool isFullBlack = false;
private bool isFading = false;
public static Fader instance => CanvasManager.singleton.fader;
void Start()
{
canvasGroup = GetComponent<CanvasGroup>();
StartCoroutine(FadeIn());
}
public void SetFullBlack()
{
isFullBlack = true;
canvasGroup.alpha = 1;
}
public void SetTransparent()
{
isFullBlack = false;
canvasGroup.alpha = 0;
}
// from black to transparent
public static IEnumerator FadeIn()
{
instance.isFading = true;
instance.SetFullBlack();
float t = 0;
while (t < instance.fadeDuration)
{
t += Time.deltaTime;
instance.canvasGroup.alpha = 1 - t / instance.fadeDuration;
yield return null;
}
instance.isFading = false;
instance.SetTransparent();
}
// from transparent to black
public static IEnumerator FadeOut()
{
instance.isFading = true;
instance.SetTransparent();
float t = 0;
while (t < instance.fadeDuration)
{
t += Time.deltaTime;
instance.canvasGroup.alpha = t / instance.fadeDuration;
yield return null;
}
instance.isFading = false;
instance.SetFullBlack();
}
public static void Fade(Action fullBlackCallBack, Action endFadeOutCallBack = null, bool fadeOut = true)
{
instance.StartCoroutine(FadeCoroutine(fullBlackCallBack, endFadeOutCallBack, fadeOut));
}
private static IEnumerator FadeCoroutine(Action fullBlackCallBack, Action endFadeOutCallBack = null, bool fadeOut = true)
{
yield return FadeOut();
fullBlackCallBack.Invoke();
if (fadeOut)
{
yield return FadeIn();
endFadeOutCallBack?.Invoke();
}
}
}