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();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|