TapLogin-Unity/Standalone/Runtime/Internal/UIAnimator.cs

77 lines
2.0 KiB
C#
Raw Normal View History

2023-10-24 11:53:04 +08:00
using System;
using System.Collections;
using UnityEngine;
namespace TapTap.Login.Internal
{
[DisallowMultipleComponent]
internal class UIAnimator : MonoBehaviour
{
public delegate void Action();
// ReSharper disable Unity.PerformanceAnalysis
public void DoExitAnimation(UIElement exit, UIElement resume, Action onAnimationEnd = null)
{
float exitDuration = 0, resumeDuration = 0;
if (exit != null)
{
exitDuration = exit.DoExitAnimation();
}
if (resume != null)
{
resumeDuration = resume.DoResumeAnimation();
}
BlockForSecond(Math.Max(exitDuration, resumeDuration) + 0.1f, onAnimationEnd);
}
public void DoEnterAnimation(UIElement pause, UIElement enter, Action onAnimationEnd = null)
{
float pauseDuration = 0, enterDuration = 0;
if (pause != null)
{
pauseDuration = pause.DoPauseAnimation();
}
if (enter != null)
{
enterDuration = enter.DoEnterAnimation();
}
BlockForSecond(Math.Max(pauseDuration, enterDuration) + 0.1f, onAnimationEnd);
}
private void BlockForSecond(float duration, Action callback = null)
{
if (duration > 0)
{
StartCoroutine(BlockCoroutine(duration, () =>
{
if (callback != null)
{
callback();
}
}));
}
else
{
if (callback != null)
{
callback();
}
}
}
private IEnumerator BlockCoroutine(float blockDuration, Action onBlockEnd = null)
{
yield return new WaitForSeconds(blockDuration);
if (onBlockEnd != null)
{
onBlockEnd();
}
}
}
}