Files
XCharts/Runtime/Serie/Line/LineHandler.cs

100 lines
3.3 KiB
C#
Raw Normal View History

2022-01-26 20:47:14 +08:00
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.UI;
using XUGL;
2022-02-19 22:37:57 +08:00
namespace XCharts.Runtime
2022-01-26 20:47:14 +08:00
{
/// <summary>
/// For grid coord
/// </summary>
[UnityEngine.Scripting.Preserve]
internal sealed partial class LineHandler : SerieHandler<Line>
{
public override void Update()
{
base.Update();
if (serie.IsUseCoord<GridCoord>())
UpdateSerieGridContext();
else if (serie.IsUseCoord<PolarCoord>())
UpdateSeriePolarContext();
}
public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category,
string marker, string itemFormatter, string numericFormatter, string ignoreDataDefaultContent,
2022-01-26 20:47:14 +08:00
ref List<SerieParams> paramList, ref string title)
{
UpdateCoordSerieParams(ref paramList, ref title, dataIndex, showCategory, category,
marker, itemFormatter, numericFormatter, ignoreDataDefaultContent);
2022-01-26 20:47:14 +08:00
}
public override void DrawSerie(VertexHelper vh)
{
if (serie.IsUseCoord<PolarCoord>())
{
DrawPolarLine(vh, serie);
DrawPolarLineSymbol(vh);
2022-09-21 06:59:57 +08:00
DrawPolarLineArrow(vh, serie);
2022-01-26 20:47:14 +08:00
}
else if (serie.IsUseCoord<GridCoord>())
{
DrawLineSerie(vh, serie);
if (!SeriesHelper.IsStack(chart.series))
{
DrawLinePoint(vh, serie);
DrawLineArrow(vh, serie);
}
}
}
public override void DrawUpper(VertexHelper vh)
2022-01-26 20:47:14 +08:00
{
if (serie.IsUseCoord<GridCoord>())
{
if (SeriesHelper.IsStack(chart.series))
{
DrawLinePoint(vh, serie);
DrawLineArrow(vh, serie);
}
}
}
public override void RefreshEndLabelInternal()
{
base.RefreshEndLabelInternal();
if (m_SerieGrid == null) return;
if (!serie.animation.IsFinish()) return;
var endLabelList = m_SerieGrid.context.endLabelList;
if (endLabelList.Count <= 1) return;
2022-05-22 22:17:38 +08:00
endLabelList.Sort(delegate(ChartLabel a, ChartLabel b)
{
2022-04-26 08:24:45 +08:00
if (a == null || b == null) return 1;
return b.transform.position.y.CompareTo(a.transform.position.y);
});
var lastY = float.NaN;
for (int i = 0; i < endLabelList.Count; i++)
{
var label = endLabelList[i];
2022-04-26 08:24:45 +08:00
if (label == null) continue;
if (!label.isAnimationEnd) continue;
var labelPosition = label.transform.localPosition;
if (float.IsNaN(lastY))
{
lastY = labelPosition.y;
}
else
{
2022-04-26 08:24:45 +08:00
var labelHeight = label.GetTextHeight();
if (labelPosition.y + labelHeight > lastY)
{
label.SetPosition(new Vector3(labelPosition.x, lastY - labelHeight, labelPosition.z));
}
lastY = label.transform.localPosition.y;
}
}
}
2022-01-26 20:47:14 +08:00
}
}