增加RadarChart、ScatterChart和HeatmapChart的起始动画效果

This commit is contained in:
monitor1394
2019-10-14 19:22:30 +08:00
parent 665f8ea2b8
commit dd5c6a2ffe
4 changed files with 49 additions and 1 deletions

View File

@@ -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;

View File

@@ -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)

View File

@@ -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();
}
}
}
}

View File

@@ -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();
}
}
}