77 lines
2.0 KiB
C#
77 lines
2.0 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
} |