| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214 | 
							- using UnityEngine;
 
- using UnityEngine.UI;
 
- using XUGL;
 
- namespace XCharts.Runtime
 
- {
 
-     /// <summary>
 
-     /// For polar coord
 
-     /// </summary>
 
-     internal sealed partial class BarHandler
 
-     {
 
-         private PolarCoord m_SeriePolar;
 
-         private void UpdateSeriePolarContext()
 
-         {
 
-             if (m_SeriePolar == null)
 
-                 return;
 
-             var needCheck = (chart.isPointerInChart && m_SeriePolar.IsPointerEnter()) || m_LegendEnter;
 
-             var lineWidth = 0f;
 
-             if (!needCheck)
 
-             {
 
-                 if (m_LastCheckContextFlag != needCheck)
 
-                 {
 
-                     var needAnimation1 = false;
 
-                     lineWidth = serie.lineStyle.GetWidth(chart.theme.serie.lineWidth);
 
-                     m_LastCheckContextFlag = needCheck;
 
-                     serie.context.pointerItemDataIndex = -1;
 
-                     serie.context.pointerEnter = false;
 
-                     serie.interact.SetValue(ref needAnimation1, lineWidth);
 
-                     foreach (var serieData in serie.data)
 
-                     {
 
-                         var symbol = SerieHelper.GetSerieSymbol(serie, serieData);
 
-                         var symbolSize = symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize);
 
-                         serieData.context.highlight = false;
 
-                         serieData.interact.SetValue(ref needAnimation1, symbolSize);
 
-                     }
 
-                     if (needAnimation1)
 
-                     {
 
-                         if (SeriesHelper.IsStack(chart.series))
 
-                             chart.RefreshTopPainter();
 
-                         else
 
-                             chart.RefreshPainter(serie);
 
-                     }
 
-                 }
 
-                 return;
 
-             }
 
-             m_LastCheckContextFlag = needCheck;
 
-             var themeSymbolSize = chart.theme.serie.lineSymbolSize;
 
-             lineWidth = serie.lineStyle.GetWidth(chart.theme.serie.lineWidth);
 
-             var needInteract = false;
 
-             if (m_LegendEnter)
 
-             {
 
-                 serie.context.pointerEnter = true;
 
-                 serie.interact.SetValue(ref needInteract, serie.animation.interaction.GetWidth(lineWidth));
 
-                 for (int i = 0; i < serie.dataCount; i++)
 
-                 {
 
-                     var serieData = serie.data[i];
 
-                     var size = SerieHelper.GetSysmbolSize(serie, serieData, themeSymbolSize, SerieState.Emphasis);
 
-                     serieData.context.highlight = true;
 
-                     serieData.interact.SetValue(ref needInteract, size);
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 serie.context.pointerItemDataIndex = -1;
 
-                 serie.context.pointerEnter = false;
 
-                 var dir = chart.pointerPos - new Vector2(m_SeriePolar.context.center.x, m_SeriePolar.context.center.y);
 
-                 var pointerAngle = ChartHelper.GetAngle360(Vector2.up, dir);
 
-                 var pointerRadius = Vector2.Distance(chart.pointerPos, m_SeriePolar.context.center);
 
-                 Color32 color, toColor;
 
-                 for (int i = 0; i < serie.dataCount; i++)
 
-                 {
 
-                     var serieData = serie.data[i];
 
-                     if (pointerAngle >= serieData.context.startAngle &&
 
-                         pointerAngle < serieData.context.toAngle &&
 
-                         pointerRadius >= serieData.context.insideRadius &&
 
-                         pointerRadius < serieData.context.outsideRadius)
 
-                     {
 
-                         serie.context.pointerItemDataIndex = i;
 
-                         serie.context.pointerEnter = true;
 
-                         serieData.context.highlight = true;
 
-                     }
 
-                     else
 
-                     {
 
-                         serieData.context.highlight = false;
 
-                     }
 
-                     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);
 
-                 }
 
-             }
 
-             if (needInteract)
 
-             {
 
-                 if (SeriesHelper.IsStack(chart.series))
 
-                     chart.RefreshTopPainter();
 
-                 else
 
-                     chart.RefreshPainter(serie);
 
-             }
 
-         }
 
-         private void DrawPolarBar(VertexHelper vh, Serie serie)
 
-         {
 
-             var datas = serie.data;
 
-             if (datas.Count <= 0)
 
-                 return;
 
-             m_SeriePolar = chart.GetChartComponent<PolarCoord>(serie.polarIndex);
 
-             if (m_SeriePolar == null)
 
-                 return;
 
-             var m_AngleAxis = ComponentHelper.GetAngleAxis(chart.components, m_SeriePolar.index);
 
-             var m_RadiusAxis = ComponentHelper.GetRadiusAxis(chart.components, m_SeriePolar.index);
 
-             if (m_AngleAxis == null || m_RadiusAxis == null)
 
-                 return;
 
-             var startAngle = m_AngleAxis.context.startAngle;
 
-             var currDetailProgress = 0f;
 
-             var totalDetailProgress = datas.Count;
 
-             serie.animation.InitProgress(currDetailProgress, totalDetailProgress);
 
-             var isStack = SeriesHelper.IsStack<Bar>(chart.series, serie.stack);
 
-             if (isStack)
 
-                 SeriesHelper.UpdateStackDataList(chart.series, serie, null, m_StackSerieData);
 
-             var barCount = chart.GetSerieBarRealCount<Bar>();
 
-             var categoryWidth = m_AngleAxis.IsCategory() ?
 
-                 AxisHelper.GetDataWidth(m_AngleAxis, 360, datas.Count, null) :
 
-                 AxisHelper.GetDataWidth(m_RadiusAxis, m_SeriePolar.context.radius, datas.Count, null);
 
-             var barGap = chart.GetSerieBarGap<Bar>();
 
-             var totalBarWidth = chart.GetSerieTotalWidth<Bar>(categoryWidth, barGap, barCount);
 
-             var barWidth = serie.GetBarWidth(categoryWidth, barCount);
 
-             var offset = (categoryWidth - totalBarWidth) * 0.5f;
 
-             var serieReadIndex = chart.GetSerieIndexIfStack<Bar>(serie);
 
-             float gap = serie.barGap == -1 ? offset : offset + chart.GetSerieTotalGap<Bar>(categoryWidth, barGap, serieReadIndex);
 
-             var areaColor = ColorUtil.clearColor32;
 
-             var areaToColor = ColorUtil.clearColor32;
 
-             var interacting = false;
 
-             var interactDuration = serie.animation.GetInteractionDuration();
 
-             float start, end;
 
-             float inside, outside;
 
-             double radiusValue, angleValue;
 
-             for (int i = 0; i < datas.Count; i++)
 
-             {
 
-                 if (serie.animation.CheckDetailBreak(i))
 
-                     break;
 
-                 var serieData = datas[i];
 
-                 var itemStyle = SerieHelper.GetItemStyle(serie, serieData);
 
-                 var borderWidth = itemStyle.borderWidth;
 
-                 var borderColor = itemStyle.borderColor;
 
-                 radiusValue = serieData.GetData(0);
 
-                 angleValue = serieData.GetData(1);
 
-                 if (m_AngleAxis.IsCategory())
 
-                 {
 
-                     start = (float) (startAngle + categoryWidth * angleValue + gap);
 
-                     end = start + barWidth;
 
-                     inside = m_SeriePolar.context.insideRadius;
 
-                     if (isStack)
 
-                     {
 
-                         for (int n = 0; n < m_StackSerieData.Count - 1; n++)
 
-                             inside += m_StackSerieData[n][i].context.stackHeight;
 
-                     }
 
-                     outside = inside + m_RadiusAxis.GetValueLength(radiusValue, m_SeriePolar.context.radius);
 
-                     serieData.context.stackHeight = outside - inside;
 
-                 }
 
-                 else
 
-                 {
 
-                     start = startAngle;
 
-                     if (isStack)
 
-                     {
 
-                         for (int n = 0; n < m_StackSerieData.Count - 1; n++)
 
-                             start += m_StackSerieData[n][i].context.stackHeight;
 
-                     }
 
-                     end = start + m_AngleAxis.GetValueLength(angleValue, 360);
 
-                     serieData.context.stackHeight = end - start;
 
-                     inside = m_SeriePolar.context.insideRadius + categoryWidth * (float) radiusValue + gap;
 
-                     outside = inside + barWidth;
 
-                 }
 
-                 serieData.context.startAngle = start;
 
-                 serieData.context.toAngle = end;
 
-                 serieData.context.halfAngle = (start + end) / 2;
 
-                 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);
 
-                 }
 
-                 var needRoundCap = serie.roundCap && inside > 0;
 
-                 serieData.context.insideRadius = inside;
 
-                 serieData.context.outsideRadius = outside;
 
-                 serieData.context.areaCenter = m_SeriePolar.context.center;
 
-                 serieData.context.position = ChartHelper.GetPosition(m_SeriePolar.context.center, (start + end) / 2, (inside + outside) / 2);
 
-                 UGL.DrawDoughnut(vh, m_SeriePolar.context.center, inside, outside, areaColor, areaToColor,
 
-                     ColorUtil.clearColor32, start, end, borderWidth, borderColor, serie.gap / 2, chart.settings.cicleSmoothness,
 
-                     needRoundCap, true);
 
-             }
 
-             if (!serie.animation.IsFinish())
 
-             {
 
-                 serie.animation.CheckProgress(totalDetailProgress);
 
-                 serie.animation.CheckSymbol(serie.symbol.GetSize(null, chart.theme.serie.lineSymbolSize));
 
-                 chart.RefreshChart();
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |