From dd5c6a2ffeb8e55c9f7e9407e85e0174b40914b3 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Mon, 14 Oct 2019 19:22:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0RadarChart=E3=80=81ScatterCha?= =?UTF-8?q?rt=E5=92=8CHeatmapChart=E7=9A=84=E8=B5=B7=E5=A7=8B=E5=8A=A8?= =?UTF-8?q?=E7=94=BB=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Scripts/UI/Component/Sub/Animation.cs | 18 ++++++++++++++++++ .../UI/Internal/CoordinateChart_DrawHeatmap.cs | 10 ++++++++++ .../UI/Internal/CoordinateChart_DrawScatter.cs | 12 +++++++++++- Scripts/UI/RadarChart.cs | 10 ++++++++++ 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/Scripts/UI/Component/Sub/Animation.cs b/Scripts/UI/Component/Sub/Animation.cs index aee6f51f..7902c1e0 100644 --- a/Scripts/UI/Component/Sub/Animation.cs +++ b/Scripts/UI/Component/Sub/Animation.cs @@ -208,6 +208,24 @@ namespace XCharts return m_CurrDetailProgress; } + public float GetCurrRate() + { +#if UNITY_EDITOR + if (!Application.isPlaying) return 1; +#endif + if (!enable || m_IsEnd) return 1; + return m_CurrDetailProgress; + } + + public int GetCurrIndex() + { +#if UNITY_EDITOR + if (!Application.isPlaying) return -1; +#endif + if (!enable || m_IsEnd) return -1; + return (int)m_CurrDetailProgress; + } + public float GetCurrData() { return m_CurrDataProgress; diff --git a/Scripts/UI/Internal/CoordinateChart_DrawHeatmap.cs b/Scripts/UI/Internal/CoordinateChart_DrawHeatmap.cs index 7462de73..776d64ef 100644 --- a/Scripts/UI/Internal/CoordinateChart_DrawHeatmap.cs +++ b/Scripts/UI/Internal/CoordinateChart_DrawHeatmap.cs @@ -133,6 +133,8 @@ namespace XCharts var borderColor = serie.itemStyle.opacity > 0 ? serie.itemStyle.borderColor : Color.clear; borderColor.a *= serie.itemStyle.opacity; serie.dataPoints.Clear(); + serie.animation.InitProgress(1, 0, xCount); + var animationIndex = serie.animation.GetCurrIndex(); for (int i = 0; i < xCount; i++) { for (int j = 0; j < yCount; j++) @@ -157,6 +159,7 @@ namespace XCharts if (!m_VisualMap.IsInSelectedValue(value)) continue; color = m_VisualMap.GetColor(value); } + if(animationIndex>= 0 && i> animationIndex) continue; serieData.canShowLabel = true; var emphasis = (m_Tooltip.show && i == (int)m_Tooltip.xValues[0] && j == (int)m_Tooltip.yValues[0]) || m_VisualMap.rtSelectedIndex > 0; @@ -175,6 +178,13 @@ namespace XCharts } } } + if (!serie.animation.IsFinish()) + { + float duration = serie.animation.duration > 0 ? (float)serie.animation.duration / 1000 : 1; + float speed = xCount / duration; + serie.animation.CheckProgress(Time.deltaTime * speed); + RefreshChart(); + } } protected void DrawVisualMap(VertexHelper vh) diff --git a/Scripts/UI/Internal/CoordinateChart_DrawScatter.cs b/Scripts/UI/Internal/CoordinateChart_DrawScatter.cs index 991baff7..14ed0cdf 100644 --- a/Scripts/UI/Internal/CoordinateChart_DrawScatter.cs +++ b/Scripts/UI/Internal/CoordinateChart_DrawScatter.cs @@ -7,7 +7,7 @@ namespace XCharts { public partial class CoordinateChart { - protected void DrawScatterSerie(VertexHelper vh,int colorIndex, Serie serie) + protected void DrawScatterSerie(VertexHelper vh, int colorIndex, Serie serie) { var yAxis = m_YAxises[serie.axisIndex]; var xAxis = m_XAxises[serie.axisIndex]; @@ -16,6 +16,8 @@ namespace XCharts int maxCount = serie.maxShow > 0 ? (serie.maxShow > serie.dataCount ? serie.dataCount : serie.maxShow) : serie.dataCount; + serie.animation.InitProgress(1, 0, 1); + var rate = serie.animation.GetCurrRate(); for (int n = serie.minShow; n < maxCount; n++) { var serieData = serie.GetDataList(m_DataZoom)[n]; @@ -37,6 +39,7 @@ namespace XCharts { symbolSize = serie.symbol.GetSize(datas); } + symbolSize *= rate; if (symbolSize > 100) symbolSize = 100; if (serie.type == SerieType.EffectScatter) { @@ -53,6 +56,13 @@ namespace XCharts DrawSymbol(vh, serie.symbol.type, symbolSize, 3, pos, color); } } + if (!serie.animation.IsFinish()) + { + float duration = serie.animation.duration > 0 ? (float)serie.animation.duration / 1000 : 1; + float speed = 1 / duration; + serie.animation.CheckProgress(Time.deltaTime * speed); + RefreshChart(); + } } } } \ No newline at end of file diff --git a/Scripts/UI/RadarChart.cs b/Scripts/UI/RadarChart.cs index d508b406..025a4d72 100644 --- a/Scripts/UI/RadarChart.cs +++ b/Scripts/UI/RadarChart.cs @@ -206,10 +206,12 @@ namespace XCharts int indicatorNum = radar.indicatorList.Count; var angle = 2 * Mathf.PI / indicatorNum; Vector3 p = radar.centerPos; + serie.animation.InitProgress(1,0,1); if (!IsActive(i)) { continue; } + var rate = serie.animation.GetCurrRate(); for (int j = 0; j < serie.data.Count; j++) { var serieData = serie.data[j]; @@ -263,6 +265,7 @@ namespace XCharts var radius = max < 0 ? radar.actualRadius - radar.actualRadius * value / max : radar.actualRadius * value / max; var currAngle = n * angle; + radius *= rate; if (n == 0) { startPoint = new Vector3(p.x + radius * Mathf.Sin(currAngle), @@ -304,6 +307,13 @@ namespace XCharts } } } + if (!serie.animation.IsFinish()) + { + float duration = serie.animation.duration > 0 ? (float)serie.animation.duration / 1000 : 1; + float speed = 1 / duration; + serie.animation.CheckProgress(Time.deltaTime * speed); + RefreshChart(); + } } }