8 using System.Collections.Generic;
21 [SerializeField]
private int m_Index;
22 [SerializeField]
private int m_ParentIndex = -1;
23 [SerializeField]
private string m_Name;
24 [SerializeField]
private string m_Id;
25 [SerializeField]
private bool m_Selected;
26 [SerializeField]
private bool m_Ignore =
false;
27 [SerializeField]
private float m_Radius;
28 [SerializeField]
private bool m_EnableIconStyle =
false;
30 [SerializeField]
private bool m_EnableLabel =
false;
32 [SerializeField]
private bool m_EnableItemStyle =
false;
34 [SerializeField]
private bool m_EnableEmphasis =
false;
36 [SerializeField]
private bool m_EnableSymbol =
false;
38 [SerializeField]
private List<double> m_Data =
new List<double>();
39 [SerializeField]
private List<int> m_Children =
new List<int>();
43 private bool m_Show =
true;
44 private float m_RtPieOutsideRadius;
46 public int index {
get {
return m_Index; }
set { m_Index = value; } }
47 public int parentIndex {
get {
return m_ParentIndex; }
set { m_ParentIndex = value; } }
52 public string name {
get {
return m_Name; }
set { m_Name = value; } }
56 public string id {
get {
return m_Id; }
set { m_Id = value; } }
61 public string legendName {
get {
return string.IsNullOrEmpty(
name) ? ChartCached.IntToStr(index) :
name; } }
65 public float radius {
get {
return m_Radius; }
set { m_Radius = value; } }
70 public bool selected {
get {
return m_Selected; }
set { m_Selected = value; } }
74 public bool enableIconStyle {
get {
return m_EnableIconStyle; }
set { m_EnableIconStyle = value; } }
83 public bool enableLabel {
get {
return m_EnableLabel; }
set { m_EnableLabel = value; } }
91 public bool enableItemStyle {
get {
return m_EnableItemStyle; }
set { m_EnableItemStyle = value; } }
99 public bool enableEmphasis {
get {
return m_EnableEmphasis; }
set { m_EnableEmphasis = value; } }
107 public bool enableSymbol {
get {
return m_EnableSymbol; }
set { m_EnableSymbol = value; } }
117 get {
return m_Ignore; }
118 set {
if (PropertyUtil.SetStruct(ref m_Ignore, value)) SetVerticesDirty(); }
124 public List<double>
data {
get {
return m_Data; }
set { m_Data = value; } }
125 public List<int> children {
get {
return m_Children; }
set { m_Children = value; } }
130 public bool show {
get {
return m_Show; }
set { m_Show = value; } }
136 public Vector3 labelPosition {
get;
set; }
137 private bool m_CanShowLabel =
true;
141 public bool canShowLabel {
get {
return m_CanShowLabel; }
set { m_CanShowLabel = value; } }
171 else return m_RtPieOutsideRadius;
175 m_RtPieOutsideRadius = value;
182 public Vector3 runtimePosition {
get;
set; }
187 public Rect runtimeSubRect {
get;
set; }
188 public int runtimeLevel {
get;
set; }
189 public SerieData runtimeParent {
get;
set; }
190 public Color32 runtimeColor {
get;
set; }
191 public double runtimeArea {
get;
set; }
192 public float runtimeAngle {
get;
set; }
193 public Vector3 runtiemPieOffsetCenter {
get;
set; }
194 public float runtimeStackHig {
get;
set; }
195 public Image runtimeSymbol {
get;
set; }
196 public List<SerieData> runtimeChildren {
get {
return m_RuntimeChildren; } }
198 private List<double> m_PreviousData =
new List<double>();
199 private List<float> m_DataUpdateTime =
new List<float>();
200 private List<bool> m_DataUpdateFlag =
new List<bool>();
201 private List<Vector2> m_PolygonPoints =
new List<Vector2>();
202 [System.NonSerialized]
203 private List<SerieData> m_RuntimeChildren =
new List<SerieData>();
211 m_Name =
string.Empty;
214 m_CanShowLabel =
true;
215 m_EnableIconStyle =
false;
216 m_EnableSymbol =
false;
217 m_EnableLabel =
false;
218 m_EnableEmphasis =
false;
219 m_EnableItemStyle =
false;
222 m_PreviousData.Clear();
223 m_PolygonPoints.Clear();
224 m_RuntimeChildren.Clear();
225 m_DataUpdateTime.Clear();
226 m_DataUpdateFlag.Clear();
233 public double GetData(
int index,
bool inverse =
false)
235 if (index >= 0 && index < m_Data.Count)
237 return inverse ? -m_Data[index] : m_Data[index];
242 public double GetData(
int index,
double min,
double max)
244 if (index >= 0 && index < m_Data.Count)
246 var value = m_Data[index];
247 if (value < min)
return min;
248 else if (value > max)
return max;
254 public double GetPreviousData(
int index,
bool inverse =
false)
256 if (index >= 0 && index < m_PreviousData.Count)
258 return inverse ? -m_PreviousData[index] : m_PreviousData[index];
263 public double GetFirstData(
float animationDuration = 500f)
265 if (m_Data.Count > 0)
return GetCurrData(0, animationDuration);
269 public double GetLastData()
271 if (m_Data.Count > 0)
return m_Data[m_Data.Count - 1];
275 public double GetCurrData(
int index,
float animationDuration = 500f,
bool inverse =
false)
277 return GetCurrData(index, animationDuration, inverse, 0, 0);
280 public double GetCurrData(
int index,
float animationDuration,
bool inverse,
double min,
double max)
282 if (index < m_DataUpdateFlag.Count && m_DataUpdateFlag[index] && animationDuration > 0)
284 var time = Time.time - m_DataUpdateTime[index];
285 var total = animationDuration / 1000;
287 var rate = time / total;
288 if (rate > 1) rate = 1;
292 var curr = MathUtil.Lerp(GetPreviousData(index), GetData(index), rate);
293 if (min != 0 || max != 0)
301 var pre = m_PreviousData[index];
304 m_PreviousData[index] = min;
309 m_PreviousData[index] = max;
313 curr = inverse ? -curr : curr;
318 m_DataUpdateFlag[index] =
false;
319 return GetData(index, inverse);
324 return GetData(index, inverse);
334 if (m_Data.Count == 0)
return 0;
335 var temp =
double.MinValue;
336 for (
int i = 0; i < m_Data.Count; i++)
338 var value = GetData(i, inverse);
339 if (value > temp) temp = value;
350 if (m_Data.Count == 0)
return 0;
351 var temp =
double.MaxValue;
352 for (
int i = 0; i < m_Data.Count; i++)
354 var value = GetData(i, inverse);
355 if (value < temp) temp = value;
360 public bool UpdateData(
int dimension,
double value,
bool updateAnimation,
float animationDuration = 500f)
362 if (dimension >= 0 && dimension <
data.Count)
365 m_PreviousData[dimension] = GetCurrData(dimension, animationDuration);
367 m_DataUpdateTime[dimension] = Time.time;
368 m_DataUpdateFlag[dimension] = updateAnimation;
369 data[dimension] = value;
375 public bool UpdateData(
int dimension,
double value)
377 if (dimension >= 0 && dimension <
data.Count)
379 data[dimension] = value;
385 private void CheckLastData()
387 if (m_PreviousData.Count != m_Data.Count)
389 m_PreviousData.Clear();
390 m_DataUpdateTime.Clear();
391 m_DataUpdateFlag.Clear();
392 for (
int i = 0; i < m_Data.Count; i++)
394 m_PreviousData.Add(m_Data[i]);
395 m_DataUpdateTime.Add(Time.time);
396 m_DataUpdateFlag.Add(
false);
401 public bool IsDataChanged()
403 foreach (var b
in m_DataUpdateFlag)
408 public float GetLabelWidth()
410 if (labelObject !=
null)
return labelObject.GetLabelWidth();
414 public float GetLabelHeight()
416 if (labelObject !=
null)
return labelObject.GetLabelHeight();
420 public void SetLabelActive(
bool flag)
422 if (labelObject !=
null) labelObject.SetLabelActive(flag);
424 public void SetIconActive(
bool flag)
426 if (labelObject !=
null) labelObject.SetIconActive(flag);
429 public void SetPolygon(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4)
431 m_PolygonPoints.Clear();
432 m_PolygonPoints.Add(p1);
433 m_PolygonPoints.Add(p2);
434 m_PolygonPoints.Add(p3);
435 m_PolygonPoints.Add(p4);
438 public bool IsInPolygon(Vector2 p)
440 if (m_PolygonPoints.Count == 0)
return false;
442 var j = m_PolygonPoints.Count - 1;
443 for (
int i = 0; i < m_PolygonPoints.Count; j = i++)
445 var pi = m_PolygonPoints[i];
446 var pj = m_PolygonPoints[j];
447 if (((pi.y <= p.y && p.y < pj.y) || (pj.y <= p.y && p.y < pi.y)) &&
448 (p.x < (pj.x - pi.x) * (p.y - pi.y) / (pj.y - pi.y) + pi.x))