summaryrefslogtreecommitdiff
path: root/Client/Assets/Scripts/XMainClient/XPieceWiseDataMgr.cs
blob: e122f71faf95d8dc82c00dcf291572043a831746 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System;
using System.Collections.Generic;
using XUtliPoolLib;

namespace XMainClient
{
	internal class XPieceWiseDataMgr
	{
		private List<XOrderData<double, double>> m_Datas = new List<XOrderData<double, double>>();

		private bool bRangeIsSet = false;

		private bool bDataIsSet = false;

		private XOrderData<double, double> m_Min;

		private XOrderData<double, double> m_Max;

		public void SetRange(double xmin, double ymin, double xmax, double ymax)
		{
			this.m_Min.x = xmin;
			this.m_Min.y = ymin;
			this.m_Max.x = xmax;
			this.m_Max.y = ymax;
			this.bRangeIsSet = true;
			bool flag = this.bDataIsSet;
			if (flag)
			{
				this.m_Datas.Add(this.m_Min);
				this.m_Datas.Add(this.m_Max);
				this.m_Datas.Sort();
			}
		}

		public void Init(ref SeqListRef<float> datas)
		{
			bool flag = false;
			bool flag2 = false;
			this.m_Datas.Clear();
			for (int i = 0; i < datas.Count; i++)
			{
				XOrderData<double, double> xorderData;
				xorderData.x = (double)datas[i, 0];
				xorderData.y = (double)datas[i, 1];
				this.m_Datas.Add(xorderData);
				bool flag3 = this.bRangeIsSet;
				if (flag3)
				{
					bool flag4 = xorderData.x == this.m_Min.x;
					if (flag4)
					{
						flag = true;
					}
					else
					{
						bool flag5 = xorderData.x == this.m_Max.x;
						if (flag5)
						{
							flag2 = true;
						}
					}
				}
			}
			bool flag6 = this.bRangeIsSet;
			if (flag6)
			{
				bool flag7 = !flag;
				if (flag7)
				{
					this.m_Datas.Add(this.m_Min);
				}
				bool flag8 = !flag2;
				if (flag8)
				{
					this.m_Datas.Add(this.m_Max);
				}
			}
			this.m_Datas.Sort();
			this.bDataIsSet = true;
		}

		public double GetData(double x)
		{
			for (int i = 1; i < this.m_Datas.Count; i++)
			{
				bool flag = this.m_Datas[i].x >= x;
				if (flag)
				{
					XOrderData<double, double> xorderData = this.m_Datas[i - 1];
					XOrderData<double, double> xorderData2 = this.m_Datas[i];
					double num = xorderData2.x - xorderData.x;
					bool flag2 = num == 0.0;
					if (flag2)
					{
						num = 1.0;
					}
					return xorderData.y + (xorderData2.y - xorderData.y) * (x - xorderData.x) / num;
				}
			}
			return 0.0;
		}
	}
}