9 using System.Collections.Generic;
11 using System.Text.RegularExpressions;
56 [SerializeField]
private string m_Name;
57 [SerializeField]
private double m_Max;
58 [SerializeField]
private double m_Min;
59 [SerializeField]
private double[] m_Range =
new double[2] { 0, 0 };
66 public string name {
get {
return FormatterHelper.TrimAndReplaceLine(m_Name); }
set { m_Name = value; } }
71 public double max {
get {
return m_Max; }
set { m_Max = value; } }
76 public double min {
get {
return m_Min; }
set { m_Min = value; } }
86 public Text
text {
get;
set; }
93 get {
return m_Range; }
94 set {
if (value !=
null && value.Length == 2) { m_Range = value; } }
97 public bool IsInRange(
double value)
99 if (m_Range ==
null || m_Range.Length < 2)
return true;
100 if (m_Range[0] != 0 || m_Range[1] != 0)
101 return value >= m_Range[0] && value <= m_Range[1];
106 [SerializeField]
private bool m_Show;
107 [SerializeField]
private Shape m_Shape;
108 [SerializeField]
private float m_Radius = 100;
109 [SerializeField]
private int m_SplitNumber = 5;
110 [SerializeField]
private float[] m_Center =
new float[2] { 0.5f, 0.5f };
111 [SerializeField]
private AxisLine m_AxisLine = AxisLine.defaultAxisLine;
112 [SerializeField]
private AxisSplitLine m_SplitLine = AxisSplitLine.defaultSplitLine;
113 [SerializeField]
private AxisSplitArea m_SplitArea = AxisSplitArea.defaultSplitArea;
114 [SerializeField]
private bool m_Indicator =
true;
116 [SerializeField]
private float m_IndicatorGap = 10;
117 [SerializeField]
private int m_CeilRate = 0;
118 [SerializeField]
private bool m_IsAxisTooltip;
119 [SerializeField]
private Color32 m_OutRangeColor = Color.red;
120 [SerializeField]
private bool m_ConnectCenter =
false;
121 [SerializeField]
private bool m_LineGradient =
true;
122 [SerializeField]
private List<Indicator> m_IndicatorList =
new List<Indicator>();
128 public bool show {
get {
return m_Show; }
set {
if (PropertyUtil.SetStruct(ref m_Show, value)) SetComponentDirty(); } }
136 get {
return m_Shape; }
137 set {
if (PropertyUtil.SetStruct(ref m_Shape, value)) SetAllDirty(); }
145 get {
return m_Radius; }
146 set {
if (PropertyUtil.SetStruct(ref m_Radius, value)) SetAllDirty(); }
154 get {
return m_SplitNumber; }
155 set {
if (PropertyUtil.SetStruct(ref m_SplitNumber, value)) SetAllDirty(); }
164 get {
return m_Center; }
165 set {
if (value !=
null) { m_Center = value; SetAllDirty(); } }
173 get {
return m_AxisLine; }
174 set {
if (PropertyUtil.SetClass(ref m_AxisLine, value,
true)) SetAllDirty(); }
182 get {
return m_SplitLine; }
183 set {
if (PropertyUtil.SetClass(ref m_SplitLine, value,
true)) SetAllDirty(); }
191 get {
return m_SplitArea; }
192 set {
if (PropertyUtil.SetClass(ref m_SplitArea, value,
true)) SetAllDirty(); }
200 get {
return m_Indicator; }
201 set {
if (PropertyUtil.SetStruct(ref m_Indicator, value)) SetComponentDirty(); }
209 get {
return m_IndicatorGap; }
210 set {
if (PropertyUtil.SetStruct(ref m_IndicatorGap, value)) SetComponentDirty(); }
218 get {
return m_CeilRate; }
219 set {
if (PropertyUtil.SetStruct(ref m_CeilRate, value < 0 ? 0 : value)) SetAllDirty(); }
226 get {
return m_IsAxisTooltip; }
227 set {
if (PropertyUtil.SetStruct(ref m_IsAxisTooltip, value)) SetAllDirty(); }
235 get {
return m_PositionType; }
236 set {
if (PropertyUtil.SetStruct(ref m_PositionType, value)) SetAllDirty(); }
244 get {
return m_OutRangeColor; }
245 set {
if (PropertyUtil.SetStruct(ref m_OutRangeColor, value)) SetAllDirty(); }
253 get {
return m_ConnectCenter; }
254 set {
if (PropertyUtil.SetStruct(ref m_ConnectCenter, value)) SetAllDirty(); }
262 get {
return m_LineGradient; }
263 set {
if (PropertyUtil.SetStruct(ref m_LineGradient, value)) SetAllDirty(); }
271 public int index {
get;
internal set; }
282 public float runtimeDataRadius {
get;
internal set; }
289 public static Radar defaultRadar
293 var radar =
new Radar
296 m_Shape =
Shape.Polygon,
300 m_IndicatorList =
new List<Indicator>(5){
301 new Indicator(){name=
"indicator1",max = 0},
302 new Indicator(){name=
"indicator2",max = 0},
303 new Indicator(){name=
"indicator3",max = 0},
304 new Indicator(){name=
"indicator4",max = 0},
305 new Indicator(){name=
"indicator5",max = 0},
308 radar.center[0] = 0.5f;
309 radar.center[1] = 0.4f;
310 radar.splitLine.show =
true;
311 radar.splitArea.show =
true;
316 private bool IsEqualsIndicatorList(List<Indicator> indicators1, List<Indicator> indicators2)
318 if (indicators1.Count != indicators2.Count)
return false;
319 for (
int i = 0; i < indicators1.Count; i++)
321 var indicator1 = indicators1[i];
322 var indicator2 = indicators2[i];
323 if (!indicator1.Equals(indicator2))
return false;
328 public bool IsInIndicatorRange(
int index,
double value)
334 public double GetIndicatorMin(
int index)
336 if (index >= 0 && index < m_IndicatorList.Count)
338 return m_IndicatorList[index].min;
342 public double GetIndicatorMax(
int index)
344 if (index >= 0 && index < m_IndicatorList.Count)
346 return m_IndicatorList[index].max;
351 internal void UpdateRadarCenter(Vector3 chartPosition,
float chartWidth,
float chartHeight)
353 if (
center.Length < 2)
return;
380 public Vector3 GetIndicatorPosition(
int index)
387 angle = 2 * Mathf.PI / indicatorNum * index;
390 angle = 2 * Mathf.PI / indicatorNum * (index + 0.5f);
395 return new Vector3(x, y);
404 public Radar.Indicator AddIndicator(
string name,
float min,
float max)
415 public bool UpdateIndicator(
int indicatorIndex,
string name,
float min,
float max)
417 var
indicator = GetIndicator(indicatorIndex);
426 public Radar.Indicator GetIndicator(
int indicatorIndex)
428 if (indicatorIndex < 0 || indicatorIndex >
indicatorList.Count - 1)
return null;