Elin Modding Docs Doc
Loading...
Searching...
No Matches
Crawler.cs
1using System;
2using System.Collections.Generic;
3using UnityEngine;
4
5// Token: 0x0200065D RID: 1629
6public class Crawler : EScriptable
7{
8 // Token: 0x06002DC6 RID: 11718 RVA: 0x001009FC File Offset: 0x000FEBFC
9 public bool CrawlUntil(Map map, Func<Point> onStart, int tries, Func<Crawler.Result, bool> canComplete, Action onFail = null)
10 {
11 if (tries <= 0)
12 {
13 return false;
14 }
15 for (int i = 0; i < tries; i++)
16 {
17 bool flag = false;
18 for (int j = 0; j < 100; j++)
19 {
20 Point point = onStart();
21 Crawler.StartType startType = this.startType;
22 if (startType != Crawler.StartType.Surface)
23 {
24 if (startType == Crawler.StartType.Block)
25 {
26 if (point.sourceBlock.tileType.IsFullBlock && point.Installed == null)
27 {
28 flag = true;
29 }
30 }
31 }
32 else if (!point.HasBlock)
33 {
34 flag = true;
35 }
36 }
37 if (flag)
38 {
39 Crawler.Result arg = this.Crawl(map, onStart(), null);
40 if (canComplete(arg))
41 {
42 if (i > 0)
43 {
44 Debug.Log("CrawlUntil Complete:" + i.ToString());
45 }
46 return true;
47 }
48 }
49 }
50 if (onFail != null)
51 {
52 Debug.Log("CrawlUntil Fail" + tries.ToString());
53 if (onFail != null)
54 {
55 onFail();
56 }
57 }
58 return false;
59 }
60
61 // Token: 0x06002DC7 RID: 11719 RVA: 0x00100AD4 File Offset: 0x000FECD4
62 public void Crawl(Map map)
63 {
64 int num = 0;
65 while ((float)num < map.sizeModifier * (float)this.repeat + 1f)
66 {
67 this.Crawl(map, map.GetRandomSurface(false, true, false), delegate(Point p)
68 {
69 p.cell.biome.Populate(p, false);
70 });
71 num++;
72 }
73 }
74
75 // Token: 0x06002DC8 RID: 11720 RVA: 0x00100B34 File Offset: 0x000FED34
76 public Crawler.Result Crawl(Map map, Point _start, Action<Point> onNewVisit = null)
77 {
78 if (this.members.Count == 0)
79 {
80 for (int i = 0; i < this.member; i++)
81 {
82 this.members.Add(new Crawler.Member());
83 }
84 }
85 Point point = _start.Copy();
86 point.Clamp(false);
87 Crawler.Result result = new Crawler.Result();
88 BiomeProfile biome = point.cell.biome;
89 Crawler.sync++;
90 this.Size = map.Size;
91 int num = this.skipBorder ? 2 : 0;
92 int num2 = this.skipBorder ? (this.Size - 2) : this.Size;
93 if (Crawler.mapping.Length != this.Size)
94 {
95 Crawler.mapping = new int[map.Size, map.Size];
96 }
97 foreach (Crawler.Member member in this.members)
98 {
99 member.pos.Set(point);
100 member.life = this.life;
101 }
102 for (int j = 0; j < this.life; j++)
103 {
104 for (int k = 0; k < this.members.Count; k++)
105 {
106 Crawler.Member member2 = this.members[k];
107 int num3 = EScriptable.rnd(3) - 1;
108 int num4 = EScriptable.rnd(3) - 1;
109 int num5 = member2.pos.x + num3;
110 int num6 = member2.pos.z + num4;
111 if (point.Distance(num5, num6) <= this.radius && num5 >= num && num6 >= num && num5 < num2 && num6 < num2)
112 {
113 Cell cell = map.cells[num5, num6];
114 if (!this.stickToStartBiome || !(cell.biome != biome))
115 {
116 Crawler.MoveType moveType = this.moveType;
117 if (moveType != Crawler.MoveType.Surface)
118 {
119 if (moveType == Crawler.MoveType.Block)
120 {
121 if (cell._block == 0 || !cell.sourceBlock.tileType.IsFullBlock || cell.Installed != null)
122 {
123 goto IL_269;
124 }
125 }
126 }
127 else
128 {
129 if (cell._block != 0)
130 {
131 goto IL_269;
132 }
133 if (cell.IsTopWater)
134 {
135 goto IL_269;
136 }
137 }
138 member2.pos.Set(num5, num6);
139 if (Crawler.mapping[num5, num6] != Crawler.sync)
140 {
141 Crawler.mapping[num5, num6] = Crawler.sync;
142 Point point2 = member2.pos.Copy();
143 result.points.Add(point2);
144 if (onNewVisit != null)
145 {
146 onNewVisit(point2);
147 }
148 }
149 }
150 }
151 IL_269:;
152 }
153 }
154 return result;
155 }
156
157 // Token: 0x06002DC9 RID: 11721 RVA: 0x00100DE8 File Offset: 0x000FEFE8
158 public static Crawler Create(string id)
159 {
160 return ResourceCache.Load<Crawler>("World/Map/Crawler/crawler " + id);
161 }
162
163 // Token: 0x040019E4 RID: 6628
164 public static int[,] mapping = new int[0, 0];
165
166 // Token: 0x040019E5 RID: 6629
167 public static int sync;
168
169 // Token: 0x040019E6 RID: 6630
170 public int life;
171
172 // Token: 0x040019E7 RID: 6631
173 public int member;
174
175 // Token: 0x040019E8 RID: 6632
176 public int radius;
177
178 // Token: 0x040019E9 RID: 6633
179 public int repeat;
180
181 // Token: 0x040019EA RID: 6634
182 public bool stickToStartBiome;
183
184 // Token: 0x040019EB RID: 6635
185 public bool skipBorder;
186
187 // Token: 0x040019EC RID: 6636
188 public Crawler.StartType startType;
189
190 // Token: 0x040019ED RID: 6637
191 public Crawler.MoveType moveType;
192
193 // Token: 0x040019EE RID: 6638
194 [NonSerialized]
195 public int Size;
196
197 // Token: 0x040019EF RID: 6639
198 [NonSerialized]
199 public List<Crawler.Member> members = new List<Crawler.Member>();
200
201 // Token: 0x02000BD9 RID: 3033
202 public class Member
203 {
204 // Token: 0x04002F61 RID: 12129
205 public Point pos = new Point();
206
207 // Token: 0x04002F62 RID: 12130
208 public int life;
209 }
210
211 // Token: 0x02000BDA RID: 3034
212 public class Result
213 {
214 // Token: 0x04002F63 RID: 12131
215 public List<Point> points = new List<Point>();
216 }
217
218 // Token: 0x02000BDB RID: 3035
219 public enum MoveType
220 {
221 // Token: 0x04002F65 RID: 12133
222 Surface,
223 // Token: 0x04002F66 RID: 12134
224 Block
225 }
226
227 // Token: 0x02000BDC RID: 3036
228 public enum StartType
229 {
230 // Token: 0x04002F68 RID: 12136
231 Surface,
232 // Token: 0x04002F69 RID: 12137
233 Block
234 }
235}
Definition Cell.cs:10
Definition Map.cs:15
Definition Point.cs:11