191 lines
6.0 KiB
C#
191 lines
6.0 KiB
C#
|
||
|
||
using Thousandto.Core.Base;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
|
||
namespace Thousandto.Plugins.Common
|
||
{
|
||
//UI动画管理器
|
||
public class UIAnimationManager
|
||
{
|
||
#region//常量
|
||
//默认动画曲线
|
||
public static AnimationCurve NormalCurve = null;
|
||
#endregion
|
||
|
||
#region//私有变量
|
||
//正在播放的动画列表
|
||
private static List<UIAnimationTrans> _showList = new List<UIAnimationTrans>();
|
||
private static List<UIAnimationTrans> _hideList = new List<UIAnimationTrans>();
|
||
#endregion
|
||
|
||
#region//构造函数
|
||
static UIAnimationManager()
|
||
{
|
||
NormalCurve = new AnimationCurve();
|
||
var key = new Keyframe();
|
||
key.time = 0f;
|
||
key.value = 0f;
|
||
key.inTangent = 2.68888f;
|
||
key.outTangent = 2.68888f;
|
||
NormalCurve.AddKey(key);
|
||
|
||
key = new Keyframe();
|
||
key.time = 1f;
|
||
key.value = 1f;
|
||
key.inTangent = 0f;
|
||
key.inTangent = 0f;
|
||
NormalCurve.AddKey(key);
|
||
}
|
||
#endregion
|
||
|
||
#region//公有函数
|
||
public static void Update()
|
||
{
|
||
for (int i = _showList.Count - 1; i >= 0; --i)
|
||
{
|
||
_showList[i].Update();
|
||
if(_showList[i].IsFinish)
|
||
{
|
||
_showList.RemoveAt(i);
|
||
}
|
||
}
|
||
|
||
for (int i = _hideList.Count - 1; i >= 0; --i)
|
||
{
|
||
_hideList[i].Update();
|
||
if (_hideList[i].IsFinish)
|
||
{
|
||
if(_hideList[i].HandleTrans != null && _hideList[i].HideGo)
|
||
{
|
||
_hideList[i].HandleTrans.gameObject.SetActive(false);
|
||
}
|
||
_hideList.RemoveAt(i);
|
||
}
|
||
}
|
||
}
|
||
|
||
public static void PlayShowAnimation(Transform handleTrans, MyAction finishCallBack, List<UIAnimationBase> animations)
|
||
{
|
||
if (handleTrans == null || animations == null || animations.Count <= 0)
|
||
{
|
||
return;
|
||
}
|
||
|
||
StopAnimation(handleTrans);
|
||
|
||
handleTrans.gameObject.SetActive(true);
|
||
var animTrans = new UIAnimationTrans();
|
||
animTrans.HandleTrans = handleTrans;
|
||
animTrans.FinishCallBack = finishCallBack;
|
||
for (int i = 0; i < animations.Count; ++i)
|
||
{
|
||
animTrans.AddAnim(animations[i]);
|
||
}
|
||
_showList.Add(animTrans);
|
||
}
|
||
|
||
public static void PlayHideAnimAtion(Transform handleTrans, MyAction finishCallBack, List<UIAnimationBase> animations, bool hideGo)
|
||
{
|
||
if (handleTrans == null || animations == null || animations.Count <= 0)
|
||
return;
|
||
|
||
StopAnimation(handleTrans);
|
||
|
||
var animTrans = new UIAnimationTrans();
|
||
animTrans.HandleTrans = handleTrans;
|
||
animTrans.FinishCallBack = finishCallBack;
|
||
animTrans.HideGo = hideGo;
|
||
for (int i = 0; i < animations.Count; ++i)
|
||
{
|
||
animTrans.AddAnim(animations[i]);
|
||
}
|
||
_hideList.Add(animTrans);
|
||
}
|
||
|
||
//alpha动画,只能用于Play函数的参数
|
||
public static UIAlphaAnimation Alpha(float start, float end, float duration = 0.5f, AnimationCurve curve = null)
|
||
{
|
||
UIAlphaAnimation result = new UIAlphaAnimation();
|
||
result.StartValue = start;
|
||
result.EndValue = end;
|
||
result.Duration = duration;
|
||
if (curve == null)
|
||
{
|
||
curve = NormalCurve;
|
||
}
|
||
result.AnimationCurve = curve;
|
||
return result;
|
||
}
|
||
//缩放动画,只能用于Play函数
|
||
public static UIScaleAnimation Scale(Vector3 start, Vector3 end, float duration = 0.5f, AnimationCurve curve = null)
|
||
{
|
||
UIScaleAnimation result = new UIScaleAnimation();
|
||
result.StartValue = start;
|
||
result.EndValue = end;
|
||
result.Duration = duration;
|
||
if (curve == null)
|
||
{
|
||
curve = NormalCurve;
|
||
}
|
||
result.AnimationCurve = curve;
|
||
return result;
|
||
}
|
||
|
||
//位移动画,只能用于Play函数
|
||
public static UIPositionAnimation Position(Vector3 start, Vector3 end, Vector3 offset, float duration = 0.5f, AnimationCurve curve = null)
|
||
{
|
||
UIPositionAnimation result = new UIPositionAnimation();
|
||
result.StartValue = start;
|
||
result.EndValue = end;
|
||
result.OffsetPos = offset;
|
||
result.Duration = duration;
|
||
if (curve == null)
|
||
{
|
||
curve = NormalCurve;
|
||
}
|
||
result.AnimationCurve = curve;
|
||
return result;
|
||
}
|
||
|
||
//旋转动画,只能用于Play函数
|
||
public static UIRotationAnimation Rotaion(float start, float end, float duration = 0.5f, AnimationCurve curve = null)
|
||
{
|
||
UIRotationAnimation result = new UIRotationAnimation();
|
||
result.StartValue = start;
|
||
result.EndValue = end;
|
||
result.Duration = duration;
|
||
if (curve == null)
|
||
{
|
||
curve = NormalCurve;
|
||
}
|
||
result.AnimationCurve = curve;
|
||
return result;
|
||
}
|
||
#endregion
|
||
|
||
#region//私有函数
|
||
public static void StopAnimation(Transform handleTrans)
|
||
{
|
||
for (int i = _showList.Count - 1; i >= 0; --i)
|
||
{
|
||
if(_showList[i].HandleTrans == handleTrans)
|
||
{
|
||
_showList.RemoveAt(i);
|
||
}
|
||
}
|
||
|
||
for (int i = _hideList.Count - 1; i >= 0; --i)
|
||
{
|
||
if (_hideList[i].HandleTrans == handleTrans)
|
||
{
|
||
_hideList.RemoveAt(i);
|
||
}
|
||
}
|
||
}
|
||
|
||
#endregion
|
||
}
|
||
}
|