From d20f27b6105b72ffc7907713e7160d02c0a0af85 Mon Sep 17 00:00:00 2001 From: monitor1394 Date: Fri, 31 Dec 2021 13:00:17 +0800 Subject: [PATCH] 3.0 - simplified serie --- Assets/XCharts/Editor/Series/SerieEditor.cs | 5 +- .../Editor/Series/SimplifiedBarEditor.cs | 18 + .../Editor/Series/SimplifiedBarEditor.cs.meta | 11 + .../Series/SimplifiedCandlestickEditor.cs | 17 + .../SimplifiedCandlestickEditor.cs.meta | 11 + .../Editor/Series/SimplifiedLineEditor.cs | 18 + .../Series/SimplifiedLineEditor.cs.meta | 11 + .../XCharts/Editor/Windows/XChartsEditor.cs | 21 + .../Examples/Runtime/Example_Dynamic.cs | 11 +- .../XCharts/Examples/Runtime/Example_Test.cs | 4 +- .../XCharts/Runtime/Chart/CandlestickChart.cs | 2 +- .../Runtime/Chart/SimplifiedBarChart.cs | 35 ++ .../Runtime/Chart/SimplifiedBarChart.cs.meta | 11 + .../Chart/SimplifiedCandlestickChart.cs | 35 ++ .../Chart/SimplifiedCandlestickChart.cs.meta | 11 + .../Runtime/Chart/SimplifiedLineChart.cs | 35 ++ .../Runtime/Chart/SimplifiedLineChart.cs.meta | 11 + .../Runtime/Component/Axis/AxisHelper.cs | 25 +- .../Runtime/Component/Child/LabelStyle.cs | 2 +- .../Runtime/Component/Legend/Legend.cs | 2 +- .../Runtime/Helper/SerieLabelHelper.cs | 10 +- Assets/XCharts/Runtime/Internal/BaseChart.cs | 3 + .../Runtime/Internal/Misc/ISimplifiedSerie.cs | 11 + .../Internal/Misc/ISimplifiedSerie.cs.meta | 11 + Assets/XCharts/Runtime/Serie/Bar/Bar.cs | 4 +- .../Runtime/Serie/Bar/SimplifiedBar.cs | 39 ++ .../Runtime/Serie/Bar/SimplifiedBar.cs.meta | 11 + .../Runtime/Serie/Bar/SimplifiedBarHandler.cs | 368 ++++++++++++++++++ .../Serie/Bar/SimplifiedBarHandler.cs.meta | 11 + .../Candlestick/SimplifiedCandlestick.cs | 37 ++ .../Candlestick/SimplifiedCandlestick.cs.meta | 11 + .../SimplifiedCandlestickHandler.cs | 214 ++++++++++ .../SimplifiedCandlestickHandler.cs.meta | 11 + Assets/XCharts/Runtime/Serie/Line/Line.cs | 1 - .../Runtime/Serie/Line/SimplifiedLine.cs | 39 ++ .../Runtime/Serie/Line/SimplifiedLine.cs.meta | 11 + .../Serie/Line/SimplifiedLineHandler.cs | 283 ++++++++++++++ .../Serie/Line/SimplifiedLineHandler.cs.meta | 11 + .../Runtime/Serie/Radar/RadarHandler.cs | 2 +- Assets/XCharts/Runtime/Serie/Serie.cs | 7 + .../XCharts/Runtime/Serie/SerieDataContext.cs | 2 +- Assets/XCharts/Runtime/Serie/SerieHandler.cs | 28 +- 42 files changed, 1376 insertions(+), 45 deletions(-) create mode 100644 Assets/XCharts/Editor/Series/SimplifiedBarEditor.cs create mode 100644 Assets/XCharts/Editor/Series/SimplifiedBarEditor.cs.meta create mode 100644 Assets/XCharts/Editor/Series/SimplifiedCandlestickEditor.cs create mode 100644 Assets/XCharts/Editor/Series/SimplifiedCandlestickEditor.cs.meta create mode 100644 Assets/XCharts/Editor/Series/SimplifiedLineEditor.cs create mode 100644 Assets/XCharts/Editor/Series/SimplifiedLineEditor.cs.meta create mode 100644 Assets/XCharts/Runtime/Chart/SimplifiedBarChart.cs create mode 100644 Assets/XCharts/Runtime/Chart/SimplifiedBarChart.cs.meta create mode 100644 Assets/XCharts/Runtime/Chart/SimplifiedCandlestickChart.cs create mode 100644 Assets/XCharts/Runtime/Chart/SimplifiedCandlestickChart.cs.meta create mode 100644 Assets/XCharts/Runtime/Chart/SimplifiedLineChart.cs create mode 100644 Assets/XCharts/Runtime/Chart/SimplifiedLineChart.cs.meta create mode 100644 Assets/XCharts/Runtime/Internal/Misc/ISimplifiedSerie.cs create mode 100644 Assets/XCharts/Runtime/Internal/Misc/ISimplifiedSerie.cs.meta create mode 100644 Assets/XCharts/Runtime/Serie/Bar/SimplifiedBar.cs create mode 100644 Assets/XCharts/Runtime/Serie/Bar/SimplifiedBar.cs.meta create mode 100644 Assets/XCharts/Runtime/Serie/Bar/SimplifiedBarHandler.cs create mode 100644 Assets/XCharts/Runtime/Serie/Bar/SimplifiedBarHandler.cs.meta create mode 100644 Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestick.cs create mode 100644 Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestick.cs.meta create mode 100644 Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs create mode 100644 Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs.meta create mode 100644 Assets/XCharts/Runtime/Serie/Line/SimplifiedLine.cs create mode 100644 Assets/XCharts/Runtime/Serie/Line/SimplifiedLine.cs.meta create mode 100644 Assets/XCharts/Runtime/Serie/Line/SimplifiedLineHandler.cs create mode 100644 Assets/XCharts/Runtime/Serie/Line/SimplifiedLineHandler.cs.meta diff --git a/Assets/XCharts/Editor/Series/SerieEditor.cs b/Assets/XCharts/Editor/Series/SerieEditor.cs index 6b4bff76..3b5879a7 100644 --- a/Assets/XCharts/Editor/Series/SerieEditor.cs +++ b/Assets/XCharts/Editor/Series/SerieEditor.cs @@ -18,7 +18,7 @@ namespace XCharts.Editor ++EditorGUI.indentLevel; //PropertyField("m_InsertDataToHead"); PropertyField("m_SerieName"); - if (m_CoordOptionsNames != null && m_CoordOptionsNames.Count > 0) + if (m_CoordOptionsNames != null && m_CoordOptionsNames.Count > 1) { var index = m_CoordOptionsNames.IndexOf(serie.coordSystem); var selectedIndex = EditorGUILayout.Popup("Coord System", index, m_CoordOptionsNames.ToArray()); @@ -181,7 +181,8 @@ namespace XCharts.Editor }); if (m_DataElementFoldout[index]) { - DrawSerieDataDetail(m_Datas, index); + if(!(serie is ISimplifiedSerie)) + DrawSerieDataDetail(m_Datas, index); } } diff --git a/Assets/XCharts/Editor/Series/SimplifiedBarEditor.cs b/Assets/XCharts/Editor/Series/SimplifiedBarEditor.cs new file mode 100644 index 00000000..fe5b643f --- /dev/null +++ b/Assets/XCharts/Editor/Series/SimplifiedBarEditor.cs @@ -0,0 +1,18 @@ + + +namespace XCharts.Editor +{ + [SerieEditor(typeof(SimplifiedBar))] + public class SimplifiedBarEditor : SerieEditor + { + public override void OnCustomInspectorGUI() + { + PropertyField("m_XAxisIndex"); + PropertyField("m_YAxisIndex"); + PropertyField("m_BarWidth"); + PropertyField("m_BarGap"); + PropertyField("m_ItemStyle"); + PropertyField("m_Animation"); + } + } +} \ No newline at end of file diff --git a/Assets/XCharts/Editor/Series/SimplifiedBarEditor.cs.meta b/Assets/XCharts/Editor/Series/SimplifiedBarEditor.cs.meta new file mode 100644 index 00000000..a1b72e93 --- /dev/null +++ b/Assets/XCharts/Editor/Series/SimplifiedBarEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 99f8e53a5ab7c49e6b87aedee03cf856 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Editor/Series/SimplifiedCandlestickEditor.cs b/Assets/XCharts/Editor/Series/SimplifiedCandlestickEditor.cs new file mode 100644 index 00000000..86e72b5c --- /dev/null +++ b/Assets/XCharts/Editor/Series/SimplifiedCandlestickEditor.cs @@ -0,0 +1,17 @@ + + +namespace XCharts.Editor +{ + [SerieEditor(typeof(SimplifiedCandlestick))] + public class SimplifiedCandlestickEditor : SerieEditor + { + public override void OnCustomInspectorGUI() + { + PropertyField("m_XAxisIndex"); + PropertyField("m_YAxisIndex"); + PropertyField("m_BarWidth"); + PropertyField("m_ItemStyle"); + PropertyField("m_Animation"); + } + } +} \ No newline at end of file diff --git a/Assets/XCharts/Editor/Series/SimplifiedCandlestickEditor.cs.meta b/Assets/XCharts/Editor/Series/SimplifiedCandlestickEditor.cs.meta new file mode 100644 index 00000000..9562375c --- /dev/null +++ b/Assets/XCharts/Editor/Series/SimplifiedCandlestickEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 73d22e02d33e948d6981d537ba1f680e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Editor/Series/SimplifiedLineEditor.cs b/Assets/XCharts/Editor/Series/SimplifiedLineEditor.cs new file mode 100644 index 00000000..ffca06c4 --- /dev/null +++ b/Assets/XCharts/Editor/Series/SimplifiedLineEditor.cs @@ -0,0 +1,18 @@ + + +namespace XCharts.Editor +{ + [SerieEditor(typeof(SimplifiedLine))] + public class LineHPEditor : SerieEditor + { + public override void OnCustomInspectorGUI() + { + PropertyField("m_XAxisIndex"); + PropertyField("m_YAxisIndex"); + PropertyField("m_LineType"); + PropertyField("m_LineStyle"); + PropertyField("m_ItemStyle"); + PropertyField("m_Animation"); + } + } +} \ No newline at end of file diff --git a/Assets/XCharts/Editor/Series/SimplifiedLineEditor.cs.meta b/Assets/XCharts/Editor/Series/SimplifiedLineEditor.cs.meta new file mode 100644 index 00000000..4e85e3df --- /dev/null +++ b/Assets/XCharts/Editor/Series/SimplifiedLineEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cedf2a45756cd415cb5a74f3188ebd72 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Editor/Windows/XChartsEditor.cs b/Assets/XCharts/Editor/Windows/XChartsEditor.cs index a5a18244..0b2b1756 100644 --- a/Assets/XCharts/Editor/Windows/XChartsEditor.cs +++ b/Assets/XCharts/Editor/Windows/XChartsEditor.cs @@ -147,6 +147,27 @@ namespace XCharts.Editor AddChart("ParallelChart"); } + [MenuItem("XCharts/SimplifiedLineChart", priority = 56)] + [MenuItem("GameObject/XCharts/SimplifiedLineChart", priority = 56)] + public static void SimplifiedLineChart() + { + AddChart("SimplifiedLineChart"); + } + + [MenuItem("XCharts/SimplifiedBarChart", priority = 57)] + [MenuItem("GameObject/XCharts/SimplifiedBarChart", priority = 57)] + public static void SimplifiedBarChart() + { + AddChart("SimplifiedBarChart"); + } + + [MenuItem("XCharts/SimplifiedCandlestickChart", priority = 58)] + [MenuItem("GameObject/XCharts/SimplifiedCandlestickChart", priority = 58)] + public static void SimplifiedCandlestickChart() + { + AddChart("SimplifiedCandlestickChart"); + } + [MenuItem("XCharts/Themes Reload")] public static void ReloadTheme() { diff --git a/Assets/XCharts/Examples/Runtime/Example_Dynamic.cs b/Assets/XCharts/Examples/Runtime/Example_Dynamic.cs index a6ba93bc..8c3b714b 100644 --- a/Assets/XCharts/Examples/Runtime/Example_Dynamic.cs +++ b/Assets/XCharts/Examples/Runtime/Example_Dynamic.cs @@ -5,15 +5,15 @@ using UnityEngine; namespace XCharts.Example { [DisallowMultipleComponent] - [ExecuteInEditMode] - [RequireComponent(typeof(LineChart))] + //[ExecuteInEditMode] + [RequireComponent(typeof(BaseChart))] public class Example_Dynamic : MonoBehaviour { public int maxCacheDataNumber = 100; public float initDataTime = 2; public bool insertDataToHead = false; - private LineChart chart; + private BaseChart chart; private float updateTime; private float initTime; private int initCount; @@ -23,9 +23,8 @@ namespace XCharts.Example void Awake() { - chart = gameObject.GetComponent(); - chart.RemoveData(); - var serie = chart.AddSerie(); + chart = gameObject.GetComponent(); + var serie = chart.GetSerie(0); serie.symbol.show = false; serie.maxCache = maxCacheDataNumber; diff --git a/Assets/XCharts/Examples/Runtime/Example_Test.cs b/Assets/XCharts/Examples/Runtime/Example_Test.cs index 73f91ba3..83e158c3 100644 --- a/Assets/XCharts/Examples/Runtime/Example_Test.cs +++ b/Assets/XCharts/Examples/Runtime/Example_Test.cs @@ -8,10 +8,10 @@ namespace XCharts.Example [ExecuteInEditMode] public class Example_Test : MonoBehaviour { - LineChart chart; + BaseChart chart; void Awake() { - chart = gameObject.GetComponent(); + chart = gameObject.GetComponent(); var btnTrans = transform.parent.Find("Button"); if (btnTrans) { diff --git a/Assets/XCharts/Runtime/Chart/CandlestickChart.cs b/Assets/XCharts/Runtime/Chart/CandlestickChart.cs index 1b5c6330..1f0a1f69 100644 --- a/Assets/XCharts/Runtime/Chart/CandlestickChart.cs +++ b/Assets/XCharts/Runtime/Chart/CandlestickChart.cs @@ -25,7 +25,7 @@ namespace XCharts RemoveData(); Candlestick.AddDefaultSerie(this, GenerateDefaultSerieName()); - for (int i = 0; i < 5; i++) + for (int i = 0; i < GetSerie(0).dataCount; i++) { AddXAxisData("x" + (i + 1)); } diff --git a/Assets/XCharts/Runtime/Chart/SimplifiedBarChart.cs b/Assets/XCharts/Runtime/Chart/SimplifiedBarChart.cs new file mode 100644 index 00000000..4ebf7136 --- /dev/null +++ b/Assets/XCharts/Runtime/Chart/SimplifiedBarChart.cs @@ -0,0 +1,35 @@ + + +using UnityEngine; + +namespace XCharts +{ + [AddComponentMenu("XCharts/SimplifiedBarChart", 27)] + [ExecuteInEditMode] + [RequireComponent(typeof(RectTransform))] + [DisallowMultipleComponent] + public class SimplifiedBarChart : BaseChart + { + +#if UNITY_EDITOR + protected override void Reset() + { + base.Reset(); + AddChartComponentWhenNoExist(); + AddChartComponentWhenNoExist(); + AddChartComponentWhenNoExist(); + + var tooltip = GetChartComponent(); + tooltip.type = Tooltip.Type.Line; + tooltip.trigger = Tooltip.Trigger.Axis; + + RemoveData(); + SimplifiedBar.AddDefaultSerie(this, GenerateDefaultSerieName()); + for (int i = 0; i < GetSerie(0).dataCount; i++) + { + AddXAxisData("x" + (i + 1)); + } + } +#endif + } +} diff --git a/Assets/XCharts/Runtime/Chart/SimplifiedBarChart.cs.meta b/Assets/XCharts/Runtime/Chart/SimplifiedBarChart.cs.meta new file mode 100644 index 00000000..7dcf1381 --- /dev/null +++ b/Assets/XCharts/Runtime/Chart/SimplifiedBarChart.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa86c3bbf8877409c9d45716fbaf92f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Runtime/Chart/SimplifiedCandlestickChart.cs b/Assets/XCharts/Runtime/Chart/SimplifiedCandlestickChart.cs new file mode 100644 index 00000000..f7e95cff --- /dev/null +++ b/Assets/XCharts/Runtime/Chart/SimplifiedCandlestickChart.cs @@ -0,0 +1,35 @@ + + +using UnityEngine; + +namespace XCharts +{ + [AddComponentMenu("XCharts/SimplifiedCandlestickChart", 28)] + [ExecuteInEditMode] + [RequireComponent(typeof(RectTransform))] + [DisallowMultipleComponent] + public class SimplifiedCandlestickChart : BaseChart + { + +#if UNITY_EDITOR + protected override void Reset() + { + base.Reset(); + AddChartComponentWhenNoExist(); + AddChartComponentWhenNoExist(); + AddChartComponentWhenNoExist(); + + var tooltip = GetChartComponent(); + tooltip.type = Tooltip.Type.Shadow; + tooltip.trigger = Tooltip.Trigger.Axis; + + RemoveData(); + SimplifiedCandlestick.AddDefaultSerie(this, GenerateDefaultSerieName()); + for (int i = 0; i < GetSerie(0).dataCount; i++) + { + AddXAxisData("x" + (i + 1)); + } + } +#endif + } +} diff --git a/Assets/XCharts/Runtime/Chart/SimplifiedCandlestickChart.cs.meta b/Assets/XCharts/Runtime/Chart/SimplifiedCandlestickChart.cs.meta new file mode 100644 index 00000000..26ff0a36 --- /dev/null +++ b/Assets/XCharts/Runtime/Chart/SimplifiedCandlestickChart.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6dcc9bd1ca8344d938f386e6b32e8946 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Runtime/Chart/SimplifiedLineChart.cs b/Assets/XCharts/Runtime/Chart/SimplifiedLineChart.cs new file mode 100644 index 00000000..cdf0e227 --- /dev/null +++ b/Assets/XCharts/Runtime/Chart/SimplifiedLineChart.cs @@ -0,0 +1,35 @@ + + +using UnityEngine; + +namespace XCharts +{ + [AddComponentMenu("XCharts/SimplifiedLineChart", 26)] + [ExecuteInEditMode] + [RequireComponent(typeof(RectTransform))] + [DisallowMultipleComponent] + public class SimplifiedLineChart : BaseChart + { + +#if UNITY_EDITOR + protected override void Reset() + { + base.Reset(); + AddChartComponentWhenNoExist(); + AddChartComponentWhenNoExist(); + AddChartComponentWhenNoExist(); + + var tooltip = GetChartComponent(); + tooltip.type = Tooltip.Type.Line; + tooltip.trigger = Tooltip.Trigger.Axis; + + RemoveData(); + SimplifiedLine.AddDefaultSerie(this, GenerateDefaultSerieName()); + for (int i = 0; i < GetSerie(0).dataCount; i++) + { + AddXAxisData("x" + (i + 1)); + } + } +#endif + } +} diff --git a/Assets/XCharts/Runtime/Chart/SimplifiedLineChart.cs.meta b/Assets/XCharts/Runtime/Chart/SimplifiedLineChart.cs.meta new file mode 100644 index 00000000..0ab56057 --- /dev/null +++ b/Assets/XCharts/Runtime/Chart/SimplifiedLineChart.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8233997c1b324ecd875a03af4d90972 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Runtime/Component/Axis/AxisHelper.cs b/Assets/XCharts/Runtime/Component/Axis/AxisHelper.cs index 0c6e76c2..ac0767fb 100644 --- a/Assets/XCharts/Runtime/Component/Axis/AxisHelper.cs +++ b/Assets/XCharts/Runtime/Component/Axis/AxisHelper.cs @@ -46,12 +46,27 @@ namespace XCharts if (dataCount <= 0) dataCount = 1; - if (axis.splitNumber <= 0 || axis.splitNumber > dataCount) - return dataCount; - if (dataCount >= axis.splitNumber * 2) - return axis.splitNumber; + if (axis.splitNumber <= 0) + { + if (dataCount <= 10) return dataCount; + else + { + for (int i = 4; i < 6; i++) + { + if (dataCount % i == 0) return i; + } + return 5; + } + } else - return dataCount; + { + if (axis.splitNumber <= 0 || axis.splitNumber > dataCount) + return dataCount; + if (dataCount >= axis.splitNumber * 2) + return axis.splitNumber; + else + return dataCount; + } } return 0; } diff --git a/Assets/XCharts/Runtime/Component/Child/LabelStyle.cs b/Assets/XCharts/Runtime/Component/Child/LabelStyle.cs index 51761a8b..867fba15 100644 --- a/Assets/XCharts/Runtime/Component/Child/LabelStyle.cs +++ b/Assets/XCharts/Runtime/Component/Child/LabelStyle.cs @@ -70,7 +70,7 @@ namespace XCharts } - [SerializeField] private bool m_Show = false; + [SerializeField] private bool m_Show = true; [SerializeField] Position m_Position = Position.Outside; [SerializeField] private Vector3 m_Offset; [SerializeField] private float m_Margin; diff --git a/Assets/XCharts/Runtime/Component/Legend/Legend.cs b/Assets/XCharts/Runtime/Component/Legend/Legend.cs index 3220fe67..40bbca4b 100644 --- a/Assets/XCharts/Runtime/Component/Legend/Legend.cs +++ b/Assets/XCharts/Runtime/Component/Legend/Legend.cs @@ -64,7 +64,7 @@ namespace XCharts /// None }; - [SerializeField] private bool m_Show = false; + [SerializeField] private bool m_Show = true; [SerializeField] private Type m_IconType = Type.Auto; [SerializeField] private SelectedMode m_SelectedMode = SelectedMode.Multiple; [SerializeField] private Orient m_Orient = Orient.Horizonal; diff --git a/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs b/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs index 684e28dd..3ba2bdda 100644 --- a/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs +++ b/Assets/XCharts/Runtime/Helper/SerieLabelHelper.cs @@ -18,11 +18,11 @@ namespace XCharts } } - public static void ResetLabel(ChartText labelObject, LabelStyle label, ThemeStyle theme, int colorIndex) + public static void ResetLabel(ChartText labelObject, LabelStyle label, ThemeStyle theme) { if (labelObject == null) return; labelObject.SetColor(!ChartHelper.IsClearColor(label.textStyle.color) ? label.textStyle.color : - (Color)theme.GetColor(colorIndex)); + theme.common.textColor); labelObject.SetFontSize(label.textStyle.GetFontSize(theme.common)); labelObject.SetFontStyle(label.textStyle.fontStyle); } @@ -63,7 +63,7 @@ namespace XCharts if (serieData == null) return; if (serieData.labelObject == null) return; var label = SerieHelper.GetSerieLabel(serie, serieData); - if(label == null) return; + if (label == null) return; var value = serieData.GetData(1); var total = serie.max; var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, total, null, Color.clear); @@ -155,7 +155,7 @@ namespace XCharts serieData.context.labelPosition = labelCenter; break; case LabelStyle.Position.Outside: - if (labelLine.lineType == LabelLine.LineType.HorizontalLine) + if (labelLine != null && labelLine.lineType == LabelLine.LineType.HorizontalLine) { var radius1 = serie.context.outsideRadius; var radius3 = insideRadius + (outsideRadius - insideRadius) / 2; @@ -174,7 +174,7 @@ namespace XCharts } else { - labelRadius = serie.context.outsideRadius + labelLine.lineLength1; + labelRadius = serie.context.outsideRadius + (labelLine == null ? 0 : labelLine.lineLength1); labelCenter = new Vector2(serie.context.center.x + labelRadius * Mathf.Sin(currRad), serie.context.center.y + labelRadius * Mathf.Cos(currRad)); serieData.context.labelPosition = labelCenter; diff --git a/Assets/XCharts/Runtime/Internal/BaseChart.cs b/Assets/XCharts/Runtime/Internal/BaseChart.cs index e14fe981..0399abd9 100644 --- a/Assets/XCharts/Runtime/Internal/BaseChart.cs +++ b/Assets/XCharts/Runtime/Internal/BaseChart.cs @@ -52,6 +52,9 @@ namespace XCharts [SerializeField] [ListForSerie(typeof(Ring))] private List m_SerieRings = new List(); [SerializeField] [ListForSerie(typeof(Scatter))] private List m_SerieScatters = new List(); [SerializeField] [ListForSerie(typeof(Parallel))] private List m_SerieParallels = new List(); + [SerializeField] [ListForSerie(typeof(SimplifiedLine))] private List m_SerieSimplifiedLines = new List(); + [SerializeField] [ListForSerie(typeof(SimplifiedBar))] private List m_SerieSimplifiedBars = new List(); + [SerializeField] [ListForSerie(typeof(SimplifiedCandlestick))] private List m_SerieSimplifiedCandlesticks = new List(); #pragma warning restore 0414 protected List m_Series = new List(); protected List m_Components = new List(); diff --git a/Assets/XCharts/Runtime/Internal/Misc/ISimplifiedSerie.cs b/Assets/XCharts/Runtime/Internal/Misc/ISimplifiedSerie.cs new file mode 100644 index 00000000..0328c7fd --- /dev/null +++ b/Assets/XCharts/Runtime/Internal/Misc/ISimplifiedSerie.cs @@ -0,0 +1,11 @@ + +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +namespace XCharts +{ + public interface ISimplifiedSerie + { + } +} \ No newline at end of file diff --git a/Assets/XCharts/Runtime/Internal/Misc/ISimplifiedSerie.cs.meta b/Assets/XCharts/Runtime/Internal/Misc/ISimplifiedSerie.cs.meta new file mode 100644 index 00000000..81f5854c --- /dev/null +++ b/Assets/XCharts/Runtime/Internal/Misc/ISimplifiedSerie.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd917380f26ed4fb393092a4017f9907 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Runtime/Serie/Bar/Bar.cs b/Assets/XCharts/Runtime/Serie/Bar/Bar.cs index fa35b8c5..c9d6c317 100644 --- a/Assets/XCharts/Runtime/Serie/Bar/Bar.cs +++ b/Assets/XCharts/Runtime/Serie/Bar/Bar.cs @@ -7,14 +7,14 @@ namespace XCharts { [System.Serializable] [SerieHandler(typeof(BarHandler), true)] - [SerieConvert(typeof(Line),typeof(Pie))] + [SerieConvert(typeof(Line), typeof(Pie))] [RequireChartComponent(typeof(GridCoord))] [DefaultAnimation(AnimationType.BottomToTop)] [SerieExtraComponent( typeof(LabelStyle), typeof(IconStyle), typeof(Emphasis))] - public class Bar : Serie, INeedSerieContainer + public class Bar : Serie, INeedSerieContainer, ISimplifiedSerie { public int containerIndex { get; internal set; } public int containterInstanceId { get; internal set; } diff --git a/Assets/XCharts/Runtime/Serie/Bar/SimplifiedBar.cs b/Assets/XCharts/Runtime/Serie/Bar/SimplifiedBar.cs new file mode 100644 index 00000000..fb43620d --- /dev/null +++ b/Assets/XCharts/Runtime/Serie/Bar/SimplifiedBar.cs @@ -0,0 +1,39 @@ + +using System; +using UnityEngine; + +namespace XCharts +{ + [Serializable] + [SerieHandler(typeof(SimplifiedBarHandler), true)] + [SerieConvert(typeof(SimplifiedLine), typeof(Bar))] + [CoordOptions(typeof(GridCoord))] + [DefaultAnimation(AnimationType.LeftToRight)] + [SerieExtraComponent()] + public class SimplifiedBar : Serie, INeedSerieContainer, ISimplifiedSerie + { + public int containerIndex { get; internal set; } + public int containterInstanceId { get; internal set; } + + public static void AddDefaultSerie(BaseChart chart, string serieName) + { + var serie = chart.AddSerie(serieName); + serie.symbol.show = false; + var lastValue = 0d; + for (int i = 0; i < 50; i++) + { + if (i < 20) + lastValue += UnityEngine.Random.Range(0, 5); + else + lastValue += UnityEngine.Random.Range(-3, 5); + chart.AddData(serie.index, lastValue); + } + } + + public static SimplifiedBar CovertSerie(Serie serie) + { + var newSerie = serie.Clone(); + return newSerie; + } + } +} \ No newline at end of file diff --git a/Assets/XCharts/Runtime/Serie/Bar/SimplifiedBar.cs.meta b/Assets/XCharts/Runtime/Serie/Bar/SimplifiedBar.cs.meta new file mode 100644 index 00000000..d6b3a10e --- /dev/null +++ b/Assets/XCharts/Runtime/Serie/Bar/SimplifiedBar.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7fc754e0afd4d4f138389c19611aaedb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Runtime/Serie/Bar/SimplifiedBarHandler.cs b/Assets/XCharts/Runtime/Serie/Bar/SimplifiedBarHandler.cs new file mode 100644 index 00000000..25b0328d --- /dev/null +++ b/Assets/XCharts/Runtime/Serie/Bar/SimplifiedBarHandler.cs @@ -0,0 +1,368 @@ + +using System.Collections.Generic; +using System.Text; +using UnityEngine; +using UnityEngine.UI; +using XUGL; + +namespace XCharts +{ + [UnityEngine.Scripting.Preserve] + internal sealed class SimplifiedBarHandler : SerieHandler + { + private GridCoord m_SerieGrid; + + public override void Update() + { + base.Update(); + UpdateSerieContext(); + } + + public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category, + string marker, string itemFormatter, string numericFormatter, + ref List paramList, ref string title) + { + UpdateCoordSerieParams(ref paramList, ref title, dataIndex, showCategory, category, + marker, itemFormatter, numericFormatter); + } + + public override void DrawSerie(VertexHelper vh) + { + DrawBarSerie(vh, serie, serie.context.colorIndex); + } + + private void UpdateSerieContext() + { + if (m_SerieGrid == null) + return; + + var needCheck = (chart.isPointerInChart && m_SerieGrid.IsPointerEnter()) || 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) + { + var barColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, serie.context.colorIndex, false); + var barToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, serie.context.colorIndex, false); + serieData.interact.SetColor(ref needInteract, barColor, barToColor); + } + if (needInteract) + { + chart.RefreshPainter(serie); + } + } + return; + } + m_LastCheckContextFlag = needCheck; + if (m_LegendEnter) + { + serie.context.pointerEnter = true; + foreach (var serieData in serie.data) + { + var barColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, serie.context.colorIndex, true); + var barToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, serie.context.colorIndex, true); + serieData.interact.SetColor(ref needInteract, barColor, barToColor); + } + } + else + { + serie.context.pointerItemDataIndex = -1; + serie.context.pointerEnter = false; + foreach (var serieData in serie.data) + { + if (serieData.context.rect.Contains(chart.pointerPos)) + { + serie.context.pointerItemDataIndex = serieData.index; + serie.context.pointerEnter = true; + serieData.context.highlight = true; + + var barColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, serie.context.colorIndex, true); + var barToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, serie.context.colorIndex, true); + serieData.interact.SetColor(ref needInteract, barColor, barToColor); + } + else + { + serieData.context.highlight = false; + var barColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, serie.context.colorIndex, false); + var barToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, serie.context.colorIndex, false); + serieData.interact.SetColor(ref needInteract, barColor, barToColor); + } + } + } + if (needInteract) + { + chart.RefreshPainter(serie); + } + } + + private void DrawBarSerie(VertexHelper vh, SimplifiedBar serie, int colorIndex) + { + if (!serie.show || serie.animation.HasFadeOut()) + return; + + var isY = ComponentHelper.IsAnyCategoryOfYAxis(chart.components); + + Axis axis; + Axis relativedAxis; + + if (isY) + { + axis = chart.GetChartComponent(serie.yAxisIndex); + relativedAxis = chart.GetChartComponent(serie.xAxisIndex); + } + else + { + axis = chart.GetChartComponent(serie.xAxisIndex); + relativedAxis = chart.GetChartComponent(serie.yAxisIndex); + } + m_SerieGrid = chart.GetChartComponent(axis.gridIndex); + + if (axis == null) + return; + if (relativedAxis == null) + return; + if (m_SerieGrid == null) + return; + + var dataZoom = chart.GetDataZoomOfAxis(axis); + var showData = serie.GetDataList(dataZoom); + + if (showData.Count <= 0) + return; + + var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width; + var axisXY = isY ? m_SerieGrid.context.y : m_SerieGrid.context.x; + + float categoryWidth = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom); + float barGap = chart.GetSerieBarGap(); + float totalBarWidth = chart.GetSerieTotalWidth(categoryWidth, barGap); + float barWidth = serie.GetBarWidth(categoryWidth); + float offset = (categoryWidth - totalBarWidth) * 0.5f; + float barGapWidth = barWidth + barWidth * barGap; + float space = serie.barGap == -1 ? offset : offset + serie.index * barGapWidth; + int maxCount = serie.maxShow > 0 + ? (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) + : showData.Count; + + bool dataChanging = false; + float dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); + double yMinValue = relativedAxis.context.minValue; + double yMaxValue = relativedAxis.context.maxValue; + + var areaColor = ColorUtil.clearColor32; + var areaToColor = ColorUtil.clearColor32; + var interacting = false; + + serie.containerIndex = m_SerieGrid.index; + serie.containterInstanceId = m_SerieGrid.instanceId; + serie.animation.InitProgress(axisXY, axisXY + axisLength); + for (int i = serie.minShow; i < maxCount; i++) + { + var serieData = showData[i]; + if (!serieData.show || serie.IsIgnoreValue(serieData)) + { + serie.context.dataPoints.Add(Vector3.zero); + continue; + } + + if (serieData.IsDataChanged()) + dataChanging = true; + + var highlight = serieData.context.highlight || serie.highlight; + var itemStyle = SerieHelper.GetItemStyle(serie, serieData, highlight); + var value = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse); + var relativedValue = serieData.GetCurrData(1, dataChangeDuration, relativedAxis.inverse, yMinValue, yMaxValue); + var borderWidth = relativedValue == 0 ? 0 : itemStyle.runtimeBorderWidth; + + if (!serieData.interact.TryGetColor(ref areaColor, ref areaToColor, ref interacting)) + { + areaColor = SerieHelper.GetItemColor(serie, serieData, chart.theme, colorIndex, highlight); + areaToColor = SerieHelper.GetItemToColor(serie, serieData, chart.theme, colorIndex, highlight); + serieData.interact.SetColor(ref interacting, areaColor, areaToColor); + } + + var pX = 0f; + var pY = 0f; + UpdateXYPosition(m_SerieGrid, isY, axis, relativedAxis, i, categoryWidth, barWidth, value, ref pX, ref pY); + + var barHig = AxisHelper.GetAxisValueLength(m_SerieGrid, relativedAxis, categoryWidth, relativedValue); + var currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig); + + Vector3 plb, plt, prt, prb, top; + UpdateRectPosition(m_SerieGrid, isY, relativedValue, pX, pY, space, borderWidth, barWidth, currHig, + out plb, out plt, out prt, out prb, out top); + serieData.context.stackHeight = barHig; + serieData.context.position = top; + serieData.context.rect = Rect.MinMaxRect(plb.x, plb.y, prb.x, prt.y); + serie.context.dataPoints.Add(top); + DrawNormalBar(vh, serie, serieData, itemStyle, colorIndex, highlight, space, barWidth, + pX, pY, plb, plt, prt, prb, false, m_SerieGrid, areaColor, areaToColor); + + if (serie.animation.CheckDetailBreak(top, isY)) + { + break; + } + } + if (!serie.animation.IsFinish()) + { + serie.animation.CheckProgress(); + chart.RefreshPainter(serie); + } + if (dataChanging || interacting) + { + chart.RefreshPainter(serie); + } + } + + private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relativedAxis, int i, float categoryWidth, float barWidth, + double value, ref float pX, ref float pY) + { + if (isY) + { + if (axis.IsCategory()) + { + pY = grid.context.y + i * categoryWidth + (axis.boundaryGap ? 0 : -categoryWidth * 0.5f); + } + else + { + if (axis.context.minMaxRange <= 0) pY = grid.context.y; + else pY = grid.context.y + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.height - barWidth); + } + pX = AxisHelper.GetAxisPosition(grid, relativedAxis, categoryWidth, 0); + } + else + { + if (axis.IsCategory()) + { + pX = grid.context.x + i * categoryWidth + (axis.boundaryGap ? 0 : -categoryWidth * 0.5f); + } + else + { + if (axis.context.minMaxRange <= 0) pX = grid.context.x; + else pX = grid.context.x + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.width - barWidth); + } + pY = AxisHelper.GetAxisPosition(grid, relativedAxis, categoryWidth, 0); + } + } + + private void UpdateRectPosition(GridCoord grid, bool isY, double yValue, float pX, float pY, float space, float borderWidth, + float barWidth, float currHig, + out Vector3 plb, out Vector3 plt, out Vector3 prt, out Vector3 prb, out Vector3 top) + { + if (isY) + { + if (yValue < 0) + { + plt = new Vector3(pX - borderWidth, pY + space + barWidth - borderWidth); + prt = new Vector3(pX + currHig + borderWidth, pY + space + barWidth - borderWidth); + prb = new Vector3(pX + currHig + borderWidth, pY + space + borderWidth); + plb = new Vector3(pX - borderWidth, pY + space + borderWidth); + } + else + { + plt = new Vector3(pX + borderWidth, pY + space + barWidth - borderWidth); + prt = new Vector3(pX + currHig - borderWidth, pY + space + barWidth - borderWidth); + prb = new Vector3(pX + currHig - borderWidth, pY + space + borderWidth); + plb = new Vector3(pX + borderWidth, pY + space + borderWidth); + } + top = new Vector3(pX + currHig - borderWidth, pY + space + barWidth / 2); + } + else + { + if (yValue < 0) + { + plb = new Vector3(pX + space + borderWidth, pY - borderWidth); + plt = new Vector3(pX + space + borderWidth, pY + currHig + borderWidth); + prt = new Vector3(pX + space + barWidth - borderWidth, pY + currHig + borderWidth); + prb = new Vector3(pX + space + barWidth - borderWidth, pY - borderWidth); + } + else + { + plb = new Vector3(pX + space + borderWidth, pY + borderWidth); + plt = new Vector3(pX + space + borderWidth, pY + currHig - borderWidth); + prt = new Vector3(pX + space + barWidth - borderWidth, pY + currHig - borderWidth); + prb = new Vector3(pX + space + barWidth - borderWidth, pY + borderWidth); + } + top = new Vector3(pX + space + barWidth / 2, pY + currHig - borderWidth); + } + if (serie.clip) + { + plb = chart.ClampInGrid(grid, plb); + plt = chart.ClampInGrid(grid, plt); + prt = chart.ClampInGrid(grid, prt); + prb = chart.ClampInGrid(grid, prb); + top = chart.ClampInGrid(grid, top); + } + } + + private void DrawNormalBar(VertexHelper vh, Serie serie, SerieData serieData, ItemStyle itemStyle, int colorIndex, + bool highlight, float space, float barWidth, float pX, float pY, Vector3 plb, Vector3 plt, Vector3 prt, + Vector3 prb, bool isYAxis, GridCoord grid, Color32 areaColor, Color32 areaToColor) + { + + var borderWidth = itemStyle.runtimeBorderWidth; + if (isYAxis) + { + if (serie.clip) + { + prb = chart.ClampInGrid(grid, prb); + plb = chart.ClampInGrid(grid, plb); + plt = chart.ClampInGrid(grid, plt); + prt = chart.ClampInGrid(grid, prt); + } + var itemWidth = Mathf.Abs(prb.x - plt.x); + var itemHeight = Mathf.Abs(prt.y - plb.y); + var center = new Vector3((plt.x + prb.x) / 2, (prt.y + plb.y) / 2); + if (itemWidth > 0 && itemHeight > 0) + { + var invert = center.x < plb.x; + if (ItemStyleHelper.IsNeedCorner(itemStyle)) + { + UGL.DrawRoundRectangle(vh, center, itemWidth, itemHeight, areaColor, areaToColor, 0, + itemStyle.cornerRadius, isYAxis, chart.settings.cicleSmoothness, invert); + } + else + { + chart.DrawClipPolygon(vh, plb, plt, prt, prb, areaColor, areaToColor, serie.clip, grid); + } + UGL.DrawBorder(vh, center, itemWidth, itemHeight, borderWidth, itemStyle.borderColor, + itemStyle.borderToColor, 0, itemStyle.cornerRadius, isYAxis, chart.settings.cicleSmoothness, invert); + } + } + else + { + if (serie.clip) + { + prb = chart.ClampInGrid(grid, prb); + plb = chart.ClampInGrid(grid, plb); + plt = chart.ClampInGrid(grid, plt); + prt = chart.ClampInGrid(grid, prt); + } + var itemWidth = Mathf.Abs(prt.x - plb.x); + var itemHeight = Mathf.Abs(plt.y - prb.y); + var center = new Vector3((plb.x + prt.x) / 2, (plt.y + prb.y) / 2); + if (itemWidth > 0 && itemHeight > 0) + { + var invert = center.y < plb.y; + if (ItemStyleHelper.IsNeedCorner(itemStyle)) + { + UGL.DrawRoundRectangle(vh, center, itemWidth, itemHeight, areaColor, areaToColor, 0, + itemStyle.cornerRadius, isYAxis, chart.settings.cicleSmoothness, invert); + } + else + { + chart.DrawClipPolygon(vh, ref prb, ref plb, ref plt, ref prt, areaColor, areaToColor, + serie.clip, grid); + } + UGL.DrawBorder(vh, center, itemWidth, itemHeight, borderWidth, itemStyle.borderColor, + itemStyle.borderToColor, 0, itemStyle.cornerRadius, isYAxis, chart.settings.cicleSmoothness, invert); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/XCharts/Runtime/Serie/Bar/SimplifiedBarHandler.cs.meta b/Assets/XCharts/Runtime/Serie/Bar/SimplifiedBarHandler.cs.meta new file mode 100644 index 00000000..86f252e6 --- /dev/null +++ b/Assets/XCharts/Runtime/Serie/Bar/SimplifiedBarHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afd7226ecff7f4b9fad297101bc33b8c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestick.cs b/Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestick.cs new file mode 100644 index 00000000..094ec9d2 --- /dev/null +++ b/Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestick.cs @@ -0,0 +1,37 @@ + +using UnityEngine; + +namespace XCharts +{ + [System.Serializable] + [SerieHandler(typeof(SimplifiedCandlestickHandler), true)] + [DefaultAnimation(AnimationType.LeftToRight)] + [SerieExtraComponent()] + public class SimplifiedCandlestick : Serie, INeedSerieContainer, ISimplifiedSerie + { + public int containerIndex { get; internal set; } + public int containterInstanceId { get; internal set; } + + public static void AddDefaultSerie(BaseChart chart, string serieName) + { + var serie = chart.AddSerie(serieName); + + var lastValue = 50d; + for (int i = 0; i < 50; i++) + { + lastValue += UnityEngine.Random.Range(-10, 20); + var open = lastValue + Random.Range(-10, 5); + var close = lastValue + Random.Range(-5, 10); + var lowest = lastValue + Random.Range(-15, -10); + var heighest = lastValue + Random.Range(10, 20); + chart.AddData(serie.index, open, close, lowest, heighest); + } + } + + public static SimplifiedCandlestick CovertSerie(Serie serie) + { + var newSerie = serie.Clone(); + return newSerie; + } + } +} \ No newline at end of file diff --git a/Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestick.cs.meta b/Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestick.cs.meta new file mode 100644 index 00000000..682a2bae --- /dev/null +++ b/Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestick.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1202f0da64c484488bb69b8382af9918 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs b/Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs new file mode 100644 index 00000000..28671338 --- /dev/null +++ b/Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs @@ -0,0 +1,214 @@ + +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; +using XUGL; + +namespace XCharts +{ + [UnityEngine.Scripting.Preserve] + internal sealed class SimplifiedCandlestickHandler : SerieHandler + { + public override void DrawSerie(VertexHelper vh) + { + var colorIndex = chart.GetLegendRealShowNameIndex(serie.legendName); + DrawCandlestickSerie(vh, colorIndex, serie); + } + + public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category, + string marker, string itemFormatter, string numericFormatter, + ref List paramList, ref string title) + { + if (dataIndex < 0) + dataIndex = serie.context.pointerItemDataIndex; + + if (dataIndex < 0) + return; + + var serieData = serie.GetSerieData(dataIndex); + if (serieData == null) + return; + + title = category; + + var color = chart.GetLegendRealShowNameColor(serie.serieName); + var newMarker = SerieHelper.GetItemMarker(serie, serieData, marker); + var newItemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter); + var newNumericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter); + + var param = serie.context.param; + param.serieName = serie.serieName; + param.serieIndex = serie.index; + param.category = category; + param.dimension = 1; + param.serieData = serieData; + param.value = 0; + param.total = 0; + param.color = color; + param.marker = newMarker; + param.itemFormatter = newItemFormatter; + param.numericFormatter = newNumericFormatter; + param.columns.Clear(); + + param.columns.Add(param.marker); + param.columns.Add(serie.serieName); + param.columns.Add(string.Empty); + + paramList.Add(param); + for (int i = 0; i < 4; i++) + { + param = new SerieParams(); + param.serieName = serie.serieName; + param.serieIndex = serie.index; + param.dimension = i; + param.serieData = serieData; + param.value = serieData.GetData(i); + param.total = SerieHelper.GetMaxData(serie, i); + param.color = color; + param.marker = newMarker; + param.itemFormatter = newItemFormatter; + param.numericFormatter = newNumericFormatter; + param.columns.Clear(); + + param.columns.Add(param.marker); + param.columns.Add(XCSettings.lang.GetCandlestickDimensionName(i)); + param.columns.Add(ChartCached.NumberToStr(param.value, param.numericFormatter)); + + paramList.Add(param); + } + } + + private void DrawCandlestickSerie(VertexHelper vh, int colorIndex, SimplifiedCandlestick serie) + { + if (!serie.show) return; + if (serie.animation.HasFadeOut()) return; + XAxis xAxis; + YAxis yAxis; + GridCoord grid; + if (!chart.TryGetChartComponent(out xAxis, serie.xAxisIndex)) return; + if (!chart.TryGetChartComponent(out yAxis, serie.yAxisIndex)) return; + if (!chart.TryGetChartComponent(out grid, xAxis.gridIndex)) return; + var theme = chart.theme; + var dataZoom = chart.GetDataZoomOfAxis(xAxis); + var showData = serie.GetDataList(dataZoom); + float categoryWidth = AxisHelper.GetDataWidth(xAxis, grid.context.width, showData.Count, dataZoom); + float barWidth = serie.GetBarWidth(categoryWidth); + float space = (categoryWidth - barWidth) / 2; + int maxCount = serie.maxShow > 0 + ? (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) + : showData.Count; + + bool dataChanging = false; + float dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); + double yMinValue = yAxis.context.minValue; + double yMaxValue = yAxis.context.maxValue; + var isYAxis = false; + var itemStyle = serie.itemStyle; + serie.containerIndex = grid.index; + serie.containterInstanceId = grid.instanceId; + + for (int i = serie.minShow; i < maxCount; i++) + { + var serieData = showData[i]; + if (serie.IsIgnoreValue(serieData)) + { + serie.context.dataPoints.Add(Vector3.zero); + continue; + } + var open = serieData.GetCurrData(0, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); + var close = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); + var lowest = serieData.GetCurrData(2, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); + var heighest = serieData.GetCurrData(3, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); + var isRise = yAxis.inverse ? close < open : close > open; + var borderWidth = open == 0 ? 0f + : (itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth + : itemStyle.runtimeBorderWidth); + if (serieData.IsDataChanged()) dataChanging = true; + float pX = grid.context.x + i * categoryWidth; + float zeroY = grid.context.y + yAxis.context.offset; + if (!xAxis.boundaryGap) pX -= categoryWidth / 2; + float pY = zeroY; + var barHig = 0f; + double valueTotal = yMaxValue - yMinValue; + var minCut = (yMinValue > 0 ? yMinValue : 0); + if (valueTotal != 0) + { + barHig = (float)((close - open) / valueTotal * grid.context.height); + pY += (float)((open - minCut) / valueTotal * grid.context.height); + } + serieData.context.stackHeight = barHig; + float currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig); + Vector3 plb, plt, prt, prb, top; + + plb = new Vector3(pX + space + borderWidth, pY + borderWidth); + plt = new Vector3(pX + space + borderWidth, pY + currHig - borderWidth); + prt = new Vector3(pX + space + barWidth - borderWidth, pY + currHig - borderWidth); + prb = new Vector3(pX + space + barWidth - borderWidth, pY + borderWidth); + top = new Vector3(pX + space + barWidth / 2, pY + currHig - borderWidth); + // if (serie.clip) + // { + // plb = chart.ClampInGrid(grid, plb); + // plt = chart.ClampInGrid(grid, plt); + // prt = chart.ClampInGrid(grid, prt); + // prb = chart.ClampInGrid(grid, prb); + // top = chart.ClampInGrid(grid, top); + // } + serie.context.dataPoints.Add(top); + var areaColor = isRise + ? itemStyle.GetColor(theme.serie.candlestickColor) + : itemStyle.GetColor0(theme.serie.candlestickColor0); + var borderColor = isRise + ? itemStyle.GetBorderColor(theme.serie.candlestickBorderColor) + : itemStyle.GetBorderColor0(theme.serie.candlestickBorderColor0); + var itemWidth = Mathf.Abs(prt.x - plb.x); + var itemHeight = Mathf.Abs(plt.y - prb.y); + var center = new Vector3((plb.x + prt.x) / 2, (plt.y + prb.y) / 2); + var lowPos = new Vector3(center.x, zeroY + (float)((lowest - minCut) / valueTotal * grid.context.height)); + var heighPos = new Vector3(center.x, zeroY + (float)((heighest - minCut) / valueTotal * grid.context.height)); + var openCenterPos = new Vector3(center.x, prb.y); + var closeCenterPos = new Vector3(center.x, prt.y); + if (barWidth > 2f * borderWidth) + { + if (itemWidth > 0 && itemHeight > 0) + { + if (ItemStyleHelper.IsNeedCorner(itemStyle)) + { + UGL.DrawRoundRectangle(vh, center, itemWidth, itemHeight, areaColor, areaColor, 0, + itemStyle.cornerRadius, isYAxis, 0.5f); + } + else + { + chart.DrawClipPolygon(vh, ref prb, ref plb, ref plt, ref prt, areaColor, areaColor, + serie.clip, grid); + } + UGL.DrawBorder(vh, center, itemWidth, itemHeight, 2 * borderWidth, borderColor, 0, + itemStyle.cornerRadius, isYAxis, 0.5f); + } + if (isRise) + { + UGL.DrawLine(vh, openCenterPos, lowPos, borderWidth, borderColor); + UGL.DrawLine(vh, closeCenterPos, heighPos, borderWidth, borderColor); + } + else + { + UGL.DrawLine(vh, closeCenterPos, lowPos, borderWidth, borderColor); + UGL.DrawLine(vh, openCenterPos, heighPos, borderWidth, borderColor); + } + } + else + { + UGL.DrawLine(vh, openCenterPos, closeCenterPos, Mathf.Max(borderWidth, barWidth / 2), borderColor); + } + + } + if (!serie.animation.IsFinish()) + { + serie.animation.CheckProgress(); + } + if (dataChanging) + { + chart.RefreshPainter(serie); + } + } + } +} \ No newline at end of file diff --git a/Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs.meta b/Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs.meta new file mode 100644 index 00000000..998419c3 --- /dev/null +++ b/Assets/XCharts/Runtime/Serie/Candlestick/SimplifiedCandlestickHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 42727a035319b4eab92ddf0742630115 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Runtime/Serie/Line/Line.cs b/Assets/XCharts/Runtime/Serie/Line/Line.cs index c198ada5..005b3f71 100644 --- a/Assets/XCharts/Runtime/Serie/Line/Line.cs +++ b/Assets/XCharts/Runtime/Serie/Line/Line.cs @@ -11,7 +11,6 @@ namespace XCharts [DefaultAnimation(AnimationType.LeftToRight)] [SerieExtraComponent( typeof(LabelStyle), - typeof(LabelLine), typeof(EndLabelStyle), typeof(LineArrow), typeof(AreaStyle), diff --git a/Assets/XCharts/Runtime/Serie/Line/SimplifiedLine.cs b/Assets/XCharts/Runtime/Serie/Line/SimplifiedLine.cs new file mode 100644 index 00000000..67728489 --- /dev/null +++ b/Assets/XCharts/Runtime/Serie/Line/SimplifiedLine.cs @@ -0,0 +1,39 @@ + +using System; +using UnityEngine; + +namespace XCharts +{ + [Serializable] + [SerieHandler(typeof(SimplifiedLineHandler), true)] + [SerieConvert(typeof(SimplifiedBar), typeof(Line))] + [CoordOptions(typeof(GridCoord))] + [DefaultAnimation(AnimationType.LeftToRight)] + [SerieExtraComponent(typeof(AreaStyle))] + public class SimplifiedLine : Serie, INeedSerieContainer, ISimplifiedSerie + { + public int containerIndex { get; internal set; } + public int containterInstanceId { get; internal set; } + + public static void AddDefaultSerie(BaseChart chart, string serieName) + { + var serie = chart.AddSerie(serieName); + serie.symbol.show = false; + var lastValue = 0d; + for (int i = 0; i < 50; i++) + { + if (i < 20) + lastValue += UnityEngine.Random.Range(0, 5); + else + lastValue += UnityEngine.Random.Range(-3, 5); + chart.AddData(serie.index, lastValue); + } + } + + public static SimplifiedLine CovertSerie(Serie serie) + { + var newSerie = serie.Clone(); + return newSerie; + } + } +} \ No newline at end of file diff --git a/Assets/XCharts/Runtime/Serie/Line/SimplifiedLine.cs.meta b/Assets/XCharts/Runtime/Serie/Line/SimplifiedLine.cs.meta new file mode 100644 index 00000000..486e64be --- /dev/null +++ b/Assets/XCharts/Runtime/Serie/Line/SimplifiedLine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5740626e12a84a0ca3a984935f61720 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Runtime/Serie/Line/SimplifiedLineHandler.cs b/Assets/XCharts/Runtime/Serie/Line/SimplifiedLineHandler.cs new file mode 100644 index 00000000..b8c38293 --- /dev/null +++ b/Assets/XCharts/Runtime/Serie/Line/SimplifiedLineHandler.cs @@ -0,0 +1,283 @@ + +using System.Collections.Generic; +using System.Text; +using UnityEngine; +using UnityEngine.UI; +using XUGL; + +namespace XCharts +{ + /// + /// For grid coord + /// + [UnityEngine.Scripting.Preserve] + internal sealed class SimplifiedLineHandler : SerieHandler + { + private GridCoord m_SerieGrid; + + public override void Update() + { + base.Update(); + UpdateSerieContext(); + } + + public override void UpdateTooltipSerieParams(int dataIndex, bool showCategory, string category, + string marker, string itemFormatter, string numericFormatter, + ref List paramList, ref string title) + { + UpdateCoordSerieParams(ref paramList, ref title, dataIndex, showCategory, category, + marker, itemFormatter, numericFormatter); + } + + public override void DrawSerie(VertexHelper vh) + { + DrawLineSerie(vh, serie); + } + + private void UpdateSerieContext() + { + if (m_SerieGrid == null) + return; + + var needCheck = (chart.isPointerInChart && m_SerieGrid.IsPointerEnter()) || m_LegendEnter; + var lineWidth = 0f; + if (!needCheck) + { + if (m_LastCheckContextFlag != needCheck) + { + var needAnimation1 = false; + lineWidth = serie.lineStyle.GetWidth(chart.theme.serie.lineWidth); + m_LastCheckContextFlag = needCheck; + serie.context.pointerItemDataIndex = -1; + serie.context.pointerEnter = false; + serie.interact.SetValue(ref needAnimation1, lineWidth, false); + foreach (var serieData in serie.data) + { + var symbol = SerieHelper.GetSerieSymbol(serie, serieData); + var symbolSize = symbol.GetSize(serieData.data, chart.theme.serie.lineSymbolSize); + serieData.context.highlight = false; + serieData.interact.SetValue(ref needAnimation1, symbolSize); + } + if (needAnimation1) + { + if (SeriesHelper.IsStack(chart.series)) + chart.RefreshTopPainter(); + else + chart.RefreshPainter(serie); + } + } + return; + } + m_LastCheckContextFlag = needCheck; + var themeSymbolSize = chart.theme.serie.lineSymbolSize; + var themeSymbolSelectedSize = chart.theme.serie.lineSymbolSelectedSize; + lineWidth = serie.lineStyle.GetWidth(chart.theme.serie.lineWidth); + + var needInteract = false; + if (m_LegendEnter) + { + serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate); + for (int i = 0; i < serie.dataCount; i++) + { + var serieData = serie.data[i]; + var symbol = SerieHelper.GetSerieSymbol(serie, serieData); + var symbolSelectedSize = symbol.GetSelectedSize(serieData.data, themeSymbolSelectedSize); + + serieData.context.highlight = true; + serieData.interact.SetValue(ref needInteract, symbolSelectedSize); + } + } + else if (serie.context.isTriggerByAxis) + { + serie.context.pointerEnter = true; + serie.interact.SetValue(ref needInteract, lineWidth, true, chart.theme.serie.selectedRate); + for (int i = 0; i < serie.dataCount; i++) + { + var serieData = serie.data[i]; + var symbol = SerieHelper.GetSerieSymbol(serie, serieData); + var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize); + var symbolSelectedSize = symbol.GetSelectedSize(serieData.data, themeSymbolSelectedSize); + + if (i == serie.context.pointerItemDataIndex) + { + serieData.context.highlight = true; + serieData.interact.SetValue(ref needInteract, symbolSelectedSize); + } + else + { + serieData.context.highlight = false; + serieData.interact.SetValue(ref needInteract, symbolSize); + } + } + } + else + { + serie.context.pointerItemDataIndex = -1; + serie.context.pointerEnter = false; + foreach (var serieData in serie.data) + { + var dist = Vector3.Distance(chart.pointerPos, serieData.context.position); + var symbol = SerieHelper.GetSerieSymbol(serie, serieData); + var symbolSize = symbol.GetSize(serieData.data, themeSymbolSize); + var symbolSelectedSize = symbol.GetSelectedSize(serieData.data, themeSymbolSelectedSize); + + if (dist <= symbolSelectedSize) + { + serie.context.pointerItemDataIndex = serieData.index; + serie.context.pointerEnter = true; + serie.interact.SetValue(ref needInteract, lineWidth, true); + serieData.context.highlight = true; + serieData.interact.SetValue(ref needInteract, symbolSelectedSize); + } + else + { + serieData.context.highlight = false; + serieData.interact.SetValue(ref needInteract, symbolSize); + } + } + } + if (needInteract) + { + if (SeriesHelper.IsStack(chart.series)) + chart.RefreshTopPainter(); + else + chart.RefreshPainter(serie); + } + } + + private void DrawLineSerie(VertexHelper vh, SimplifiedLine serie) + { + if (!serie.show) + return; + if (serie.animation.HasFadeOut()) + return; + + var isY = ComponentHelper.IsAnyCategoryOfYAxis(chart.components); + + Axis axis; + Axis relativedAxis; + + if (isY) + { + axis = chart.GetChartComponent(serie.yAxisIndex); + relativedAxis = chart.GetChartComponent(serie.xAxisIndex); + } + else + { + axis = chart.GetChartComponent(serie.xAxisIndex); + relativedAxis = chart.GetChartComponent(serie.yAxisIndex); + } + m_SerieGrid = chart.GetChartComponent(axis.gridIndex); + + if (axis == null) + return; + if (relativedAxis == null) + return; + if (m_SerieGrid == null) + return; + + var dataZoom = chart.GetDataZoomOfAxis(axis); + var showData = serie.GetDataList(dataZoom); + + if (showData.Count <= 0) + return; + + var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width; + var scaleWid = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom); + + int maxCount = serie.maxShow > 0 + ? (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) + : showData.Count; + int rate = LineHelper.GetDataAverageRate(serie, m_SerieGrid, maxCount, false); + var totalAverage = serie.sampleAverage > 0 + ? serie.sampleAverage + : DataHelper.DataAverage(ref showData, serie.sampleType, serie.minShow, maxCount, rate); + var dataChanging = false; + var dataChangeDuration = serie.animation.GetUpdateAnimationDuration(); + + var interacting = false; + var lineWidth = LineHelper.GetLineWidth(ref interacting, serie, chart.theme.serie.lineWidth); + + axis.context.scaleWidth = scaleWid; + serie.containerIndex = m_SerieGrid.index; + serie.containterInstanceId = m_SerieGrid.instanceId; + + for (int i = serie.minShow; i < maxCount; i += rate) + { + var serieData = showData[i]; + var isIgnore = serie.IsIgnoreValue(serieData); + if (isIgnore) + { + serieData.context.stackHeight = 0; + serieData.context.position = Vector3.zero; + if (serie.ignoreLineBreak && serie.context.dataIgnores.Count > 0) + { + serie.context.dataIgnores[serie.context.dataIgnores.Count - 1] = true; + } + } + else + { + var np = Vector3.zero; + var xValue = axis.IsCategory() ? i : serieData.GetData(0, axis.inverse); + var relativedValue = DataHelper.SampleValue(ref showData, serie.sampleType, rate, serie.minShow, + maxCount, totalAverage, i, dataChangeDuration, ref dataChanging, relativedAxis); + + serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, m_SerieGrid, xValue, relativedValue, + i, scaleWid, false, ref np); + + serieData.context.position = np; + + serie.context.dataPoints.Add(np); + serie.context.dataIgnores.Add(false); + } + } + + if (dataChanging || interacting) + chart.RefreshPainter(serie); + + if (serie.context.dataPoints.Count <= 0) + return; + + serie.animation.InitProgress(serie.context.dataPoints, isY); + + LineHelper.UpdateSerieDrawPoints(serie, chart.settings, chart.theme, lineWidth, isY); + LineHelper.DrawSerieLineArea(vh, serie, null, chart.theme, isY, axis, relativedAxis, m_SerieGrid); + LineHelper.DrawSerieLine(vh, chart.theme, serie, null, m_SerieGrid, axis, relativedAxis, lineWidth); + + serie.context.vertCount = vh.currentVertCount; + + if (!serie.animation.IsFinish()) + { + serie.animation.CheckProgress(); + chart.RefreshPainter(serie); + } + } + + private float GetDataPoint(bool isY, Axis axis, Axis relativedAxis, GridCoord grid, double xValue, + double yValue, int i, float scaleWid, bool isStack, ref Vector3 np) + { + float xPos, yPos; + var gridXY = isY ? grid.context.x : grid.context.y; + + if (isY) + { + var valueHig = AxisHelper.GetAxisValueLength(grid, relativedAxis, scaleWid, yValue); + valueHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, valueHig); + + xPos = gridXY + valueHig; + yPos = AxisHelper.GetAxisPosition(grid, axis, scaleWid, xValue); + } + else + { + + var valueHig = AxisHelper.GetAxisValueLength(grid, relativedAxis, scaleWid, yValue); + valueHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, valueHig); + + yPos = gridXY + valueHig; + xPos = AxisHelper.GetAxisPosition(grid, axis, scaleWid, xValue); + } + np = new Vector3(xPos, yPos); + return yPos; + } + } +} \ No newline at end of file diff --git a/Assets/XCharts/Runtime/Serie/Line/SimplifiedLineHandler.cs.meta b/Assets/XCharts/Runtime/Serie/Line/SimplifiedLineHandler.cs.meta new file mode 100644 index 00000000..6a41fe31 --- /dev/null +++ b/Assets/XCharts/Runtime/Serie/Line/SimplifiedLineHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c4714bd08de34548ac7be3ec6523ee1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/XCharts/Runtime/Serie/Radar/RadarHandler.cs b/Assets/XCharts/Runtime/Serie/Radar/RadarHandler.cs index 6dbb446d..25d9ac4c 100644 --- a/Assets/XCharts/Runtime/Serie/Radar/RadarHandler.cs +++ b/Assets/XCharts/Runtime/Serie/Radar/RadarHandler.cs @@ -109,7 +109,7 @@ namespace XCharts { var value = serieData.GetCurrData(1); var max = radar.GetIndicatorMax(n); - SerieLabelHelper.ResetLabel(serieData.labelObject.label, serieLabel, chart.theme, i); + SerieLabelHelper.ResetLabel(serieData.labelObject.label, serieLabel, chart.theme); serieData.SetLabelActive(serieData.context.labelPosition != Vector3.zero); serieData.labelObject.SetLabelPosition(serieLabel.offset); var content = SerieLabelHelper.GetFormatterContent(serie, serieData, value, max, diff --git a/Assets/XCharts/Runtime/Serie/Serie.cs b/Assets/XCharts/Runtime/Serie/Serie.cs index ce089f92..c2ddcd8e 100644 --- a/Assets/XCharts/Runtime/Serie/Serie.cs +++ b/Assets/XCharts/Runtime/Serie/Serie.cs @@ -919,6 +919,13 @@ namespace XCharts if (lineArrow != null) lineArrow.ClearComponentDirty(); } + + public override void SetAllDirty() + { + base.SetAllDirty(); + labelDirty = true; + titleDirty = true; + } /// /// Whether the serie is highlighted. /// 该系列是否高亮,一般由图例悬停触发。 diff --git a/Assets/XCharts/Runtime/Serie/SerieDataContext.cs b/Assets/XCharts/Runtime/Serie/SerieDataContext.cs index 391b5660..883184f9 100644 --- a/Assets/XCharts/Runtime/Serie/SerieDataContext.cs +++ b/Assets/XCharts/Runtime/Serie/SerieDataContext.cs @@ -48,7 +48,7 @@ namespace XCharts public Vector3 offsetCenter { get; set; } public float stackHeight { get; set; } - public bool canShowLabel { get; set; } + public bool canShowLabel = true; public Image symbol { get; set; } /// /// Whether the data item is highlighted. diff --git a/Assets/XCharts/Runtime/Serie/SerieHandler.cs b/Assets/XCharts/Runtime/Serie/SerieHandler.cs index 0bef7cd6..0ff15c5f 100644 --- a/Assets/XCharts/Runtime/Serie/SerieHandler.cs +++ b/Assets/XCharts/Runtime/Serie/SerieHandler.cs @@ -61,7 +61,7 @@ namespace XCharts { m_RefreshLabel = false; if (m_InitedLabel) - InternalRefreshLabel(); + RefreshLabelInternal(); } if (serie.label != null && (serie.labelDirty || serie.label.componentDirty)) { @@ -190,17 +190,7 @@ namespace XCharts return false; var textName = ChartCached.GetSerieLabelName(s_SerieLabelObjectName, serie.index, serieData.index); - var color = Color.grey; - if (serie.useDataNameForColor) - { - color = (serieLabel.position == LabelStyle.Position.Inside) ? Color.white : - (Color)chart.theme.GetColor(count); - } - else - { - color = !ChartHelper.IsClearColor(serieLabel.textStyle.color) ? serieLabel.textStyle.color : - (Color)chart.theme.GetColor(serie.index); - } + var color = chart.theme.common.textColor; var iconWidth = iconStyle != null ? iconStyle.width : 20; var iconHeight = iconStyle != null ? iconStyle.height : 20; var labelObj = SerieLabelPool.Get(textName, serieLabelRoot.transform, serieLabel, color, @@ -250,14 +240,18 @@ namespace XCharts } } - private void InternalRefreshLabel() + public override void RefreshLabelInternal() { - if (!m_InitedLabel) return; + if (!m_InitedLabel) + return; + var colorIndex = chart.GetLegendRealShowNameIndex(serie.legendName); var total = serie.yTotal; foreach (var serieData in serie.data) { - if (serieData.labelObject == null) continue; + if (serieData.labelObject == null) + continue; + var serieLabel = SerieHelper.GetSerieLabel(serie, serieData); var iconStyle = SerieHelper.GetIconStyle(serie, serieData); var isIgnore = serie.IsIgnoreIndex(serieData.index); @@ -272,7 +266,7 @@ namespace XCharts && serie is Line && SerieHelper.IsDownPoint(serie, serieData.index) && (serie.areaStyle == null || !serie.areaStyle.show); - SerieLabelHelper.ResetLabel(serieData.labelObject.label, serieLabel, chart.theme, colorIndex); + SerieLabelHelper.ResetLabel(serieData.labelObject.label, serieLabel, chart.theme); serieData.SetLabelActive(!isIgnore); serieData.labelObject.SetPosition(serieData.context.position + (invert ? -serieLabel.offset : serieLabel.offset)); serieData.labelObject.SetText(content); @@ -309,7 +303,7 @@ namespace XCharts param.color = chart.GetLegendRealShowNameColor(serie.serieName); param.marker = SerieHelper.GetItemMarker(serie, serieData, marker); param.itemFormatter = SerieHelper.GetItemFormatter(serie, serieData, itemFormatter); - param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter); ; + param.numericFormatter = SerieHelper.GetNumericFormatter(serie, serieData, numericFormatter); param.columns.Clear(); param.columns.Add(param.marker);