diff --git a/CHANGELOG.md b/CHANGELOG.md
index db4ac594..60965ecb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -59,6 +59,7 @@
## master
+* (2022.10.12) 增加`Animation`的`UnscaledTime`支持设置动画是否受TimeScale的影响 (#223)
* (2022.10.10) 调整文档格式
* (2022.10.10) 增加`Line`的`SmoothLimit`可控制平滑曲线不同效果
* (2022.10.05) 修复`Serie`隐藏时`Tooltip`还显示信息的问题
diff --git a/Editor/ChildComponents/AnimationDrawer.cs b/Editor/ChildComponents/AnimationDrawer.cs
index 8d7a59c9..0594b9b5 100644
--- a/Editor/ChildComponents/AnimationDrawer.cs
+++ b/Editor/ChildComponents/AnimationDrawer.cs
@@ -21,7 +21,11 @@ namespace XCharts.Editor
PropertyField(prop, "m_FadeOutDelay");
PropertyField(prop, "m_DataChangeEnable");
PropertyField(prop, "m_DataChangeDuration");
- PropertyField(prop, "m_ActualDuration");
+ PropertyField(prop, "m_UnscaledTime");
+ // using(new EditorGUI.DisabledGroupScope(true))
+ // {
+ // PropertyField(prop, "m_ActualDuration");
+ // }
--EditorGUI.indentLevel;
}
}
diff --git a/Runtime/Component/Animation/AnimationStyle.cs b/Runtime/Component/Animation/AnimationStyle.cs
index 2e9e6a58..367f880c 100644
--- a/Runtime/Component/Animation/AnimationStyle.cs
+++ b/Runtime/Component/Animation/AnimationStyle.cs
@@ -61,6 +61,7 @@ namespace XCharts.Runtime
[SerializeField] private bool m_DataChangeEnable = true;
[SerializeField] private float m_DataChangeDuration = 500;
[SerializeField] private float m_ActualDuration;
+ [SerializeField][Since("v3.4.0")] private bool m_UnscaledTime;
///
/// 自定义渐入动画延时函数。返回ms值。
///
@@ -133,6 +134,11 @@ namespace XCharts.Runtime
///
public float dataChangeDuration { get { return m_DataChangeDuration; } set { m_DataChangeDuration = value < 0 ? 0 : value; } }
///
+ /// Animation updates independently of Time.timeScale.
+ /// |动画是否受TimeScaled的影响。默认为 false 受TimeScaled的影响。
+ ///
+ public bool unscaledTime { get { return m_UnscaledTime; } set { m_UnscaledTime = value; } }
+ ///
/// 渐入动画完成回调
///
public Action fadeInFinishCallback { get; set; }
@@ -464,7 +470,7 @@ namespace XCharts.Runtime
m_ActualDuration = (int) ((Time.time - startTime) * 1000) - fadeInDelay;
var duration = GetCurrAnimationDuration();
- var delta = (float) (total / duration * Time.deltaTime);
+ var delta = (float) (total / duration * (m_UnscaledTime ? Time.unscaledDeltaTime : Time.deltaTime));
if (m_FadeOut)
{
m_CurrDetailProgress -= delta;
@@ -522,7 +528,7 @@ namespace XCharts.Runtime
else
{
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);
if (m_FadeOut)
{
@@ -555,7 +561,7 @@ namespace XCharts.Runtime
return;
var duration = GetCurrAnimationDuration();
- var delta = dest / duration * Time.deltaTime;
+ var delta = dest / duration * (m_UnscaledTime ? Time.unscaledDeltaTime : Time.deltaTime);
if (m_FadeOut)
{
m_CurrSymbolProgress -= delta;
diff --git a/Runtime/Component/DataZoom/DataZoomHandler.cs b/Runtime/Component/DataZoom/DataZoomHandler.cs
index be6854ad..8f57bc9b 100644
--- a/Runtime/Component/DataZoom/DataZoomHandler.cs
+++ b/Runtime/Component/DataZoom/DataZoomHandler.cs
@@ -478,11 +478,13 @@ namespace XCharts.Runtime
var totalAverage = serie.sampleAverage > 0 ? serie.sampleAverage :
DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate);
var dataChanging = false;
+ var animationDuration = serie.animation.GetUpdateAnimationDuration();
+ var unscaledTime = serie.animation.unscaledTime;
for (int i = 0; i < maxCount; i += rate)
{
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 dataHig = (float) ((maxValue - minValue) == 0 ? 0 :
(value - minValue) / (maxValue - minValue) * dataZoom.context.height);
@@ -567,11 +569,13 @@ namespace XCharts.Runtime
var totalAverage = serie.sampleAverage > 0 ? serie.sampleAverage :
DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate);
var dataChanging = false;
+ var animationDuration = serie.animation.GetUpdateAnimationDuration();
+ var unscaledTime = serie.animation.unscaledTime;
for (int i = 0; i < maxCount; i += rate)
{
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 dataHig = (maxValue - minValue) == 0 ? 0 :
(float) ((value - minValue) / (maxValue - minValue) * dataZoom.context.width);
diff --git a/Runtime/Internal/Utilities/DataHelper.cs b/Runtime/Internal/Utilities/DataHelper.cs
index ee555adc..fa180842 100644
--- a/Runtime/Internal/Utilities/DataHelper.cs
+++ b/Runtime/Internal/Utilities/DataHelper.cs
@@ -23,7 +23,7 @@ namespace XCharts.Runtime
public static double SampleValue(ref List showData, SampleType sampleType, int rate,
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 minValue = axis.context.minValue;
@@ -33,7 +33,7 @@ namespace XCharts.Runtime
if (showData[index].IsDataChanged())
dataChanging = true;
- return showData[index].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue);
+ return showData[index].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
}
switch (sampleType)
{
@@ -44,7 +44,7 @@ namespace XCharts.Runtime
for (int i = index; i > index - rate; i--)
{
count++;
- total += showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue);
+ total += showData[i].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
if (showData[i].IsDataChanged())
dataChanging = true;
}
@@ -57,7 +57,7 @@ namespace XCharts.Runtime
double max = double.MinValue;
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)
max = value;
@@ -70,7 +70,7 @@ namespace XCharts.Runtime
double min = double.MaxValue;
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)
min = value;
@@ -85,7 +85,7 @@ namespace XCharts.Runtime
total = 0;
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;
if (value < min)
min = value;
@@ -104,7 +104,7 @@ namespace XCharts.Runtime
if (showData[index].IsDataChanged())
dataChanging = true;
- return showData[index].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue);
+ return showData[index].GetCurrData(1, dataChangeDuration, inverse, minValue, maxValue, unscaledTime);
}
}
}
\ No newline at end of file
diff --git a/Runtime/Serie/Bar/BarHandler.cs b/Runtime/Serie/Bar/BarHandler.cs
index c3c70c0f..3f8c5707 100644
--- a/Runtime/Serie/Bar/BarHandler.cs
+++ b/Runtime/Serie/Bar/BarHandler.cs
@@ -221,7 +221,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);
+ var relativedValue = serieData.GetCurrData(1, 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;
diff --git a/Runtime/Serie/Bar/SimplifiedBarHandler.cs b/Runtime/Serie/Bar/SimplifiedBarHandler.cs
index 447c48db..c70f4a7c 100644
--- a/Runtime/Serie/Bar/SimplifiedBarHandler.cs
+++ b/Runtime/Serie/Bar/SimplifiedBarHandler.cs
@@ -162,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);
+ var relativedValue = serieData.GetCurrData(1, 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))
diff --git a/Runtime/Serie/Candlestick/CandlestickHandler.cs b/Runtime/Serie/Candlestick/CandlestickHandler.cs
index ab401a92..765efcc1 100644
--- a/Runtime/Serie/Candlestick/CandlestickHandler.cs
+++ b/Runtime/Serie/Candlestick/CandlestickHandler.cs
@@ -71,7 +71,7 @@ namespace XCharts.Runtime
param.columns.Clear();
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));
paramList.Add(param);
@@ -100,6 +100,7 @@ namespace XCharts.Runtime
bool dataChanging = false;
float dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
+ var unscaledTime = serie.animation.unscaledTime;
double yMinValue = yAxis.context.minValue;
double yMaxValue = yAxis.context.maxValue;
var isYAxis = false;
@@ -118,10 +119,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);
- var close = serieData.GetCurrData(startDataIndex + 1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
- var lowest = serieData.GetCurrData(startDataIndex + 2, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
- var heighest = serieData.GetCurrData(startDataIndex + 3, 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, 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 isRise = yAxis.inverse ? close open;
var borderWidth = open == 0 ? 0f :
(itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth :
diff --git a/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs b/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs
index 7362e142..924bc692 100644
--- a/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs
+++ b/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs
@@ -100,6 +100,7 @@ namespace XCharts.Runtime
bool dataChanging = false;
float dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
+ var unscaledTime = serie.animation.unscaledTime;
double yMinValue = yAxis.context.minValue;
double yMaxValue = yAxis.context.maxValue;
var isYAxis = false;
@@ -117,10 +118,10 @@ namespace XCharts.Runtime
continue;
}
var startDataIndex = serieData.data.Count > 4 ? 1 : 0;
- var open = serieData.GetCurrData(startDataIndex, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
- var close = serieData.GetCurrData(startDataIndex + 1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
- var lowest = serieData.GetCurrData(startDataIndex + 2, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
- var heighest = serieData.GetCurrData(startDataIndex + 3, 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, 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 isRise = yAxis.inverse ? close open;
var borderWidth = open == 0 ? 0f :
(itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth :
diff --git a/Runtime/Serie/Heatmap/HeatmapHandler.cs b/Runtime/Serie/Heatmap/HeatmapHandler.cs
index b3bf9ba4..45984f16 100644
--- a/Runtime/Serie/Heatmap/HeatmapHandler.cs
+++ b/Runtime/Serie/Heatmap/HeatmapHandler.cs
@@ -206,6 +206,7 @@ namespace XCharts.Runtime
serie.animation.InitProgress(0, xCount);
var animationIndex = serie.animation.GetCurrIndex();
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
+ var unscaledTime = serie.animation.unscaledTime;
var dataChanging = false;
serie.containerIndex = m_SerieGrid.index;
serie.containterInstanceId = m_SerieGrid.instanceId;
@@ -242,7 +243,7 @@ namespace XCharts.Runtime
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,
- yAxis.context.minValue, yAxis.context.maxValue);
+ yAxis.context.minValue, yAxis.context.maxValue, unscaledTime);
if (serieData.IsDataChanged()) dataChanging = true;
var pos = new Vector3(zeroX + (i + 0.5f) * xWidth,
zeroY + (j + 0.5f) * yWidth);
diff --git a/Runtime/Serie/Line/LineHandler.GridCoord.cs b/Runtime/Serie/Line/LineHandler.GridCoord.cs
index d5364dc5..615c574c 100644
--- a/Runtime/Serie/Line/LineHandler.GridCoord.cs
+++ b/Runtime/Serie/Line/LineHandler.GridCoord.cs
@@ -287,6 +287,7 @@ namespace XCharts.Runtime
DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate);
var dataChanging = false;
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
+ var unscaledTime = serie.animation.unscaledTime;
var interacting = false;
var lineWidth = LineHelper.GetLineWidth(ref interacting, serie, chart.theme.serie.lineWidth);
@@ -321,7 +322,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);
+ maxCount, totalAverage, i, dataChangeDuration, ref dataChanging, relativedAxis, unscaledTime);
serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, m_SerieGrid, xValue, relativedValue,
i, scaleWid, isStack, ref np);
diff --git a/Runtime/Serie/Line/SimplifiedLineHandler.cs b/Runtime/Serie/Line/SimplifiedLineHandler.cs
index 89d15938..d480010b 100644
--- a/Runtime/Serie/Line/SimplifiedLineHandler.cs
+++ b/Runtime/Serie/Line/SimplifiedLineHandler.cs
@@ -174,6 +174,7 @@ namespace XCharts.Runtime
DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate);
var dataChanging = false;
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
+ var unscaledTime = serie.animation.unscaledTime;
var interacting = false;
var lineWidth = LineHelper.GetLineWidth(ref interacting, serie, chart.theme.serie.lineWidth);
@@ -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);
+ maxCount, totalAverage, i, dataChangeDuration, ref dataChanging, relativedAxis, unscaledTime);
serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, m_SerieGrid, xValue, relativedValue,
i, scaleWid, false, ref np);
diff --git a/Runtime/Serie/Pie/PieHandler.cs b/Runtime/Serie/Pie/PieHandler.cs
index 3be3b1c9..1b8322ae 100644
--- a/Runtime/Serie/Pie/PieHandler.cs
+++ b/Runtime/Serie/Pie/PieHandler.cs
@@ -191,6 +191,7 @@ namespace XCharts.Runtime
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)
@@ -208,7 +209,7 @@ namespace XCharts.Runtime
for (int n = 0; n < data.Count; 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.toAngle = startDegree;
serieData.context.halfAngle = startDegree;
diff --git a/Runtime/Serie/Radar/RadarHandler.cs b/Runtime/Serie/Radar/RadarHandler.cs
index 73ad790f..bcfffa56 100644
--- a/Runtime/Serie/Radar/RadarHandler.cs
+++ b/Runtime/Serie/Radar/RadarHandler.cs
@@ -221,6 +221,7 @@ namespace XCharts.Runtime
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;
for (int j = 0; j < serie.data.Count; j++)
@@ -246,7 +247,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);
+ var value = serieData.GetCurrData(n, dataChangeDuration, unscaledTime);
if (serieData.IsDataChanged()) dataChanging = true;
if (max == 0)
{
@@ -361,6 +362,7 @@ 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);
SerieHelper.UpdateMinMaxData(serie, 1, m_RadarCoord.ceilRate);
@@ -383,7 +385,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);
+ var value = serieData.GetCurrData(1, dataChangeDuration, unscaledTime);
if (serieData.IsDataChanged()) dataChanging = true;
if (max == 0)
{
diff --git a/Runtime/Serie/Ring/RingHandler.cs b/Runtime/Serie/Ring/RingHandler.cs
index c90a7db3..8c7828ba 100644
--- a/Runtime/Serie/Ring/RingHandler.cs
+++ b/Runtime/Serie/Ring/RingHandler.cs
@@ -182,6 +182,7 @@ namespace XCharts.Runtime
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,7 +190,7 @@ namespace XCharts.Runtime
var serieData = data[j];
if (!serieData.show) continue;
if (serieData.IsDataChanged()) dataChanging = true;
- var value = serieData.GetFirstData(dataChangeDuration);
+ var value = serieData.GetFirstData(unscaledTime, dataChangeDuration);
var max = serieData.GetLastData();
var degree = (float) (360 * value / max);
var startDegree = GetStartAngle(serie);
diff --git a/Runtime/Serie/Scatter/BaseScatterHandler.cs b/Runtime/Serie/Scatter/BaseScatterHandler.cs
index 8d8f0220..b2d3306a 100644
--- a/Runtime/Serie/Scatter/BaseScatterHandler.cs
+++ b/Runtime/Serie/Scatter/BaseScatterHandler.cs
@@ -135,6 +135,7 @@ namespace XCharts.Runtime
serie.animation.InitProgress(0, 1);
var rate = serie.animation.GetCurrRate();
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
+ var unscaledTime = serie.animation.unscaledTime;
var dataChanging = false;
var interacting = false;
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.GetSymbolInfo(out borderColor, out symbolBorder, out cornerRadius, serie, serieData, chart.theme, state);
- double xValue = serieData.GetCurrData(0, dataChangeDuration, xAxis.inverse);
- double yValue = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse);
+ double xValue = serieData.GetCurrData(0, dataChangeDuration, unscaledTime, xAxis.inverse);
+ double yValue = serieData.GetCurrData(1, dataChangeDuration, unscaledTime, yAxis.inverse);
if (serieData.IsDataChanged())
dataChanging = true;
@@ -238,6 +239,7 @@ namespace XCharts.Runtime
var rate = serie.animation.GetCurrRate();
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
+ var unscaledTime = serie.animation.unscaledTime;
var dataChanging = false;
var dataList = serie.GetDataList(xDataZoom);
var isEffectScatter = serie is EffectScatter;
@@ -263,7 +265,7 @@ namespace XCharts.Runtime
dataChanging = true;
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)
{
diff --git a/Runtime/Serie/Scatter/EffectScatterHandler.cs b/Runtime/Serie/Scatter/EffectScatterHandler.cs
index 0ace1597..d7d86bf1 100644
--- a/Runtime/Serie/Scatter/EffectScatterHandler.cs
+++ b/Runtime/Serie/Scatter/EffectScatterHandler.cs
@@ -11,9 +11,10 @@ namespace XCharts.Runtime
{
base.Update();
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)
{
- serie.symbol.animationSize[i] += m_EffectScatterSpeed * Time.deltaTime;
+ serie.symbol.animationSize[i] += m_EffectScatterSpeed * deltaTime;
if (serie.symbol.animationSize[i] > symbolSize)
{
serie.symbol.animationSize[i] = i * 5;
diff --git a/Runtime/Serie/Serie.cs b/Runtime/Serie/Serie.cs
index d1ca38c6..9940bf26 100644
--- a/Runtime/Serie/Serie.cs
+++ b/Runtime/Serie/Serie.cs
@@ -247,7 +247,7 @@ namespace XCharts.Runtime
[SerializeField] private float m_SampleAverage = 0;
[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 bool m_BarPercentStack = false;
[SerializeField] private float m_BarWidth = 0;
@@ -1136,10 +1136,11 @@ namespace XCharts.Runtime
else
{
var duration = animation.GetUpdateAnimationDuration();
+ var unscaledTime = animation.unscaledTime;
foreach (var sdata in data)
{
if (sdata.show && !IsIgnoreValue(sdata.data[1]))
- total += sdata.GetCurrData(1, duration);
+ total += sdata.GetCurrData(1, duration, unscaledTime);
}
}
return total;
@@ -1459,7 +1460,7 @@ namespace XCharts.Runtime
var serieData = GetDataList(dataZoom);
if (index < serieData.Count)
{
- var value = serieData[index].GetCurrData(1, animation.GetUpdateAnimationDuration());
+ var value = serieData[index].GetCurrData(1, animation.GetUpdateAnimationDuration(), animation.unscaledTime);
if (showAsPositiveNumber)
value = Math.Abs(value);
return value;
@@ -1622,7 +1623,8 @@ namespace XCharts.Runtime
{
var animationOpen = animation.enable;
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)
{
SetVerticesDirty();
@@ -1648,8 +1650,9 @@ namespace XCharts.Runtime
var serieData = m_Data[index];
var animationOpen = animation.enable;
var animationDuration = animation.GetUpdateAnimationDuration();
+ var unscaledTime = animation.unscaledTime;
for (int i = 0; i < values.Count; i++)
- serieData.UpdateData(i, values[i], animationOpen, animationDuration);
+ serieData.UpdateData(i, values[i], animationOpen, unscaledTime, animationDuration);
SetVerticesDirty();
dataDirty = true;
return true;
diff --git a/Runtime/Serie/SerieData.cs b/Runtime/Serie/SerieData.cs
index 0b0e10bd..081cf9b2 100644
--- a/Runtime/Serie/SerieData.cs
+++ b/Runtime/Serie/SerieData.cs
@@ -381,9 +381,9 @@ namespace XCharts.Runtime
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;
}
@@ -393,23 +393,23 @@ namespace XCharts.Runtime
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)
{
- var time = Time.time - m_DataUpdateTime[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();
+ CheckLastData(unscaledTime);
var curr = MathUtil.Lerp(GetPreviousData(index), GetData(index), rate);
if (min != 0 || max != 0)
{
@@ -503,14 +503,14 @@ namespace XCharts.Runtime
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)
{
- CheckLastData();
- m_PreviousData[dimension] = GetCurrData(dimension, animationDuration);
+ CheckLastData(unscaledTime);
+ m_PreviousData[dimension] = GetCurrData(dimension, animationDuration, unscaledTime);
//m_PreviousData[dimension] = data[dimension];;
- m_DataUpdateTime[dimension] = Time.time;
+ m_DataUpdateTime[dimension] = (unscaledTime ? Time.unscaledTime : Time.time);
m_DataUpdateFlag[dimension] = updateAnimation;
data[dimension] = value;
return true;
@@ -528,7 +528,7 @@ namespace XCharts.Runtime
return false;
}
- private void CheckLastData()
+ private void CheckLastData(bool unscaledTime)
{
if (m_PreviousData.Count != m_Data.Count)
{
@@ -538,7 +538,7 @@ namespace XCharts.Runtime
for (int i = 0; i < m_Data.Count; i++)
{
m_PreviousData.Add(m_Data[i]);
- m_DataUpdateTime.Add(Time.time);
+ m_DataUpdateTime.Add((unscaledTime ? Time.unscaledTime : Time.time));
m_DataUpdateFlag.Add(false);
}
}
diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs
index 0b8a53fb..abd8863a 100644
--- a/Runtime/Serie/SerieHandler.cs
+++ b/Runtime/Serie/SerieHandler.cs
@@ -368,6 +368,7 @@ namespace XCharts.Runtime
return;
var dataChangeDuration = serie.animation.GetUpdateAnimationDuration();
+ var unscaledTime = serie.animation.unscaledTime;
var needCheck = serie.context.dataIndexs.Count > 0;
foreach (var serieData in serie.data)
{
@@ -395,7 +396,7 @@ namespace XCharts.Runtime
{
if (i >= serieData.context.dataPoints.Count) continue;
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) ?
ChartCached.NumberToStr(value, currLabel.numericFormatter) :
SerieLabelHelper.GetFormatterContent(serie, serieData, value, total,
@@ -415,7 +416,7 @@ namespace XCharts.Runtime
}
else
{
- var value = serieData.GetCurrData(defaultDimension, dataChangeDuration);
+ var value = serieData.GetCurrData(defaultDimension, dataChangeDuration, unscaledTime);
var total = serie.GetDataTotal(defaultDimension, serieData);
var color = chart.GetItemColor(serie, serieData);
var content = string.IsNullOrEmpty(currLabel.formatter) ?
diff --git a/Runtime/Serie/SeriesHelper.cs b/Runtime/Serie/SeriesHelper.cs
index d3e9c244..d643ad06 100644
--- a/Runtime/Serie/SeriesHelper.cs
+++ b/Runtime/Serie/SeriesHelper.cs
@@ -339,6 +339,7 @@ namespace XCharts.Runtime
(!isPolar && serie.yAxisIndex != axisIndex) ||
!serie.show) continue;
var updateDuration = serie.animation.enable?serie.animation.dataChangeDuration : 0;
+ var unscaledTime = serie.animation.unscaledTime;
if (isPercentStack && SeriesHelper.IsPercentStack(series, serie.serieName))
{
if (100 > max) max = 100;
@@ -363,7 +364,7 @@ namespace XCharts.Runtime
foreach (var data in showData)
{
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 (currData > max) max = currData;