diff --git a/Examples/Example_TestSerie.cs b/Examples/Example_TestSerie.cs new file mode 100644 index 00000000..43ce786b --- /dev/null +++ b/Examples/Example_TestSerie.cs @@ -0,0 +1,28 @@ +using UnityEngine; +using XCharts.Runtime; +#if INPUT_SYSTEM_ENABLED +using Input = XCharts.Runtime.InputHelper; +#endif +namespace XCharts.Example +{ + [DisallowMultipleComponent] + public class Example_TestSerie : MonoBehaviour + { + public int maxCache = 100; + BaseChart chart; + int timestamp; + + void Awake() + { + chart = gameObject.GetComponent(); + } + void Update() + { + if (Input.GetKeyDown(KeyCode.R)) + { + chart.GetSerie(0).radius[1] = Random.Range(50, 80); + chart.SetAllDirty(); + } + } + } +} \ No newline at end of file diff --git a/Examples/Example_TestSerie.cs.meta b/Examples/Example_TestSerie.cs.meta new file mode 100644 index 00000000..f67b989b --- /dev/null +++ b/Examples/Example_TestSerie.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf5f1bfed3ae24fcf871087abf8bdb59 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/Internal/BaseChart.cs b/Runtime/Internal/BaseChart.cs index c3d6e594..bf1f0c4b 100644 --- a/Runtime/Internal/BaseChart.cs +++ b/Runtime/Internal/BaseChart.cs @@ -176,7 +176,7 @@ namespace XCharts.Runtime protected override void OnValidate() { base.OnValidate(); - foreach (var handler in m_SerieHandlers) handler.OnValidate(); + foreach (var handler in m_SerieHandlers) handler.ForceUpdateSerieContext(); } #endif diff --git a/Runtime/Serie/Serie.cs b/Runtime/Serie/Serie.cs index f1abc3de..d7cc8346 100644 --- a/Runtime/Serie/Serie.cs +++ b/Runtime/Serie/Serie.cs @@ -1041,6 +1041,12 @@ namespace XCharts.Runtime titleDirty = true; } + public override void SetVerticesDirty() + { + base.SetVerticesDirty(); + handler.ForceUpdateSerieContext(); + } + private bool AnySerieDataVerticesDirty() { if (IsPerformanceMode()) diff --git a/Runtime/Serie/SerieHandler.cs b/Runtime/Serie/SerieHandler.cs index d880f51b..648c4d09 100644 --- a/Runtime/Serie/SerieHandler.cs +++ b/Runtime/Serie/SerieHandler.cs @@ -29,9 +29,9 @@ namespace XCharts.Runtime public virtual void OnBeginDrag(PointerEventData eventData) { } public virtual void OnEndDrag(PointerEventData eventData) { } public virtual void OnScroll(PointerEventData eventData) { } - public virtual void OnValidate() { } public virtual void RefreshLabelNextFrame() { } public virtual void RefreshLabelInternal() { } + public virtual void ForceUpdateSerieContext() { } public virtual void UpdateSerieContext() { } public virtual void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category, string marker, @@ -64,6 +64,9 @@ namespace XCharts.Runtime protected int m_LegendEnterIndex; protected ChartLabel m_EndLabel; + private float[] m_LastRadius = new float[2] { 0, 0 }; + private float[] m_LastCenter = new float[2] { 0, 0 }; + public T serie { get; internal set; } public GameObject labelObject { get { return m_SerieLabelRoot; } } @@ -75,13 +78,9 @@ namespace XCharts.Runtime AnimationStyleHelper.UpdateSerieAnimation(serie); } - public override void OnValidate() - { - m_ForceUpdateSerieContext = true; - } - public override void Update() { + CheckConfigurationChanged(); if (m_NeedInitComponent) { m_NeedInitComponent = false; @@ -136,6 +135,27 @@ namespace XCharts.Runtime UpdateSerieContextInternal(); } + public override void ForceUpdateSerieContext() + { + m_ForceUpdateSerieContext = true; + } + + private void CheckConfigurationChanged() + { + if (m_LastRadius[0] != serie.radius[0] || m_LastRadius[1] != serie.radius[1]) + { + m_LastRadius[0] = serie.radius[0]; + m_LastRadius[1] = serie.radius[1]; + serie.SetVerticesDirty(); + } + if (m_LastCenter[0] != serie.center[0] || m_LastCenter[1] != serie.center[1]) + { + m_LastCenter[0] = serie.center[0]; + m_LastCenter[1] = serie.center[1]; + serie.SetVerticesDirty(); + } + } + private void UpdateSerieContextInternal() { var lastEnter = serie.context.pointerEnter;