完善ChartonSerieEnteronSerieExitonSerieClick回调

This commit is contained in:
monitor1394
2023-08-03 07:52:20 +08:00
parent 43ba7d47c5
commit 618fe0fb01
5 changed files with 54 additions and 34 deletions

View File

@@ -72,9 +72,11 @@ slug: /changelog
* 重构和完善动画系统,增加`新增动画``交互动画`的支持
* 完善`PieChart`的动画交互表现
* 增加`Symbol``EmptyTriangle``EmptyDiamond``Plus``Minus`四种新标记
* 完善图表的交互回调
日志详情:
* (2023.08.03) 完善`Chart``onSerieEnter``onSerieExit``onSerieClick`回调
* (2023.08.02) 修复`BarChart``onSerieEnter``onSerieExit`回调无效的问题
* (2023.08.02) 增加`Symbol``Plus`加号和`Minus`减号的支持
* (2023.07.31) 增加`Symbol``EmptyTriangle``EmptyDiamond`的支持,优化`Symbol`表现效果

View File

@@ -195,6 +195,7 @@ namespace XCharts.Runtime
foreach (var handler in m_SerieHandlers) handler.BeforeUpdate();
foreach (var handler in m_ComponentHandlers) handler.Update();
foreach (var handler in m_SerieHandlers) handler.Update();
foreach (var handler in m_SerieHandlers) handler.AfterUpdate();
m_DebugInfo.Update();
if (m_OnUpdate != null)
m_OnUpdate();

View File

@@ -13,9 +13,8 @@ namespace XCharts.Runtime
private GridCoord m_SerieGrid;
private float[] m_CapusleDefaultCornerRadius = new float[] { 1, 1, 1, 1 };
public override void Update()
public override void UpdateSerieContext()
{
base.Update();
if (serie.IsUseCoord<GridCoord>())
UpdateSerieGridContext();
else if (serie.IsUseCoord<PolarCoord>())

View File

@@ -98,26 +98,26 @@ namespace XCharts.Runtime
}
}
public override int GetPointerItemDataIndex()
{
var symbolSize = SerieHelper.GetSysmbolSize(serie, null, chart.theme.serie.lineSymbolSize) * 1.5f;
var count = serie.context.dataPoints.Count;
for (int i = 0; i < count; i++)
{
var index = serie.context.dataIndexs[i];
var serieData = serie.GetSerieData(index);
if (serieData == null)
continue;
if (serieData.context.isClip)
continue;
// public override int GetPointerItemDataIndex()
// {
// var symbolSize = SerieHelper.GetSysmbolSize(serie, null, chart.theme.serie.lineSymbolSize) * 1.5f;
// var count = serie.context.dataPoints.Count;
// for (int i = 0; i < count; i++)
// {
// var index = serie.context.dataIndexs[i];
// var serieData = serie.GetSerieData(index);
// if (serieData == null)
// continue;
// if (serieData.context.isClip)
// continue;
var pos = serie.context.dataPoints[i];
if (Vector2.Distance(pos, chart.pointerPos) < symbolSize)
{
return i;
}
}
return -1;
}
// var pos = serie.context.dataPoints[i];
// if (Vector2.Distance(pos, chart.pointerPos) < symbolSize)
// {
// return i;
// }
// }
// return -1;
// }
}
}

View File

@@ -17,6 +17,7 @@ namespace XCharts.Runtime
public virtual void CheckComponent(StringBuilder sb) { }
public virtual void BeforeUpdate() { }
public virtual void Update() { }
public virtual void AfterUpdate() { }
public virtual void DrawBase(VertexHelper vh) { }
public virtual void DrawSerie(VertexHelper vh) { }
public virtual void DrawUpper(VertexHelper vh) { }
@@ -69,6 +70,7 @@ namespace XCharts.Runtime
private float[] m_LastCenter = new float[2] { 0, 0 };
private bool m_LastPointerEnter;
private int m_LastPointerDataIndex;
private int m_LastPointerDataDimension;
public T serie { get; internal set; }
public GameObject labelObject { get { return m_SerieLabelRoot; } }
@@ -85,6 +87,9 @@ namespace XCharts.Runtime
{
m_LastPointerEnter = serie.context.pointerEnter;
m_LastPointerDataIndex = serie.context.pointerItemDataIndex;
m_LastPointerDataDimension = GetPointerItemDataDimension();
serie.context.pointerEnter = false;
serie.context.pointerItemDataIndex = -1;
}
public override void Update()
@@ -146,6 +151,10 @@ namespace XCharts.Runtime
serie.interactDirty = false;
m_ForceUpdateSerieContext = true;
}
}
public override void AfterUpdate()
{
UpdateSerieContextInternal();
}
@@ -176,25 +185,34 @@ namespace XCharts.Runtime
m_ForceUpdateSerieContext = false;
if (m_LastPointerEnter != serie.context.pointerEnter || m_LastPointerDataIndex != serie.context.pointerItemDataIndex)
{
if (chart.onSerieEnter != null || chart.onSerieExit != null || serie.onEnter != null || serie.onExit != null)
{
var dataIndex = GetPointerItemDataIndex();
var dimension = GetPointerItemDataDimension();
var value = serie.GetData(dataIndex, dimension);
var data = SerieEventDataPool.Get(chart.pointerPos, serie.index, dataIndex, dimension, value);
if (serie.context.pointerEnter)
{
if (serie.onEnter != null) serie.onEnter(data);
if (chart.onSerieEnter != null) chart.onSerieEnter(data);
if ((serie.onExit != null || chart.onSerieExit != null) && m_LastPointerDataIndex >= 0)
{
var dataValue = serie.GetData(m_LastPointerDataIndex, m_LastPointerDataDimension);
var exitEventData = SerieEventDataPool.Get(chart.pointerPos, serie.index, m_LastPointerDataIndex, m_LastPointerDataDimension, dataValue);
if (serie.onExit != null) serie.onExit(exitEventData);
if (chart.onSerieExit != null) chart.onSerieExit(exitEventData);
SerieEventDataPool.Release(exitEventData);
}
var dataIndex = GetPointerItemDataIndex();
var dimension = GetPointerItemDataDimension();
var value = serie.GetData(dataIndex, dimension);
var enterEventData = SerieEventDataPool.Get(chart.pointerPos, serie.index, dataIndex, dimension, value);
if (serie.onEnter != null) serie.onEnter(enterEventData);
if (chart.onSerieEnter != null) chart.onSerieEnter(enterEventData);
SerieEventDataPool.Release(enterEventData);
}
else
else if (m_LastPointerDataIndex >= 0)
{
data.dataIndex = m_LastPointerDataIndex;
if (serie.onExit != null) serie.onExit(data);
if (chart.onSerieExit != null) chart.onSerieExit(data);
var dataValue = serie.GetData(m_LastPointerDataIndex, m_LastPointerDataDimension);
var exitEventData = SerieEventDataPool.Get(chart.pointerPos, serie.index, m_LastPointerDataIndex, m_LastPointerDataDimension, dataValue);
if (serie.onExit != null) serie.onExit(exitEventData);
if (chart.onSerieExit != null) chart.onSerieExit(exitEventData);
SerieEventDataPool.Release(exitEventData);
}
SerieEventDataPool.Release(data);
}
}
}