diff --git a/Runtime/Component/Animation/AnimationInfo.cs b/Runtime/Component/Animation/AnimationInfo.cs index 5a40df46..bffabfef 100644 --- a/Runtime/Component/Animation/AnimationInfo.cs +++ b/Runtime/Component/Animation/AnimationInfo.cs @@ -309,14 +309,20 @@ namespace XCharts.Runtime internal float CheckItemProgress(int dataIndex, float destProgress, ref bool isEnd, float startProgress, bool m_UnscaledTime) { + if (m_Reverse) + { + var temp = startProgress; + startProgress = destProgress; + destProgress = temp; + } var currHig = GetDataCurrProgress(dataIndex, startProgress, destProgress, ref isEnd); if (IsFinish()) { - return reverse ? startProgress : destProgress; + return destProgress; } else if (IsInDelay() || IsInIndexDelay(dataIndex)) { - return reverse ? destProgress : startProgress; + return startProgress; } else if (context.pause) { @@ -326,7 +332,7 @@ namespace XCharts.Runtime { var duration = GetCurrAnimationDuration(dataIndex); var delta = (destProgress - startProgress) / duration * (m_UnscaledTime ? Time.unscaledDeltaTime : Time.deltaTime); - currHig = currHig + (reverse ? -delta : delta); + currHig += delta; if (reverse) { if ((destProgress > 0 && currHig <= 0) || (destProgress < 0 && currHig >= 0)) diff --git a/Runtime/Component/Animation/AnimationStyle.cs b/Runtime/Component/Animation/AnimationStyle.cs index dbe3d2cd..efcb75f8 100644 --- a/Runtime/Component/Animation/AnimationStyle.cs +++ b/Runtime/Component/Animation/AnimationStyle.cs @@ -350,13 +350,9 @@ namespace XCharts.Runtime #endif if (!m_Enable) return true; - foreach (var animation in animations) - { - if (animation.context.start && animation.context.end) - { - return true; - } - } + var animation = activedAnimation; + if (animation != null && animation.context.end) + return true; if (IsSerieAnimation()) { if (m_FadeOut.context.start) return m_FadeOut.context.currProgress <= m_FadeOut.context.destProgress; @@ -365,7 +361,8 @@ namespace XCharts.Runtime } else if (IsDataAnimation()) { - return false; + if (animation == null) return true; + else return animation.context.end; } return true; } @@ -462,7 +459,11 @@ namespace XCharts.Runtime { isEnd = false; var anim = activedAnimation; - if (anim == null) return destProgress; + if (anim == null) + { + isEnd = true; + return destProgress; + } return anim.CheckItemProgress(dataIndex, destProgress, ref isEnd, startProgress, m_UnscaledTime); } diff --git a/Runtime/Serie/Scatter/BaseScatterHandler.cs b/Runtime/Serie/Scatter/BaseScatterHandler.cs index 21a264a2..430f0bb0 100644 --- a/Runtime/Serie/Scatter/BaseScatterHandler.cs +++ b/Runtime/Serie/Scatter/BaseScatterHandler.cs @@ -134,6 +134,7 @@ namespace XCharts.Runtime var rate = serie.animation.GetCurrRate(); var dataChangeDuration = serie.animation.GetChangeDuration(); var interactDuration = serie.animation.GetInteractionDuration(); + var isFadeOut = serie.animation.IsFadeOut(); var unscaledTime = serie.animation.unscaledTime; var dataChanging = false; var interacting = false; @@ -157,8 +158,8 @@ namespace XCharts.Runtime SerieHelper.GetItemColor(out color, out toColor, out emptyColor, serie, serieData, chart.theme, colorIndex, state); SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, state); - double xValue = serieData.GetCurrData(0, 0, dataChangeDuration, unscaledTime, xAxis.inverse); - double yValue = serieData.GetCurrData(1, 0, dataChangeDuration, unscaledTime, yAxis.inverse); + double xValue = serieData.GetCurrData(0, 0, isFadeOut ? 0 : dataChangeDuration, unscaledTime, xAxis.inverse); + double yValue = serieData.GetCurrData(1, 0, isFadeOut ? 0 : dataChangeDuration, unscaledTime, yAxis.inverse); if (serieData.IsDataChanged()) dataChanging = true; @@ -177,13 +178,15 @@ namespace XCharts.Runtime serieData.context.position = pos; var datas = serieData.data; var symbolSize = 0f; - if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration)) + if (isFadeOut || !serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration)) { symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme.serie.scatterSymbolSize, state); - serieData.interact.SetValue(ref interacting, symbolSize, true); - serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration); + if (!isFadeOut) + { + serieData.interact.SetValue(ref interacting, symbolSize, true); + serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration); + } } - symbolSize *= rate; if (isEffectScatter)