diff --git a/Runtime/Helper/SerieLabelHelper.cs b/Runtime/Helper/SerieLabelHelper.cs index bd9e4613..aa0a174e 100644 --- a/Runtime/Helper/SerieLabelHelper.cs +++ b/Runtime/Helper/SerieLabelHelper.cs @@ -124,7 +124,7 @@ namespace XCharts serieData.SetLabelActive(false); return; } - var value = serieData.GetData(1); + var value = serieData.GetData(0); var total = serie.max - serie.min; var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, null, Color.clear); serieData.SetLabelActive(true); diff --git a/Runtime/Serie/Heatmap/HeatmapHandler.cs b/Runtime/Serie/Heatmap/HeatmapHandler.cs index 6a5e2720..1d4e0a90 100644 --- a/Runtime/Serie/Heatmap/HeatmapHandler.cs +++ b/Runtime/Serie/Heatmap/HeatmapHandler.cs @@ -99,7 +99,6 @@ namespace XCharts { serie.context.pointerItemDataIndex = -1; serie.context.pointerEnter = false; - var count = 0; foreach (var serieData in serie.data) { if (!needInteract && serieData.context.rect.Contains(chart.pointerPos)) @@ -113,7 +112,6 @@ namespace XCharts { serieData.context.highlight = false; } - count++; } } if (needInteract) @@ -141,7 +139,6 @@ namespace XCharts var zeroX = m_SerieGrid.context.x; var zeroY = m_SerieGrid.context.y; - var dataList = serie.GetDataList(); var rangeMin = visualMap.rangeMin; var rangeMax = visualMap.rangeMax; var color = chart.theme.GetColor(serie.index); diff --git a/Runtime/Serie/Liquid/Liquid.cs b/Runtime/Serie/Liquid/Liquid.cs index f5c77174..c8add1f0 100644 --- a/Runtime/Serie/Liquid/Liquid.cs +++ b/Runtime/Serie/Liquid/Liquid.cs @@ -6,7 +6,7 @@ namespace XCharts [System.Serializable] [SerieHandler(typeof(LiquidHandler), true)] [RequireChartComponent(typeof(Vessel))] - [SerieExtraComponent()] + [SerieExtraComponent(typeof(LabelStyle))] public class Liquid : Serie, INeedSerieContainer { [SerializeField] private float m_WaveHeight = 10f; diff --git a/Runtime/Serie/Liquid/LiquidHandler.cs b/Runtime/Serie/Liquid/LiquidHandler.cs index de71935c..3651f5b6 100644 --- a/Runtime/Serie/Liquid/LiquidHandler.cs +++ b/Runtime/Serie/Liquid/LiquidHandler.cs @@ -13,20 +13,18 @@ namespace XCharts public override void Update() { + base.Update(); if (m_UpdateLabelText) { m_UpdateLabelText = false; - foreach (var serie in chart.series) - { - if (serie is Liquid) - { - var colorIndex = chart.m_LegendRealShowName.IndexOf(serie.serieName); - SerieLabelHelper.SetLiquidLabelText(serie, chart.theme, colorIndex); - } - } + RefreshLabelInternal(); } } + public override void RefreshLabelNextFrame() + { + } + public override void DrawSerie(VertexHelper vh) { UpdateRuntimeData(serie); diff --git a/Runtime/Serie/Radar/RadarHandler.cs b/Runtime/Serie/Radar/RadarHandler.cs index 118a41db..77e6b45e 100644 --- a/Runtime/Serie/Radar/RadarHandler.cs +++ b/Runtime/Serie/Radar/RadarHandler.cs @@ -332,7 +332,6 @@ namespace XCharts int dataCount = radar.indicatorList.Count; var index = serieData.index; var p = radar.context.center; - var min = radar.GetIndicatorMin(index); var max = radar.GetIndicatorMax(index); var value = serieData.GetCurrData(1, dataChangeDuration); if (serieData.IsDataChanged()) dataChanging = true; diff --git a/Runtime/Serie/Ring/RingHandler.cs b/Runtime/Serie/Ring/RingHandler.cs index 63b320b6..92ae49ac 100644 --- a/Runtime/Serie/Ring/RingHandler.cs +++ b/Runtime/Serie/Ring/RingHandler.cs @@ -11,44 +11,66 @@ namespace XCharts [UnityEngine.Scripting.Preserve] internal sealed class RingHandler : SerieHandler { - private bool m_UpdateTitleText = false; - private bool m_UpdateLabelText = false; + + public override int defaultDimension { get { return 0; } } public override void Update() { - if (m_UpdateTitleText) - { - m_UpdateTitleText = false; - foreach (var serie in chart.series) - { - if (serie is Ring) - { - serie.titleStyle.SetText(serie.serieName); - } - } - } - if (m_UpdateLabelText) - { - m_UpdateLabelText = false; - foreach (var serie in chart.series) - { - if (serie is Ring) - { - SerieLabelHelper.SetRingLabelText(serie, chart.theme); - } - } - } + base.Update(); + UpdateSerieContext(); + } - var ringIndex = GetRingIndex(chart.pointerPos); - if (ringIndex >= 0) + private void UpdateSerieContext() + { + var needCheck = chart.isPointerInChart || m_LegendEnter; + var needInteract = false; + if (!needCheck) + { + if (m_LastCheckContextFlag != needCheck) + { + m_LastCheckContextFlag = needCheck; + serie.context.pointerItemDataIndex = -1; + serie.context.pointerEnter = false; + foreach (var serieData in serie.data) + { + serieData.context.highlight = false; + } + chart.RefreshPainter(serie); + } + return; + } + m_LastCheckContextFlag = needCheck; + if (m_LegendEnter) { serie.context.pointerEnter = true; - serie.context.pointerItemDataIndex = ringIndex; + foreach (var serieData in serie.data) + { + serieData.context.highlight = true; + } } else { serie.context.pointerEnter = false; serie.context.pointerItemDataIndex = -1; + var ringIndex = GetRingIndex(chart.pointerPos); + foreach (var serieData in serie.data) + { + if (!needInteract && ringIndex == serieData.index) + { + serie.context.pointerEnter = true; + serie.context.pointerItemDataIndex = ringIndex; + serieData.context.highlight = true; + needInteract = true; + } + else + { + serieData.context.highlight = false; + } + } + } + if (needInteract) + { + chart.RefreshPainter(serie); } } @@ -70,7 +92,7 @@ namespace XCharts param.serieName = serie.serieName; param.serieIndex = serie.index; param.category = category; - param.dimension = 0; + param.dimension = defaultDimension; param.serieData = serieData; param.value = serieData.GetData(0); param.total = serieData.GetData(1); @@ -99,6 +121,7 @@ namespace XCharts for (int j = 0; j < data.Count; j++) { var serieData = data[j]; + serieData.index = j; if (!serieData.show) continue; if (serieData.IsDataChanged()) dataChanging = true; var value = serieData.GetFirstData(dataChangeDuration); @@ -297,6 +320,7 @@ namespace XCharts for (int i = 0; i < serie.data.Count; i++) { var serieData = serie.data[i]; + serieData.index = i; if (dist >= serieData.context.insideRadius && dist <= serieData.context.outsideRadius && angle >= serieData.context.startAngle && diff --git a/Runtime/Serie/Serie.cs b/Runtime/Serie/Serie.cs index ad309008..cfdfc156 100644 --- a/Runtime/Serie/Serie.cs +++ b/Runtime/Serie/Serie.cs @@ -205,7 +205,7 @@ namespace XCharts [SerializeField] private bool m_ClickOffset = true; [SerializeField] private RoseType m_RoseType = RoseType.None; [SerializeField] private float m_Space; - [SerializeField] private float[] m_Center = new float[2] { 0.5f, 0.45f }; + [SerializeField] private float[] m_Center = new float[2] { 0.5f, 0.48f }; [SerializeField] private float[] m_Radius = new float[2] { 0, 80 }; [SerializeField] [Range(1, 10)] private int m_ShowDataDimension; @@ -1411,8 +1411,10 @@ namespace XCharts } } - public double GetDataTotal(int dimension) + public virtual double GetDataTotal(int dimension) { + if (m_Max > 0) return m_Max; + double total = 0; foreach (var sdata in data) { diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs index 957cb3ce..9b793d0c 100644 --- a/Runtime/Serie/SerieHandler.cs +++ b/Runtime/Serie/SerieHandler.cs @@ -63,8 +63,6 @@ namespace XCharts m_NeedInitComponent = true; } - - public override void Update() { if (m_NeedInitComponent) @@ -280,7 +278,7 @@ namespace XCharts return; var colorIndex = chart.GetLegendRealShowNameIndex(serie.legendName); - var total = serie.yTotal; + var total = serie.GetDataTotal(defaultDimension); var isNeedInvertPositionSerie = serie is Line; foreach (var serieData in serie.data) @@ -303,9 +301,10 @@ namespace XCharts && serieData.context.canShowLabel && !isIgnore) { + var value = serieData.GetData(defaultDimension); var content = serie.useDataNameForColor && string.IsNullOrEmpty(currLabel.formatter) ? serieData.name - : SerieLabelHelper.GetFormatterContent(serie, serieData, serieData.GetData(defaultDimension), total, + : SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, currLabel, chart.theme.GetColor(colorIndex)); var invert = currLabel.autoOffset