增加Animation的添加动画支持

This commit is contained in:
monitor1394
2023-07-04 13:07:44 +08:00
parent bc1596f8d3
commit 0adc9e71e5
26 changed files with 543 additions and 230 deletions

View File

@@ -184,7 +184,8 @@ namespace XCharts.Runtime
showData.Count;
var isPercentStack = SeriesHelper.IsPercentStack<Bar>(chart.series, serie.stack);
bool dataChanging = false;
float dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
float dataChangeDuration = serie.animation.GetDataChangeDuration();
var dataAddDuration = serie.animation.GetDataAddDuration();
double yMinValue = relativedAxis.context.minValue;
double yMaxValue = relativedAxis.context.maxValue;
@@ -211,7 +212,7 @@ namespace XCharts.Runtime
var state = SerieHelper.GetSerieState(serie, serieData);
var itemStyle = SerieHelper.GetItemStyle(serie, serieData, state);
var value = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse);
var relativedValue = serieData.GetCurrData(1, dataChangeDuration, relativedAxis.inverse, yMinValue, yMaxValue, serie.animation.unscaledTime);
var relativedValue = serieData.GetCurrData(1, dataAddDuration, dataChangeDuration, relativedAxis.inverse, yMinValue, yMaxValue, serie.animation.unscaledTime);
var borderWidth = relativedValue == 0 ? 0 : itemStyle.runtimeBorderWidth;
var borderGap = relativedValue == 0 ? 0 : itemStyle.borderGap;
var borderGapAndWidth = borderWidth + borderGap;
@@ -236,7 +237,6 @@ namespace XCharts.Runtime
{
barHig = AxisHelper.GetAxisValueLength(m_SerieGrid, relativedAxis, categoryWidth, relativedValue);
}
float currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig);
Vector3 plb, plt, prt, prb, top;
UpdateRectPosition(m_SerieGrid, isY, relativedValue, pX, pY, gap, borderWidth, barWidth, currHig,

View File

@@ -134,7 +134,8 @@ namespace XCharts.Runtime
showData.Count;
bool dataChanging = false;
float dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
float dataChangeDuration = serie.animation.GetDataChangeDuration();
var dataAddDuration = serie.animation.GetDataAddDuration();
double yMinValue = relativedAxis.context.minValue;
double yMaxValue = relativedAxis.context.maxValue;
@@ -161,7 +162,7 @@ namespace XCharts.Runtime
var highlight = serieData.context.highlight || serie.highlight;
var itemStyle = SerieHelper.GetItemStyle(serie, serieData);
var value = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse);
var relativedValue = serieData.GetCurrData(1, dataChangeDuration, relativedAxis.inverse, yMinValue, yMaxValue, serie.animation.unscaledTime);
var relativedValue = serieData.GetCurrData(1, dataAddDuration, dataChangeDuration, relativedAxis.inverse, yMinValue, yMaxValue, serie.animation.unscaledTime);
var borderWidth = relativedValue == 0 ? 0 : itemStyle.runtimeBorderWidth;
if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting))

View File

@@ -99,7 +99,8 @@ namespace XCharts.Runtime
showData.Count;
bool dataChanging = false;
float dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
float dataChangeDuration = serie.animation.GetDataChangeDuration();
var dataAddDuration = serie.animation.GetDataAddDuration();
var unscaledTime = serie.animation.unscaledTime;
double yMinValue = yAxis.context.minValue;
double yMaxValue = yAxis.context.maxValue;
@@ -119,10 +120,10 @@ namespace XCharts.Runtime
var state = SerieHelper.GetSerieState(serie, serieData);
var itemStyle = SerieHelper.GetItemStyle(serie, serieData, state);
var startDataIndex = serieData.data.Count > 4 ? 1 : 0;
var open = serieData.GetCurrData(startDataIndex, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var close = serieData.GetCurrData(startDataIndex + 1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var lowest = serieData.GetCurrData(startDataIndex + 2, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var heighest = serieData.GetCurrData(startDataIndex + 3, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var open = serieData.GetCurrData(startDataIndex, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var close = serieData.GetCurrData(startDataIndex + 1, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var lowest = serieData.GetCurrData(startDataIndex + 2, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var heighest = serieData.GetCurrData(startDataIndex + 3, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var isRise = yAxis.inverse ? close<open : close> open;
var borderWidth = open == 0 ? 0f :
(itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth :

View File

@@ -99,7 +99,8 @@ namespace XCharts.Runtime
showData.Count;
bool dataChanging = false;
float dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
float dataChangeDuration = serie.animation.GetDataChangeDuration();
var dataAddDuration = serie.animation.GetDataAddDuration();
var unscaledTime = serie.animation.unscaledTime;
double yMinValue = yAxis.context.minValue;
double yMaxValue = yAxis.context.maxValue;
@@ -118,10 +119,10 @@ namespace XCharts.Runtime
continue;
}
var startDataIndex = serieData.data.Count > 4 ? 1 : 0;
var open = serieData.GetCurrData(startDataIndex, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var close = serieData.GetCurrData(startDataIndex + 1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var lowest = serieData.GetCurrData(startDataIndex + 2, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var heighest = serieData.GetCurrData(startDataIndex + 3, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var open = serieData.GetCurrData(startDataIndex, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var close = serieData.GetCurrData(startDataIndex + 1, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var lowest = serieData.GetCurrData(startDataIndex + 2, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var heighest = serieData.GetCurrData(startDataIndex + 3, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var isRise = yAxis.inverse ? close<open : close> open;
var borderWidth = open == 0 ? 0f :
(itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth :

View File

@@ -209,7 +209,8 @@ namespace XCharts.Runtime
serie.animation.InitProgress(0, xCount);
var animationIndex = serie.animation.GetCurrIndex();
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var dataChangeDuration = serie.animation.GetDataChangeDuration();
var dataAddDuration = serie.animation.GetDataAddDuration();
var unscaledTime = serie.animation.unscaledTime;
var dataChanging = false;
serie.containerIndex = m_SerieGrid.index;
@@ -246,7 +247,7 @@ namespace XCharts.Runtime
var symbol = SerieHelper.GetSerieSymbol(serie, serieData, state);
var isRectSymbol = symbol.type == SymbolType.Rect;
SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, state);
var value = serieData.GetCurrData(dimension, dataChangeDuration, yAxis.inverse,
var value = serieData.GetCurrData(dimension, dataAddDuration, dataChangeDuration, yAxis.inverse,
yAxis.context.minValue, yAxis.context.maxValue, unscaledTime);
if (serieData.IsDataChanged()) dataChanging = true;
var pos = new Vector3(zeroX + (i + 0.5f) * xWidth,

View File

@@ -288,7 +288,8 @@ namespace XCharts.Runtime
serie.sampleAverage :
DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate);
var dataChanging = false;
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var dataChangeDuration = serie.animation.GetDataChangeDuration();
var dataAddDuration = serie.animation.GetDataAddDuration();
var unscaledTime = serie.animation.unscaledTime;
var interacting = false;
@@ -325,7 +326,7 @@ namespace XCharts.Runtime
var np = Vector3.zero;
var xValue = axis.IsCategory() ? realIndex : serieData.GetData(0, axis.inverse);
var relativedValue = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow,
maxCount, totalAverage, i, dataChangeDuration, ref dataChanging, relativedAxis, unscaledTime);
maxCount, totalAverage, i, 0, dataChangeDuration, ref dataChanging, relativedAxis, unscaledTime);
serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, m_SerieGrid, xValue, relativedValue,
i, scaleWid, isStack, ref np);

View File

@@ -172,7 +172,8 @@ namespace XCharts.Runtime
serie.sampleAverage :
DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate);
var dataChanging = false;
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var dataChangeDuration = serie.animation.GetDataChangeDuration();
var dataAddDuration = serie.animation.GetDataAddDuration();
var unscaledTime = serie.animation.unscaledTime;
var interacting = false;
@@ -200,7 +201,7 @@ namespace XCharts.Runtime
var np = Vector3.zero;
var xValue = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse);
var relativedValue = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow,
maxCount, totalAverage, i, dataChangeDuration, ref dataChanging, relativedAxis, unscaledTime);
maxCount, totalAverage, i, dataAddDuration, dataChangeDuration, ref dataChanging, relativedAxis, unscaledTime);
serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, m_SerieGrid, xValue, relativedValue,
i, scaleWid, false, ref np);

View File

@@ -176,8 +176,6 @@ namespace XCharts.Runtime
if (sd.show && serie.pieRoseType == RoseType.Area) showdataCount++;
sd.context.canShowLabel = false;
}
float dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
bool isAllZeroValue = SerieHelper.IsAllZeroValue(serie, 1);
var dataTotalFilterMinAngle = runtimePieDataTotal;
if (isAllZeroValue)
@@ -195,7 +193,7 @@ namespace XCharts.Runtime
for (int n = 0; n < data.Count; n++)
{
var serieData = data[n];
var value = isAllZeroValue ? zeroReplaceValue : serieData.GetCurrData(1, dataChangeDuration, unscaledTime);
var value = isAllZeroValue ? zeroReplaceValue : serieData.GetCurrData(1, serie.animation);
serieData.context.startAngle = startDegree;
serieData.context.toAngle = startDegree;
serieData.context.halfAngle = startDegree;

View File

@@ -237,8 +237,6 @@ namespace XCharts.Runtime
var rate = serie.animation.GetCurrRate();
var dataChanging = false;
var interacting = false;
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
SerieHelper.GetAllMinMaxData(serie, m_RadarCoord.ceilRate);
Color32 areaColor, areaToColor;
var startAngle = m_RadarCoord.startAngle * Mathf.PI / 180;
@@ -265,7 +263,7 @@ namespace XCharts.Runtime
if (n >= serieData.data.Count) break;
var min = m_RadarCoord.GetIndicatorMin(n);
var max = m_RadarCoord.GetIndicatorMax(n);
var value = serieData.GetCurrData(n, dataChangeDuration, unscaledTime);
var value = serieData.GetCurrData(n, serie.animation);
if (serieData.IsDataChanged()) dataChanging = true;
if (max == 0)
{
@@ -379,8 +377,6 @@ namespace XCharts.Runtime
var rate = serie.animation.GetCurrRate();
var dataChanging = false;
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
var startIndex = GetStartShowIndex(serie);
var endIndex = GetEndShowIndex(serie);
var startAngle = m_RadarCoord.startAngle * Mathf.PI / 180;
@@ -404,7 +400,7 @@ namespace XCharts.Runtime
var index = serieData.index;
var p = m_RadarCoord.context.center;
var max = m_RadarCoord.GetIndicatorMax(index);
var value = serieData.GetCurrData(1, dataChangeDuration, unscaledTime);
var value = serieData.GetCurrData(1, serie.animation);
if (serieData.IsDataChanged()) dataChanging = true;
if (max == 0)
{

View File

@@ -100,7 +100,7 @@ namespace XCharts.Runtime
param.color = color;
param.marker = SerieHelper.GetItemMarker(serie, serieData, marker);
param.itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter);
param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter);;
param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter); ;
param.columns.Clear();
param.columns.Add(param.marker);
@@ -180,8 +180,6 @@ namespace XCharts.Runtime
var data = serie.data;
serie.animation.InitProgress(serie.startAngle, serie.startAngle + 360);
SerieHelper.UpdateCenter(serie, chart.chartPosition, chart.chartWidth, chart.chartHeight);
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
var ringWidth = serie.context.outsideRadius - serie.context.insideRadius;
var dataChanging = false;
for (int j = 0; j < data.Count; j++)
@@ -189,16 +187,18 @@ namespace XCharts.Runtime
var serieData = data[j];
if (!serieData.show) continue;
if (serieData.IsDataChanged()) dataChanging = true;
var value = serieData.GetFirstData(unscaledTime, dataChangeDuration);
var outsideRadius = serie.context.outsideRadius - j * (ringWidth + serie.gap);
if (outsideRadius < 0) continue;
var value = serieData.GetCurrData(0, serie.animation, false, false);
var max = serieData.GetLastData();
var degree = (float) (360 * value / max);
var degree = (float)(360 * value / max);
var startDegree = GetStartAngle(serie);
var toDegree = GetToAngle(serie, degree);
var itemStyle = SerieHelper.GetItemStyle(serie, serieData);
var colorIndex = chart.GetLegendRealShowNameIndex(serieData.legendName);
Color32 itemColor, itemToColor;
SerieHelper.GetItemColor(out itemColor, out itemToColor, serie, serieData, chart.theme, colorIndex);
var outsideRadius = serie.context.outsideRadius - j * (ringWidth + serie.gap);
var insideRadius = outsideRadius - ringWidth;
var borderWidth = itemStyle.borderWidth;
var borderColor = itemStyle.borderColor;

View File

@@ -133,7 +133,7 @@ namespace XCharts.Runtime
serie.dataCount;
serie.animation.InitProgress(0, 1);
var rate = serie.animation.GetCurrRate();
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var dataChangeDuration = serie.animation.GetDataChangeDuration();
var unscaledTime = serie.animation.unscaledTime;
var dataChanging = false;
var interacting = false;
@@ -157,8 +157,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, dataChangeDuration, unscaledTime, xAxis.inverse);
double yValue = serieData.GetCurrData(1, dataChangeDuration, unscaledTime, yAxis.inverse);
double xValue = serieData.GetCurrData(0, 0, dataChangeDuration, unscaledTime, xAxis.inverse);
double yValue = serieData.GetCurrData(1, 0, dataChangeDuration, unscaledTime, yAxis.inverse);
if (serieData.IsDataChanged())
dataChanging = true;
@@ -237,7 +237,7 @@ namespace XCharts.Runtime
serie.animation.InitProgress(0, 1);
var rate = serie.animation.GetCurrRate();
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var dataChangeDuration = serie.animation.GetDataChangeDuration();
var unscaledTime = serie.animation.unscaledTime;
var dataChanging = false;
var dataList = serie.GetDataList(xDataZoom);
@@ -264,7 +264,7 @@ namespace XCharts.Runtime
dataChanging = true;
var pos = Vector3.zero;
var xValue = serieData.GetCurrData(0, dataChangeDuration, unscaledTime, axis.inverse);
var xValue = serieData.GetCurrData(0, 0, dataChangeDuration, unscaledTime, axis.inverse);
if (axis.orient == Orient.Horizonal)
{

View File

@@ -1176,12 +1176,13 @@ namespace XCharts.Runtime
}
else
{
var duration = animation.GetUpdateAnimationDuration();
var duration = animation.GetDataChangeDuration();
var dataAddDuration = animation.GetDataAddDuration();
var unscaledTime = animation.unscaledTime;
foreach (var sdata in data)
{
if (sdata.show && !IsIgnoreValue(sdata, sdata.data[1]))
total += sdata.GetCurrData(1, duration, unscaledTime);
total += sdata.GetCurrData(1, dataAddDuration, duration, unscaledTime);
}
}
return total;
@@ -1301,6 +1302,7 @@ namespace XCharts.Runtime
m_Data.Insert(0, serieData);
else
m_Data.Add(serieData);
serieData.OnAdd(animation);
SetVerticesDirty();
dataDirty = true;
m_NeedUpdateFilterData = true;
@@ -1535,7 +1537,7 @@ namespace XCharts.Runtime
var serieData = GetDataList(dataZoom);
if (index < serieData.Count)
{
var value = serieData[index].GetCurrData(1, animation.GetUpdateAnimationDuration(), animation.unscaledTime);
var value = serieData[index].GetCurrData(1, 0, animation.GetDataChangeDuration(), animation.unscaledTime);
if (showAsPositiveNumber)
value = Math.Abs(value);
return value;
@@ -1697,7 +1699,7 @@ namespace XCharts.Runtime
if (index >= 0 && index < m_Data.Count)
{
var animationOpen = animation.enable;
var animationDuration = animation.GetUpdateAnimationDuration();
var animationDuration = animation.GetDataChangeDuration();
var unscaledTime = animation.unscaledTime;
var flag = m_Data[index].UpdateData(dimension, value, animationOpen, unscaledTime, animationDuration);
if (flag)
@@ -1724,7 +1726,7 @@ namespace XCharts.Runtime
{
var serieData = m_Data[index];
var animationOpen = animation.enable;
var animationDuration = animation.GetUpdateAnimationDuration();
var animationDuration = animation.GetDataChangeDuration();
var unscaledTime = animation.unscaledTime;
for (int i = 0; i < values.Count; i++)
serieData.UpdateData(i, values[i], animationOpen, unscaledTime, animationDuration);

View File

@@ -152,6 +152,8 @@ namespace XCharts.Runtime
private List<double> m_PreviousData = new List<double>();
private List<float> m_DataUpdateTime = new List<float>();
private List<bool> m_DataUpdateFlag = new List<bool>();
private List<float> m_DataAddTime = new List<float>();
private List<bool> m_DataAddFlag = new List<bool>();
private List<Vector2> m_PolygonPoints = new List<Vector2>();
public override bool vertsDirty
@@ -222,6 +224,8 @@ namespace XCharts.Runtime
m_PreviousData.Clear();
m_DataUpdateTime.Clear();
m_DataUpdateFlag.Clear();
m_DataAddTime.Clear();
m_DataAddFlag.Clear();
m_Labels.Clear();
m_LabelLines.Clear();
m_ItemStyles.Clear();
@@ -234,6 +238,24 @@ namespace XCharts.Runtime
m_SelectStyles.Clear();
}
public void OnAdd(AnimationStyle animation, double startValue = 0)
{
#if UNITY_EDITOR
if (!Application.isPlaying)
return;
#endif
m_DataAddTime.Clear();
m_DataAddFlag.Clear();
if (animation.GetDataAddDuration() > 0)
{
for (int i = 0; i < m_Data.Count; i++)
{
m_DataAddTime.Add(animation.unscaledTime ? Time.unscaledTime : Time.time);
m_DataAddFlag.Add(true);
}
}
}
[Obsolete("GetOrAddComponent is obsolete. Use EnsureComponent instead.")]
public T GetOrAddComponent<T>() where T : ChildComponent, ISerieDataComponent
{
@@ -469,7 +491,7 @@ namespace XCharts.Runtime
public double GetFirstData(bool unscaledTime, float animationDuration = 500f)
{
if (m_Data.Count > 0) return GetCurrData(0, animationDuration, unscaledTime);
if (m_Data.Count > 0) return GetCurrData(0, 0, animationDuration, unscaledTime);
return 0;
}
@@ -479,62 +501,137 @@ namespace XCharts.Runtime
return 0;
}
public double GetCurrData(int index, float animationDuration = 500f, bool unscaledTime = false, bool inverse = false)
public double GetCurrData(int index, AnimationStyle animation, bool inverse = false, bool loop = false)
{
return GetCurrData(index, animationDuration, inverse, 0, 0, unscaledTime);
if (animation == null || !animation.enable)
return GetData(index, inverse);
else
return GetCurrData(index, animation.GetDataAddDuration(), animation.GetDataChangeDuration(),
inverse, 0, 0, animation.unscaledTime, loop);
}
public double GetCurrData(int index, float animationDuration, bool inverse, double min, double max, bool unscaledTime, bool loop = false)
public double GetCurrData(int index, AnimationStyle animation, bool inverse, double min, double max, bool loop = false)
{
if (index < m_DataUpdateFlag.Count && m_DataUpdateFlag[index] && animationDuration > 0)
if (animation == null || !animation.enable)
return GetData(index, inverse);
else
return GetCurrData(index, animation.GetDataAddDuration(), animation.GetDataChangeDuration(),
inverse, min, max, animation.unscaledTime, loop);
}
public double GetCurrData(int index, float dataAddDuration = 500f, float animationDuration = 500f, bool unscaledTime = false, bool inverse = false)
{
return GetCurrData(index, dataAddDuration, animationDuration, inverse, 0, 0, unscaledTime);
}
public double GetCurrData(int index, float dataAddDuration, float animationDuration, bool inverse, double min, double max, bool unscaledTime, bool loop = false)
{
if (dataAddDuration > 0)
{
var time = (unscaledTime ? Time.unscaledTime : Time.time) - m_DataUpdateTime[index];
if (index < m_DataAddFlag.Count && m_DataAddFlag[index])
{
var time = (unscaledTime ? Time.unscaledTime : Time.time) - m_DataAddTime[index];
var total = dataAddDuration / 1000;
var rate = time / total;
if (rate > 1) rate = 1;
if (rate < 1)
{
var prev = min > 0 ? min : 0;
var next = GetData(index);
var curr = MathUtil.Lerp(prev, next, rate);
curr = inverse ? -curr : curr;
return curr;
}
else
{
for (int i = 0; i < m_DataAddFlag.Count; i++)
m_DataAddFlag[i] = false;
return GetData(index, inverse);
}
}
}
if (animationDuration > 0)
{
if (index < m_DataUpdateFlag.Count && m_DataUpdateFlag[index])
{
var time = (unscaledTime ? Time.unscaledTime : Time.time) - m_DataUpdateTime[index];
var total = animationDuration / 1000;
var rate = time / total;
if (rate > 1) rate = 1;
if (rate < 1)
{
CheckLastData(unscaledTime);
var prev = GetPreviousData(index);
var next = GetData(index);
if (loop && next <= min && prev != 0)
{
next = max;
}
var curr = MathUtil.Lerp(prev, next, rate);
if (min != 0 || max != 0)
{
if (inverse)
{
var temp = min;
min = -max;
max = -temp;
}
var pre = m_PreviousData[index];
if (pre < min)
{
m_PreviousData[index] = min;
curr = min;
}
else if (pre > max)
{
m_PreviousData[index] = max;
curr = max;
}
}
curr = inverse ? -curr : curr;
return curr;
}
else
{
for (int i = 0; i < m_DataUpdateFlag.Count; i++)
m_DataUpdateFlag[i] = false;
return GetData(index, inverse);
}
}
else
{
return GetData(index, inverse);
}
}
return GetData(index, inverse);
}
public double GetAddAnimationData(double min, double max, float animationDuration = 500f, bool unscaledTime = false)
{
if (animationDuration > 0 && m_DataAddFlag.Count > 0 && m_DataAddFlag[0])
{
var time = (unscaledTime ? Time.unscaledTime : Time.time) - m_DataAddTime[0];
var total = animationDuration / 1000;
var rate = time / total;
if (rate > 1) rate = 1;
if (rate < 1)
{
CheckLastData(unscaledTime);
var prev = GetPreviousData(index);
var next = GetData(index);
if (loop)
{
if (next <= min && prev != 0) next = max;
}
var curr = MathUtil.Lerp(prev, next, rate);
if (min != 0 || max != 0)
{
if (inverse)
{
var temp = min;
min = -max;
max = -temp;
}
var pre = m_PreviousData[index];
if (pre < min)
{
m_PreviousData[index] = min;
curr = min;
}
else if (pre > max)
{
m_PreviousData[index] = max;
curr = max;
}
}
curr = inverse ? -curr : curr;
var curr = MathUtil.Lerp(min, max, rate);
return curr;
}
else
{
m_DataUpdateFlag[index] = false;
return GetData(index, inverse);
for (int i = 0; i < m_DataAddFlag.Count; i++)
m_DataAddFlag[i] = false;
return max;
}
}
else
{
return GetData(index, inverse);
return max;
}
}
@@ -600,8 +697,7 @@ namespace XCharts.Runtime
if (dimension >= 0 && dimension < data.Count)
{
CheckLastData(unscaledTime);
m_PreviousData[dimension] = GetCurrData(dimension, animationDuration, unscaledTime);
//m_PreviousData[dimension] = data[dimension];;
m_PreviousData[dimension] = GetCurrData(dimension, 0, animationDuration, unscaledTime);
m_DataUpdateTime[dimension] = (unscaledTime ? Time.unscaledTime : Time.time);
m_DataUpdateFlag[dimension] = updateAnimation;
data[dimension] = value;
@@ -640,6 +736,8 @@ namespace XCharts.Runtime
{
for (int i = 0; i < m_DataUpdateFlag.Count; i++)
if (m_DataUpdateFlag[i]) return true;
for (int i = 0; i < m_DataAddFlag.Count; i++)
if (m_DataAddFlag[i]) return true;
return false;
}

View File

@@ -401,7 +401,8 @@ namespace XCharts.Runtime
if (!m_InitedLabel)
return;
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var dataChangeDuration = serie.animation.GetDataChangeDuration();
var dataAddDuration = serie.animation.GetDataAddDuration();
var unscaledTime = serie.animation.unscaledTime;
var needCheck = serie.context.dataIndexs.Count > 0;
foreach (var serieData in serie.data)
@@ -432,7 +433,7 @@ namespace XCharts.Runtime
{
if (i >= serieData.context.dataPoints.Count) continue;
var labelObject = serieData.context.dataLabels[i];
var value = serieData.GetCurrData(i, dataChangeDuration, unscaledTime);
var value = serieData.GetCurrData(i, dataAddDuration, dataChangeDuration, unscaledTime);
var content = string.IsNullOrEmpty(currLabel.formatter) ?
ChartCached.NumberToStr(value, currLabel.numericFormatter) :
SerieLabelHelper.GetFormatterContent(serie, serieData, value, total,
@@ -452,7 +453,7 @@ namespace XCharts.Runtime
}
else
{
var value = serieData.GetCurrData(defaultDimension, dataChangeDuration, unscaledTime);
var value = serieData.GetCurrData(defaultDimension, dataAddDuration, dataChangeDuration, unscaledTime);
var total = serie.GetDataTotal(defaultDimension, serieData);
var color = chart.GetItemColor(serie, serieData);
var content = string.IsNullOrEmpty(currLabel.formatter) ?

View File

@@ -698,6 +698,7 @@ namespace XCharts.Runtime
var symbol = stateStyle.symbol;
size = symbol.GetSize(serieData == null ? null : serieData.data, defaultSize);
}
size = (float)serieData.GetAddAnimationData(0, size, serie.animation.GetDataAddDuration());
return size;
}

View File

@@ -346,7 +346,8 @@ namespace XCharts.Runtime
if ((isPolar && serie.polarIndex != axisIndex) ||
(!isPolar && serie.yAxisIndex != axisIndex) ||
!serie.show) continue;
var updateDuration = serie.animation.enable ? serie.animation.dataChangeDuration : 0;
var updateDuration = serie.animation.GetDataChangeDuration();
var dataAddDuration = serie.animation.GetDataAddDuration();
var unscaledTime = serie.animation.unscaledTime;
if (isPercentStack && SeriesHelper.IsPercentStack<Bar>(series, serie.serieName))
{
@@ -372,7 +373,7 @@ namespace XCharts.Runtime
foreach (var data in showData)
{
var currData = performanceMode ? data.GetData(yValue ? 1 : 0, inverse) :
data.GetCurrData(yValue ? 1 : 0, updateDuration, unscaledTime, inverse);
data.GetCurrData(yValue ? 1 : 0, dataAddDuration, updateDuration, unscaledTime, inverse);
if (!serie.IsIgnoreValue(data, currData))
{
if (currData > max) max = currData;