From 74b304a72deb65ab190867f34d15b720694780d3 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Tue, 3 Dec 2019 07:49:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=95=B0=E6=8D=AE=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E5=8A=A8=E7=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/XCharts/CHANGELOG.md | 1 + .../XCharts/Demo/Runtime/Demo01_UpdateData.cs | 52 ++++++++++++++++ .../Demo/Runtime/Demo01_UpdateData.cs.meta | 11 ++++ Assets/XCharts/Demo/Runtime/Demo_Test.cs | 26 +++++--- Assets/XCharts/Runtime/API/BaseChart_API.cs | 28 ++++++++- .../XCharts/Runtime/Component/Main/Serie.cs | 20 +++++- .../XCharts/Runtime/Component/Main/Series.cs | 32 ++++++++++ .../Runtime/Component/Sub/SerieAnimation.cs | 2 +- .../Runtime/Component/Sub/SerieData.cs | 61 ++++++++++++------- .../Internal/CoordinateChart_DrawBar.cs | 23 +++++-- .../Internal/CoordinateChart_DrawHeatmap.cs | 11 +++- .../Internal/CoordinateChart_DrawLine.cs | 17 ++++-- .../Internal/CoordinateChart_DrawScatter.cs | 11 +++- Assets/XCharts/Runtime/PieChart.cs | 9 ++- Assets/XCharts/Runtime/RadarChart.cs | 9 ++- 15 files changed, 263 insertions(+), 50 deletions(-) create mode 100644 Assets/XCharts/Demo/Runtime/Demo01_UpdateData.cs create mode 100644 Assets/XCharts/Demo/Runtime/Demo01_UpdateData.cs.meta diff --git a/Assets/XCharts/CHANGELOG.md b/Assets/XCharts/CHANGELOG.md index e5f3a012..04fc8317 100644 --- a/Assets/XCharts/CHANGELOG.md +++ b/Assets/XCharts/CHANGELOG.md @@ -1,6 +1,7 @@ # 更新日志 +* (2019.12.03) 增加数据更新动画 * (2019.11.30) 增加`GaugeChart`仪表盘 * (2019.11.22) 修复`BarChart`清空数据重新赋值后`SerieLabel`显示异常的问题 * (2019.11.16) 修复`SerieLabel`设置`color`等参数不生效的问题 diff --git a/Assets/XCharts/Demo/Runtime/Demo01_UpdateData.cs b/Assets/XCharts/Demo/Runtime/Demo01_UpdateData.cs new file mode 100644 index 00000000..b90b50d7 --- /dev/null +++ b/Assets/XCharts/Demo/Runtime/Demo01_UpdateData.cs @@ -0,0 +1,52 @@ +/******************************************/ +/* */ +/* Copyright (c) 2018 monitor1394 */ +/* https://github.com/monitor1394 */ +/* */ +/******************************************/ + +using UnityEngine; + +namespace XCharts +{ + [DisallowMultipleComponent] + [ExecuteInEditMode] + public class Demo01_UpdateData : MonoBehaviour + { + private float updateTime = 0; + BaseChart chart; + void Awake() + { + chart = gameObject.GetComponent(); + } + + void Update() + { + updateTime += Time.deltaTime; + if (chart && updateTime > 2) + { + updateTime = 0; + var serie = chart.series.GetSerie(0); + //serie.animation.updateAnimation = true; + var dataCount = serie.dataCount; + if (chart is RadarChart) + { + var dimension = serie.GetSerieData(0).data.Count - 1; + chart.UpdateData(0, 0, Random.Range(0, dimension + 1), Random.Range(0, 100)); + } + else if (chart is HeatmapChart) + { + var dimension = serie.GetSerieData(0).data.Count - 1; + for (int i = 0; i < dataCount; i++) + { + chart.UpdateData(0, i, dimension, Random.Range(0, 10)); + } + } + else + { + chart.UpdateData(0, Random.Range(0, dataCount), Random.Range(10, 90)); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/XCharts/Demo/Runtime/Demo01_UpdateData.cs.meta b/Assets/XCharts/Demo/Runtime/Demo01_UpdateData.cs.meta new file mode 100644 index 00000000..2dca82e8 --- /dev/null +++ b/Assets/XCharts/Demo/Runtime/Demo01_UpdateData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6faaaf3d4a8444b4b2736825e237fcf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Demo/Runtime/Demo_Test.cs b/Assets/XCharts/Demo/Runtime/Demo_Test.cs index b78d166e..40909f0c 100644 --- a/Assets/XCharts/Demo/Runtime/Demo_Test.cs +++ b/Assets/XCharts/Demo/Runtime/Demo_Test.cs @@ -15,23 +15,33 @@ namespace XCharts public class Demo_Test : MonoBehaviour { private float updateTime = 0; - CoordinateChart chart; + BaseChart chart; void Awake() { - chart = gameObject.GetComponent(); - if (chart == null) - { - chart = gameObject.AddComponent(); - } + chart = gameObject.GetComponent(); } void Update() { updateTime += Time.deltaTime; - if (updateTime > 2) + if (chart && updateTime > 2) { updateTime = 0; - chart.UpdateData(0, Random.Range(0, 5), Random.Range(10, 90)); + var serie = chart.series.GetSerie(0); + serie.animation.updateAnimation = true; + var dataCount = serie.dataCount; + if (chart is HeatmapChart) + { + var dimension = serie.GetSerieData(0).data.Count - 1; + for (int i = 0; i < dataCount; i++) + { + chart.UpdateData(0, i, dimension, Random.Range(0, 10)); + } + } + else + { + chart.UpdateData(0, Random.Range(0, dataCount), Random.Range(10, 90)); + } } } } diff --git a/Assets/XCharts/Runtime/API/BaseChart_API.cs b/Assets/XCharts/Runtime/API/BaseChart_API.cs index c49923d1..11098e25 100644 --- a/Assets/XCharts/Runtime/API/BaseChart_API.cs +++ b/Assets/XCharts/Runtime/API/BaseChart_API.cs @@ -277,6 +277,32 @@ namespace XCharts RefreshChart(); } + /// + /// 更新指定系列指定索引指定维数的数据。维数从0开始。 + /// + /// + /// + /// 指定维数,从0开始 + /// + public virtual void UpdateData(string serieName, int dataIndex, int dimension, float value) + { + m_Series.UpdateData(serieName, dataIndex, dimension, value); + RefreshChart(); + } + + /// + /// 更新指定系列指定索引指定维数的数据。维数从0开始。 + /// + /// + /// + /// 指定维数,从0开始 + /// + public virtual void UpdateData(int serieIndex, int dataIndex, int dimension, float value) + { + m_Series.UpdateData(serieIndex, dataIndex, dimension, value); + RefreshChart(); + } + /// /// Update serie data name. /// 更新指定系列中的指定索引数据名称。 @@ -419,7 +445,7 @@ namespace XCharts OnThemeChanged(); RefreshChart(); } - + /// /// Update chart theme info. /// 切换图表主题。 diff --git a/Assets/XCharts/Runtime/Component/Main/Serie.cs b/Assets/XCharts/Runtime/Component/Main/Serie.cs index 211cb6f5..740efaef 100644 --- a/Assets/XCharts/Runtime/Component/Main/Serie.cs +++ b/Assets/XCharts/Runtime/Component/Main/Serie.cs @@ -668,7 +668,7 @@ namespace XCharts foreach (var sdata in data) { if (sdata.show) - total += sdata.data[1]; + total += sdata.GetCurrData(1, animation.GetUpdateAnimationDuration()); } return total; } @@ -724,9 +724,15 @@ namespace XCharts } } int xValue = m_Data.Count; - var serieData = new SerieData() { data = new List() { xValue, value }, name = dataName }; + var serieData = new SerieData() + { + data = new List() { xValue, value }, + lastData = new List() { xValue, value }, + name = dataName + }; serieData.index = xValue; m_Data.Add(serieData); + m_ShowDataDimension = 1; return serieData; } @@ -747,9 +753,15 @@ namespace XCharts m_Data.RemoveAt(0); } } - var serieData = new SerieData() { data = new List() { xValue, yValue }, name = dataName }; + var serieData = new SerieData() + { + data = new List() { xValue, yValue }, + lastData = new List() { xValue, yValue }, + name = dataName + }; serieData.index = m_Data.Count; m_Data.Add(serieData); + m_ShowDataDimension = 2; return serieData; } @@ -781,12 +793,14 @@ namespace XCharts m_Data.RemoveAt(0); } } + m_ShowDataDimension = valueList.Count; var serieData = new SerieData(); serieData.name = dataName; serieData.index = m_Data.Count; for (int i = 0; i < valueList.Count; i++) { serieData.data.Add(valueList[i]); + serieData.lastData.Add(valueList[i]); } m_Data.Add(serieData); return serieData; diff --git a/Assets/XCharts/Runtime/Component/Main/Series.cs b/Assets/XCharts/Runtime/Component/Main/Series.cs index 6a52ff5e..5ce88f01 100644 --- a/Assets/XCharts/Runtime/Component/Main/Series.cs +++ b/Assets/XCharts/Runtime/Component/Main/Series.cs @@ -448,6 +448,38 @@ namespace XCharts } } + /// + /// 更新指定系列指定数据项指定维度的数据值 + /// + /// 系列 + /// 数据项 + /// 数据维数,从0开始 + /// 值 + public void UpdateData(int serieIndex, int dataIndex, int dimension, float value) + { + var serie = GetSerie(serieIndex); + if (serie != null) + { + serie.UpdateData(dataIndex, dimension, value); + } + } + + /// + /// 更新指定系列指定数据项指定维度的数据值 + /// + /// + /// + /// 数据维数,从0开始 + /// + public void UpdateData(string serieName, int dataIndex, int dimension, float value) + { + var serie = GetSerie(serieName); + if (serie != null) + { + serie.UpdateData(dataIndex, dimension, value); + } + } + /// /// 更新指定系列的维度X和维度Y数据 diff --git a/Assets/XCharts/Runtime/Component/Sub/SerieAnimation.cs b/Assets/XCharts/Runtime/Component/Sub/SerieAnimation.cs index 868e1c6c..49d2f2e4 100644 --- a/Assets/XCharts/Runtime/Component/Sub/SerieAnimation.cs +++ b/Assets/XCharts/Runtime/Component/Sub/SerieAnimation.cs @@ -158,7 +158,7 @@ namespace XCharts #if UNITY_EDITOR if (!Application.isPlaying) return true; #endif - return !enable || (m_CurrDataProgress > m_DestDataProgress && m_CurrDetailProgress > m_DestDetailProgress); + return !enable || m_IsEnd || (m_CurrDataProgress > m_DestDataProgress && m_CurrDetailProgress > m_DestDetailProgress); } public bool IsInDelay() diff --git a/Assets/XCharts/Runtime/Component/Sub/SerieData.cs b/Assets/XCharts/Runtime/Component/Sub/SerieData.cs index b1a3fd43..1f778377 100644 --- a/Assets/XCharts/Runtime/Component/Sub/SerieData.cs +++ b/Assets/XCharts/Runtime/Component/Sub/SerieData.cs @@ -153,9 +153,10 @@ namespace XCharts public float runtimePieOffsetRadius { get; internal set; } public Vector3 runtiemPieOffsetCenter { get; internal set; } - private bool m_DataChanged; - private float m_LastData; - private float m_DataUpdateTime; + private List m_LastData = new List(); + private List m_DataUpdateTime = new List(); + private List m_DataUpdateFlag = new List(); + public List lastData { get { return m_LastData; } internal set { m_LastData = value; } } public float GetData(int index) { @@ -166,20 +167,30 @@ namespace XCharts else return 0; } + public float GetLastData(int index) + { + if (index >= 0 && index < lastData.Count) + { + return m_LastData[index]; + } + else return 0; + } + public float GetCurrData(int index, float animationDuration = 500f) { - if (index == 1 && m_DataChanged) + if (index < m_DataUpdateFlag.Count && m_DataUpdateFlag[index] && animationDuration > 0) { - var time = Time.time - m_DataUpdateTime; + var time = Time.time - m_DataUpdateTime[index]; var total = animationDuration / 1000; - if (animationDuration > 0 && time <= total) + if (time <= total) { - var curr = Mathf.Lerp(m_LastData, GetData(index), time / total); + CheckLastData(); + var curr = Mathf.Lerp(GetLastData(index), GetData(index), time / total); return curr; } else { - m_DataChanged = false; + m_DataUpdateFlag[index] = false; return GetData(index); } } @@ -189,29 +200,37 @@ namespace XCharts } } - public float GetLastData(int index) - { - if (index == 1 && m_DataChanged) return m_LastData; - else return GetData(index); - } - public void UpdateData(int dimension, float value) { if (dimension >= 0 && dimension < data.Count) { - if (dimension == 1) - { - m_LastData = data[dimension]; - m_DataUpdateTime = Time.time; - m_DataChanged = true; - } + CheckLastData(); + m_LastData[dimension] = data[dimension]; + m_DataUpdateTime[dimension] = Time.time; + m_DataUpdateFlag[dimension] = true; data[dimension] = value; } } + private void CheckLastData() + { + if (m_LastData.Count != m_Data.Count) + { + m_LastData.Clear(); + for (int i = 0; i < m_Data.Count; i++) + { + m_LastData.Add(m_Data[i]); + m_DataUpdateTime.Add(Time.time); + m_DataUpdateFlag.Add(false); + } + } + } + public bool IsDataChanged() { - return m_DataChanged; + foreach (var b in m_DataUpdateFlag) + if (b) return true; + return false; } public void InitLabel(GameObject labelObj, bool autoSize, float paddingLeftRight, float paddingTopBottom) diff --git a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawBar.cs b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawBar.cs index e1a50774..a7c74637 100644 --- a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawBar.cs +++ b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawBar.cs @@ -43,6 +43,10 @@ namespace XCharts } } var isPercentStack = m_Series.IsPercentStack(serie.stack, SerieType.Bar); + bool dataChanging = false; + float updateDuration = serie.animation.GetUpdateAnimationDuration(); + float xMinValue = xAxis.GetCurrMinValue(updateDuration); + float xMaxValue = xAxis.GetCurrMaxValue(updateDuration); for (int i = serie.minShow; i < maxCount; i++) { if (i >= seriesHig.Count) @@ -51,7 +55,8 @@ namespace XCharts } var serieData = showData[i]; serieData.canShowLabel = true; - float value = showData[i].data[1]; + float value = showData[i].GetCurrData(1, updateDuration); + if (showData[i].IsDataChanged()) dataChanging = true; float pX = seriesHig[i] + coordinateX + xAxis.runtimeZeroXOffset + yAxis.axisLine.width; float pY = coordinateY + +i * categoryWidth; if (!yAxis.boundaryGap) pY -= categoryWidth / 2; @@ -66,9 +71,9 @@ namespace XCharts } else { - valueTotal = xAxis.runtimeMaxValue - xAxis.runtimeMinValue; + valueTotal = xMaxValue - xMinValue; if (valueTotal != 0) - barHig = (xAxis.runtimeMinValue > 0 ? value - xAxis.runtimeMinValue : value) + barHig = (xMinValue > 0 ? value - xMinValue : value) / valueTotal * coordinateWidth; seriesHig[i] += barHig; } @@ -103,6 +108,10 @@ namespace XCharts { m_BarLastOffset += barGapWidth; } + if (dataChanging) + { + RefreshChart(); + } } private float CheckAnimation(Serie serie, int dataIndex, float barHig) @@ -156,8 +165,10 @@ namespace XCharts } var isPercentStack = m_Series.IsPercentStack(serie.stack, SerieType.Bar); - float updateDuration = serie.animation.GetUpdateAnimationDuration(); bool dataChanging = false; + float updateDuration = serie.animation.GetUpdateAnimationDuration(); + float yMinValue = yAxis.GetCurrMinValue(updateDuration); + float yMaxValue = yAxis.GetCurrMaxValue(updateDuration); for (int i = serie.minShow; i < maxCount; i++) { if (i >= seriesHig.Count) @@ -181,9 +192,9 @@ namespace XCharts } else { - valueTotal = yAxis.runtimeMaxValue - yAxis.runtimeMinValue; + valueTotal = yMaxValue - yMinValue; if (valueTotal != 0) - barHig = (yAxis.runtimeMinValue > 0 ? value - yAxis.runtimeMinValue : value) + barHig = (yMinValue > 0 ? value - yMinValue : value) / valueTotal * coordinateHeight; seriesHig[i] += barHig; } diff --git a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawHeatmap.cs b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawHeatmap.cs index 11da3fda..63e83d6e 100644 --- a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawHeatmap.cs +++ b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawHeatmap.cs @@ -135,6 +135,8 @@ namespace XCharts serie.dataPoints.Clear(); serie.animation.InitProgress(1, 0, xCount); var animationIndex = serie.animation.GetCurrIndex(); + var updateDuration = serie.animation.GetUpdateAnimationDuration(); + var dataChanging = false; for (int i = 0; i < xCount; i++) { for (int j = 0; j < yCount; j++) @@ -144,7 +146,8 @@ namespace XCharts var serieData = dataList[dataIndex]; var dimension = m_VisualMap.enable && m_VisualMap.dimension > 0 ? m_VisualMap.dimension - 1 : serieData.data.Count - 1; - var value = serieData.data[dimension]; + var value = serieData.GetCurrData(dimension, updateDuration); + if (serieData.IsDataChanged()) dataChanging = true; var pos = new Vector3(zeroX + (i + 0.5f) * xWidth, zeroY + (j + 0.5f) * yWidth); serie.dataPoints.Add(pos); serieData.canShowLabel = false; @@ -159,7 +162,7 @@ namespace XCharts if (!m_VisualMap.IsInSelectedValue(value)) continue; color = m_VisualMap.GetColor(value); } - if(animationIndex>= 0 && i> animationIndex) continue; + if (animationIndex >= 0 && i > animationIndex) continue; serieData.canShowLabel = true; var emphasis = (m_Tooltip.show && i == (int)m_Tooltip.runtimeXValues[0] && j == (int)m_Tooltip.runtimeYValues[0]) || m_VisualMap.runtimeSelectedIndex > 0; @@ -186,6 +189,10 @@ namespace XCharts m_IsPlayingStartAnimation = true; RefreshChart(); } + if (dataChanging) + { + RefreshChart(); + } } protected void DrawVisualMap(VertexHelper vh) diff --git a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawLine.cs b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawLine.cs index 8db54cf2..ac836e5e 100644 --- a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawLine.cs +++ b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawLine.cs @@ -368,28 +368,37 @@ namespace XCharts var sampleDist = serie.sampleDist; if (sampleDist > 0) rate = (int)((maxCount - serie.minShow) / (coordinateWidth / sampleDist)); if (rate < 1) rate = 1; + var dataChanging = false; + float updateDuration = serie.animation.GetUpdateAnimationDuration(); + float xMinValue = xAxis.GetCurrMinValue(updateDuration); + float xMaxValue = xAxis.GetCurrMaxValue(updateDuration); for (i = serie.minShow; i < maxCount; i += rate) { if (i >= seriesHig.Count) { for (int j = 0; j < rate; j++) seriesHig.Add(0); } - float value = showData[i].data[1]; + float value = showData[i].GetCurrData(1, updateDuration); float pY = startY + i * scaleWid; float pX = seriesHig[i] + coordinateX + yAxis.axisLine.width; - float dataHig = (value - xAxis.runtimeMinValue) / (xAxis.runtimeMaxValue - xAxis.runtimeMinValue) * coordinateWidth; + float dataHig = (value - xMinValue) / (xMaxValue - xMinValue) * coordinateWidth; np = new Vector3(pX + dataHig, pY); serie.dataPoints.Add(np); seriesHig[i] += dataHig; + if (showData[i].IsDataChanged()) dataChanging = true; + } + if (dataChanging) + { + RefreshChart(); } if (maxCount % rate != 0) { i = maxCount - 1; seriesHig.Add(0); - float value = showData[i].data[1]; + float value = showData[i].GetCurrData(1, updateDuration); float pY = startY + i * scaleWid; float pX = seriesHig[i] + coordinateX + yAxis.axisLine.width; - float dataHig = (value - xAxis.runtimeMinValue) / (xAxis.runtimeMaxValue - xAxis.runtimeMinValue) * coordinateWidth; + float dataHig = (value - xMinValue) / (xMaxValue - xMinValue) * coordinateWidth; np = new Vector3(pX + dataHig, pY); serie.dataPoints.Add(np); seriesHig[i] += dataHig; diff --git a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawScatter.cs b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawScatter.cs index 0ff95661..5f0f355b 100644 --- a/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawScatter.cs +++ b/Assets/XCharts/Runtime/Internal/CoordinateChart_DrawScatter.cs @@ -23,11 +23,14 @@ namespace XCharts : serie.dataCount; serie.animation.InitProgress(1, 0, 1); var rate = serie.animation.GetCurrRate(); + var updateDuration = serie.animation.GetUpdateAnimationDuration(); + var dataChanging = false; for (int n = serie.minShow; n < maxCount; n++) { var serieData = serie.GetDataList(m_DataZoom)[n]; - float xValue = serieData.data[0]; - float yValue = serieData.data[1]; + float xValue = serieData.GetCurrData(0, updateDuration); + float yValue = serieData.GetCurrData(1, updateDuration); + if (serieData.IsDataChanged()) dataChanging = true; float pX = coordinateX + xAxis.axisLine.width; float pY = coordinateY + yAxis.axisLine.width; float xDataHig = (xValue - xAxis.runtimeMinValue) / (xAxis.runtimeMaxValue - xAxis.runtimeMinValue) * coordinateWidth; @@ -69,6 +72,10 @@ namespace XCharts m_IsPlayingStartAnimation = true; RefreshChart(); } + if (dataChanging) + { + RefreshChart(); + } } } } \ No newline at end of file diff --git a/Assets/XCharts/Runtime/PieChart.cs b/Assets/XCharts/Runtime/PieChart.cs index dcc8449d..235a48cd 100644 --- a/Assets/XCharts/Runtime/PieChart.cs +++ b/Assets/XCharts/Runtime/PieChart.cs @@ -76,12 +76,15 @@ namespace XCharts if (sd.show && serie.pieRoseType == RoseType.Area) showdataCount++; sd.canShowLabel = false; } + bool dataChanging = false; + float updateDuration = serie.animation.GetUpdateAnimationDuration(); for (int n = 0; n < data.Count; n++) { if (!serie.animation.NeedAnimation(n)) break; var serieData = data[n]; serieData.index = n; - float value = serieData.data[1]; + float value = serieData.GetCurrData(1, updateDuration); + if (serieData.IsDataChanged()) dataChanging = true; serieNameCount = m_LegendRealShowName.IndexOf(serieData.legendName); Color color = m_ThemeInfo.GetColor(serieNameCount); serieData.runtimePieStartAngle = startDegree; @@ -168,6 +171,10 @@ namespace XCharts serie.animation.CheckSymbol(Time.deltaTime * symbolSpeed, serie.symbol.size); RefreshChart(); } + if (dataChanging) + { + RefreshChart(); + } } DrawLabelLine(vh); DrawLabelBackground(vh); diff --git a/Assets/XCharts/Runtime/RadarChart.cs b/Assets/XCharts/Runtime/RadarChart.cs index e2fc66c6..98a46114 100644 --- a/Assets/XCharts/Runtime/RadarChart.cs +++ b/Assets/XCharts/Runtime/RadarChart.cs @@ -218,6 +218,8 @@ namespace XCharts continue; } var rate = serie.animation.GetCurrRate(); + var dataChanging = false; + var updateDuration = serie.animation.GetUpdateAnimationDuration(); for (int j = 0; j < serie.data.Count; j++) { var serieData = serie.data[j]; @@ -262,7 +264,8 @@ namespace XCharts if (n >= serieData.data.Count) break; float min = radar.GetIndicatorMin(n); float max = radar.GetIndicatorMax(n); - float value = serieData.data[n]; + float value = serieData.GetCurrData(n, updateDuration); + if (serieData.IsDataChanged()) dataChanging = true; if (max == 0) { serie.GetMinMaxData(n, out min, out max); @@ -320,6 +323,10 @@ namespace XCharts serie.animation.CheckProgress(Time.deltaTime * speed); RefreshChart(); } + if (dataChanging) + { + RefreshChart(); + } } }