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

186 lines
6.2 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace TapTap.Login.Internal
{
internal class UIElement : UIBase
{
protected Dictionary<string, object> extra = null;
public event Action<int, object> Callback;
protected bool animationLaunched = false;
protected float transitionDurationTime = 0.2f;
private static readonly int animType = 0;
public virtual Dictionary<string, object> Extra
{
get
{
return extra;
}
set
{
extra = value;
}
}
public UIManager Manager { set; private get; }
public void ClearCallback()
{
Callback = null;
}
protected virtual void OnCallback(int code, object data)
{
if (Callback != null)
{
Callback(code, data);
}
}
protected UIManager GetUIManager()
{
return Manager;
}
protected internal virtual float DoPauseAnimation()
{
return 0f;
}
protected internal virtual float DoResumeAnimation()
{
return 0f;
}
protected internal virtual float DoExitAnimation()
{
StartCoroutine(PlayExit());
return transitionDurationTime;
}
protected internal virtual float DoEnterAnimation()
{
StartCoroutine(PlayEnter());
return transitionDurationTime;
}
// ReSharper disable Unity.PerformanceAnalysis
public virtual IEnumerator PlayExit()
{
if (animType == 0)
{
if (!animationLaunched)
{
animationLaunched = true;
float startTime = Time.time;
float endTime = startTime + transitionDurationTime;
CanvasGroup canvasGroup = UIOperation.GetComponent<CanvasGroup>(gameObject);
canvasGroup.alpha = 1f;
while (Time.time < endTime)
{
yield return new WaitForEndOfFrame();
float delta = (Time.time - startTime) / transitionDurationTime;
canvasGroup.alpha = 1 - delta;
}
}
animationLaunched = false;
yield return null;
}
else
{
if (!animationLaunched)
{
animationLaunched = true;
float startTime = Time.time;
float endTime = startTime + transitionDurationTime;
RectTransform rectTransform = transform.GetComponent<RectTransform>();
float targetX = rectTransform.position.x + Screen.width / 2 + rectTransform.rect.width / 2 + 200;
Vector3 startV3 = new Vector3(
rectTransform.position.x,
rectTransform.position.y,
rectTransform.position.z
);
rectTransform.position = startV3;
while (Time.time < endTime)
{
yield return new WaitForEndOfFrame();
float delta = (Time.time - startTime) / transitionDurationTime;
Vector3 currentV3 = new Vector3(
rectTransform.position.x + (targetX - rectTransform.position.x) * delta,
rectTransform.position.y,
rectTransform.position.z
);
rectTransform.position = currentV3;
}
}
animationLaunched = false;
yield return null;
}
}
public virtual IEnumerator PlayEnter()
{
if (animType == 0)
{
if (!animationLaunched)
{
animationLaunched = true;
float startTime = Time.time;
float endTime = startTime + transitionDurationTime;
CanvasGroup canvasGroup = UIOperation.GetComponent<CanvasGroup>(gameObject);
canvasGroup.alpha = 0f;
while (Time.time < endTime)
{
yield return new WaitForEndOfFrame();
float delta = (Time.time - startTime) / transitionDurationTime;
canvasGroup.alpha = delta;
}
}
animationLaunched = false;
yield return null;
}
else
{
if (!animationLaunched)
{
animationLaunched = true;
float startTime = Time.time;
float endTime = startTime + transitionDurationTime;
RectTransform rectTransform = transform.GetComponent<RectTransform>();
float targetX = rectTransform.position.x;
Vector3 startV3 = new Vector3(
rectTransform.position.x + Screen.width / 2 + rectTransform.rect.width / 2 + 200,
rectTransform.position.y,
rectTransform.position.z
);
rectTransform.position = startV3;
while (Time.time < endTime)
{
yield return new WaitForEndOfFrame();
float delta = (Time.time - startTime) / transitionDurationTime;
Vector3 currentV3 = new Vector3(
rectTransform.position.x + (targetX - rectTransform.position.x) * delta,
rectTransform.position.y,
rectTransform.position.z
);
rectTransform.position = currentV3;
}
}
animationLaunched = false;
yield return null;
}
}
}
}