[feature][animation] add UnscaledTime for animation #223

This commit is contained in:
monitor1394
2022-10-12 08:35:23 +08:00
parent ab8ced4aed
commit e1f20e0796
21 changed files with 88 additions and 56 deletions

View File

@@ -59,6 +59,7 @@
## master ## master
* (2022.10.12) 增加`Animation``UnscaledTime`支持设置动画是否受TimeScale的影响 (#223)
* (2022.10.10) 调整文档格式 * (2022.10.10) 调整文档格式
* (2022.10.10) 增加`Line``SmoothLimit`可控制平滑曲线不同效果 * (2022.10.10) 增加`Line``SmoothLimit`可控制平滑曲线不同效果
* (2022.10.05) 修复`Serie`隐藏时`Tooltip`还显示信息的问题 * (2022.10.05) 修复`Serie`隐藏时`Tooltip`还显示信息的问题

View File

@@ -21,7 +21,11 @@ namespace XCharts.Editor
PropertyField(prop, "m_FadeOutDelay"); PropertyField(prop, "m_FadeOutDelay");
PropertyField(prop, "m_DataChangeEnable"); PropertyField(prop, "m_DataChangeEnable");
PropertyField(prop, "m_DataChangeDuration"); PropertyField(prop, "m_DataChangeDuration");
PropertyField(prop, "m_ActualDuration"); PropertyField(prop, "m_UnscaledTime");
// using(new EditorGUI.DisabledGroupScope(true))
// {
// PropertyField(prop, "m_ActualDuration");
// }
--EditorGUI.indentLevel; --EditorGUI.indentLevel;
} }
} }

View File

@@ -61,6 +61,7 @@ namespace XCharts.Runtime
[SerializeField] private bool m_DataChangeEnable = true; [SerializeField] private bool m_DataChangeEnable = true;
[SerializeField] private float m_DataChangeDuration = 500; [SerializeField] private float m_DataChangeDuration = 500;
[SerializeField] private float m_ActualDuration; [SerializeField] private float m_ActualDuration;
[SerializeField][Since("v3.4.0")] private bool m_UnscaledTime;
/// <summary> /// <summary>
/// 自定义渐入动画延时函数。返回ms值。 /// 自定义渐入动画延时函数。返回ms值。
/// </summary> /// </summary>
@@ -133,6 +134,11 @@ namespace XCharts.Runtime
/// </summary> /// </summary>
public float dataChangeDuration { get { return m_DataChangeDuration; } set { m_DataChangeDuration = value < 0 ? 0 : value; } } public float dataChangeDuration { get { return m_DataChangeDuration; } set { m_DataChangeDuration = value < 0 ? 0 : value; } }
/// <summary> /// <summary>
/// Animation updates independently of Time.timeScale.
/// |动画是否受TimeScaled的影响。默认为 false 受TimeScaled的影响。
/// </summary>
public bool unscaledTime { get { return m_UnscaledTime; } set { m_UnscaledTime = value; } }
/// <summary>
/// 渐入动画完成回调 /// 渐入动画完成回调
/// </summary> /// </summary>
public Action fadeInFinishCallback { get; set; } public Action fadeInFinishCallback { get; set; }
@@ -464,7 +470,7 @@ namespace XCharts.Runtime
m_ActualDuration = (int) ((Time.time - startTime) * 1000) - fadeInDelay; m_ActualDuration = (int) ((Time.time - startTime) * 1000) - fadeInDelay;
var duration = GetCurrAnimationDuration(); var duration = GetCurrAnimationDuration();
var delta = (float) (total / duration * Time.deltaTime); var delta = (float) (total / duration * (m_UnscaledTime ? Time.unscaledDeltaTime : Time.deltaTime));
if (m_FadeOut) if (m_FadeOut)
{ {
m_CurrDetailProgress -= delta; m_CurrDetailProgress -= delta;
@@ -522,7 +528,7 @@ namespace XCharts.Runtime
else else
{ {
var duration = GetCurrAnimationDuration(dataIndex); var duration = GetCurrAnimationDuration(dataIndex);
var delta = (destProgress - startProgress) / duration * Time.deltaTime; var delta = (destProgress - startProgress) / duration * (m_UnscaledTime ? Time.unscaledDeltaTime : Time.deltaTime);
currHig = currHig + (m_FadeOut ? -delta : delta); currHig = currHig + (m_FadeOut ? -delta : delta);
if (m_FadeOut) if (m_FadeOut)
{ {
@@ -555,7 +561,7 @@ namespace XCharts.Runtime
return; return;
var duration = GetCurrAnimationDuration(); var duration = GetCurrAnimationDuration();
var delta = dest / duration * Time.deltaTime; var delta = dest / duration * (m_UnscaledTime ? Time.unscaledDeltaTime : Time.deltaTime);
if (m_FadeOut) if (m_FadeOut)
{ {
m_CurrSymbolProgress -= delta; m_CurrSymbolProgress -= delta;

View File

@@ -478,11 +478,13 @@ namespace XCharts.Runtime
var totalAverage = serie.sampleAverage > 0 ? serie.sampleAverage : var totalAverage = serie.sampleAverage > 0 ? serie.sampleAverage :
DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate); DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate);
var dataChanging = false; var dataChanging = false;
var animationDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
for (int i = 0; i < maxCount; i += rate) for (int i = 0; i < maxCount; i += rate)
{ {
double value = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow, maxCount, totalAverage, i, double value = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow, maxCount, totalAverage, i,
serie.animation.GetUpdateAnimationDuration(), ref dataChanging, axis); animationDuration, ref dataChanging, axis, unscaledTime);
float pX = dataZoom.context.x + i * scaleWid; float pX = dataZoom.context.x + i * scaleWid;
float dataHig = (float) ((maxValue - minValue) == 0 ? 0 : float dataHig = (float) ((maxValue - minValue) == 0 ? 0 :
(value - minValue) / (maxValue - minValue) * dataZoom.context.height); (value - minValue) / (maxValue - minValue) * dataZoom.context.height);
@@ -567,11 +569,13 @@ namespace XCharts.Runtime
var totalAverage = serie.sampleAverage > 0 ? serie.sampleAverage : var totalAverage = serie.sampleAverage > 0 ? serie.sampleAverage :
DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate); DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate);
var dataChanging = false; var dataChanging = false;
var animationDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
for (int i = 0; i < maxCount; i += rate) for (int i = 0; i < maxCount; i += rate)
{ {
double value = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow, maxCount, totalAverage, i, double value = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow, maxCount, totalAverage, i,
serie.animation.GetUpdateAnimationDuration(), ref dataChanging, axis); animationDuration, ref dataChanging, axis, unscaledTime);
float pY = dataZoom.context.y + i * scaleWid; float pY = dataZoom.context.y + i * scaleWid;
float dataHig = (maxValue - minValue) == 0 ? 0 : float dataHig = (maxValue - minValue) == 0 ? 0 :
(float) ((value - minValue) / (maxValue - minValue) * dataZoom.context.width); (float) ((value - minValue) / (maxValue - minValue) * dataZoom.context.width);

View File

@@ -23,7 +23,7 @@ namespace XCharts.Runtime
public static double SampleValue(ref List<SerieData> showData, SampleType sampleType, int rate, public static double SampleValue(ref List<SerieData> showData, SampleType sampleType, int rate,
int minCount, int maxCount, double totalAverage, int index, float dataChangeDuration, int minCount, int maxCount, double totalAverage, int index, float dataChangeDuration,
ref bool dataChanging, Axis axis) ref bool dataChanging, Axis axis, bool unscaledTime)
{ {
var inverse = axis.inverse; var inverse = axis.inverse;
var minValue = axis.context.minValue; var minValue = axis.context.minValue;
@@ -33,7 +33,7 @@ namespace XCharts.Runtime
if (showData[index].IsDataChanged()) if (showData[index].IsDataChanged())
dataChanging = true; dataChanging = true;
return showData[index].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue); return showData[index].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
} }
switch (sampleType) switch (sampleType)
{ {
@@ -44,7 +44,7 @@ namespace XCharts.Runtime
for (int i = index; i > index - rate; i--) for (int i = index; i > index - rate; i--)
{ {
count++; count++;
total += showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue); total += showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
if (showData[i].IsDataChanged()) if (showData[i].IsDataChanged())
dataChanging = true; dataChanging = true;
} }
@@ -57,7 +57,7 @@ namespace XCharts.Runtime
double max = double.MinValue; double max = double.MinValue;
for (int i = index; i > index - rate; i--) for (int i = index; i > index - rate; i--)
{ {
var value = showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue); var value = showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
if (value > max) if (value > max)
max = value; max = value;
@@ -70,7 +70,7 @@ namespace XCharts.Runtime
double min = double.MaxValue; double min = double.MaxValue;
for (int i = index; i > index - rate; i--) for (int i = index; i > index - rate; i--)
{ {
var value = showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue); var value = showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
if (value < min) if (value < min)
min = value; min = value;
@@ -85,7 +85,7 @@ namespace XCharts.Runtime
total = 0; total = 0;
for (int i = index; i > index - rate; i--) for (int i = index; i > index - rate; i--)
{ {
var value = showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue); var value = showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
total += value; total += value;
if (value < min) if (value < min)
min = value; min = value;
@@ -104,7 +104,7 @@ namespace XCharts.Runtime
if (showData[index].IsDataChanged()) if (showData[index].IsDataChanged())
dataChanging = true; dataChanging = true;
return showData[index].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue); return showData[index].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
} }
} }
} }

View File

@@ -221,7 +221,7 @@ namespace XCharts.Runtime
var state = SerieHelper.GetSerieState(serie, serieData); var state = SerieHelper.GetSerieState(serie, serieData);
var itemStyle = SerieHelper.GetItemStyle(serie, serieData, state); var itemStyle = SerieHelper.GetItemStyle(serie, serieData, state);
var value = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse); var value = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse);
var relativedValue = serieData.GetCurrData(1, dataChangeDuration, relativedAxis.inverse, yMinValue, yMaxValue); var relativedValue = serieData.GetCurrData(1, dataChangeDuration, relativedAxis.inverse, yMinValue, yMaxValue, serie.animation.unscaledTime);
var borderWidth = relativedValue == 0 ? 0 : itemStyle.runtimeBorderWidth; var borderWidth = relativedValue == 0 ? 0 : itemStyle.runtimeBorderWidth;
var borderGap = relativedValue == 0 ? 0 : itemStyle.borderGap; var borderGap = relativedValue == 0 ? 0 : itemStyle.borderGap;
var borderGapAndWidth = borderWidth + borderGap; var borderGapAndWidth = borderWidth + borderGap;

View File

@@ -162,7 +162,7 @@ namespace XCharts.Runtime
var highlight = serieData.context.highlight || serie.highlight; var highlight = serieData.context.highlight || serie.highlight;
var itemStyle = SerieHelper.GetItemStyle(serie, serieData); var itemStyle = SerieHelper.GetItemStyle(serie, serieData);
var value = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse); var value = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse);
var relativedValue = serieData.GetCurrData(1, dataChangeDuration, relativedAxis.inverse, yMinValue, yMaxValue); var relativedValue = serieData.GetCurrData(1, dataChangeDuration, relativedAxis.inverse, yMinValue, yMaxValue, serie.animation.unscaledTime);
var borderWidth = relativedValue == 0 ? 0 : itemStyle.runtimeBorderWidth; var borderWidth = relativedValue == 0 ? 0 : itemStyle.runtimeBorderWidth;
if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting)) if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting))

View File

@@ -71,7 +71,7 @@ namespace XCharts.Runtime
param.columns.Clear(); param.columns.Clear();
param.columns.Add(param.marker); param.columns.Add(param.marker);
param.columns.Add(XCSettings.lang.GetCandlestickDimensionName(i-1)); param.columns.Add(XCSettings.lang.GetCandlestickDimensionName(i - 1));
param.columns.Add(ChartCached.NumberToStr(param.value, param.numericFormatter)); param.columns.Add(ChartCached.NumberToStr(param.value, param.numericFormatter));
paramList.Add(param); paramList.Add(param);
@@ -100,6 +100,7 @@ namespace XCharts.Runtime
bool dataChanging = false; bool dataChanging = false;
float dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); float dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
double yMinValue = yAxis.context.minValue; double yMinValue = yAxis.context.minValue;
double yMaxValue = yAxis.context.maxValue; double yMaxValue = yAxis.context.maxValue;
var isYAxis = false; var isYAxis = false;
@@ -118,10 +119,10 @@ namespace XCharts.Runtime
var state = SerieHelper.GetSerieState(serie, serieData); var state = SerieHelper.GetSerieState(serie, serieData);
var itemStyle = SerieHelper.GetItemStyle(serie, serieData, state); var itemStyle = SerieHelper.GetItemStyle(serie, serieData, state);
var startDataIndex = serieData.data.Count > 4 ? 1 : 0; var startDataIndex = serieData.data.Count > 4 ? 1 : 0;
var open = serieData.GetCurrData(startDataIndex, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var open = serieData.GetCurrData(startDataIndex, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var close = serieData.GetCurrData(startDataIndex + 1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var close = serieData.GetCurrData(startDataIndex + 1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var lowest = serieData.GetCurrData(startDataIndex + 2, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var lowest = serieData.GetCurrData(startDataIndex + 2, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var heighest = serieData.GetCurrData(startDataIndex + 3, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var heighest = serieData.GetCurrData(startDataIndex + 3, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var isRise = yAxis.inverse ? close<open : close> open; var isRise = yAxis.inverse ? close<open : close> open;
var borderWidth = open == 0 ? 0f : var borderWidth = open == 0 ? 0f :
(itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth : (itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth :

View File

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

View File

@@ -206,6 +206,7 @@ namespace XCharts.Runtime
serie.animation.InitProgress(0, xCount); serie.animation.InitProgress(0, xCount);
var animationIndex = serie.animation.GetCurrIndex(); var animationIndex = serie.animation.GetCurrIndex();
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
var dataChanging = false; var dataChanging = false;
serie.containerIndex = m_SerieGrid.index; serie.containerIndex = m_SerieGrid.index;
serie.containterInstanceId = m_SerieGrid.instanceId; serie.containterInstanceId = m_SerieGrid.instanceId;
@@ -242,7 +243,7 @@ namespace XCharts.Runtime
var isRectSymbol = symbol.type == SymbolType.Rect; var isRectSymbol = symbol.type == SymbolType.Rect;
SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, state); 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, dataChangeDuration, yAxis.inverse,
yAxis.context.minValue, yAxis.context.maxValue); yAxis.context.minValue, yAxis.context.maxValue, unscaledTime);
if (serieData.IsDataChanged()) dataChanging = true; if (serieData.IsDataChanged()) dataChanging = true;
var pos = new Vector3(zeroX + (i + 0.5f) * xWidth, var pos = new Vector3(zeroX + (i + 0.5f) * xWidth,
zeroY + (j + 0.5f) * yWidth); zeroY + (j + 0.5f) * yWidth);

View File

@@ -287,6 +287,7 @@ namespace XCharts.Runtime
DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate); DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate);
var dataChanging = false; var dataChanging = false;
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
var interacting = false; var interacting = false;
var lineWidth = LineHelper.GetLineWidth(ref interacting, serie, chart.theme.serie.lineWidth); var lineWidth = LineHelper.GetLineWidth(ref interacting, serie, chart.theme.serie.lineWidth);
@@ -321,7 +322,7 @@ namespace XCharts.Runtime
var np = Vector3.zero; var np = Vector3.zero;
var xValue = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse); var xValue = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse);
var relativedValue = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow, var relativedValue = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow,
maxCount, totalAverage, i, dataChangeDuration, ref dataChanging, relativedAxis); maxCount, totalAverage, i, dataChangeDuration, ref dataChanging, relativedAxis, unscaledTime);
serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, m_SerieGrid, xValue, relativedValue, serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, m_SerieGrid, xValue, relativedValue,
i, scaleWid, isStack, ref np); i, scaleWid, isStack, ref np);

View File

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

View File

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

View File

@@ -221,6 +221,7 @@ namespace XCharts.Runtime
var dataChanging = false; var dataChanging = false;
var interacting = false; var interacting = false;
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
SerieHelper.GetAllMinMaxData(serie, m_RadarCoord.ceilRate); SerieHelper.GetAllMinMaxData(serie, m_RadarCoord.ceilRate);
Color32 areaColor, areaToColor; Color32 areaColor, areaToColor;
for (int j = 0; j < serie.data.Count; j++) for (int j = 0; j < serie.data.Count; j++)
@@ -246,7 +247,7 @@ namespace XCharts.Runtime
if (n >= serieData.data.Count) break; if (n >= serieData.data.Count) break;
var min = m_RadarCoord.GetIndicatorMin(n); var min = m_RadarCoord.GetIndicatorMin(n);
var max = m_RadarCoord.GetIndicatorMax(n); var max = m_RadarCoord.GetIndicatorMax(n);
var value = serieData.GetCurrData(n, dataChangeDuration); var value = serieData.GetCurrData(n, dataChangeDuration, unscaledTime);
if (serieData.IsDataChanged()) dataChanging = true; if (serieData.IsDataChanged()) dataChanging = true;
if (max == 0) if (max == 0)
{ {
@@ -361,6 +362,7 @@ namespace XCharts.Runtime
var rate = serie.animation.GetCurrRate(); var rate = serie.animation.GetCurrRate();
var dataChanging = false; var dataChanging = false;
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
var startIndex = GetStartShowIndex(serie); var startIndex = GetStartShowIndex(serie);
var endIndex = GetEndShowIndex(serie); var endIndex = GetEndShowIndex(serie);
SerieHelper.UpdateMinMaxData(serie, 1, m_RadarCoord.ceilRate); SerieHelper.UpdateMinMaxData(serie, 1, m_RadarCoord.ceilRate);
@@ -383,7 +385,7 @@ namespace XCharts.Runtime
var index = serieData.index; var index = serieData.index;
var p = m_RadarCoord.context.center; var p = m_RadarCoord.context.center;
var max = m_RadarCoord.GetIndicatorMax(index); var max = m_RadarCoord.GetIndicatorMax(index);
var value = serieData.GetCurrData(1, dataChangeDuration); var value = serieData.GetCurrData(1, dataChangeDuration, unscaledTime);
if (serieData.IsDataChanged()) dataChanging = true; if (serieData.IsDataChanged()) dataChanging = true;
if (max == 0) if (max == 0)
{ {

View File

@@ -182,6 +182,7 @@ namespace XCharts.Runtime
serie.animation.InitProgress(serie.startAngle, serie.startAngle + 360); serie.animation.InitProgress(serie.startAngle, serie.startAngle + 360);
SerieHelper.UpdateCenter(serie, chart.chartPosition, chart.chartWidth, chart.chartHeight); SerieHelper.UpdateCenter(serie, chart.chartPosition, chart.chartWidth, chart.chartHeight);
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
var ringWidth = serie.context.outsideRadius - serie.context.insideRadius; var ringWidth = serie.context.outsideRadius - serie.context.insideRadius;
var dataChanging = false; var dataChanging = false;
for (int j = 0; j < data.Count; j++) for (int j = 0; j < data.Count; j++)
@@ -189,7 +190,7 @@ namespace XCharts.Runtime
var serieData = data[j]; var serieData = data[j];
if (!serieData.show) continue; if (!serieData.show) continue;
if (serieData.IsDataChanged()) dataChanging = true; if (serieData.IsDataChanged()) dataChanging = true;
var value = serieData.GetFirstData(dataChangeDuration); var value = serieData.GetFirstData(unscaledTime, dataChangeDuration);
var max = serieData.GetLastData(); var max = serieData.GetLastData();
var degree = (float) (360 * value / max); var degree = (float) (360 * value / max);
var startDegree = GetStartAngle(serie); var startDegree = GetStartAngle(serie);

View File

@@ -135,6 +135,7 @@ namespace XCharts.Runtime
serie.animation.InitProgress(0, 1); serie.animation.InitProgress(0, 1);
var rate = serie.animation.GetCurrRate(); var rate = serie.animation.GetCurrRate();
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
var dataChanging = false; var dataChanging = false;
var interacting = false; var interacting = false;
var dataList = serie.GetDataList(xDataZoom); var dataList = serie.GetDataList(xDataZoom);
@@ -157,8 +158,8 @@ namespace XCharts.Runtime
SerieHelper.GetItemColor(out color, out toColor, out emptyColor, serie, serieData, chart.theme, colorIndex, state); 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); SerieHelper.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, state);
double xValue = serieData.GetCurrData(0, dataChangeDuration, xAxis.inverse); double xValue = serieData.GetCurrData(0, dataChangeDuration, unscaledTime, xAxis.inverse);
double yValue = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse); double yValue = serieData.GetCurrData(1, dataChangeDuration, unscaledTime, yAxis.inverse);
if (serieData.IsDataChanged()) if (serieData.IsDataChanged())
dataChanging = true; dataChanging = true;
@@ -238,6 +239,7 @@ namespace XCharts.Runtime
var rate = serie.animation.GetCurrRate(); var rate = serie.animation.GetCurrRate();
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
var dataChanging = false; var dataChanging = false;
var dataList = serie.GetDataList(xDataZoom); var dataList = serie.GetDataList(xDataZoom);
var isEffectScatter = serie is EffectScatter; var isEffectScatter = serie is EffectScatter;
@@ -263,7 +265,7 @@ namespace XCharts.Runtime
dataChanging = true; dataChanging = true;
var pos = Vector3.zero; var pos = Vector3.zero;
var xValue = serieData.GetCurrData(0, dataChangeDuration, axis.inverse); var xValue = serieData.GetCurrData(0, dataChangeDuration, unscaledTime, axis.inverse);
if (axis.orient == Orient.Horizonal) if (axis.orient == Orient.Horizonal)
{ {

View File

@@ -11,9 +11,10 @@ namespace XCharts.Runtime
{ {
base.Update(); base.Update();
var symbolSize = serie.symbol.GetSize(null, chart.theme.serie.scatterSymbolSize); var symbolSize = serie.symbol.GetSize(null, chart.theme.serie.scatterSymbolSize);
var deltaTime = serie.animation.unscaledTime? Time.unscaledDeltaTime : Time.deltaTime;
for (int i = 0; i < serie.symbol.animationSize.Count; ++i) for (int i = 0; i < serie.symbol.animationSize.Count; ++i)
{ {
serie.symbol.animationSize[i] += m_EffectScatterSpeed * Time.deltaTime; serie.symbol.animationSize[i] += m_EffectScatterSpeed * deltaTime;
if (serie.symbol.animationSize[i] > symbolSize) if (serie.symbol.animationSize[i] > symbolSize)
{ {
serie.symbol.animationSize[i] = i * 5; serie.symbol.animationSize[i] = i * 5;

View File

@@ -247,7 +247,7 @@ namespace XCharts.Runtime
[SerializeField] private float m_SampleAverage = 0; [SerializeField] private float m_SampleAverage = 0;
[SerializeField] private LineType m_LineType = LineType.Normal; [SerializeField] private LineType m_LineType = LineType.Normal;
[SerializeField][Since("v3.3.1")] private bool m_SmoothLimit = true; [SerializeField][Since("v3.4.0")] private bool m_SmoothLimit = true;
[SerializeField] private BarType m_BarType = BarType.Normal; [SerializeField] private BarType m_BarType = BarType.Normal;
[SerializeField] private bool m_BarPercentStack = false; [SerializeField] private bool m_BarPercentStack = false;
[SerializeField] private float m_BarWidth = 0; [SerializeField] private float m_BarWidth = 0;
@@ -1136,10 +1136,11 @@ namespace XCharts.Runtime
else else
{ {
var duration = animation.GetUpdateAnimationDuration(); var duration = animation.GetUpdateAnimationDuration();
var unscaledTime = animation.unscaledTime;
foreach (var sdata in data) foreach (var sdata in data)
{ {
if (sdata.show && !IsIgnoreValue(sdata.data[1])) if (sdata.show && !IsIgnoreValue(sdata.data[1]))
total += sdata.GetCurrData(1, duration); total += sdata.GetCurrData(1, duration, unscaledTime);
} }
} }
return total; return total;
@@ -1459,7 +1460,7 @@ namespace XCharts.Runtime
var serieData = GetDataList(dataZoom); var serieData = GetDataList(dataZoom);
if (index < serieData.Count) if (index < serieData.Count)
{ {
var value = serieData[index].GetCurrData(1, animation.GetUpdateAnimationDuration()); var value = serieData[index].GetCurrData(1, animation.GetUpdateAnimationDuration(), animation.unscaledTime);
if (showAsPositiveNumber) if (showAsPositiveNumber)
value = Math.Abs(value); value = Math.Abs(value);
return value; return value;
@@ -1622,7 +1623,8 @@ namespace XCharts.Runtime
{ {
var animationOpen = animation.enable; var animationOpen = animation.enable;
var animationDuration = animation.GetUpdateAnimationDuration(); var animationDuration = animation.GetUpdateAnimationDuration();
var flag = m_Data[index].UpdateData(dimension, value, animationOpen, animationDuration); var unscaledTime = animation.unscaledTime;
var flag = m_Data[index].UpdateData(dimension, value, animationOpen, unscaledTime, animationDuration);
if (flag) if (flag)
{ {
SetVerticesDirty(); SetVerticesDirty();
@@ -1648,8 +1650,9 @@ namespace XCharts.Runtime
var serieData = m_Data[index]; var serieData = m_Data[index];
var animationOpen = animation.enable; var animationOpen = animation.enable;
var animationDuration = animation.GetUpdateAnimationDuration(); var animationDuration = animation.GetUpdateAnimationDuration();
var unscaledTime = animation.unscaledTime;
for (int i = 0; i < values.Count; i++) for (int i = 0; i < values.Count; i++)
serieData.UpdateData(i, values[i], animationOpen, animationDuration); serieData.UpdateData(i, values[i], animationOpen, unscaledTime, animationDuration);
SetVerticesDirty(); SetVerticesDirty();
dataDirty = true; dataDirty = true;
return true; return true;

View File

@@ -381,9 +381,9 @@ namespace XCharts.Runtime
else return 0; else return 0;
} }
public double GetFirstData(float animationDuration = 500f) public double GetFirstData(bool unscaledTime, float animationDuration = 500f)
{ {
if (m_Data.Count > 0) return GetCurrData(0, animationDuration); if (m_Data.Count > 0) return GetCurrData(0, animationDuration, unscaledTime);
return 0; return 0;
} }
@@ -393,23 +393,23 @@ namespace XCharts.Runtime
return 0; return 0;
} }
public double GetCurrData(int index, float animationDuration = 500f, bool inverse = false) public double GetCurrData(int index, float animationDuration = 500f, bool unscaledTime = false, bool inverse = false)
{ {
return GetCurrData(index, animationDuration, inverse, 0, 0); return GetCurrData(index, animationDuration, inverse, 0, 0, unscaledTime);
} }
public double GetCurrData(int index, float animationDuration, bool inverse, double min, double max) public double GetCurrData(int index, float animationDuration, bool inverse, double min, double max, bool unscaledTime)
{ {
if (index < m_DataUpdateFlag.Count && m_DataUpdateFlag[index] && animationDuration > 0) if (index < m_DataUpdateFlag.Count && m_DataUpdateFlag[index] && animationDuration > 0)
{ {
var time = Time.time - m_DataUpdateTime[index]; var time = (unscaledTime ? Time.unscaledTime : Time.time) - m_DataUpdateTime[index];
var total = animationDuration / 1000; var total = animationDuration / 1000;
var rate = time / total; var rate = time / total;
if (rate > 1) rate = 1; if (rate > 1) rate = 1;
if (rate < 1) if (rate < 1)
{ {
CheckLastData(); CheckLastData(unscaledTime);
var curr = MathUtil.Lerp(GetPreviousData(index), GetData(index), rate); var curr = MathUtil.Lerp(GetPreviousData(index), GetData(index), rate);
if (min != 0 || max != 0) if (min != 0 || max != 0)
{ {
@@ -503,14 +503,14 @@ namespace XCharts.Runtime
return total; return total;
} }
public bool UpdateData(int dimension, double value, bool updateAnimation, float animationDuration = 500f) public bool UpdateData(int dimension, double value, bool updateAnimation, bool unscaledTime, float animationDuration = 500f)
{ {
if (dimension >= 0 && dimension < data.Count) if (dimension >= 0 && dimension < data.Count)
{ {
CheckLastData(); CheckLastData(unscaledTime);
m_PreviousData[dimension] = GetCurrData(dimension, animationDuration); m_PreviousData[dimension] = GetCurrData(dimension, animationDuration, unscaledTime);
//m_PreviousData[dimension] = data[dimension];; //m_PreviousData[dimension] = data[dimension];;
m_DataUpdateTime[dimension] = Time.time; m_DataUpdateTime[dimension] = (unscaledTime ? Time.unscaledTime : Time.time);
m_DataUpdateFlag[dimension] = updateAnimation; m_DataUpdateFlag[dimension] = updateAnimation;
data[dimension] = value; data[dimension] = value;
return true; return true;
@@ -528,7 +528,7 @@ namespace XCharts.Runtime
return false; return false;
} }
private void CheckLastData() private void CheckLastData(bool unscaledTime)
{ {
if (m_PreviousData.Count != m_Data.Count) if (m_PreviousData.Count != m_Data.Count)
{ {
@@ -538,7 +538,7 @@ namespace XCharts.Runtime
for (int i = 0; i < m_Data.Count; i++) for (int i = 0; i < m_Data.Count; i++)
{ {
m_PreviousData.Add(m_Data[i]); m_PreviousData.Add(m_Data[i]);
m_DataUpdateTime.Add(Time.time); m_DataUpdateTime.Add((unscaledTime ? Time.unscaledTime : Time.time));
m_DataUpdateFlag.Add(false); m_DataUpdateFlag.Add(false);
} }
} }

View File

@@ -368,6 +368,7 @@ namespace XCharts.Runtime
return; return;
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
var unscaledTime = serie.animation.unscaledTime;
var needCheck = serie.context.dataIndexs.Count > 0; var needCheck = serie.context.dataIndexs.Count > 0;
foreach (var serieData in serie.data) foreach (var serieData in serie.data)
{ {
@@ -395,7 +396,7 @@ namespace XCharts.Runtime
{ {
if (i >= serieData.context.dataPoints.Count) continue; if (i >= serieData.context.dataPoints.Count) continue;
var labelObject = serieData.context.dataLabels[i]; var labelObject = serieData.context.dataLabels[i];
var value = serieData.GetCurrData(i, dataChangeDuration); var value = serieData.GetCurrData(i, dataChangeDuration, unscaledTime);
var content = string.IsNullOrEmpty(currLabel.formatter) ? var content = string.IsNullOrEmpty(currLabel.formatter) ?
ChartCached.NumberToStr(value, currLabel.numericFormatter) : ChartCached.NumberToStr(value, currLabel.numericFormatter) :
SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, SerieLabelHelper.GetFormatterContent(serie, serieData, value, total,
@@ -415,7 +416,7 @@ namespace XCharts.Runtime
} }
else else
{ {
var value = serieData.GetCurrData(defaultDimension, dataChangeDuration); var value = serieData.GetCurrData(defaultDimension, dataChangeDuration, unscaledTime);
var total = serie.GetDataTotal(defaultDimension, serieData); var total = serie.GetDataTotal(defaultDimension, serieData);
var color = chart.GetItemColor(serie, serieData); var color = chart.GetItemColor(serie, serieData);
var content = string.IsNullOrEmpty(currLabel.formatter) ? var content = string.IsNullOrEmpty(currLabel.formatter) ?

View File

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