diff --git a/Editor/Windows/XChartsEditor.cs b/Editor/Windows/XChartsEditor.cs index 47042a75..eae7e193 100644 --- a/Editor/Windows/XChartsEditor.cs +++ b/Editor/Windows/XChartsEditor.cs @@ -20,13 +20,18 @@ namespace XCharts.Editor var canvasObject = new GameObject(); canvasObject.name = "Canvas"; canvas = canvasObject.AddComponent(); - canvas.renderMode = RenderMode.ScreenSpaceOverlay; + canvas.renderMode = RenderMode.ScreenSpaceCamera; + var mainCamera = GameObject.FindGameObjectWithTag("MainCamera"); + canvas.worldCamera = mainCamera == null? null : mainCamera.GetComponent(); canvasObject.AddComponent(); canvasObject.AddComponent(); - var eventSystem = new GameObject(); - eventSystem.name = "EventSystem"; - eventSystem.AddComponent(); - eventSystem.AddComponent(); + if (GameObject.Find("EventSystem") == null) + { + var eventSystem = new GameObject(); + eventSystem.name = "EventSystem"; + eventSystem.AddComponent(); + eventSystem.AddComponent(); + } return canvas.transform; } } diff --git a/Runtime/Component/Axis/AxisLabel.cs b/Runtime/Component/Axis/AxisLabel.cs index acac6161..4d6a081c 100644 --- a/Runtime/Component/Axis/AxisLabel.cs +++ b/Runtime/Component/Axis/AxisLabel.cs @@ -145,22 +145,18 @@ namespace XCharts.Runtime public string GetFormatterContent(int labelIndex, string category) { - if (m_FormatterFunction != null) - { - return m_FormatterFunction(labelIndex, 0, category); - } if (string.IsNullOrEmpty(category)) - return category; + return GetFormatterFunctionContent(labelIndex, category, category); if (string.IsNullOrEmpty(m_Formatter)) { - return m_TextLimit.GetLimitContent(category); + return GetFormatterFunctionContent(labelIndex, category, m_TextLimit.GetLimitContent(category)); } else { var content = m_Formatter; FormatterHelper.ReplaceAxisLabelContent(ref content, category); - return m_TextLimit.GetLimitContent(content); + return GetFormatterFunctionContent(labelIndex, category, m_TextLimit.GetLimitContent(content)); } } @@ -170,15 +166,11 @@ namespace XCharts.Runtime { value = Math.Abs(value); } - if (m_FormatterFunction != null) - { - return m_FormatterFunction(labelIndex, value, null); - } if (string.IsNullOrEmpty(m_Formatter)) { if (isLog) { - return ChartCached.NumberToStr(value, numericFormatter); + return GetFormatterFunctionContent(labelIndex, value, ChartCached.NumberToStr(value, numericFormatter)); } if (minValue >= -1 && minValue <= 1 && maxValue >= -1 && maxValue <= 1) { @@ -186,24 +178,20 @@ namespace XCharts.Runtime int maxAcc = ChartHelper.GetFloatAccuracy(maxValue); int curAcc = ChartHelper.GetFloatAccuracy(value); int acc = Mathf.Max(Mathf.Max(minAcc, maxAcc), curAcc); - return ChartCached.FloatToStr(value, numericFormatter, acc); + return GetFormatterFunctionContent(labelIndex, value, ChartCached.FloatToStr(value, numericFormatter, acc)); } - return ChartCached.NumberToStr(value, numericFormatter); + return GetFormatterFunctionContent(labelIndex, value, ChartCached.NumberToStr(value, numericFormatter)); } else { var content = m_Formatter; FormatterHelper.ReplaceAxisLabelContent(ref content, numericFormatter, value); - return content; + return GetFormatterFunctionContent(labelIndex, value, content); } } public string GetFormatterDateTime(int labelIndex, double value, double minValue, double maxValue) { - if (m_FormatterFunction != null) - { - return m_FormatterFunction(labelIndex, value, null); - } var timestamp = (int) value; var dateTime = DateTimeUtil.GetDateTime(timestamp); var dateString = string.Empty; @@ -219,12 +207,24 @@ namespace XCharts.Runtime { var content = m_Formatter; FormatterHelper.ReplaceAxisLabelContent(ref content, dateString); - return m_TextLimit.GetLimitContent(content); + return GetFormatterFunctionContent(labelIndex, value, m_TextLimit.GetLimitContent(content)); } else { - return m_TextLimit.GetLimitContent(dateString); + return GetFormatterFunctionContent(labelIndex, value, m_TextLimit.GetLimitContent(dateString)); } } + + private string GetFormatterFunctionContent(int labelIndex, string category, string currentContent) + { + return m_FormatterFunction == null ? currentContent : + m_FormatterFunction(labelIndex, labelIndex, category, currentContent); + } + + private string GetFormatterFunctionContent(int labelIndex, double value, string currentContent) + { + return m_FormatterFunction == null ? currentContent : + m_FormatterFunction(labelIndex, labelIndex, null, currentContent); + } } } \ No newline at end of file diff --git a/Runtime/Helper/SerieLabelHelper.cs b/Runtime/Component/Label/SerieLabelHelper.cs similarity index 92% rename from Runtime/Helper/SerieLabelHelper.cs rename to Runtime/Component/Label/SerieLabelHelper.cs index 8ff3609f..84b9b67e 100644 --- a/Runtime/Helper/SerieLabelHelper.cs +++ b/Runtime/Component/Label/SerieLabelHelper.cs @@ -18,16 +18,6 @@ namespace XCharts.Runtime } } - public static void ResetLabel(ChartText labelObject, LabelStyle label, ThemeStyle theme, - Color textColor, float rotate) - { - if (labelObject == null) return; - labelObject.SetColor(textColor); - labelObject.SetLocalEulerAngles(new Vector3(0, 0, rotate)); - labelObject.SetFontSize(label.textStyle.GetFontSize(theme.common)); - labelObject.SetFontStyle(label.textStyle.fontStyle); - } - public static bool CanShowLabel(Serie serie, SerieData serieData, LabelStyle label, int dimesion) { return serie.show && serieData.context.canShowLabel && !serie.IsIgnoreValue(serieData, dimesion); @@ -43,18 +33,23 @@ namespace XCharts.Runtime var numericFormatter = serieLabel == null ? "" : serieLabel.numericFormatter; var serieName = serie.serieName; var dataName = serieData != null ? serieData.name : null; - if (serieLabel.formatterFunction != null) - { - return serieLabel.formatterFunction(serieData.index, dataValue, null); - } if (string.IsNullOrEmpty(serieLabel.formatter)) - return ChartCached.NumberToStr(dataValue, numericFormatter); + { + var currentContent = ChartCached.NumberToStr(dataValue, numericFormatter); + if (serieLabel.formatterFunction == null) + return currentContent; + else + return serieLabel.formatterFunction(serieData.index, dataValue, null, currentContent); + } else { var content = serieLabel.formatter; FormatterHelper.ReplaceSerieLabelContent(ref content, numericFormatter, serie.dataCount, dataValue, dataTotal, serieName, dataName, dataName, color, serieData); - return content; + if (serieLabel.formatterFunction == null) + return content; + else + return serieLabel.formatterFunction(serieData.index, dataValue, null, content); } } @@ -192,11 +187,11 @@ namespace XCharts.Runtime var angle = ChartHelper.GetAngle360(Vector2.up, newPos - serie.context.center); if (angle >= 180 && angle <= 270) { - serieData.context.labelPosition = new Vector3(isLeft?(++lastX):(--lastX), y1); + serieData.context.labelPosition = new Vector3(isLeft?(++lastX): (--lastX), y1); } else if (angle < 180 && angle >= 90) { - serieData.context.labelPosition = new Vector3(isLeft?(++lastX):(--lastX), y1); + serieData.context.labelPosition = new Vector3(isLeft?(++lastX): (--lastX), y1); } else { diff --git a/Runtime/Helper/SerieLabelHelper.cs.meta b/Runtime/Component/Label/SerieLabelHelper.cs.meta similarity index 83% rename from Runtime/Helper/SerieLabelHelper.cs.meta rename to Runtime/Component/Label/SerieLabelHelper.cs.meta index 5b4a31fa..a0d6d81b 100644 --- a/Runtime/Helper/SerieLabelHelper.cs.meta +++ b/Runtime/Component/Label/SerieLabelHelper.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0b81cddd3452545748563f9c6ea9be69 +guid: 654a13ef33a064e4fbf078742f397b20 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Component/Mark/MarkLineHelper.cs b/Runtime/Component/Mark/MarkLineHelper.cs index 08eb19df..55304ff4 100644 --- a/Runtime/Component/Mark/MarkLineHelper.cs +++ b/Runtime/Component/Mark/MarkLineHelper.cs @@ -8,18 +8,19 @@ namespace XCharts.Runtime { var serieLabel = data.label; var numericFormatter = serieLabel.numericFormatter; - if (serieLabel.formatterFunction != null) - { - return serieLabel.formatterFunction(data.index, data.runtimeValue, null); - } if (string.IsNullOrEmpty(serieLabel.formatter)) - return ChartCached.NumberToStr(data.runtimeValue, numericFormatter); + { + var content = ChartCached.NumberToStr(data.runtimeValue, numericFormatter); + return serieLabel.formatterFunction == null? content: + serieLabel.formatterFunction(data.index, data.runtimeValue, null, content); + } else { var content = serieLabel.formatter; FormatterHelper.ReplaceSerieLabelContent(ref content, numericFormatter, serie.dataCount, data.runtimeValue, 0, serie.serieName, data.name, data.name, Color.clear, null); - return content; + return serieLabel.formatterFunction == null? content: + serieLabel.formatterFunction(data.index, data.runtimeValue, null, content); } } diff --git a/Runtime/Helper/FormatterHelper.cs b/Runtime/Helper/FormatterHelper.cs index 775c7901..6cb3a659 100644 --- a/Runtime/Helper/FormatterHelper.cs +++ b/Runtime/Helper/FormatterHelper.cs @@ -41,7 +41,6 @@ namespace XCharts.Runtime { var foundDot = false; var mc = s_Regex.Matches(content); - Debug.LogError("context:" + content); foreach (var m in mc) { var old = m.ToString(); diff --git a/Runtime/Internal/Misc/DelegateFunction.cs b/Runtime/Internal/Misc/DelegateFunction.cs index 3843ca28..224616bd 100644 --- a/Runtime/Internal/Misc/DelegateFunction.cs +++ b/Runtime/Internal/Misc/DelegateFunction.cs @@ -9,8 +9,10 @@ namespace XCharts.Runtime /// /// 数据索引 /// 数值 + /// 类目 + /// 当前内容 /// 最终显示的文本内容 - public delegate string LabelFormatterFunction(int dataIndex, double value, string category); + public delegate string LabelFormatterFunction(int dataIndex, double value, string category, string content); public delegate float AnimationDelayFunction(int dataIndex); public delegate float AnimationDurationFunction(int dataIndex); /// diff --git a/Runtime/Serie/Serie.cs b/Runtime/Serie/Serie.cs index 96895ea2..89b3b6e3 100644 --- a/Runtime/Serie/Serie.cs +++ b/Runtime/Serie/Serie.cs @@ -212,7 +212,7 @@ namespace XCharts.Runtime [SerializeField] private float[] m_Center = new float[2] { 0.5f, 0.48f }; [SerializeField] private float[] m_Radius = new float[2] { 0, 0.28f }; - [SerializeField][Range(1, 10)] private int m_ShowDataDimension; + [SerializeField][Range(2, 10)] private int m_ShowDataDimension; [SerializeField] private bool m_ShowDataName; [SerializeField] private bool m_Clip = false; [SerializeField] private bool m_Ignore = false; @@ -686,7 +686,7 @@ namespace XCharts.Runtime /// /// 数据项里的数据维数。 /// - public int showDataDimension { get { return m_ShowDataDimension; } set { m_ShowDataDimension = value; } } + public int showDataDimension { get { return m_ShowDataDimension; } set { m_ShowDataDimension = Mathf.Clamp(2, 10, value); } } /// /// 在Editor的inpsector上是否显示name参数 /// @@ -1132,7 +1132,7 @@ namespace XCharts.Runtime serieData.index = xValue; serieData.id = dataId; AddSerieData(serieData); - m_ShowDataDimension = 1; + m_ShowDataDimension = 2; SetVerticesDirty(); CheckDataName(dataName); labelDirty = true; diff --git a/Runtime/Helper/SerieHelper.cs b/Runtime/Serie/SerieHelper.cs similarity index 100% rename from Runtime/Helper/SerieHelper.cs rename to Runtime/Serie/SerieHelper.cs diff --git a/Runtime/Helper/SerieHelper.cs.meta b/Runtime/Serie/SerieHelper.cs.meta similarity index 83% rename from Runtime/Helper/SerieHelper.cs.meta rename to Runtime/Serie/SerieHelper.cs.meta index a2ba9d14..cfb4c051 100644 --- a/Runtime/Helper/SerieHelper.cs.meta +++ b/Runtime/Serie/SerieHelper.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8c031417514104eebb5bbd60dd1f90fd +guid: 73512c276f5c34fb4a28cf61b2a0c4f1 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Helper/SeriesHelper.cs b/Runtime/Serie/SeriesHelper.cs similarity index 98% rename from Runtime/Helper/SeriesHelper.cs rename to Runtime/Serie/SeriesHelper.cs index 09be09c1..3a8beaef 100644 --- a/Runtime/Helper/SeriesHelper.cs +++ b/Runtime/Serie/SeriesHelper.cs @@ -138,15 +138,6 @@ namespace XCharts.Runtime return null; } - public static Serie GetSerieByVesselIndex(List series, int vesselIndex) - { - foreach (var serie in series) - { - if (serie.vesselIndex == vesselIndex) return serie; - } - return null; - } - private static HashSet _setForStack = new HashSet(); /// /// 是否由数据堆叠 diff --git a/Runtime/Helper/SeriesHelper.cs.meta b/Runtime/Serie/SeriesHelper.cs.meta similarity index 83% rename from Runtime/Helper/SeriesHelper.cs.meta rename to Runtime/Serie/SeriesHelper.cs.meta index bda31ead..4a9ecc15 100644 --- a/Runtime/Helper/SeriesHelper.cs.meta +++ b/Runtime/Serie/SeriesHelper.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 96a06a5949772464da15c44ae2ad400d +guid: 0a1c1086d9f88497d9e0ac89d719ff48 MonoImporter: externalObjects: {} serializedVersion: 2