2022-08-07 01:28:49 +03:00
|
|
|
using System.Collections;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using UnityEngine.Events;
|
|
|
|
|
using UnityEngine.UI;
|
|
|
|
|
|
|
|
|
|
public class FadeHandler : MonoBehaviour
|
|
|
|
|
{
|
2022-11-13 16:31:43 +02:00
|
|
|
[Header("Components")]
|
|
|
|
|
[SerializeField] private Image _fadeImage = default;
|
|
|
|
|
[Header("Fading")]
|
|
|
|
|
[Range(0f, 5f)]
|
|
|
|
|
[SerializeField] private float _fadeDuration = 1.2f;
|
|
|
|
|
[Range(0f, 5f)]
|
|
|
|
|
private Coroutine _fadeTransitionCoroutine;
|
2023-08-28 02:38:39 +03:00
|
|
|
[SerializeField] private bool _fadeOnStart = true;
|
2022-11-13 16:31:43 +02:00
|
|
|
[HideInInspector] public UnityEvent onFadeEnd;
|
2022-08-07 01:28:49 +03:00
|
|
|
|
2022-11-13 16:31:43 +02:00
|
|
|
void Awake()
|
|
|
|
|
{
|
2023-08-28 02:38:39 +03:00
|
|
|
if (_fadeOnStart)
|
|
|
|
|
StartFadeTransition(false, 1.0f);
|
2022-11-13 16:31:43 +02:00
|
|
|
}
|
2022-08-07 01:28:49 +03:00
|
|
|
|
2022-11-13 16:31:43 +02:00
|
|
|
public void StartFadeTransition(bool fadeOut, float duration = default)
|
|
|
|
|
{
|
|
|
|
|
if (duration == 0)
|
|
|
|
|
duration = _fadeDuration;
|
|
|
|
|
if (_fadeTransitionCoroutine != null)
|
|
|
|
|
StopCoroutine(_fadeTransitionCoroutine);
|
|
|
|
|
_fadeTransitionCoroutine = StartCoroutine(FadeTransitionCoroutine(fadeOut, duration));
|
|
|
|
|
}
|
2022-08-07 01:28:49 +03:00
|
|
|
|
2022-11-13 16:31:43 +02:00
|
|
|
IEnumerator FadeTransitionCoroutine(bool fadeOut, float duration)
|
|
|
|
|
{
|
|
|
|
|
int fromAlpha = fadeOut ? 0 : 1;
|
|
|
|
|
int toAlpha = fadeOut ? 1 : 0;
|
|
|
|
|
_fadeImage.color = new Color(0, 0, 0, fromAlpha);
|
|
|
|
|
float elapsedTime = 0.0f;
|
|
|
|
|
float waitTime = duration;
|
|
|
|
|
//yield return new WaitForSecondsRealtime(0.2f);
|
|
|
|
|
while (elapsedTime < waitTime)
|
|
|
|
|
{
|
|
|
|
|
float fade = Mathf.Lerp(fromAlpha, toAlpha, elapsedTime / waitTime);
|
|
|
|
|
_fadeImage.color = new Color(0, 0, 0, fade);
|
|
|
|
|
elapsedTime += Time.unscaledDeltaTime;
|
|
|
|
|
yield return null;
|
|
|
|
|
}
|
|
|
|
|
_fadeImage.color = new Color(0, 0, 0, toAlpha);
|
|
|
|
|
_fadeImage.raycastTarget = false;
|
|
|
|
|
onFadeEnd?.Invoke();
|
|
|
|
|
onFadeEnd.RemoveAllListeners();
|
|
|
|
|
}
|
2022-08-07 01:28:49 +03:00
|
|
|
}
|