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); serieData.SetLabelActive(false);
return; return;
} }
var value = serieData.GetData(1); var value = serieData.GetData(0);
var total = serie.max - serie.min; var total = serie.max - serie.min;
var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, null, Color.clear); var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, null, Color.clear);
serieData.SetLabelActive(true); serieData.SetLabelActive(true);

View File

@@ -99,7 +99,6 @@ namespace XCharts
{ {
serie.context.pointerItemDataIndex = -1; serie.context.pointerItemDataIndex = -1;
serie.context.pointerEnter = false; serie.context.pointerEnter = false;
var count = 0;
foreach (var serieData in serie.data) foreach (var serieData in serie.data)
{ {
if (!needInteract && serieData.context.rect.Contains(chart.pointerPos)) if (!needInteract && serieData.context.rect.Contains(chart.pointerPos))
@@ -113,7 +112,6 @@ namespace XCharts
{ {
serieData.context.highlight = false; serieData.context.highlight = false;
} }
count++;
} }
} }
if (needInteract) if (needInteract)
@@ -141,7 +139,6 @@ namespace XCharts
var zeroX = m_SerieGrid.context.x; var zeroX = m_SerieGrid.context.x;
var zeroY = m_SerieGrid.context.y; var zeroY = m_SerieGrid.context.y;
var dataList = serie.GetDataList();
var rangeMin = visualMap.rangeMin; var rangeMin = visualMap.rangeMin;
var rangeMax = visualMap.rangeMax; var rangeMax = visualMap.rangeMax;
var color = chart.theme.GetColor(serie.index); var color = chart.theme.GetColor(serie.index);

View File

@@ -6,7 +6,7 @@ namespace XCharts
[System.Serializable] [System.Serializable]
[SerieHandler(typeof(LiquidHandler), true)] [SerieHandler(typeof(LiquidHandler), true)]
[RequireChartComponent(typeof(Vessel))] [RequireChartComponent(typeof(Vessel))]
[SerieExtraComponent()] [SerieExtraComponent(typeof(LabelStyle))]
public class Liquid : Serie, INeedSerieContainer public class Liquid : Serie, INeedSerieContainer
{ {
[SerializeField] private float m_WaveHeight = 10f; [SerializeField] private float m_WaveHeight = 10f;

View File

@@ -13,20 +13,18 @@ namespace XCharts
public override void Update() public override void Update()
{ {
base.Update();
if (m_UpdateLabelText) if (m_UpdateLabelText)
{ {
m_UpdateLabelText = false; m_UpdateLabelText = false;
foreach (var serie in chart.series) RefreshLabelInternal();
{
if (serie is Liquid)
{
var colorIndex = chart.m_LegendRealShowName.IndexOf(serie.serieName);
SerieLabelHelper.SetLiquidLabelText(serie, chart.theme, colorIndex);
}
}
} }
} }
public override void RefreshLabelNextFrame()
{
}
public override void DrawSerie(VertexHelper vh) public override void DrawSerie(VertexHelper vh)
{ {
UpdateRuntimeData(serie); UpdateRuntimeData(serie);

View File

@@ -332,7 +332,6 @@ namespace XCharts
int dataCount = radar.indicatorList.Count; int dataCount = radar.indicatorList.Count;
var index = serieData.index; var index = serieData.index;
var p = radar.context.center; var p = radar.context.center;
var min = radar.GetIndicatorMin(index);
var max = radar.GetIndicatorMax(index); var max = radar.GetIndicatorMax(index);
var value = serieData.GetCurrData(1, dataChangeDuration); var value = serieData.GetCurrData(1, dataChangeDuration);
if (serieData.IsDataChanged()) dataChanging = true; if (serieData.IsDataChanged()) dataChanging = true;

View File

@@ -11,44 +11,66 @@ namespace XCharts
[UnityEngine.Scripting.Preserve] [UnityEngine.Scripting.Preserve]
internal sealed class RingHandler : SerieHandler<Ring> 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() public override void Update()
{ {
if (m_UpdateTitleText) base.Update();
{ UpdateSerieContext();
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);
}
}
}
var ringIndex = GetRingIndex(chart.pointerPos); private void UpdateSerieContext()
if (ringIndex >= 0) {
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.pointerEnter = true;
serie.context.pointerItemDataIndex = ringIndex; foreach (var serieData in serie.data)
{
serieData.context.highlight = true;
}
} }
else else
{ {
serie.context.pointerEnter = false; serie.context.pointerEnter = false;
serie.context.pointerItemDataIndex = -1; 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.serieName = serie.serieName;
param.serieIndex = serie.index; param.serieIndex = serie.index;
param.category = category; param.category = category;
param.dimension = 0; param.dimension = defaultDimension;
param.serieData = serieData; param.serieData = serieData;
param.value = serieData.GetData(0); param.value = serieData.GetData(0);
param.total = serieData.GetData(1); param.total = serieData.GetData(1);
@@ -99,6 +121,7 @@ namespace XCharts
for (int j = 0; j < data.Count; j++) for (int j = 0; j < data.Count; j++)
{ {
var serieData = data[j]; var serieData = data[j];
serieData.index = j;
if (!serieData.show) continue; if (!serieData.show) continue;
if (serieData.IsDataChanged()) dataChanging = true; if (serieData.IsDataChanged()) dataChanging = true;
var value = serieData.GetFirstData(dataChangeDuration); var value = serieData.GetFirstData(dataChangeDuration);
@@ -297,6 +320,7 @@ namespace XCharts
for (int i = 0; i < serie.data.Count; i++) for (int i = 0; i < serie.data.Count; i++)
{ {
var serieData = serie.data[i]; var serieData = serie.data[i];
serieData.index = i;
if (dist >= serieData.context.insideRadius && if (dist >= serieData.context.insideRadius &&
dist <= serieData.context.outsideRadius && dist <= serieData.context.outsideRadius &&
angle >= serieData.context.startAngle && angle >= serieData.context.startAngle &&

View File

@@ -205,7 +205,7 @@ namespace XCharts
[SerializeField] private bool m_ClickOffset = true; [SerializeField] private bool m_ClickOffset = true;
[SerializeField] private RoseType m_RoseType = RoseType.None; [SerializeField] private RoseType m_RoseType = RoseType.None;
[SerializeField] private float m_Space; [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] private float[] m_Radius = new float[2] { 0, 80 };
[SerializeField] [Range(1, 10)] private int m_ShowDataDimension; [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; double total = 0;
foreach (var sdata in data) foreach (var sdata in data)
{ {

View File

@@ -63,8 +63,6 @@ namespace XCharts
m_NeedInitComponent = true; m_NeedInitComponent = true;
} }
public override void Update() public override void Update()
{ {
if (m_NeedInitComponent) if (m_NeedInitComponent)
@@ -280,7 +278,7 @@ namespace XCharts
return; return;
var colorIndex = chart.GetLegendRealShowNameIndex(serie.legendName); var colorIndex = chart.GetLegendRealShowNameIndex(serie.legendName);
var total = serie.yTotal; var total = serie.GetDataTotal(defaultDimension);
var isNeedInvertPositionSerie = serie is Line; var isNeedInvertPositionSerie = serie is Line;
foreach (var serieData in serie.data) foreach (var serieData in serie.data)
@@ -303,9 +301,10 @@ namespace XCharts
&& serieData.context.canShowLabel && serieData.context.canShowLabel
&& !isIgnore) && !isIgnore)
{ {
var value = serieData.GetData(defaultDimension);
var content = serie.useDataNameForColor && string.IsNullOrEmpty(currLabel.formatter) var content = serie.useDataNameForColor && string.IsNullOrEmpty(currLabel.formatter)
? serieData.name ? serieData.name
: SerieLabelHelper.GetFormatterContent(serie, serieData, serieData.GetData(defaultDimension), total, : SerieLabelHelper.GetFormatterContent(serie, serieData, value, total,
currLabel, chart.theme.GetColor(colorIndex)); currLabel, chart.theme.GetColor(colorIndex));
var invert = currLabel.autoOffset var invert = currLabel.autoOffset