Elin Modding Docs Doc
Loading...
Searching...
No Matches
MapBounds.cs
1using System;
2using Newtonsoft.Json;
3using UnityEngine;
4
5// Token: 0x02000696 RID: 1686
6public class MapBounds : EClass
7{
8 // Token: 0x17000E1F RID: 3615
9 // (get) Token: 0x060030E6 RID: 12518 RVA: 0x0011187B File Offset: 0x0010FA7B
10 public int CenterX
11 {
12 get
13 {
14 return (this.x + this.maxX) / 2;
15 }
16 }
17
18 // Token: 0x17000E20 RID: 3616
19 // (get) Token: 0x060030E7 RID: 12519 RVA: 0x0011188C File Offset: 0x0010FA8C
20 public int CenterZ
21 {
22 get
23 {
24 return (this.z + this.maxZ) / 2;
25 }
26 }
27
28 // Token: 0x17000E21 RID: 3617
29 // (get) Token: 0x060030E8 RID: 12520 RVA: 0x0011189D File Offset: 0x0010FA9D
30 public int Width
31 {
32 get
33 {
34 return this.maxX - this.x + 1;
35 }
36 }
37
38 // Token: 0x17000E22 RID: 3618
39 // (get) Token: 0x060030E9 RID: 12521 RVA: 0x001118AE File Offset: 0x0010FAAE
40 public int Height
41 {
42 get
43 {
44 return this.maxZ - this.z + 1;
45 }
46 }
47
48 // Token: 0x060030EA RID: 12522 RVA: 0x001118BF File Offset: 0x0010FABF
49 public void SetBounds(int _x, int _z, int _maxX, int _maxZ)
50 {
51 this.x = _x;
52 this.z = _z;
53 this.maxX = _maxX;
54 this.maxZ = _maxZ;
55 }
56
57 // Token: 0x060030EB RID: 12523 RVA: 0x001118DE File Offset: 0x0010FADE
58 public bool Contains(int dx, int dz)
59 {
60 return dx >= this.x && dz >= this.z && dx <= this.maxX && dz <= this.maxZ;
61 }
62
63 // Token: 0x060030EC RID: 12524 RVA: 0x00111909 File Offset: 0x0010FB09
64 public bool Contains(Point p)
65 {
66 return this.Contains(p.x, p.z);
67 }
68
69 // Token: 0x060030ED RID: 12525 RVA: 0x0011191D File Offset: 0x0010FB1D
70 public Point GetCenterPos()
71 {
72 return new Point(this.CenterX, this.CenterZ);
73 }
74
75 // Token: 0x060030EE RID: 12526 RVA: 0x00111930 File Offset: 0x0010FB30
76 public Point GetRandomTopPos()
77 {
78 return new Point(this.x + EClass.rnd(this.maxX - this.x), this.maxZ);
79 }
80
81 // Token: 0x060030EF RID: 12527 RVA: 0x00111956 File Offset: 0x0010FB56
82 public Point GetRandomRightPos()
83 {
84 return new Point(this.maxX, this.z + EClass.rnd(this.maxZ - this.z));
85 }
86
87 // Token: 0x060030F0 RID: 12528 RVA: 0x0011197C File Offset: 0x0010FB7C
88 public Point GetRandomBottomPos()
89 {
90 return new Point(this.x + EClass.rnd(this.maxX - this.x), this.z);
91 }
92
93 // Token: 0x060030F1 RID: 12529 RVA: 0x001119A2 File Offset: 0x0010FBA2
94 public Point GetRandomLeftPos()
95 {
96 return new Point(this.x, this.z + EClass.rnd(this.maxZ - this.z));
97 }
98
99 // Token: 0x060030F2 RID: 12530 RVA: 0x001119C8 File Offset: 0x0010FBC8
100 public Point GetTopPos(float rate = -1f)
101 {
102 return this.GetSpawnPos(this.x, this.maxZ, this.maxX, this.maxZ);
103 }
104
105 // Token: 0x060030F3 RID: 12531 RVA: 0x001119E8 File Offset: 0x0010FBE8
106 public Point GetRightPos(float rate = -1f)
107 {
108 return this.GetSpawnPos(this.maxX, this.z, this.maxX, this.maxZ);
109 }
110
111 // Token: 0x060030F4 RID: 12532 RVA: 0x00111A08 File Offset: 0x0010FC08
112 public Point GetBottomPos(float rate = -1f)
113 {
114 return this.GetSpawnPos(this.x, this.z, this.maxX, this.z);
115 }
116
117 // Token: 0x060030F5 RID: 12533 RVA: 0x00111A28 File Offset: 0x0010FC28
118 public Point GetLeftPos(float rate = -1f)
119 {
120 return this.GetSpawnPos(this.x, this.z, this.x, this.maxZ);
121 }
122
123 // Token: 0x060030F6 RID: 12534 RVA: 0x00111A48 File Offset: 0x0010FC48
124 public Point GetRandomPoint()
125 {
126 return new Point(this.x + EClass.rnd(this.Width), this.z + EClass.rnd(this.Height));
127 }
128
129 // Token: 0x060030F7 RID: 12535 RVA: 0x00111A74 File Offset: 0x0010FC74
130 public Point GetSpawnPos(int x, int z, int maxX, int maxZ)
131 {
132 Point point = new Point();
133 for (int i = z; i < maxZ + 1; i++)
134 {
135 for (int j = x; j < maxX + 1; j++)
136 {
137 point.Set(j, i);
138 foreach (Thing thing in point.Things)
139 {
140 if (thing.trait is TraitRoadSign)
141 {
142 if (thing.dir == 0)
143 {
144 point.z--;
145 }
146 else if (thing.dir == 1)
147 {
148 point.x++;
149 }
150 else if (thing.dir == 2)
151 {
152 point.z++;
153 }
154 else
155 {
156 point.x--;
157 }
158 return point;
159 }
160 }
161 }
162 }
163 return new Point(x + (maxX - x) / 2, z + (maxZ - z) / 2);
164 }
165
166 // Token: 0x060030F8 RID: 12536 RVA: 0x00111B80 File Offset: 0x0010FD80
167 public bool CanExpand(int a)
168 {
169 return this.x - a >= 1 || this.z - a >= 1 || this.maxX + a < EClass._map.Size - 1 || this.maxZ + a < EClass._map.Size - 1;
170 }
171
172 // Token: 0x060030F9 RID: 12537 RVA: 0x00111BD4 File Offset: 0x0010FDD4
173 public void Expand(int a)
174 {
175 this.x -= a;
176 this.z -= a;
177 this.maxX += a;
178 this.maxZ += a;
179 if (this.x < 1)
180 {
181 this.x = 1;
182 }
183 if (this.z < 1)
184 {
185 this.z = 1;
186 }
187 if (this.maxX >= EClass._map.Size - 1)
188 {
189 this.maxX = EClass._map.Size - 2;
190 }
191 if (this.maxZ >= EClass._map.Size - 1)
192 {
193 this.maxZ = EClass._map.Size - 2;
194 }
195 }
196
197 // Token: 0x060030FA RID: 12538 RVA: 0x00111C88 File Offset: 0x0010FE88
198 public Point GetSurface(int x, int z, bool walkable = true)
199 {
200 Point point = new Point(x, z);
201 point.Clamp(false);
202 if (!walkable || !point.cell.blocked)
203 {
204 return point;
205 }
206 return Point.Invalid;
207 }
208
209 // Token: 0x060030FB RID: 12539 RVA: 0x00111CBC File Offset: 0x0010FEBC
210 public Point GetRandomSurface(int x, int z, int radius, bool walkable = true, bool allowWater = false)
211 {
212 for (int i = 0; i < radius * radius * 2; i++)
213 {
214 Point surface = this.GetSurface(x + EClass.rnd(radius) - EClass.rnd(radius), z + EClass.rnd(radius) - EClass.rnd(radius), walkable);
215 if (surface.IsValid && (allowWater || !surface.IsWater))
216 {
217 return surface;
218 }
219 }
220 return EClass._map.GetCenterPos();
221 }
222
223 // Token: 0x060030FC RID: 12540 RVA: 0x00111D20 File Offset: 0x0010FF20
224 public Point GetRandomSurface(bool centered = false, bool walkable = true, bool allowWater = false)
225 {
226 for (int i = 0; i < 10000; i++)
227 {
228 Point surface = this.GetSurface(centered ? (this.CenterX + EClass.rnd(this.Width / 4) - EClass.rnd(this.Width / 4)) : (this.x + EClass.rnd(this.Width)), centered ? (this.CenterZ + EClass.rnd(this.Height / 4) - EClass.rnd(this.Height / 4)) : (this.z + EClass.rnd(this.Height)), walkable);
229 if (surface.IsValid && (allowWater || !surface.IsWater))
230 {
231 return surface;
232 }
233 }
234 return this.GetSurface(this.CenterX, this.CenterZ, false);
235 }
236
237 // Token: 0x060030FD RID: 12541 RVA: 0x00111DE8 File Offset: 0x0010FFE8
238 public Point GetRandomSpawnPos()
239 {
240 for (int i = 0; i < 10000; i++)
241 {
242 Point randomPoint = EClass._map.GetRandomPoint();
243 if (!randomPoint.cell.blocked && randomPoint.cell.room == null && randomPoint.cell.light <= 0 && randomPoint.IsValid)
244 {
245 return randomPoint;
246 }
247 }
248 return this.GetCenterPos().GetNearestPoint(false, true, true, false);
249 }
250
251 // Token: 0x060030FE RID: 12542 RVA: 0x00111E54 File Offset: 0x00110054
252 public Point GetRandomEdge(int r = 3)
253 {
254 for (int i = 0; i < 10000; i++)
255 {
256 int num;
257 int num2;
258 if (EClass.rnd(2) == 0)
259 {
260 num = ((EClass.rnd(2) == 0) ? (this.x + EClass.rnd(r)) : (this.maxX - EClass.rnd(r)));
261 num2 = this.z + EClass.rnd(this.Height);
262 }
263 else
264 {
265 num2 = ((EClass.rnd(2) == 0) ? (this.z + EClass.rnd(r)) : (this.maxZ - EClass.rnd(r)));
266 num = this.x + EClass.rnd(this.Width);
267 }
268 Point surface = this.GetSurface(num, num2, false);
269 if (surface.IsValid)
270 {
271 return surface;
272 }
273 }
274 return this.GetSurface(this.Size / 2, this.Size / 2, false);
275 }
276
277 // Token: 0x060030FF RID: 12543 RVA: 0x00111F20 File Offset: 0x00110120
278 public Point GetRandomSpace(int width, int height, int tries = 100)
279 {
280 Point point = new Point();
281 Point point2 = new Point();
282 for (int i = 0; i < tries; i++)
283 {
284 bool flag = true;
285 point2.Set(this.x + EClass.rnd(this.maxX - this.x), this.z + EClass.rnd(this.maxZ - this.z));
286 for (int j = 0; j < height; j++)
287 {
288 for (int k = 0; k < width; k++)
289 {
290 point.Set(point2.x + k, point2.z + j);
291 if (point.x > this.maxX || point.z > this.maxZ || point.IsBlocked || point.cell.HasZoneStairs(true))
292 {
293 flag = false;
294 break;
295 }
296 }
297 if (!flag)
298 {
299 break;
300 }
301 }
302 if (flag)
303 {
304 return point2;
305 }
306 }
307 Debug.Log("valid space not found:" + width.ToString() + "/" + height.ToString());
308 return null;
309 }
310
311 // Token: 0x06003100 RID: 12544 RVA: 0x00112020 File Offset: 0x00110220
312 public void ForeachCell(Action<Cell> action)
313 {
314 Cell[,] cells = EClass._map.cells;
315 for (int i = this.x; i <= this.maxX; i++)
316 {
317 for (int j = this.z; j <= this.maxZ; j++)
318 {
319 action(cells[i, j]);
320 }
321 }
322 }
323
324 // Token: 0x06003101 RID: 12545 RVA: 0x00112074 File Offset: 0x00110274
325 public void ForeachPoint(Action<Point> action)
326 {
327 Point point = new Point();
328 for (int i = this.x; i <= this.maxX; i++)
329 {
330 for (int j = this.z; j <= this.maxZ; j++)
331 {
332 action(point.Set(i, j));
333 }
334 }
335 }
336
337 // Token: 0x06003102 RID: 12546 RVA: 0x001120C4 File Offset: 0x001102C4
338 public void ForeachXYZ(Action<int, int> action)
339 {
340 for (int i = this.x; i <= this.maxX; i++)
341 {
342 for (int j = this.z; j <= this.maxZ; j++)
343 {
344 action(i, j);
345 }
346 }
347 }
348
349 // Token: 0x04001B11 RID: 6929
350 [JsonProperty]
351 public int x;
352
353 // Token: 0x04001B12 RID: 6930
354 [JsonProperty]
355 public int z;
356
357 // Token: 0x04001B13 RID: 6931
358 [JsonProperty]
359 public int maxX;
360
361 // Token: 0x04001B14 RID: 6932
362 [JsonProperty]
363 public int maxZ;
364
365 // Token: 0x04001B15 RID: 6933
366 [JsonProperty]
367 public int Size;
368}
Definition Cell.cs:10
Definition Point.cs:11
Definition Thing.cs:10