initial upload

This commit is contained in:
tom.hempel
2025-09-21 22:42:26 +02:00
commit d03bcd4ba5
6231 changed files with 351582 additions and 0 deletions

View File

@ -0,0 +1,193 @@
using System;
using System.Collections;
using UnityEngine;
namespace Convai.Scripts.Runtime.UI
{
/// <summary>
/// This class is used to control the fade in and fade out animations of a CanvasGroup.
/// </summary>
public class FadeCanvas : MonoBehaviour
{
// Current alpha value of the CanvasGroup
private float _currentAlpha;
// Event called when the Active Fade is completed.
public Action OnCurrentFadeCompleted;
/// <summary>
/// Starts the fade in animation for the given CanvasGroup.
/// </summary>
/// <param name="canvasGroup">The CanvasGroup to fade in.</param>
/// <param name="duration">The duration of the fade in animation.</param>
public void StartFadeIn(CanvasGroup canvasGroup, float duration)
{
StopAllCoroutines();
StartCoroutine(FadeIn(canvasGroup, duration));
}
/// <summary>
/// Starts the fade out animation for the given CanvasGroup.
/// </summary>
/// <param name="canvasGroup">The CanvasGroup to fade out.</param>
/// <param name="duration">The duration of the fade out animation.</param>
public void StartFadeOut(CanvasGroup canvasGroup, float duration)
{
StopAllCoroutines();
StartCoroutine(FadeOut(canvasGroup, duration));
}
/// <summary>
/// Starts a sequence of fade in and fade out animations with a gap in between for the given CanvasGroup.
/// </summary>
/// <param name="canvasGroup">The CanvasGroup to animate.</param>
/// <param name="fadeInDuration">The duration of the fade in animation.</param>
/// <param name="fadeOutDuration">The duration of the fade out animation.</param>
/// <param name="gapDuration">The duration of the gap between the fade in and fade out animations.</param>
public void StartFadeInFadeOutWithGap(CanvasGroup canvasGroup, float fadeInDuration, float fadeOutDuration,
float gapDuration)
{
StopAllCoroutines();
StartCoroutine(FadeInFadeOutWithGap(canvasGroup, fadeInDuration, fadeOutDuration, gapDuration));
}
/// <summary>
/// Starts a sequence of fade out and fade in animations with a gap in between for the given CanvasGroup.
/// </summary>
/// <param name="canvasGroup">The CanvasGroup to animate.</param>
/// <param name="fadeInDuration">The duration of the fade in animation.</param>
/// <param name="fadeOutDuration">The duration of the fade out animation.</param>
/// <param name="gapDuration">The duration of the gap between the fade out and fade in animations.</param>
public void StartFadeOutFadeInWithGap(CanvasGroup canvasGroup, float fadeInDuration, float fadeOutDuration,
float gapDuration)
{
StopAllCoroutines();
StartCoroutine(FadeOutFadeInWithGap(canvasGroup, fadeInDuration, fadeOutDuration, gapDuration));
}
/// <summary>
/// Sets the alpha value of the given CanvasGroup.
/// </summary>
/// <param name="canvasGroup">The CanvasGroup to set the alpha value for.</param>
/// <param name="value">The alpha value to set.</param>
private void SetAlpha(CanvasGroup canvasGroup, float value)
{
_currentAlpha = value;
canvasGroup.alpha = _currentAlpha;
}
/// <summary>
/// Coroutine for the fade in animation.
/// </summary>
/// <param name="canvasGroup">The CanvasGroup to fade in.</param>
/// <param name="duration">The duration of the fade in animation.</param>
private IEnumerator FadeIn(CanvasGroup canvasGroup, float duration)
{
float elapsedTime = 0.0f;
// Gradually increase alpha from 0 to 1
while (_currentAlpha <= 1.0f)
{
SetAlpha(canvasGroup, elapsedTime / duration);
elapsedTime += Time.deltaTime;
yield return null;
}
canvasGroup.blocksRaycasts = true;
OnCurrentFadeCompleted?.Invoke();
}
/// <summary>
/// Coroutine for the fade out animation.
/// </summary>
/// <param name="canvasGroup">The CanvasGroup to fade out.</param>
/// <param name="duration">The duration of the fade out animation.</param>
private IEnumerator FadeOut(CanvasGroup canvasGroup, float duration)
{
float elapsedTime = 0.0f;
// Gradually decrease alpha from 1 to 0
while (_currentAlpha >= 0.0f)
{
SetAlpha(canvasGroup, 1 - elapsedTime / duration);
elapsedTime += Time.deltaTime;
yield return null;
}
canvasGroup.blocksRaycasts = false;
OnCurrentFadeCompleted?.Invoke();
}
/// <summary>
/// Coroutine for a sequence of fade in and fade out animations with a gap in between.
/// </summary>
/// <param name="canvasGroup">The CanvasGroup to animate.</param>
/// <param name="fadeInDuration">The duration of the fade in animation.</param>
/// <param name="fadeOutDuration">The duration of the fade out animation.</param>
/// <param name="gapDuration">The duration of the gap between the fade in and fade out animations.</param>
private IEnumerator FadeInFadeOutWithGap(CanvasGroup canvasGroup, float fadeInDuration, float fadeOutDuration,
float gapDuration)
{
float elapsedTime = 0.0f;
// Gradually increase alpha from 0 to 1
while (_currentAlpha <= 1.0f)
{
SetAlpha(canvasGroup, elapsedTime / fadeInDuration);
elapsedTime += Time.deltaTime;
yield return null;
}
// Pause for a specified gap duration
yield return new WaitForSeconds(gapDuration);
elapsedTime = 0.0f;
// Gradually decrease alpha from 1 to 0
while (_currentAlpha >= 0.0f)
{
SetAlpha(canvasGroup, 1 - elapsedTime / fadeOutDuration);
elapsedTime += Time.deltaTime;
yield return null;
}
OnCurrentFadeCompleted?.Invoke();
}
/// <summary>
/// Coroutine for a sequence of fade out and fade in animations with a gap in between.
/// </summary>
/// <param name="canvasGroup">The CanvasGroup to animate.</param>
/// <param name="fadeInDuration">The duration of the fade in animation.</param>
/// <param name="fadeOutDuration">The duration of the fade out animation.</param>
/// <param name="gapDuration">The duration of the gap between the fade out and fade in animations.</param>
private IEnumerator FadeOutFadeInWithGap(CanvasGroup canvasGroup, float fadeInDuration, float fadeOutDuration,
float gapDuration)
{
float elapsedTime = 0.0f;
// Gradually decrease alpha from 1 to 0
while (_currentAlpha >= 0.0f)
{
SetAlpha(canvasGroup, 1 - elapsedTime / fadeOutDuration);
elapsedTime += Time.deltaTime;
yield return null;
}
// Pause for a specified gap duration
yield return new WaitForSeconds(gapDuration);
elapsedTime = 0.0f;
// Gradually increase alpha from 0 to 1
while (_currentAlpha <= 1.0f)
{
SetAlpha(canvasGroup, elapsedTime / fadeInDuration);
elapsedTime += Time.deltaTime;
yield return null;
}
OnCurrentFadeCompleted?.Invoke();
}
}
}