完善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`的动画交互表现 * 完善`PieChart`的动画交互表现
* 增加`Symbol``EmptyTriangle``EmptyDiamond``Plus``Minus`四种新标记 * 增加`Symbol``EmptyTriangle``EmptyDiamond``Plus``Minus`四种新标记
* 完善图表的交互回调
日志详情: 日志详情:
* (2023.08.03) 完善`Chart``onSerieEnter``onSerieExit``onSerieClick`回调
* (2023.08.02) 修复`BarChart``onSerieEnter``onSerieExit`回调无效的问题 * (2023.08.02) 修复`BarChart``onSerieEnter``onSerieExit`回调无效的问题
* (2023.08.02) 增加`Symbol``Plus`加号和`Minus`减号的支持 * (2023.08.02) 增加`Symbol``Plus`加号和`Minus`减号的支持
* (2023.07.31) 增加`Symbol``EmptyTriangle``EmptyDiamond`的支持,优化`Symbol`表现效果 * (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_SerieHandlers) handler.BeforeUpdate();
foreach (var handler in m_ComponentHandlers) handler.Update(); foreach (var handler in m_ComponentHandlers) handler.Update();
foreach (var handler in m_SerieHandlers) handler.Update(); foreach (var handler in m_SerieHandlers) handler.Update();
foreach (var handler in m_SerieHandlers) handler.AfterUpdate();
m_DebugInfo.Update(); m_DebugInfo.Update();
if (m_OnUpdate != null) if (m_OnUpdate != null)
m_OnUpdate(); m_OnUpdate();

View File

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

View File

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

View File

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