Aimbot-PPO/Aimbot-PPO-MultiScene/Assets/XCharts/Runtime/Internal/BaseChart.Serie.cs
Koha9 2d404cfdf2 Aimbot Enviroment very first
Basic environment include Multi scene, Reward Change, Visible chart, etc....
2022-09-05 20:46:08 +09:00

985 lines
34 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
namespace XCharts.Runtime
{
public partial class BaseChart
{
public T AddSerie<T>(string serieName = null, bool show = true, bool addToHead = false) where T : Serie
{
if (!CanAddSerie<T>()) return null;
var index = -1;
var serie = InsertSerie(index, typeof(T), serieName, show, addToHead) as T;
CreateSerieHandler(serie);
return serie;
}
public T InsertSerie<T>(int index, string serieName = null, bool show = true) where T : Serie
{
if (!CanAddSerie<T>()) return null;
return InsertSerie(index, typeof(T), serieName, show) as T;
}
public void InsertSerie(Serie serie, int index = -1, bool addToHead = false)
{
serie.AnimationRestart();
AnimationStyleHelper.UpdateSerieAnimation(serie);
if (addToHead) m_Series.Insert(0, serie);
else if (index >= 0) m_Series.Insert(index, serie);
else m_Series.Add(serie);
ResetSeriesIndex();
SeriesHelper.UpdateSerieNameList(this, ref m_LegendRealShowName);
}
public bool MoveUpSerie(int serieIndex)
{
if (serieIndex < 0 || serieIndex > m_Series.Count - 1) return false;
if (serieIndex == 0) return false;
var up = GetSerie(serieIndex - 1);
var temp = GetSerie(serieIndex);
m_Series[serieIndex - 1] = temp;
m_Series[serieIndex] = up;
ResetSeriesIndex();
InitSerieHandlers();
RefreshChart();
return true;
}
public bool MoveDownSerie(int serieIndex)
{
if (serieIndex < 0 || serieIndex > m_Series.Count - 1) return false;
if (serieIndex == m_Series.Count - 1) return false;
var down = GetSerie(serieIndex + 1);
var temp = GetSerie(serieIndex);
m_Series[serieIndex + 1] = temp;
m_Series[serieIndex] = down;
ResetSeriesIndex();
InitSerieHandlers();
RefreshChart();
return true;
}
public bool CanAddSerie<T>() where T : Serie
{
return CanAddSerie(typeof(T));
}
public bool CanAddSerie(Type type)
{
return m_TypeListForSerie.ContainsKey(type);
}
public bool HasSerie<T>() where T : Serie
{
return HasSerie(typeof(T));
}
public bool HasSerie(Type type)
{
if (!type.IsSubclassOf(typeof(Serie))) return false;
foreach (var serie in m_Series)
{
if (serie.GetType() == type)
return true;
}
return false;
}
public T GetSerie<T>() where T : Serie
{
foreach (var serie in m_Series)
{
if (serie is T) return serie as T;
}
return null;
}
public Serie GetSerie(string serieName)
{
foreach (var serie in m_Series)
{
if (serie.serieName.Equals(serieName)) return serie;
}
return null;
}
public Serie GetSerie(int serieIndex)
{
if (serieIndex < 0 || serieIndex > m_Series.Count - 1) return null;
return m_Series[serieIndex];
}
public T GetSerie<T>(int serieIndex) where T : Serie
{
if (serieIndex < 0 || serieIndex > m_Series.Count - 1) return null;
return m_Series[serieIndex] as T;
}
public void RemoveSerie(string serieName)
{
for (int i = m_Series.Count - 1; i >= 0; i--)
{
var serie = m_Series[i];
if (string.IsNullOrEmpty(serie.serieName) && serie.serieName.Equals(serieName))
RemoveSerie(serie);
}
}
public void RemoveSerie(int serieIndex)
{
if (serieIndex < 0 || serieIndex > m_Series.Count - 1) return;
RemoveSerie(m_Series[serieIndex]);
}
public void RemoveSerie<T>() where T : Serie
{
for (int i = m_Series.Count - 1; i >= 0; i--)
{
var serie = m_Series[i];
if (serie is T)
RemoveSerie(serie);
}
}
public void RemoveSerie(Serie serie)
{
serie.OnRemove();
m_SerieHandlers.Remove(serie.handler);
m_Series.Remove(serie);
RefreshChart();
}
public bool CovertSerie<T>(Serie serie) where T : Serie
{
return CovertSerie(serie, typeof(T));
}
public bool CovertSerie(Serie serie, Type type)
{
try
{
var newSerie = type.InvokeMember("CovertSerie",
BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public, null, null,
new object[] { serie }) as Serie;
return ReplaceSerie(serie, newSerie);
}
catch
{
Debug.LogError(string.Format("CovertSerie Failed: can't found {0}.CovertSerie(Serie serie)", type.Name));
return false;
}
}
public bool ReplaceSerie(Serie oldSerie, Serie newSerie)
{
if (oldSerie == null || newSerie == null)
return false;
var index = m_Series.IndexOf(oldSerie);
if (index < 0)
return false;
AnimationStyleHelper.UpdateSerieAnimation(newSerie);
oldSerie.OnRemove();
m_Series.RemoveAt(index);
m_Series.Insert(index, newSerie);
ResetSeriesIndex();
InitSerieHandlers();
RefreshAllComponent();
RefreshChart();
return true;
}
/// <summary>
/// Add a data to serie.
/// |If serieName doesn't exist in legend,will be add to legend.
/// |添加一个数据到指定的系列中。
/// </summary>
/// <param name="serieName">the name of serie</param>
/// <param name="data">the data to add</param>
/// <param name="dataName">the name of data</param>
/// <param name="dataId">the unique id of data</param>
/// <returns>Returns True on success</returns>
public SerieData AddData(string serieName, double data, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieName);
if (serie != null)
{
var serieData = serie.AddYData(data, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
return null;
}
/// <summary>
/// Add a data to serie.
/// |添加一个数据到指定的系列中。
/// </summary>
/// <param name="serieIndex">the index of serie</param>
/// <param name="data">the data to add</param>
/// <param name="dataName">the name of data</param>
/// <param name="dataId">the unique id of data</param>
/// <returns>Returns True on success</returns>
public SerieData AddData(int serieIndex, double data, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
var serieData = serie.AddYData(data, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
return null;
}
/// <summary>
/// Add an arbitray dimension data to serie,such as (x,y,z,...).
/// |添加多维数据x,y,z...)到指定的系列中。
/// </summary>
/// <param name="serieName">the name of serie</param>
/// <param name="multidimensionalData">the (x,y,z,...) data</param>
/// <param name="dataName">the name of data</param>
/// <param name="dataId">the unique id of data</param>
/// <returns>Returns True on success</returns>
public SerieData AddData(string serieName, List<double> multidimensionalData, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieName);
if (serie != null)
{
var serieData = serie.AddData(multidimensionalData, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
return null;
}
/// <summary>
/// Add an arbitray dimension data to serie,such as (x,y,z,...).
/// |添加多维数据x,y,z...)到指定的系列中。
/// </summary>
/// <param name="serieIndex">the index of serie,index starts at 0</param>
/// <param name="multidimensionalData">the (x,y,z,...) data</param>
/// <param name="dataName">the name of data</param>
/// <param name="dataId">the unique id of data</param>
/// <returns>Returns True on success</returns>
public SerieData AddData(int serieIndex, List<double> multidimensionalData, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
var serieData = serie.AddData(multidimensionalData, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
return null;
}
/// <summary>
/// Add a (x,y) data to serie.
/// |添加x,y数据到指定系列中。
/// </summary>
/// <param name="serieName">the name of serie</param>
/// <param name="xValue">x data</param>
/// <param name="yValue">y data</param>
/// <param name="dataName">the name of data</param>
/// <param name="dataId">the unique id of data</param>
/// <returns>Returns True on success</returns>
public SerieData AddData(string serieName, double xValue, double yValue, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieName);
if (serie != null)
{
var serieData = serie.AddXYData(xValue, yValue, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
return null;
}
/// <summary>
/// Add a (x,y) data to serie.
/// |添加x,y数据到指定系列中。
/// </summary>
/// <param name="serieIndex">the index of serie</param>
/// <param name="xValue">x data</param>
/// <param name="yValue">y data</param>
/// <param name="dataName">the name of data</param>
/// <param name="dataId">the unique id of data</param>
/// <returns>Returns True on success</returns>
public SerieData AddData(int serieIndex, double xValue, double yValue, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
var serieData = serie.AddXYData(xValue, yValue, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
return null;
}
/// <summary>
/// Add a (time,y) data to serie.
/// |添加time,y数据到指定的系列中。
/// </summary>
/// <param name="serieName"></param>
/// <param name="time"></param>
/// <param name="yValue"></param>
/// <param name="dataName"></param>
/// <param name="dataId"></param>
/// <returns></returns>
public SerieData AddData(string serieName, DateTime time, double yValue, string dataName = null, string dataId = null)
{
var xValue = DateTimeUtil.GetTimestamp(time);
return AddData(serieName, xValue, yValue, dataName, dataId);
}
/// <summary>
/// Add a (time,y) data to serie.
/// |添加time,y数据到指定的系列中。
/// </summary>
/// <param name="serieIndex"></param>
/// <param name="time"></param>
/// <param name="yValue"></param>
/// <param name="dataName"></param>
/// <param name="dataId"></param>
/// <returns></returns>
public SerieData AddData(int serieIndex, DateTime time, double yValue, string dataName = null, string dataId = null)
{
var xValue = DateTimeUtil.GetTimestamp(time);
return AddData(serieIndex, xValue, yValue, dataName, dataId);
}
public SerieData AddData(int serieIndex, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
var serieData = serie.AddData(open, close, lowest, heighest, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
return null;
}
public SerieData AddData(string serieName, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null)
{
var serie = GetSerie(serieName);
if (serie != null)
{
var serieData = serie.AddData(open, close, lowest, heighest, dataName, dataId);
RefreshPainter(serie.painter);
return serieData;
}
return null;
}
/// <summary>
/// Update serie data by serie name.
/// |更新指定系列中的指定索引数据。
/// </summary>
/// <param name="serieName">the name of serie</param>
/// <param name="dataIndex">the index of data</param>
/// <param name="value">the data will be update</param>
public bool UpdateData(string serieName, int dataIndex, double value)
{
var serie = GetSerie(serieName);
if (serie != null)
{
serie.UpdateYData(dataIndex, value);
RefreshPainter(serie);
return true;
}
return false;
}
/// <summary>
/// Update serie data by serie index.
/// |更新指定系列中的指定索引数据。
/// </summary>
/// <param name="serieIndex">the index of serie</param>
/// <param name="dataIndex">the index of data</param>
/// <param name="value">the data will be update</param>
public bool UpdateData(int serieIndex, int dataIndex, double value)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
serie.UpdateYData(dataIndex, value);
RefreshPainter(serie);
return true;
}
return false;
}
/// <summary>
/// 更新指定系列指定索引的数据项的多维数据。
/// </summary>
/// <param name="serieName"></param>
/// <param name="dataIndex"></param>
/// <param name="multidimensionalData">一个数据项的多维数据列表,而不是多个数据项的数据</param>
public bool UpdateData(string serieName, int dataIndex, List<double> multidimensionalData)
{
var serie = GetSerie(serieName);
if (serie != null)
{
serie.UpdateData(dataIndex, multidimensionalData);
RefreshPainter(serie);
return true;
}
return false;
}
/// <summary>
/// 更新指定系列指定索引的数据项的多维数据。
/// </summary>
/// <param name="serieIndex"></param>
/// <param name="dataIndex"></param>
/// <param name="multidimensionalData">一个数据项的多维数据列表,而不是多个数据项的数据</param>
public bool UpdateData(int serieIndex, int dataIndex, List<double> multidimensionalData)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
serie.UpdateData(dataIndex, multidimensionalData);
RefreshPainter(serie);
return true;
}
return false;
}
/// <summary>
/// 更新指定系列指定索引指定维数的数据。维数从0开始。
/// </summary>
/// <param name="serieName"></param>
/// <param name="dataIndex"></param>
/// <param name="dimension">指定维数从0开始</param>
/// <param name="value"></param>
public bool UpdateData(string serieName, int dataIndex, int dimension, double value)
{
var serie = GetSerie(serieName);
if (serie != null)
{
serie.UpdateData(dataIndex, dimension, value);
RefreshPainter(serie);
return true;
}
return false;
}
/// <summary>
/// 更新指定系列指定索引指定维数的数据。维数从0开始。
/// </summary>
/// <param name="serieIndex"></param>
/// <param name="dataIndex"></param>
/// <param name="dimension">指定维数从0开始</param>
/// <param name="value"></param>
public bool UpdateData(int serieIndex, int dataIndex, int dimension, double value)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
serie.UpdateData(dataIndex, dimension, value);
RefreshPainter(serie);
return true;
}
return false;
}
/// <summary>
/// Update serie data name.
/// |更新指定系列中的指定索引数据名称。
/// </summary>
/// <param name="serieName"></param>
/// <param name="dataIndex"></param>
/// <param name="dataName"></param>
public bool UpdateDataName(string serieName, int dataIndex, string dataName)
{
var serie = GetSerie(serieName);
if (serie != null)
{
serie.UpdateDataName(dataIndex, dataName);
return true;
}
return false;
}
/// <summary>
/// Update serie data name.
/// |更新指定系列中的指定索引数据名称。
/// </summary>
/// <param name="serieIndex"></param>
/// <param name="dataName"></param>
/// <param name="dataIndex"></param>
public bool UpdateDataName(int serieIndex, int dataIndex, string dataName)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
serie.UpdateDataName(dataIndex, dataName);
return true;
}
return false;
}
public double GetData(string serieName, int dataIndex, int dimension = 1)
{
var serie = GetSerie(serieName);
if (serie != null)
{
return serie.GetData(dataIndex, dimension);
}
return 0;
}
public double GetData(int serieIndex, int dataIndex, int dimension = 1)
{
var serie = GetSerie(serieIndex);
if (serie != null)
{
return serie.GetData(dataIndex, dimension);
}
return 0;
}
public int GetAllSerieDataCount()
{
var total = 0;
foreach (var serie in m_Series)
total += serie.dataCount;
return total;
}
/// <summary>
/// Whether to show serie.
/// |设置指定系列是否显示。
/// </summary>
/// <param name="serieName">the name of serie</param>
/// <param name="active">Active or not</param>
public void SetSerieActive(string serieName, bool active)
{
var serie = GetSerie(serieName);
if (serie != null)
SetSerieActive(serie, active);
}
/// <summary>
/// Whether to show serie.
/// |设置指定系列是否显示。
/// </summary>
/// <param name="serieIndex">the index of serie</param>
/// <param name="active">Active or not</param>
public void SetSerieActive(int serieIndex, bool active)
{
var serie = GetSerie(serieIndex);
if (serie != null)
SetSerieActive(serie, active);
}
public void SetSerieActive(Serie serie, bool active)
{
serie.show = active;
serie.AnimationReset();
if (active) serie.AnimationFadeIn();
UpdateLegendColor(serie.serieName, active);
}
/// <summary>
/// Add a category data to xAxis.
/// |添加一个类目数据到指定的x轴。
/// </summary>
/// <param name="category">the category data</param>
/// <param name="xAxisIndex">which xAxis should category add to</param>
public void AddXAxisData(string category, int xAxisIndex = 0)
{
var xAxis = GetChartComponent<XAxis>(xAxisIndex);
if (xAxis != null)
{
xAxis.AddData(category);
}
}
/// <summary>
/// Update category data.
/// |更新X轴类目数据。
/// </summary>
/// <param name="index">the index of category data</param>
/// <param name="category"></param>
/// <param name="xAxisIndex">which xAxis index to update to</param>
public void UpdateXAxisData(int index, string category, int xAxisIndex = 0)
{
var xAxis = GetChartComponent<XAxis>(xAxisIndex);
if (xAxis != null)
{
xAxis.UpdateData(index, category);
}
}
/// <summary>
/// Add an icon to xAxis.
/// |添加一个图标到指定的x轴。
/// </summary>
/// <param name="icon"></param>
/// <param name="xAxisIndex"></param>
public void AddXAxisIcon(Sprite icon, int xAxisIndex = 0)
{
var xAxis = GetChartComponent<XAxis>(xAxisIndex);
if (xAxis != null)
{
xAxis.AddIcon(icon);
}
}
/// <summary>
/// Update xAxis icon.
/// |更新X轴图标。
/// </summary>
/// <param name="index"></param>
/// <param name="icon"></param>
/// <param name="xAxisIndex"></param>
public void UdpateXAxisIcon(int index, Sprite icon, int xAxisIndex = 0)
{
var xAxis = GetChartComponent<XAxis>(xAxisIndex);
if (xAxis != null)
{
xAxis.UpdateIcon(index, icon);
}
}
/// <summary>
/// Add a category data to yAxis.
/// |添加一个类目数据到指定的y轴。
/// </summary>
/// <param name="category">the category data</param>
/// <param name="yAxisIndex">which yAxis should category add to</param>
public void AddYAxisData(string category, int yAxisIndex = 0)
{
var yAxis = GetChartComponent<YAxis>(yAxisIndex);
if (yAxis != null)
{
yAxis.AddData(category);
}
}
/// <summary>
/// Update category data.
/// |更新Y轴类目数据。
/// </summary>
/// <param name="index">the index of category data</param>
/// <param name="category"></param>
/// <param name="yAxisIndex">which yAxis index to update to</param>
public void UpdateYAxisData(int index, string category, int yAxisIndex = 0)
{
var yAxis = GetChartComponent<YAxis>(yAxisIndex);
if (yAxis != null)
{
yAxis.UpdateData(index, category);
}
}
/// <summary>
/// Add an icon to yAxis.
/// |添加一个图标到指定的y轴。
/// </summary>
/// <param name="icon"></param>
/// <param name="yAxisIndex"></param>
public void AddYAxisIcon(Sprite icon, int yAxisIndex = 0)
{
var yAxis = GetChartComponent<YAxis>(yAxisIndex);
if (yAxis != null)
{
yAxis.AddIcon(icon);
}
}
/// <summary>
/// 更新Y轴图标。
/// </summary>
/// <param name="index"></param>
/// <param name="icon"></param>
/// <param name="yAxisIndex"></param>
public void UpdateYAxisIcon(int index, Sprite icon, int yAxisIndex = 0)
{
var yAxis = GetChartComponent<YAxis>(yAxisIndex);
if (yAxis != null)
{
yAxis.UpdateIcon(index, icon);
}
}
public float GetSerieBarGap<T>() where T : Serie
{
float gap = 0f;
for (int i = 0; i < m_Series.Count; i++)
{
var serie = m_Series[i];
if (serie is T)
{
if (serie.barGap != 0)
{
gap = serie.barGap;
}
}
}
return gap;
}
public double GetSerieSameStackTotalValue<T>(string stack, int dataIndex) where T : Serie
{
if (string.IsNullOrEmpty(stack)) return 0;
double total = 0;
foreach (var serie in m_Series)
{
if (serie is T)
{
if (stack.Equals(serie.stack))
{
total += serie.data[dataIndex].data[1];
}
}
}
return total;
}
public int GetSerieBarRealCount<T>() where T : Serie
{
var count = 0;
barStackSet.Clear();
for (int i = 0; i < m_Series.Count; i++)
{
var serie = m_Series[i];
if (!serie.show) continue;
if (serie is T)
{
if (!string.IsNullOrEmpty(serie.stack))
{
if (barStackSet.Contains(serie.stack)) continue;
barStackSet.Add(serie.stack);
}
count++;
}
}
return count;
}
private HashSet<string> barStackSet = new HashSet<string>();
public float GetSerieTotalWidth<T>(float categoryWidth, float gap, int realBarCount) where T : Serie
{
float total = 0;
float lastGap = 0;
barStackSet.Clear();
for (int i = 0; i < m_Series.Count; i++)
{
var serie = m_Series[i];
if (!serie.show) continue;
if (serie is T)
{
if (!string.IsNullOrEmpty(serie.stack))
{
if (barStackSet.Contains(serie.stack)) continue;
barStackSet.Add(serie.stack);
}
var width = GetStackBarWidth<T>(categoryWidth, serie, realBarCount);
if (gap == -1)
{
if (width > total) total = width;
}
else
{
lastGap = ChartHelper.GetActualValue(gap, width);
total += width;
total += lastGap;
}
}
}
if (total > 0 && gap != -1) total -= lastGap;
return total;
}
public float GetSerieTotalGap<T>(float categoryWidth, float gap, int index) where T : Serie
{
if (index <= 0) return 0;
var total = 0f;
var count = 0;
var totalRealBarCount = GetSerieBarRealCount<T>();
barStackSet.Clear();
for (int i = 0; i < m_Series.Count; i++)
{
var serie = m_Series[i];
if (!serie.show) continue;
if (serie is T)
{
if (!string.IsNullOrEmpty(serie.stack))
{
if (barStackSet.Contains(serie.stack)) continue;
barStackSet.Add(serie.stack);
}
var width = GetStackBarWidth<T>(categoryWidth, serie, totalRealBarCount);
if (gap == -1)
{
if (width > total) total = width;
}
else
{
total += width + ChartHelper.GetActualValue(gap, width);
}
if (count + 1 >= index)
break;
else
count++;
}
}
return total;
}
private float GetStackBarWidth<T>(float categoryWidth, Serie now, int realBarCount) where T : Serie
{
if (string.IsNullOrEmpty(now.stack)) return now.GetBarWidth(categoryWidth, realBarCount);
float barWidth = 0;
for (int i = 0; i < m_Series.Count; i++)
{
var serie = m_Series[i];
if ((serie is T) &&
serie.show && now.stack.Equals(serie.stack))
{
if (serie.barWidth > barWidth) barWidth = serie.barWidth;
}
}
if (barWidth == 0)
{
var width = ChartHelper.GetActualValue(0.6f, categoryWidth);
if (realBarCount == 0)
return width < 1 ? categoryWidth : width;
else
return width / realBarCount;
}
else
return ChartHelper.GetActualValue(barWidth, categoryWidth);
}
private List<string> tempList = new List<string>();
public int GetSerieIndexIfStack<T>(Serie currSerie) where T : Serie
{
tempList.Clear();
int index = 0;
for (int i = 0; i < m_Series.Count; i++)
{
var serie = m_Series[i];
if (!(serie is T)) continue;
if (string.IsNullOrEmpty(serie.stack))
{
if (serie.index == currSerie.index) return index;
tempList.Add(string.Empty);
index++;
}
else
{
if (!tempList.Contains(serie.stack))
{
if (serie.index == currSerie.index) return index;
tempList.Add(serie.stack);
index++;
}
else
{
if (serie.index == currSerie.index) return tempList.IndexOf(serie.stack);
}
}
}
return 0;
}
internal void InitSerieHandlers()
{
m_SerieHandlers.Clear();
for (int i = 0; i < m_Series.Count; i++)
{
var serie = m_Series[i];
serie.index = i;
CreateSerieHandler(serie);
}
}
private void CreateSerieHandler(Serie serie)
{
if (serie == null)
throw new ArgumentNullException("serie is null");
if (!serie.GetType().IsDefined(typeof(SerieHandlerAttribute), false))
{
Debug.LogError("Serie no Handler:" + serie.GetType());
return;
}
var attribute = serie.GetType().GetAttribute<SerieHandlerAttribute>();
var handler = (SerieHandler) Activator.CreateInstance(attribute.handler);
handler.attribute = attribute;
handler.chart = this;
handler.defaultDimension = 1;
handler.SetSerie(serie);
serie.handler = handler;
m_SerieHandlers.Add(handler);
}
private Serie InsertSerie(int index, Type type, string serieName, bool show = true, bool addToHead = false)
{
CheckAddRequireChartComponent(type);
var serie = Activator.CreateInstance(type) as Serie;
serie.show = show;
serie.serieName = serieName;
serie.serieType = type.Name;
serie.index = m_Series.Count;
if (type == typeof(Scatter))
{
serie.symbol.show = true;
serie.symbol.type = SymbolType.Circle;
}
else if (type == typeof(Line))
{
serie.symbol.show = true;
serie.symbol.type = SymbolType.EmptyCircle;
}
else
{
serie.symbol.show = false;
}
InsertSerie(serie, index, addToHead);
return serie;
}
private void ResetSeriesIndex()
{
#if UNITY_EDITOR && UNITY_2019_1_OR_NEWER
UnityEditor.EditorUtility.SetDirty(this);
#endif
for (int i = 0; i < m_Series.Count; i++)
{
m_Series[i].index = i;
}
}
private void AddSerieAfterDeserialize(Serie serie)
{
serie.OnAfterDeserialize();
m_Series.Add(serie);
}
public string GenerateDefaultSerieName()
{
return "serie" + m_Series.Count;
}
public bool IsSerieName(string name)
{
if (string.IsNullOrEmpty(name))
return false;
foreach (var serie in m_Series)
{
if (name.Equals(serie.serieName))
return true;
}
return false;
}
}
}