From 58d6d5274713f25e89794ea657461d5e3f007029 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Fri, 14 Jul 2023 08:14:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0`Animation`=E7=9A=84`Interact?= =?UTF-8?q?ion`=E4=BA=A4=E4=BA=92=E5=8A=A8=E7=94=BB=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documentation~/en/configuration.md | 27 +++++++++++++++-- Documentation~/zh/changelog.md | 6 ++-- Documentation~/zh/configuration.md | 29 +++++++++++++++++-- Editor/ChildComponents/AnimationDrawer.cs | 18 ++++++++++++ Examples/Example03_ChartAnimation.cs | 4 +-- Runtime/Component/Animation/AnimationInfo.cs | 23 +++++++++++++++ Runtime/Component/Animation/AnimationStyle.cs | 21 ++++++++++++-- Runtime/Component/Interaction/InteractData.cs | 10 +++---- Runtime/Serie/Bar/BarHandler.PolarCoord.cs | 5 ++-- Runtime/Serie/Bar/BarHandler.cs | 11 +++---- Runtime/Serie/Bar/SimplifiedBarHandler.cs | 11 +++---- .../Heatmap/HeatmapHandler.PolarCoord.cs | 2 +- Runtime/Serie/Line/LineHandler.GridCoord.cs | 9 +++--- Runtime/Serie/Line/LineHandler.PolarCoord.cs | 2 +- Runtime/Serie/Line/LineHelper.cs | 2 +- Runtime/Serie/Line/SimplifiedLineHandler.cs | 5 ++-- Runtime/Serie/Radar/RadarHandler.cs | 3 +- Runtime/Serie/Scatter/BaseScatterHandler.cs | 4 +-- Runtime/Serie/SerieHelper.cs | 8 +++-- Runtime/Theme/SerieTheme.cs | 22 -------------- 20 files changed, 156 insertions(+), 66 deletions(-) diff --git a/Documentation~/en/configuration.md b/Documentation~/en/configuration.md index 05a1654e..daff3168 100644 --- a/Documentation~/en/configuration.md +++ b/Documentation~/en/configuration.md @@ -171,6 +171,7 @@ import APITable from '@site/src/components/APITable'; - [AnimationFadeIn](#animationfadein) - [AnimationFadeOut](#animationfadeout) - [AnimationInfo](#animationinfo) +- [AnimationInteraction](#animationinteraction) - [BaseSerie](#baseserie) - [ChartText](#charttext) - [ChildComponent](#childcomponent) @@ -248,7 +249,7 @@ Fade out animation. ## AnimationInfo -> XCharts.Runtime.AnimationInfo / Subclasses: [AnimationFadeIn](#animationfadein), [AnimationFadeOut](#animationfadeout), [AnimationChange](#animationchange), [AnimationAddition](#animationaddition) +> XCharts.Runtime.AnimationInfo / Subclasses: [AnimationFadeIn](#animationfadein), [AnimationFadeOut](#animationfadeout), [AnimationChange](#animationchange), [AnimationAddition](#animationaddition), [AnimationInteraction](#animationinteraction) > Since `v3.8.0` @@ -270,6 +271,28 @@ the animation info. ``` +## AnimationInteraction + +> XCharts.Runtime.AnimationInteraction : [AnimationInfo](#animationinfo) + +> Since `v3.8.0` + +Interactive animation of charts. + +```mdx-code-block + +``` + + +|field|default|since|comment| +|--|--|--|--| +|widthRate|1.3f|v3.8.0|the size rate of the width. +|radiusRate|1.3f|v3.8.0|the size rate of the radius. + +```mdx-code-block + +``` + ## AnimationStyle > XCharts.Runtime.AnimationStyle : [ChildComponent](#childcomponent) @@ -292,6 +315,7 @@ the animation of serie. support animation type: fadeIn, fadeOut, change, additio |fadeOut||v3.8.0|Fade out animation configuration. [AnimationFadeOut](#animationfadeout)| |change||v3.8.0|Update data animation configuration. [AnimationChange](#animationchange)| |addition||v3.8.0|Add data animation configuration. [AnimationAddition](#animationaddition)| +|interaction||v3.8.0|Interaction animation configuration. [AnimationInteraction](#animationinteraction)| ```mdx-code-block @@ -1775,7 +1799,6 @@ A data item of serie. |lineSymbolSize|||the symbol size of line serie. |scatterSymbolSize|||the symbol size of scatter serie. |pieTooltipExtraRadius|||the extra radius of pie when actived by tooltip. -|selectedRate|1.3f||the rate of symbol size of line or scatter serie. |pieSelectedOffset|||the center offset of pie if selected. |candlestickColor|Color32(235, 84, 84, 255)||K线图阳线(涨)填充色 |candlestickColor0|Color32(71, 178, 98, 255)||K线图阴线(跌)填充色 diff --git a/Documentation~/zh/changelog.md b/Documentation~/zh/changelog.md index 529bd681..233adc7d 100644 --- a/Documentation~/zh/changelog.md +++ b/Documentation~/zh/changelog.md @@ -69,11 +69,13 @@ slug: /changelog 版本要点: -* 新增数据动画 +* 重构和完善动画系统,增加新增动画和交互动画的配置支持 日志详情: -* (2023.07.11) 重构`Animation`动画系统,增加`Addition`新增动画支持 +* (2023.07.14) 增加`Animation`的`Interaction`交互动画配置支持 +* (2023.07.11) 增加`Animation`的`Addition`新增动画配置支持 +* (2023.07.11) 重构`Animation`动画系统,完善动画体验 * (2023.06.30) 增加`PolarCood`的`indicatorLabelOffset`设置指示文本偏移的支持 * (2023.06.30) 修复`Axis`的`IndicatorLabel`的背景颜色可能不正常的问题 * (2023.06.30) 增加`Axis`的`IndicatorLabel`可自定义`color`的支持 diff --git a/Documentation~/zh/configuration.md b/Documentation~/zh/configuration.md index 672afb26..8e5f3586 100644 --- a/Documentation~/zh/configuration.md +++ b/Documentation~/zh/configuration.md @@ -171,6 +171,7 @@ import APITable from '@site/src/components/APITable'; - [AnimationFadeIn](#animationfadein) - [AnimationFadeOut](#animationfadeout) - [AnimationInfo](#animationinfo) +- [AnimationInteraction](#animationinteraction) - [BaseSerie](#baseserie) - [ChartText](#charttext) - [ChildComponent](#childcomponent) @@ -248,7 +249,7 @@ import APITable from '@site/src/components/APITable'; ## AnimationInfo -> XCharts.Runtime.AnimationInfo / Subclasses: [AnimationFadeIn](#animationfadein), [AnimationFadeOut](#animationfadeout), [AnimationChange](#animationchange), [AnimationAddition](#animationaddition) +> XCharts.Runtime.AnimationInfo / Subclasses: [AnimationFadeIn](#animationfadein), [AnimationFadeOut](#animationfadeout), [AnimationChange](#animationchange), [AnimationAddition](#animationaddition), [AnimationInteraction](#animationinteraction) > 从 `v3.8.0` 开始支持 @@ -270,11 +271,33 @@ import APITable from '@site/src/components/APITable'; ``` +## AnimationInteraction + +> XCharts.Runtime.AnimationInteraction : [AnimationInfo](#animationinfo) + +> 从 `v3.8.0` 开始支持 + +交互动画。 + +```mdx-code-block + +``` + + +|field|default|since|comment| +|--|--|--|--| +|widthRate|1.3f|v3.8.0|宽度的放大倍率。 +|radiusRate|1.3f|v3.8.0|半径的放大倍率。 + +```mdx-code-block + +``` + ## AnimationStyle > XCharts.Runtime.AnimationStyle : [ChildComponent](#childcomponent) -动画组件,用于控制图表的动画播放。支持配置四种动画表现:FadeIn(渐入动画),FadeOut(渐出动画),Change(变更动画),Addition(新增动画)。 按作用的对象可以分为两类:SerieAnimation(系列动画)和DataAnimation(数据动画)。 +动画组件,用于控制图表的动画播放。支持配置五种动画表现:FadeIn(渐入动画),FadeOut(渐出动画),Change(变更动画),Addition(新增动画),Interaction(交互动画)。 按作用的对象可以分为两类:SerieAnimation(系列动画)和DataAnimation(数据动画)。 ```mdx-code-block @@ -292,6 +315,7 @@ import APITable from '@site/src/components/APITable'; |fadeOut||v3.8.0|渐出动画配置。 [AnimationFadeOut](#animationfadeout)| |change||v3.8.0|数据变更动画配置。 [AnimationChange](#animationchange)| |addition||v3.8.0|数据新增动画配置。 [AnimationAddition](#animationaddition)| +|interaction||v3.8.0|交互动画配置。 [AnimationInteraction](#animationinteraction)| ```mdx-code-block @@ -1775,7 +1799,6 @@ Radar coordinate conponnet for radar charts. 雷达图坐标系组件,只适 |lineSymbolSize|||折线图的Symbol大小。 |scatterSymbolSize|||散点图的Symbol大小。 |pieTooltipExtraRadius|||饼图鼠标移到高亮时的额外半径 -|selectedRate|1.3f||折线图或散点图在被选中时的放大倍数。 |pieSelectedOffset|||饼图选中时的中心点偏移。 |candlestickColor|Color32(235, 84, 84, 255)||K线图阳线(涨)填充色 |candlestickColor0|Color32(71, 178, 98, 255)||K线图阴线(跌)填充色 diff --git a/Editor/ChildComponents/AnimationDrawer.cs b/Editor/ChildComponents/AnimationDrawer.cs index 0bc20ca3..6188282d 100644 --- a/Editor/ChildComponents/AnimationDrawer.cs +++ b/Editor/ChildComponents/AnimationDrawer.cs @@ -50,6 +50,23 @@ namespace XCharts.Editor } } + [CustomPropertyDrawer(typeof(XCharts.Runtime.AnimationInteraction), true)] + public class AnimationInteractionDrawer : BasePropertyDrawer + { + public override void OnGUI(Rect pos, SerializedProperty prop, GUIContent label) + { + base.OnGUI(pos, prop, label); + if (MakeComponentFoldout(prop, "m_Enable", true)) + { + ++EditorGUI.indentLevel; + PropertyField(prop, "m_Duration"); + PropertyField(prop, "m_WidthRate"); + PropertyField(prop, "m_RadiusRate"); + --EditorGUI.indentLevel; + } + } + } + [CustomPropertyDrawer(typeof(AnimationStyle), true)] public class AnimationDrawer : BasePropertyDrawer { @@ -66,6 +83,7 @@ namespace XCharts.Editor PropertyField(prop, "m_FadeOut"); PropertyField(prop, "m_Change"); PropertyField(prop, "m_Addition"); + PropertyField(prop, "m_Interaction"); --EditorGUI.indentLevel; } } diff --git a/Examples/Example03_ChartAnimation.cs b/Examples/Example03_ChartAnimation.cs index 5816021e..f02e478b 100644 --- a/Examples/Example03_ChartAnimation.cs +++ b/Examples/Example03_ChartAnimation.cs @@ -19,9 +19,9 @@ namespace XCharts.Example var serie = chart.GetSerie(0); serie.animation.enable = true; //自定义每个数据项的渐入延时 - serie.animation.fadein.delayFunction = CustomFadeInDelay; + serie.animation.fadeIn.delayFunction = CustomFadeInDelay; //自定义每个数据项的渐入时长 - serie.animation.fadein.durationFunction = CustomFadeInDuration; + serie.animation.fadeIn.durationFunction = CustomFadeInDuration; } float CustomFadeInDelay(int dataIndex) diff --git a/Runtime/Component/Animation/AnimationInfo.cs b/Runtime/Component/Animation/AnimationInfo.cs index 6901bc10..520dd039 100644 --- a/Runtime/Component/Animation/AnimationInfo.cs +++ b/Runtime/Component/Animation/AnimationInfo.cs @@ -403,4 +403,27 @@ namespace XCharts.Runtime public class AnimationAddition : AnimationInfo { } + + /// + /// Interactive animation of charts. + /// |交互动画。 + /// + [Since("v3.8.0")] + [System.Serializable] + public class AnimationInteraction : AnimationInfo + { + [SerializeField][Since("v3.8.0")] private float m_WidthRate = 1.3f; + [SerializeField][Since("v3.8.0")] private float m_RadiusRate = 1.3f; + + /// + /// the size rate of the width. + /// |宽度的放大倍率。 + /// + public float widthRate { get { return m_WidthRate; } set { m_WidthRate = value; } } + /// + /// the size rate of the radius. + /// |半径的放大倍率。 + /// + public float radiusRate { get { return m_RadiusRate; } set { m_RadiusRate = value; } } + } } \ No newline at end of file diff --git a/Runtime/Component/Animation/AnimationStyle.cs b/Runtime/Component/Animation/AnimationStyle.cs index b5351dc9..226e5f42 100644 --- a/Runtime/Component/Animation/AnimationStyle.cs +++ b/Runtime/Component/Animation/AnimationStyle.cs @@ -45,7 +45,7 @@ namespace XCharts.Runtime /// /// the animation of serie. support animation type: fadeIn, fadeOut, change, addition. - /// |动画组件,用于控制图表的动画播放。支持配置四种动画表现:FadeIn(渐入动画),FadeOut(渐出动画),Change(变更动画),Addition(新增动画)。 + /// |动画组件,用于控制图表的动画播放。支持配置五种动画表现:FadeIn(渐入动画),FadeOut(渐出动画),Change(变更动画),Addition(新增动画),Interaction(交互动画)。 /// 按作用的对象可以分为两类:SerieAnimation(系列动画)和DataAnimation(数据动画)。 /// [System.Serializable] @@ -60,6 +60,7 @@ namespace XCharts.Runtime [SerializeField][Since("v3.8.0")] private AnimationFadeOut m_FadeOut = new AnimationFadeOut() { reverse = true }; [SerializeField][Since("v3.8.0")] private AnimationChange m_Change = new AnimationChange() { duration = 500 }; [SerializeField][Since("v3.8.0")] private AnimationAddition m_Addition = new AnimationAddition() { duration = 500 }; + [SerializeField][Since("v3.8.0")] private AnimationInteraction m_Interaction = new AnimationInteraction() { duration = 250 }; [Obsolete("Use animation.fadeIn.delayFunction instead.", true)] public AnimationDelayFunction fadeInDelayFunction; @@ -99,12 +100,12 @@ namespace XCharts.Runtime /// Fade in animation configuration. /// |渐入动画配置。 /// - public AnimationFadeIn fadein { get { return m_FadeIn; } } + public AnimationFadeIn fadeIn { get { return m_FadeIn; } } /// /// Fade out animation configuration. /// |渐出动画配置。 /// - public AnimationFadeOut fadeout { get { return m_FadeOut; } } + public AnimationFadeOut fadeOut { get { return m_FadeOut; } } /// /// Update data animation configuration. /// |数据变更动画配置。 @@ -115,6 +116,11 @@ namespace XCharts.Runtime /// |数据新增动画配置。 /// public AnimationAddition addition { get { return m_Addition; } } + /// + /// Interaction animation configuration. + /// |交互动画配置。 + /// + public AnimationInteraction interaction { get { return m_Interaction; } } private Vector3 m_LinePathLastPos; private List m_Animations; @@ -278,6 +284,7 @@ namespace XCharts.Runtime startIndex = anim.context.currPointIndex == paths.Count - 1 ? paths.Count - 2 : anim.context.currPointIndex; + if (startIndex < 0 || startIndex > paths.Count - 2) startIndex = 0; } else { @@ -523,6 +530,14 @@ namespace XCharts.Runtime return 0; } + public float GetInteractionDuration() + { + if (m_Enable && m_Interaction.enable) + return m_Interaction.duration; + else + return 0; + } + public bool HasFadeOut() { return enable && m_FadeOut.context.end; diff --git a/Runtime/Component/Interaction/InteractData.cs b/Runtime/Component/Interaction/InteractData.cs index fd9122cb..1333001c 100644 --- a/Runtime/Component/Interaction/InteractData.cs +++ b/Runtime/Component/Interaction/InteractData.cs @@ -18,7 +18,7 @@ namespace XCharts.Runtime public void SetValue(ref bool needInteract, float size, bool highlight, float rate = 1.3f) { - size = highlight ? size * rate : size; + size = highlight && rate != 0 ? size * rate : size; SetValue(ref needInteract, size); } @@ -81,7 +81,7 @@ namespace XCharts.Runtime public bool TryGetValue(ref float value, ref bool interacting, float animationDuration = 250) { - if (!IsValueEnable() || m_PreviousValue == 0) + if (!IsValueEnable() || m_PreviousValue == 0 || animationDuration == 0) return false; if (m_UpdateFlag) { @@ -106,7 +106,7 @@ namespace XCharts.Runtime public bool TryGetColor(ref Color32 color, ref bool interacting, float animationDuration = 250) { - if (!IsValueEnable()) + if (!IsValueEnable() || animationDuration == 0) return false; if (m_UpdateFlag) { @@ -131,7 +131,7 @@ namespace XCharts.Runtime public bool TryGetColor(ref Color32 color, ref Color32 toColor, ref bool interacting, float animationDuration = 250) { - if (!IsValueEnable()) + if (!IsValueEnable() || animationDuration == 0) return false; if (m_UpdateFlag) { @@ -157,7 +157,7 @@ namespace XCharts.Runtime } public bool TryGetValueAndColor(ref float value, ref Color32 color, ref Color32 toColor, ref bool interacting, float animationDuration = 250) { - if (!IsValueEnable()) + if (!IsValueEnable() || animationDuration == 0) return false; if (m_UpdateFlag) { diff --git a/Runtime/Serie/Bar/BarHandler.PolarCoord.cs b/Runtime/Serie/Bar/BarHandler.PolarCoord.cs index f2c860ec..af436cca 100644 --- a/Runtime/Serie/Bar/BarHandler.PolarCoord.cs +++ b/Runtime/Serie/Bar/BarHandler.PolarCoord.cs @@ -53,7 +53,7 @@ namespace XCharts.Runtime if (m_LegendEnter) { serie.context.pointerEnter = true; - serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate); + serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate); for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; @@ -139,6 +139,7 @@ namespace XCharts.Runtime var areaColor = ColorUtil.clearColor32; var areaToColor = ColorUtil.clearColor32; var interacting = false; + var interactDuration = serie.animation.GetInteractionDuration(); float start, end; float inside, outside; @@ -184,7 +185,7 @@ namespace XCharts.Runtime serieData.context.toAngle = end; serieData.context.halfAngle = (start + end) / 2; - if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting)) + if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting, interactDuration)) { SerieHelper.GetItemColor(out areaColor, out areaToColor, serie, serieData, chart.theme); serieData.interact.SetColor(ref interacting, areaColor, areaToColor); diff --git a/Runtime/Serie/Bar/BarHandler.cs b/Runtime/Serie/Bar/BarHandler.cs index ea46605e..f1d10adf 100644 --- a/Runtime/Serie/Bar/BarHandler.cs +++ b/Runtime/Serie/Bar/BarHandler.cs @@ -183,11 +183,12 @@ namespace XCharts.Runtime (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) : showData.Count; var isPercentStack = SeriesHelper.IsPercentStack(chart.series, serie.stack); - bool dataChanging = false; - float dataChangeDuration = serie.animation.GetChangeDuration(); + var dataChanging = false; + var dataChangeDuration = serie.animation.GetChangeDuration(); var dataAddDuration = serie.animation.GetAdditionDuration(); - double yMinValue = relativedAxis.context.minValue; - double yMaxValue = relativedAxis.context.maxValue; + var interactDuration = serie.animation.GetInteractionDuration(); + var yMinValue = relativedAxis.context.minValue; + var yMaxValue = relativedAxis.context.maxValue; var areaColor = ColorUtil.clearColor32; var areaToColor = ColorUtil.clearColor32; @@ -218,7 +219,7 @@ namespace XCharts.Runtime var borderGapAndWidth = borderWidth + borderGap; var backgroundColor = itemStyle.backgroundColor; - if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting)) + if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting, interactDuration)) { SerieHelper.GetItemColor(out areaColor, out areaToColor, serie, serieData, chart.theme); serieData.interact.SetColor(ref interacting, areaColor, areaToColor); diff --git a/Runtime/Serie/Bar/SimplifiedBarHandler.cs b/Runtime/Serie/Bar/SimplifiedBarHandler.cs index 5b40dce2..49833431 100644 --- a/Runtime/Serie/Bar/SimplifiedBarHandler.cs +++ b/Runtime/Serie/Bar/SimplifiedBarHandler.cs @@ -133,9 +133,10 @@ namespace XCharts.Runtime (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) : showData.Count; - bool dataChanging = false; - float dataChangeDuration = serie.animation.GetChangeDuration(); + var dataChanging = false; + var dataChangeDuration = serie.animation.GetChangeDuration(); var dataAddDuration = serie.animation.GetAdditionDuration(); + var interactDuration = serie.animation.GetInteractionDuration(); double yMinValue = relativedAxis.context.minValue; double yMaxValue = relativedAxis.context.maxValue; @@ -165,7 +166,7 @@ namespace XCharts.Runtime 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)) + if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting, interactDuration)) { SerieHelper.GetItemColor(out areaColor, out areaToColor, serie, serieData, chart.theme); serieData.interact.SetColor(ref interacting, areaColor, areaToColor); @@ -217,7 +218,7 @@ namespace XCharts.Runtime else { if (axis.context.minMaxRange <= 0) pY = grid.context.y; - else pY = grid.context.y + (float) ((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.height - barWidth); + else pY = grid.context.y + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.height - barWidth); } pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0); } @@ -230,7 +231,7 @@ namespace XCharts.Runtime else { if (axis.context.minMaxRange <= 0) pX = grid.context.x; - else pX = grid.context.x + (float) ((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.width - barWidth); + else pX = grid.context.x + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.width - barWidth); } pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0); } diff --git a/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs b/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs index c2ed3ffc..879e9268 100644 --- a/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs +++ b/Runtime/Serie/Heatmap/HeatmapHandler.PolarCoord.cs @@ -53,7 +53,7 @@ namespace XCharts.Runtime if (m_LegendEnter) { serie.context.pointerEnter = true; - serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate); + serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate); for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; diff --git a/Runtime/Serie/Line/LineHandler.GridCoord.cs b/Runtime/Serie/Line/LineHandler.GridCoord.cs index f6fc6db7..c4564619 100644 --- a/Runtime/Serie/Line/LineHandler.GridCoord.cs +++ b/Runtime/Serie/Line/LineHandler.GridCoord.cs @@ -61,7 +61,7 @@ namespace XCharts.Runtime if (m_LegendEnter) { serie.context.pointerEnter = true; - serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate); + serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate); for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; @@ -73,7 +73,7 @@ namespace XCharts.Runtime else if (serie.context.isTriggerByAxis) { serie.context.pointerEnter = false; - serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate); + serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate); for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; @@ -116,7 +116,7 @@ namespace XCharts.Runtime needInteract = true; } if (serie.context.pointerItemDataIndex >= 0) - serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate); + serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate); else serie.interact.SetValue(ref needInteract, lineWidth); } @@ -144,6 +144,7 @@ namespace XCharts.Runtime var lineArrow = serie.lineArrow; var visualMap = chart.GetVisualMapOfSerie(serie); var isVisualMapGradient = VisualMapHelper.IsNeedLineGradient(visualMap); + var interactDuration = serie.animation.GetInteractionDuration(); Axis axis; Axis relativedAxis; @@ -176,7 +177,7 @@ namespace XCharts.Runtime continue; var symbolSize = 0f; - if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting)) + if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration)) { symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, state); serieData.interact.SetValue(ref interacting, symbolSize); diff --git a/Runtime/Serie/Line/LineHandler.PolarCoord.cs b/Runtime/Serie/Line/LineHandler.PolarCoord.cs index 1c34e96a..3567d839 100644 --- a/Runtime/Serie/Line/LineHandler.PolarCoord.cs +++ b/Runtime/Serie/Line/LineHandler.PolarCoord.cs @@ -53,7 +53,7 @@ namespace XCharts.Runtime if (m_LegendEnter) { serie.context.pointerEnter = true; - serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate); + serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate); for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; diff --git a/Runtime/Serie/Line/LineHelper.cs b/Runtime/Serie/Line/LineHelper.cs index 4e99f640..d188a0d8 100644 --- a/Runtime/Serie/Line/LineHelper.cs +++ b/Runtime/Serie/Line/LineHelper.cs @@ -410,7 +410,7 @@ namespace XCharts.Runtime public static float GetLineWidth(ref bool interacting, Serie serie, float defaultWidth) { var lineWidth = 0f; - if (!serie.interact.TryGetValue(ref lineWidth, ref interacting)) + if (!serie.interact.TryGetValue(ref lineWidth, ref interacting, serie.animation.GetInteractionDuration())) { lineWidth = serie.lineStyle.GetWidth(defaultWidth); serie.interact.SetValue(ref interacting, lineWidth); diff --git a/Runtime/Serie/Line/SimplifiedLineHandler.cs b/Runtime/Serie/Line/SimplifiedLineHandler.cs index 75f411bb..6dc165af 100644 --- a/Runtime/Serie/Line/SimplifiedLineHandler.cs +++ b/Runtime/Serie/Line/SimplifiedLineHandler.cs @@ -66,14 +66,13 @@ namespace XCharts.Runtime } m_LastCheckContextFlag = needCheck; var themeSymbolSize = chart.theme.serie.lineSymbolSize; - var themeSymbolSelectedSize = chart.theme.serie.lineSymbolSelectedSize; lineWidth = serie.lineStyle.GetWidth(chart.theme.serie.lineWidth); var needInteract = false; if (m_LegendEnter) { serie.context.pointerEnter = true; - serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate); + serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate); for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; @@ -85,7 +84,7 @@ namespace XCharts.Runtime else if (serie.context.isTriggerByAxis) { serie.context.pointerEnter = true; - serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate); + serie.interact.SetValue(ref needInteract, lineWidth, true, serie.animation.interaction.widthRate); for (int i = 0; i < serie.dataCount; i++) { var serieData = serie.data[i]; diff --git a/Runtime/Serie/Radar/RadarHandler.cs b/Runtime/Serie/Radar/RadarHandler.cs index 1ab840e0..97158704 100644 --- a/Runtime/Serie/Radar/RadarHandler.cs +++ b/Runtime/Serie/Radar/RadarHandler.cs @@ -240,6 +240,7 @@ namespace XCharts.Runtime SerieHelper.GetAllMinMaxData(serie, m_RadarCoord.ceilRate); Color32 areaColor, areaToColor; var startAngle = m_RadarCoord.startAngle * Mathf.PI / 180; + var interactDuration = serie.animation.GetInteractionDuration(); for (int j = 0; j < serie.data.Count; j++) { var serieData = serie.data[j]; @@ -331,7 +332,7 @@ namespace XCharts.Runtime { var point = serieData.context.dataPoints[m]; var symbolSize = 0f; - if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting)) + if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration)) { symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.lineSymbolSize, serieState); serieData.interact.SetValue(ref interacting, symbolSize); diff --git a/Runtime/Serie/Scatter/BaseScatterHandler.cs b/Runtime/Serie/Scatter/BaseScatterHandler.cs index 7228c29e..c56db250 100644 --- a/Runtime/Serie/Scatter/BaseScatterHandler.cs +++ b/Runtime/Serie/Scatter/BaseScatterHandler.cs @@ -77,7 +77,6 @@ namespace XCharts.Runtime serie.context.pointerItemDataIndex = -1; serie.context.pointerEnter = false; var themeSymbolSize = chart.theme.serie.scatterSymbolSize; - var themeSymbolSelectedSize = chart.theme.serie.scatterSymbolSelectedSize; var needInteract = false; for (int i = serie.dataCount - 1; i >= 0; i--) { @@ -134,6 +133,7 @@ namespace XCharts.Runtime serie.animation.InitProgress(0, 1); var rate = serie.animation.GetCurrRate(); var dataChangeDuration = serie.animation.GetChangeDuration(); + var interactDuration = serie.animation.GetInteractionDuration(); var unscaledTime = serie.animation.unscaledTime; var dataChanging = false; var interacting = false; @@ -177,7 +177,7 @@ namespace XCharts.Runtime serieData.context.position = pos; var datas = serieData.data; var symbolSize = 0f; - if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting)) + if (!serieData.interact.TryGetValue(ref symbolSize, ref interacting, interactDuration)) { symbolSize = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, chart.theme.serie.scatterSymbolSize, state); serieData.interact.SetValue(ref interacting, symbolSize); diff --git a/Runtime/Serie/SerieHelper.cs b/Runtime/Serie/SerieHelper.cs index 3340970f..50ea076b 100644 --- a/Runtime/Serie/SerieHelper.cs +++ b/Runtime/Serie/SerieHelper.cs @@ -675,6 +675,7 @@ namespace XCharts.Runtime public static float GetSysmbolSize(Serie serie, SerieData serieData, ThemeStyle theme, float defaultSize, SerieState state = SerieState.Auto) { + if (serie == null) return defaultSize; if (state == SerieState.Auto) state = GetSerieState(serie, serieData); var stateStyle = GetStateStyle(serie, serieData, state); @@ -687,7 +688,7 @@ namespace XCharts.Runtime { case SerieState.Emphasis: case SerieState.Select: - size *= theme.serie.selectedRate; + size *= serie.animation.interaction.radiusRate; break; default: break; @@ -698,7 +699,10 @@ namespace XCharts.Runtime var symbol = stateStyle.symbol; size = symbol.GetSize(serieData == null ? null : serieData.data, defaultSize); } - size = (float)serieData.GetAddAnimationData(0, size, serie.animation.GetAdditionDuration()); + if (serieData != null) + { + size = (float)serieData.GetAddAnimationData(0, size, serie.animation.GetAdditionDuration()); + } return size; } diff --git a/Runtime/Theme/SerieTheme.cs b/Runtime/Theme/SerieTheme.cs index c97a693d..a6e6f478 100644 --- a/Runtime/Theme/SerieTheme.cs +++ b/Runtime/Theme/SerieTheme.cs @@ -10,7 +10,6 @@ namespace XCharts.Runtime [SerializeField] protected float m_LineSymbolSize; [SerializeField] protected float m_ScatterSymbolSize; [SerializeField] protected float m_PieTooltipExtraRadius; - [SerializeField] protected float m_SelectedRate = 1.3f; [SerializeField] protected float m_PieSelectedOffset; [SerializeField] protected Color32 m_CandlestickColor = new Color32(235, 84, 84, 255); [SerializeField] protected Color32 m_CandlestickColor0 = new Color32(71, 178, 98, 255); @@ -37,11 +36,6 @@ namespace XCharts.Runtime set { if (PropertyUtil.SetStruct(ref m_LineSymbolSize, value)) SetVerticesDirty(); } } /// - /// the selected symbol size of line serie. - /// |折线图Symbol在被选中状态时的大小。 - /// - public float lineSymbolSelectedSize { get { return lineSymbolSize * selectedRate; } } - /// /// the symbol size of scatter serie. /// |散点图的Symbol大小。 /// @@ -50,21 +44,6 @@ namespace XCharts.Runtime get { return m_ScatterSymbolSize; } set { if (PropertyUtil.SetStruct(ref m_ScatterSymbolSize, value)) SetVerticesDirty(); } } - /// - /// the selected symbol size of scatter serie. - /// |散点图的Symbol在被选中状态时的大小。 - /// - public float scatterSymbolSelectedSize { get { return scatterSymbolSize * selectedRate; } } - /// - /// the rate of symbol size of line or scatter serie. - /// |折线图或散点图在被选中时的放大倍数。 - /// - public float selectedRate - { - get { return m_SelectedRate; } - set { if (PropertyUtil.SetStruct(ref m_SelectedRate, value)) SetVerticesDirty(); } - } - /// /// the extra radius of pie when actived by tooltip. /// |饼图鼠标移到高亮时的额外半径 @@ -130,7 +109,6 @@ namespace XCharts.Runtime m_LineWidth = theme.lineWidth; m_LineSymbolSize = theme.lineSymbolSize; m_ScatterSymbolSize = theme.scatterSymbolSize; - selectedRate = theme.selectedRate; m_PieTooltipExtraRadius = theme.pieTooltipExtraRadius; m_PieSelectedOffset = theme.pieSelectedOffset; m_CandlestickColor = theme.candlestickColor;