重构Animation动画系统,增加Addition新增动画支持

This commit is contained in:
monitor1394
2023-07-11 23:05:31 +08:00
parent f678477c88
commit 1229c1bfa2
3 changed files with 166 additions and 20 deletions

View File

@@ -4,6 +4,10 @@ using UnityEngine;
namespace XCharts.Runtime namespace XCharts.Runtime
{ {
/// <summary>
/// the animation info.
/// |动画配置参数。
/// </summary>
[Since("v3.8.0")] [Since("v3.8.0")]
[System.Serializable] [System.Serializable]
public class AnimationInfo public class AnimationInfo
@@ -14,17 +18,53 @@ namespace XCharts.Runtime
[SerializeField][Since("v3.8.0")] private float m_Duration = 1000; [SerializeField][Since("v3.8.0")] private float m_Duration = 1000;
public AnimationInfoContext context = new AnimationInfoContext(); public AnimationInfoContext context = new AnimationInfoContext();
/// <summary>
/// whether enable animation.
/// |是否开启动画效果。
/// </summary>
public bool enable { get { return m_Enable; } set { m_Enable = value; } } public bool enable { get { return m_Enable; } set { m_Enable = value; } }
/// <summary>
/// whether enable reverse animation.
/// |是否开启反向动画效果。
/// </summary>
public bool reverse { get { return m_Reverse; } set { m_Reverse = value; } } public bool reverse { get { return m_Reverse; } set { m_Reverse = value; } }
/// <summary>
/// the delay time before animation start.
/// |动画开始前的延迟时间。
/// </summary>
public float delay { get { return m_Delay; } set { m_Delay = value; } } public float delay { get { return m_Delay; } set { m_Delay = value; } }
/// <summary>
/// the duration of animation.
/// |动画的时长。
/// </summary>
public float duration { get { return m_Duration; } set { m_Duration = value; } } public float duration { get { return m_Duration; } set { m_Duration = value; } }
/// <summary>
/// the callback function of animation start.
/// |动画开始的回调。
/// </summary>
public Action OnAnimationStart { get; set; } public Action OnAnimationStart { get; set; }
/// <summary>
/// the callback function of animation end.
/// |动画结束的回调。
/// </summary>
public Action OnAnimationEnd { get; set; } public Action OnAnimationEnd { get; set; }
/// <summary>
/// the delegate function of animation delay.
/// |动画延迟的委托函数。
/// </summary>
public AnimationDelayFunction delayFunction { get; set; } public AnimationDelayFunction delayFunction { get; set; }
/// <summary>
/// the delegate function of animation duration.
/// |动画时长的委托函数。
/// </summary>
public AnimationDurationFunction durationFunction { get; set; } public AnimationDurationFunction durationFunction { get; set; }
/// <summary>
/// Reset animation.
/// |重置动画。
/// </summary>
public void Reset() public void Reset()
{ {
if (!enable) return; if (!enable) return;
@@ -36,6 +76,11 @@ namespace XCharts.Runtime
context.itemCurrProgress.Clear(); context.itemCurrProgress.Clear();
} }
/// <summary>
/// Start animation.
/// |开始动画。
/// </summary>
/// <param name="reset">是否重置上一次的参数</param>
public void Start(bool reset = true) public void Start(bool reset = true)
{ {
if (!enable) return; if (!enable) return;
@@ -65,6 +110,10 @@ namespace XCharts.Runtime
} }
} }
/// <summary>
/// Pause animation.
/// |暂停动画。
/// </summary>
public void Pause() public void Pause()
{ {
if (!enable) return; if (!enable) return;
@@ -72,6 +121,10 @@ namespace XCharts.Runtime
context.pause = true; context.pause = true;
} }
/// <summary>
/// Resume animation.
/// |恢复动画。
/// </summary>
public void Resume() public void Resume()
{ {
if (!enable) return; if (!enable) return;
@@ -79,6 +132,10 @@ namespace XCharts.Runtime
context.pause = false; context.pause = false;
} }
/// <summary>
/// End animation.
/// |结束动画。
/// </summary>
public void End() public void End()
{ {
if (!enable) return; if (!enable) return;
@@ -93,6 +150,14 @@ namespace XCharts.Runtime
} }
} }
/// <summary>
/// Initialize animation.
/// |初始化动画。
/// </summary>
/// <param name="curr">当前进度</param>
/// <param name="dest">目标进度</param>
/// <param name="totalPointIndex">目标索引</param>
/// <returns></returns>
public bool Init(float curr, float dest, int totalPointIndex) public bool Init(float curr, float dest, int totalPointIndex)
{ {
if (!enable || !context.start) return false; if (!enable || !context.start) return false;
@@ -113,6 +178,10 @@ namespace XCharts.Runtime
return true; return true;
} }
/// <summary>
/// Whether animation is finish.
/// |动画是否结束。
/// </summary>
public bool IsFinish() public bool IsFinish()
{ {
if (!context.start) return true; if (!context.start) return true;
@@ -121,6 +190,10 @@ namespace XCharts.Runtime
return context.currProgress == context.destProgress; return context.currProgress == context.destProgress;
} }
/// <summary>
/// Whether animation is in delay.
/// |动画是否在延迟中。
/// </summary>
public bool IsInDelay() public bool IsInDelay()
{ {
if (!context.start) if (!context.start)
@@ -129,6 +202,12 @@ namespace XCharts.Runtime
return (m_Delay > 0 && Time.time - context.startTime < m_Delay / 1000); return (m_Delay > 0 && Time.time - context.startTime < m_Delay / 1000);
} }
/// <summary>
/// Whether animation is in index delay.
/// |动画是否在索引延迟中。
/// </summary>
/// <param name="dataIndex"></param>
/// <returns></returns>
public bool IsInIndexDelay(int dataIndex) public bool IsInIndexDelay(int dataIndex)
{ {
if (context.start) if (context.start)
@@ -137,6 +216,12 @@ namespace XCharts.Runtime
return false; return false;
} }
/// <summary>
/// Get animation delay.
/// |获取动画延迟。
/// </summary>
/// <param name="dataIndex"></param>
/// <returns></returns>
public float GetIndexDelay(int dataIndex) public float GetIndexDelay(int dataIndex)
{ {
if (!context.start) return 0; if (!context.start) return 0;
@@ -279,24 +364,40 @@ namespace XCharts.Runtime
} }
} }
/// <summary>
/// Fade in animation.
/// |淡入动画。
/// </summary>
[Since("v3.8.0")] [Since("v3.8.0")]
[System.Serializable] [System.Serializable]
public class AnimationFadeIn : AnimationInfo public class AnimationFadeIn : AnimationInfo
{ {
} }
/// <summary>
/// Fade out animation.
/// |淡出动画。
/// </summary>
[Since("v3.8.0")] [Since("v3.8.0")]
[System.Serializable] [System.Serializable]
public class AnimationFadeOut : AnimationInfo public class AnimationFadeout : AnimationInfo
{ {
} }
/// <summary>
/// Data change animation.
/// |数据变更动画。
/// </summary>
[Since("v3.8.0")] [Since("v3.8.0")]
[System.Serializable] [System.Serializable]
public class AnimationChange : AnimationInfo public class AnimationChange : AnimationInfo
{ {
} }
/// <summary>
/// Data addition animation.
/// |数据新增动画。
/// </summary>
[Since("v3.8.0")] [Since("v3.8.0")]
[System.Serializable] [System.Serializable]
public class AnimationAddition : AnimationInfo public class AnimationAddition : AnimationInfo

View File

@@ -56,7 +56,7 @@ namespace XCharts.Runtime
[SerializeField] private int m_Threshold = 2000; [SerializeField] private int m_Threshold = 2000;
[SerializeField][Since("v3.4.0")] private bool m_UnscaledTime; [SerializeField][Since("v3.4.0")] private bool m_UnscaledTime;
[SerializeField][Since("v3.8.0")] private AnimationFadeIn m_Fadein = new AnimationFadeIn(); [SerializeField][Since("v3.8.0")] private AnimationFadeIn m_Fadein = new AnimationFadeIn();
[SerializeField][Since("v3.8.0")] private AnimationFadeOut m_Fadeout = new AnimationFadeOut() { reverse = true }; [SerializeField][Since("v3.8.0")] private AnimationFadeout m_Fadeout = new AnimationFadeout() { reverse = true };
[SerializeField][Since("v3.8.0")] private AnimationChange m_Change = new AnimationChange() { duration = 500 }; [SerializeField][Since("v3.8.0")] private AnimationChange m_Change = new AnimationChange() { duration = 500 };
[SerializeField][Since("v3.8.0")] private AnimationAddition m_Addition = new AnimationAddition() { duration = 500 }; [SerializeField][Since("v3.8.0")] private AnimationAddition m_Addition = new AnimationAddition() { duration = 500 };
@@ -103,7 +103,7 @@ namespace XCharts.Runtime
/// Fade out animation configuration. /// Fade out animation configuration.
/// |渐出动画配置。 /// |渐出动画配置。
/// </summary> /// </summary>
public AnimationFadeOut fadeout { get { return m_Fadeout; } } public AnimationFadeout fadeout { get { return m_Fadeout; } }
/// <summary> /// <summary>
/// Update data animation configuration. /// Update data animation configuration.
/// |数据变更动画配置。 /// |数据变更动画配置。
@@ -133,6 +133,10 @@ namespace XCharts.Runtime
} }
} }
/// <summary>
/// The actived animation.
/// |当前激活的动画。
/// </summary>
public AnimationInfo activedAnimation public AnimationInfo activedAnimation
{ {
get get
@@ -145,12 +149,20 @@ namespace XCharts.Runtime
} }
} }
/// <summary>
/// Start fadein animation.
/// |开始渐入动画。
/// </summary>
public void Fadein() public void Fadein()
{ {
if (m_Fadeout.context.start) return; if (m_Fadeout.context.start) return;
m_Fadein.Start(); m_Fadein.Start();
} }
/// <summary>
/// Restart the actived animation.
/// |重启当前激活的动画。
/// </summary>
public void Restart() public void Restart()
{ {
var anim = activedAnimation; var anim = activedAnimation;
@@ -161,11 +173,19 @@ namespace XCharts.Runtime
} }
} }
/// <summary>
/// Start fadeout animation.
/// |开始渐出动画。
/// </summary>
public void Fadeout() public void Fadeout()
{ {
m_Fadeout.Start(); m_Fadeout.Start();
} }
/// <summary>
/// Start additon animation.
/// |开始数据新增动画。
/// </summary>
public void Addition() public void Addition()
{ {
if (!enable) return; if (!enable) return;
@@ -175,6 +195,10 @@ namespace XCharts.Runtime
} }
} }
/// <summary>
/// Pause all animations.
/// |暂停所有动画。
/// </summary>
public void Pause() public void Pause()
{ {
foreach (var anim in animations) foreach (var anim in animations)
@@ -183,6 +207,10 @@ namespace XCharts.Runtime
} }
} }
/// <summary>
/// Resume all animations.
/// |恢复所有动画。
/// </summary>
public void Resume() public void Resume()
{ {
foreach (var anim in animations) foreach (var anim in animations)
@@ -191,12 +219,23 @@ namespace XCharts.Runtime
} }
} }
/// <summary>
/// Reset all animations.
/// </summary>
public void Reset() public void Reset()
{ {
m_Fadein.Reset(); foreach (var anim in animations)
m_Fadeout.Reset(); {
anim.Reset();
}
} }
/// <summary>
/// Initialize animation configuration.
/// |初始化动画配置。
/// </summary>
/// <param name="curr">当前进度</param>
/// <param name="dest">目标进度</param>
public void InitProgress(float curr, float dest) public void InitProgress(float curr, float dest)
{ {
var anim = activedAnimation; var anim = activedAnimation;
@@ -220,6 +259,12 @@ namespace XCharts.Runtime
} }
} }
/// <summary>
/// Initialize animation configuration.
/// |初始化动画配置。
/// </summary>
/// <param name="paths">路径坐标点列表</param>
/// <param name="isY">是Y轴还是X轴</param>
public void InitProgress(List<Vector3> paths, bool isY) public void InitProgress(List<Vector3> paths, bool isY)
{ {
if (paths.Count < 1) return; if (paths.Count < 1) return;

View File

@@ -382,8 +382,8 @@ namespace XCharts.Runtime
} }
/// <summary> /// <summary>
/// Whether series animation enabel. /// Whether enable serie animations.
/// |启用或关闭起始动画。 /// |是否启用Serie动画。
/// </summary> /// </summary>
/// <param name="flag"></param> /// <param name="flag"></param>
public void AnimationEnable(bool flag) public void AnimationEnable(bool flag)
@@ -392,13 +392,13 @@ namespace XCharts.Runtime
} }
/// <summary> /// <summary>
/// fadeIn animation. /// Start all serie fadein animations.
/// |开始渐入动画。 /// |开始所有Serie的渐入动画。
/// </summary> /// </summary>
/// <param name="reset">reset animation</param>
public void AnimationFadein(bool reset = true) public void AnimationFadein(bool reset = true)
{ {
if (reset) if (reset) AnimationReset();
AnimationReset();
foreach (var serie in m_Series) serie.AnimationFadein(); foreach (var serie in m_Series) serie.AnimationFadein();
} }
@@ -408,8 +408,8 @@ namespace XCharts.Runtime
} }
/// <summary> /// <summary>
/// fadeIn animation. /// Start all serie fadeout animations.
/// |开始渐出动画。 /// |开始所有Serie的渐出动画。
/// </summary> /// </summary>
public void AnimationFadeout() public void AnimationFadeout()
{ {
@@ -422,8 +422,8 @@ namespace XCharts.Runtime
} }
/// <summary> /// <summary>
/// Pause animation. /// Pause all animations.
/// |暂停动画。 /// |暂停所有Serie的动画。
/// </summary> /// </summary>
public void AnimationPause() public void AnimationPause()
{ {
@@ -431,8 +431,8 @@ namespace XCharts.Runtime
} }
/// <summary> /// <summary>
/// Stop play animation. /// Resume all animations.
/// |继续动画。 /// |继续所有Serie的动画。
/// </summary> /// </summary>
public void AnimationResume() public void AnimationResume()
{ {
@@ -440,8 +440,8 @@ namespace XCharts.Runtime
} }
/// <summary> /// <summary>
/// Reset animation. /// Reset all animations.
/// |重置动画。 /// |重置所有Serie的动画。
/// </summary> /// </summary>
public void AnimationReset() public void AnimationReset()
{ {