| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | using UnityEngine;namespace XCharts.Runtime{    internal static class MarkLineHelper    {        public static string GetFormatterContent(Serie serie, MarkLineData data)        {            var serieLabel = data.label;            var numericFormatter = serieLabel.numericFormatter;            if (string.IsNullOrEmpty(serieLabel.formatter))            {                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 serieLabel.formatterFunction == null? content:                    serieLabel.formatterFunction(data.index, data.runtimeValue, null, content);            }        }        public static Vector3 GetLabelPosition(MarkLineData data)        {            if (!data.label.show) return Vector3.zero;            var dir = (data.runtimeEndPosition - data.runtimeStartPosition).normalized;            var horizontal = Mathf.Abs(Vector3.Dot(dir, Vector3.right)) == 1;            var labelWidth = data.runtimeLabel == null ? 50 : data.runtimeLabel.GetTextWidth();            var labelHeight = data.runtimeLabel == null ? 20 : data.runtimeLabel.GetTextHeight();            switch (data.label.position)            {                case LabelStyle.Position.Start:                    if (data.runtimeStartPosition == Vector3.zero) return Vector3.zero;                    if (horizontal) return data.runtimeStartPosition + data.label.offset + labelWidth / 2 * Vector3.left;                    else return data.runtimeStartPosition + data.label.offset + labelHeight / 2 * Vector3.down;                case LabelStyle.Position.Middle:                    if (data.runtimeCurrentEndPosition == Vector3.zero) return Vector3.zero;                    var center = (data.runtimeStartPosition + data.runtimeCurrentEndPosition) / 2;                    if (horizontal) return center + data.label.offset + labelHeight / 2 * Vector3.up;                    else return center + data.label.offset + labelWidth / 2 * Vector3.right;                default:                    if (data.runtimeCurrentEndPosition == Vector3.zero) return Vector3.zero;                    if (horizontal) return data.runtimeCurrentEndPosition + data.label.offset + labelWidth / 2 * Vector3.right;                    else return data.runtimeCurrentEndPosition + data.label.offset + labelHeight / 2 * Vector3.up;            }        }    }}
 |