using System.Collections.Generic; using UnityEngine; namespace XCharts { /// /// the type of symbol. /// 标记图形的类型。 /// public enum SerieSymbolType { /// /// 空心圆。 /// EmptyCircle, /// /// 圆形。 /// Circle, /// /// 正方形。 /// Rect, /// /// 三角形。 /// Triangle, /// /// 菱形。 /// Diamond, /// /// 不显示标记。 /// None, } /// /// The way to get serie symbol size. /// 获取标记图形大小的方式。 /// public enum SerieSymbolSizeType { /// /// Specify constant for symbol size. /// 自定义大小。 /// Custom, /// /// Specify the dataIndex and dataScale to calculate symbol size. /// 通过 dataIndex 从数据中获取,再乘以一个比例系数 dataScale 。 /// FromData, /// /// Specify callback function for symbol size. /// 通过回调函数获取。 /// Callback, } /// /// 获取标记大小的回调。 /// /// /// public delegate float SymbolSizeCallback(List data); /// /// 系列数据项的标记的图形 /// [System.Serializable] public class SerieSymbol : SubComponent { [SerializeField] private SerieSymbolType m_Type = SerieSymbolType.EmptyCircle; [SerializeField] private SerieSymbolSizeType m_SizeType = SerieSymbolSizeType.Custom; [SerializeField] private float m_Size = 6f; [SerializeField] private float m_SelectedSize = 10f; [SerializeField] private int m_DataIndex = 1; [SerializeField] private float m_DataScale = 1; [SerializeField] private float m_SelectedDataScale = 1.5f; [SerializeField] private SymbolSizeCallback m_SizeCallback; [SerializeField] private SymbolSizeCallback m_SelectedSizeCallback; [SerializeField] private Color m_Color; [SerializeField] [Range(0, 1)] private float m_Opacity = 1; [SerializeField] private int m_StartIndex; [SerializeField] private int m_Interval; [SerializeField] private bool m_ForceShowLast = false; /// /// the type of symbol. /// 标记类型。 /// public SerieSymbolType type { get { return m_Type; } set { m_Type = value; } } /// /// the type of symbol size. /// 标记图形的大小获取方式。 /// public SerieSymbolSizeType sizeType { get { return m_SizeType; } set { m_SizeType = value; } } /// /// the size of symbol. /// 标记的大小。 /// public float size { get { return m_Size; } set { m_Size = value; } } /// /// the size of selected symbol. /// 被选中的标记的大小。 /// public float selectedSize { get { return m_SelectedSize; } set { m_SelectedSize = value; } } /// /// whitch data index is when the sizeType assined as FromData. /// 当sizeType指定为FromData时,指定的数据源索引。 /// public int dataIndex { get { return m_DataIndex; } set { m_DataIndex = value; } } /// /// the scale of data when sizeType assined as FromData. /// 当sizeType指定为FromData时,指定的倍数系数。 /// public float dataScale { get { return m_DataScale; } set { m_DataScale = value; } } /// /// the scale of selected data when sizeType assined as FromData. /// 当sizeType指定为FromData时,指定的高亮倍数系数。 /// public float selectedDataScale { get { return m_SelectedDataScale; } set { m_SelectedDataScale = value; } } /// /// the callback of size when sizeType assined as Callback. /// 当sizeType指定为Callback时,指定的回调函数。 /// public SymbolSizeCallback sizeCallback { get { return m_SizeCallback; } set { m_SizeCallback = value; } } /// /// the callback of size when sizeType assined as Callback. /// 当sizeType指定为Callback时,指定的高亮回调函数。 /// public SymbolSizeCallback selectedSizeCallback { get { return m_SelectedSizeCallback; } set { m_SelectedSizeCallback = value; } } /// /// the color of symbol,default from serie. /// 标记图形的颜色,默认和系列一致。 /// public Color color { get { return m_Color; } set { m_Color = value; } } /// /// the opacity of color. /// 图形标记的透明度。 /// public float opacity { get { return m_Opacity; } set { m_Opacity = value; } } /// /// the index start to show symbol. /// 开始显示图形标记的索引。 /// public int startIndex { get { return m_StartIndex; } set { m_StartIndex = value; } } /// /// the interval of show symbol. /// 显示图形标记的间隔。0表示显示所有标签,1表示隔一个隔显示一个标签,以此类推。 /// public int interval { get { return m_Interval; } set { m_Interval = value; } } /// /// whether to show the last symbol. /// 是否强制显示最后一个图形标记。 /// public bool forceShowLast { get { return m_ForceShowLast; } set { m_ForceShowLast = value; } } private List m_AnimationSize = new List() { 0, 5, 10 }; /// /// the setting for effect scatter. /// 带有涟漪特效动画的散点图的动画参数。 /// public List animationSize { get { return m_AnimationSize; } } /// /// 根据指定的sizeType获得标记的大小 /// /// /// public float GetSize(List data) { if (data == null) return size; switch (m_SizeType) { case SerieSymbolSizeType.Custom: return size; case SerieSymbolSizeType.FromData: if (dataIndex >= 0 && dataIndex < data.Count) { return data[dataIndex] * m_DataScale; } else { return size; } case SerieSymbolSizeType.Callback: if (sizeCallback != null) return sizeCallback(data); else return size; default: return size; } } /// /// 根据sizeType获得高亮时的标记大小 /// /// /// public float GetSelectedSize(List data) { if (data == null) return selectedSize; switch (m_SizeType) { case SerieSymbolSizeType.Custom: return selectedSize; case SerieSymbolSizeType.FromData: if (dataIndex >= 0 && dataIndex < data.Count) { return data[dataIndex] * m_SelectedDataScale; } else { return selectedSize; } case SerieSymbolSizeType.Callback: if (selectedSizeCallback != null) return selectedSizeCallback(data); else return selectedSize; default: return selectedSize; } } public bool ShowSymbol(int dataIndex, int dataCount) { if (type == SerieSymbolType.None) return false; if (dataIndex < startIndex) return false; if (m_Interval <= 0) return true; if (m_ForceShowLast && dataIndex == dataCount - 1) return true; return (dataIndex - startIndex) % (m_Interval + 1) == 0; } } }