3.0 - liquid chart and ring chart

This commit is contained in:
monitor1394
2022-01-22 22:58:55 +08:00
parent d9840bef52
commit a32f5f5bcf
8 changed files with 67 additions and 48 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

View File

@@ -11,44 +11,66 @@ namespace XCharts
[UnityEngine.Scripting.Preserve]
internal sealed class RingHandler : SerieHandler<Ring>
{
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 &&

View File

@@ -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)
{

View File

@@ -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