diff --git a/Runtime/Serie/Bar/BarHandler.cs b/Runtime/Serie/Bar/BarHandler.cs index fabb1576..92b8d54d 100644 --- a/Runtime/Serie/Bar/BarHandler.cs +++ b/Runtime/Serie/Bar/BarHandler.cs @@ -103,13 +103,13 @@ namespace XCharts.Runtime serie.context.pointerItemDataIndex = serieData.index; serie.context.pointerEnter = true; serieData.context.highlight = true; - SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, SerieState.Emphasis); } else { serieData.context.highlight = false; - SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, SerieState.Normal); } + var state = SerieHelper.GetSerieState(serie, serieData, true); + SerieHelper.GetItemColor(out color, out toColor, serie, serieData, chart.theme, state); serieData.interact.SetColor(ref needInteract, color, toColor); } } diff --git a/Runtime/Serie/Line/LineHandler.GridCoord.cs b/Runtime/Serie/Line/LineHandler.GridCoord.cs index 55938982..a3f5c193 100644 --- a/Runtime/Serie/Line/LineHandler.GridCoord.cs +++ b/Runtime/Serie/Line/LineHandler.GridCoord.cs @@ -85,6 +85,7 @@ namespace XCharts.Runtime { serie.context.pointerEnter = true; serie.context.pointerItemDataIndex = i; + needInteract = true; } } } diff --git a/Runtime/Serie/Radar/RadarHandler.cs b/Runtime/Serie/Radar/RadarHandler.cs index 68918c14..5b7b7fc7 100644 --- a/Runtime/Serie/Radar/RadarHandler.cs +++ b/Runtime/Serie/Radar/RadarHandler.cs @@ -155,6 +155,7 @@ namespace XCharts.Runtime } break; case RadarType.Single: + needInteract = false; for (int i = 0; i < serie.data.Count; i++) { var serieData = serie.data[i]; @@ -162,10 +163,14 @@ namespace XCharts.Runtime var size = SerieHelper.GetSysmbolSize(serie, serieData, chart.theme, themeSymbolSize); if (Vector3.Distance(chart.pointerPos, serieData.context.position) < size * 2) { - serie.highlight = true; serie.context.pointerEnter = true; serie.context.pointerItemDataIndex = i; - break; + serieData.context.highlight = true; + needInteract = true; + } + else + { + serieData.context.highlight = false; } } if (!serie.context.pointerEnter && areaStyle != null) @@ -178,10 +183,10 @@ namespace XCharts.Runtime var p2 = n >= dataPoints.Count - 1 ? dataPoints[0] : dataPoints[n + 1]; if (UGLHelper.IsPointInTriangle(p1.context.position, center, p2.context.position, chart.pointerPos)) { - serie.highlight = true; serie.context.pointerEnter = true; serie.context.pointerItemDataIndex = n; p1.context.highlight = true; + needInteract = true; break; } } diff --git a/Runtime/Serie/SerieHelper.cs b/Runtime/Serie/SerieHelper.cs index 8ad651bb..696b09af 100644 --- a/Runtime/Serie/SerieHelper.cs +++ b/Runtime/Serie/SerieHelper.cs @@ -244,7 +244,7 @@ namespace XCharts.Runtime public static SerieState GetSerieState(Serie serie) { - if (serie.highlight || serie.context.pointerEnter) return SerieState.Emphasis; + if (serie.highlight) return SerieState.Emphasis; return serie.state; } diff --git a/Runtime/XUGL/UGL.cs b/Runtime/XUGL/UGL.cs index 595342f3..a5520086 100644 --- a/Runtime/XUGL/UGL.cs +++ b/Runtime/XUGL/UGL.cs @@ -1940,5 +1940,25 @@ namespace XUGL angle += smoothness; } } + + /// + /// 填充任意多边形(目前只支持凸多边形) + /// + /// + /// + /// + public static void DrawPolygon(VertexHelper vh, List points, Color32 color) + { + if (points.Count < 3 || UGLHelper.IsClearColor(color)) return; + var cv = vh.currentVertCount; + foreach (var pos in points) + { + vh.AddVert(pos, color, Vector2.zero); + } + for (int i = 2; i < points.Count; i++) + { + vh.AddTriangle(cv, cv + i - 1, cv + i); + } + } } } \ No newline at end of file