Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
AM_Build.cs
Go to the documentation of this file.
1using System;
2using UnityEngine;
3
4public class AM_Build : AM_Designation<TaskBuild>
5{
6 public int bridgeHeight;
7
8 public int altitude;
9
10 public Recipe recipe;
11
13
14 public Func<ButtonGrid> button;
15
17
18 public override BuildMenu.Mode buildMenuMode => BuildMenu.Mode.Build;
19
20 public override int CostMoney
21 {
22 get
23 {
24 if (recipe == null || recipe.UseStock)
25 {
26 return 0;
27 }
28 return 10;
29 }
30 }
31
32 public override bool IsBuildMode => true;
33
34 public override string idSound => null;
35
36 public override bool AllowAutoClick
37 {
38 get
39 {
40 if (recipe != null)
41 {
42 return !(recipe is RecipeCard);
43 }
44 return false;
45 }
46 }
47
48 public override bool AllowMiddleClickFunc => false;
49
50 public override int SelectorHeight => bridgeHeight;
51
53
55
57
58 public override int hitW => recipe?.W ?? 1;
59
60 public override int hitH => recipe?.H ?? 1;
61
62 public int MaxAltitude
63 {
64 get
65 {
66 if (!IsRoofEditMode() || !(recipe.renderRow is SourceBlock.Row))
67 {
68 return recipe.MaxAltitude;
69 }
70 return 63;
71 }
72 }
73
74 public bool _IsRoofEditMode(Card c)
75 {
76 if (Input.GetKey(KeyCode.LeftAlt))
77 {
78 if (c != null)
79 {
80 return !c.trait.CanOnlyCarry;
81 }
82 return true;
83 }
84 return false;
85 }
86
87 public override bool IsRoofEditMode(Card c = null)
88 {
89 return _IsRoofEditMode(recipe?.Mold);
90 }
91
92 public override bool IsFillMode()
93 {
94 if (!recipe.IsThing && Input.GetKey(KeyCode.LeftControl))
95 {
96 return EClass.debug.godBuild;
97 }
98 return false;
99 }
100
101 public override int TopHeight(Point p)
102 {
104 }
105
107 {
108 if (p.detail?.designation is TaskBuild)
109 {
110 return HitResult.Warning;
111 }
112 return HitResult.Invalid;
113 }
114
115 public override MeshPass GetGuidePass(Point point)
116 {
117 if (!recipe.IsBlock)
118 {
120 }
122 }
123
124 public override bool ForcedInstaComplete(TaskBuild t)
125 {
127 }
128
129 public override void OnUpdateCursor()
130 {
131 SetCursorOnMap(CursorSystem.Build);
132 }
133
134 public override void OnActivate()
135 {
136 list = base.Designations.build;
137 base.OnActivate();
138 }
139
140 public override void OnDeactivate()
141 {
142 base.Summary.SetRecipe(null);
143 recipe = (mold.recipe = null);
144 houseBoard = null;
145 if ((bool)BuildMenu.Instance)
146 {
148 }
149 }
150
151 public override void OnCancel()
152 {
154 }
155
156 public void StartBuild(Recipe r, Func<ButtonGrid> _button)
157 {
158 recipe = r;
159 button = _button;
160 if (!base.IsActive)
161 {
162 Activate();
163 }
165 bridgeHeight = -1;
166 SetAltitude(0);
167 base.Summary.SetRecipe(r);
168 EClass.ui.hud.hint.Refresh();
169 }
170
171 public override void OnCreateMold(bool processing = false)
172 {
173 mold.recipe = (processing ? _recipe : recipe);
175 }
176
177 public override HitResult HitTest(Point point, Point start)
178 {
179 if (start != null)
180 {
181 mold.bridgeHeight = start.cell.bridgeHeight;
182 }
183 else
184 {
185 mold.bridgeHeight = point.cell.bridgeHeight;
186 }
187 if (recipe == null)
188 {
189 return HitResult.Default;
190 }
191 if (IsRoofEditMode())
192 {
193 return HitResult.Valid;
194 }
195 if (IsFillMode())
196 {
197 Cell cell = point.cell;
198 if (recipe.IsBridge)
199 {
200 if (cell._bridge != start.cell._bridge)
201 {
202 return HitResult.NoTarget;
203 }
204 return HitResult.Valid;
205 }
206 if (recipe.IsFloor)
207 {
208 if (cell._floor != start.cell._floor)
209 {
210 return HitResult.NoTarget;
211 }
212 return HitResult.Valid;
213 }
214 if (recipe.IsBlock)
215 {
216 if (cell._block != start.cell._block)
217 {
218 return HitResult.NoTarget;
219 }
220 return HitResult.Valid;
221 }
222 }
224 {
225 return HitResult.Invalid;
226 }
227 return base.HitTest(point, start);
228 }
229
230 public void FixBridge(Point point, Recipe recipe)
231 {
232 bridgeHeight = -1;
233 if (recipe.IsBridge)
234 {
235 bridgeHeight = (byte)((point.cell.bridgeHeight == 0) ? (point.cell.height + recipe.tileType.MinAltitude) : point.cell.bridgeHeight);
236 }
237 }
238
239 public override void OnRenderTile(Point point, HitResult result, int dir)
240 {
241 if (recipe == null)
242 {
243 return;
244 }
246 {
247 base.OnRenderTile(point, result, dir);
248 return;
249 }
250 if (EClass.screen.tileSelector.start == null)
251 {
252 FixBridge(point, recipe);
253 }
255 {
256 OnRenderTileFloor(point, result);
257 return;
258 }
259 if (result != HitResult.Valid && result != HitResult.Warning)
260 {
261 base.OnRenderTile(point, result, dir);
262 return;
263 }
264 if (bridgeHeight != -1)
265 {
266 Vector3 vector = point.Position();
267 EClass.screen.guide.passGuideFloor.Add(vector.x, vector.y, vector.z - 0.01f, (float)result);
268 }
269 int desiredDir = recipe.tileType.GetDesiredDir(point, recipe._dir);
270 if (desiredDir != -1)
271 {
272 dir = (recipe._dir = desiredDir);
273 }
274 bool main = !base.tileSelector.multisize || (base.tileSelector.firstInMulti && base.Summary.count == base.Summary.countValid);
275 recipe.OnRenderMarker(point, active: false, result, main, dir, bridgeHeight + ((!recipe.tileType.AltitudeAsDir || IsRoofEditMode()) ? altitude : 0));
276 }
277
278 public override void OnBeforeProcessTiles()
279 {
280 _recipe = recipe;
281 _recipe._dir = recipe._dir;
282 mold.dir = recipe._dir;
283 base.OnBeforeProcessTiles();
284 }
285
286 public override void OnProcessTiles(Point point, int dir)
287 {
288 if (dir != -1)
289 {
290 mold.dir = dir;
291 }
292 else
293 {
294 mold.dir = recipe._dir;
295 }
296 if (point.HasDesignation)
297 {
298 if (point.detail.designation is TaskBuild taskBuild && recipe.IsWallOrFence && taskBuild.recipe.IsWallOrFence && taskBuild.dir != dir)
299 {
300 mold.dir = (dir = 2);
301 }
302 point.detail?.designation.Destroy();
303 }
304 mold.bridgeHeight = bridgeHeight;
306 base.OnProcessTiles(point, dir);
307 }
308
309 public override void OnFinishProcessTiles()
310 {
311 base.OnFinishProcessTiles();
312 ButtonGrid buttonGrid = button();
313 if (recipe.UseStock)
314 {
315 Thing thing = recipe.ingredients[0].thing;
316 if (thing == null || thing.isDestroyed || thing.ExistsOnMap || thing.Num <= 0)
317 {
318 ActionMode.ignoreSound = true;
319 if ((bool)buttonGrid)
320 {
321 buttonGrid.selected = false;
322 buttonGrid.DoNormalTransition();
323 }
328 return;
329 }
330 }
331 if ((bool)buttonGrid)
332 {
333 buttonGrid.SetRecipe();
334 }
335 if (recipe.IsBridge)
336 {
337 SetAltitude(0);
338 }
339 }
340
341 public override void RotateUnderMouse()
342 {
343 if (recipe != null && recipe.CanRotate)
344 {
345 SE.Rotate();
346 recipe.Rotate();
347 }
348 }
349
350 public override void InputWheel(int wheel)
351 {
353 {
354 if (recipe.MaxAltitude > 0)
355 {
356 ModAltitude(wheel);
358 }
359 else
360 {
361 base.InputWheel(wheel);
362 }
363 }
364 }
365
366 public void ModAltitude(int a)
367 {
368 altitude += a;
369 if (altitude < (recipe.IsBridge ? (-10) : 0))
370 {
372 }
373 if (altitude > MaxAltitude)
374 {
375 altitude = (recipe.IsBridge ? (-10) : 0);
376 }
378 }
379
380 public void SetAltitude(int a)
381 {
382 if (mold == null)
383 {
385 }
386 altitude = (mold.altitude = a);
389 {
390 mold.dir = (recipe._dir = altitude);
391 }
392 }
393}
HitResult
Definition: HitResult.cs:2
override bool ForcedInstaComplete(TaskBuild t)
Definition: AM_Build.cs:124
int altitude
Definition: AM_Build.cs:8
override BaseTileSelector.HitType hitType
Definition: AM_Build.cs:52
TraitHouseBoard houseBoard
Definition: AM_Build.cs:16
override bool AllowMiddleClickFunc
Definition: AM_Build.cs:48
bool _IsRoofEditMode(Card c)
Definition: AM_Build.cs:74
override HitResult HitResultOnDesignation(Point p)
Definition: AM_Build.cs:106
override void OnCancel()
Definition: AM_Build.cs:151
override void RotateUnderMouse()
Definition: AM_Build.cs:341
Recipe _recipe
Definition: AM_Build.cs:12
override int hitW
Definition: AM_Build.cs:58
override void OnFinishProcessTiles()
Definition: AM_Build.cs:309
void StartBuild(Recipe r, Func< ButtonGrid > _button)
Definition: AM_Build.cs:156
Func< ButtonGrid > button
Definition: AM_Build.cs:14
int bridgeHeight
Definition: AM_Build.cs:6
override HitResult HitTest(Point point, Point start)
Definition: AM_Build.cs:177
Recipe recipe
Definition: AM_Build.cs:10
override string idSound
Definition: AM_Build.cs:34
override void OnProcessTiles(Point point, int dir)
Definition: AM_Build.cs:286
override int TopHeight(Point p)
Definition: AM_Build.cs:101
override bool AllowAutoClick
Definition: AM_Build.cs:37
override bool IsFillMode()
Definition: AM_Build.cs:92
override void OnBeforeProcessTiles()
Definition: AM_Build.cs:278
override void OnActivate()
Definition: AM_Build.cs:134
override void OnDeactivate()
Definition: AM_Build.cs:140
void ModAltitude(int a)
Definition: AM_Build.cs:366
int MaxAltitude
Definition: AM_Build.cs:63
override bool IsRoofEditMode(Card c=null)
Definition: AM_Build.cs:87
override int SelectorHeight
Definition: AM_Build.cs:50
override void OnCreateMold(bool processing=false)
Definition: AM_Build.cs:171
override void OnUpdateCursor()
Definition: AM_Build.cs:129
override BaseTileSelector.BoxType boxType
Definition: AM_Build.cs:56
override MeshPass GetGuidePass(Point point)
Definition: AM_Build.cs:115
override BaseTileSelector.SelectType selectType
Definition: AM_Build.cs:54
override void OnRenderTile(Point point, HitResult result, int dir)
Definition: AM_Build.cs:239
void FixBridge(Point point, Recipe recipe)
Definition: AM_Build.cs:230
override void InputWheel(int wheel)
Definition: AM_Build.cs:350
override int hitH
Definition: AM_Build.cs:60
void SetAltitude(int a)
Definition: AM_Build.cs:380
override int CostMoney
Definition: AM_Build.cs:21
override BuildMenu.Mode buildMenuMode
Definition: AM_Build.cs:18
override bool IsBuildMode
Definition: AM_Build.cs:32
void CreateNewMold(bool processing=false)
void Activate(Thing t)
static AM_Inspect Inspect
Definition: ActionMode.cs:23
ScreenGuide guide
BaseTileSelector tileSelector
void RefreshMouseInfo(bool force=false)
static BuildMenu Instance
Definition: BuildMenu.cs:77
void Unselect()
Definition: BuildMenu.cs:441
void RefreshCategory(string cat)
Definition: BuildMenu.cs:491
void SetRecipe()
Definition: ButtonGrid.cs:533
Definition: Card.cs:11
bool isDestroyed
Definition: Card.cs:71
bool ExistsOnMap
Definition: Card.cs:1961
Trait trait
Definition: Card.cs:49
int Num
Definition: Card.cs:154
TaskDesignation designation
Definition: CellDetail.cs:19
Definition: Cell.cs:7
byte _block
Definition: Cell.cs:30
byte _bridge
Definition: Cell.cs:46
byte _floor
Definition: Cell.cs:34
byte height
Definition: Cell.cs:72
byte bridgeHeight
Definition: Cell.cs:74
bool godBuild
Definition: CoreDebug.cs:303
static CursorInfo Build
Definition: CursorSystem.cs:70
Definition: EClass.cs:5
static BaseGameScreen screen
Definition: EClass.cs:32
static Player player
Definition: EClass.cs:12
static CoreDebug debug
Definition: EClass.cs:48
static UI ui
Definition: EClass.cs:16
Definition: EInput.cs:8
static bool isCtrlDown
Definition: EInput.cs:263
static bool isAltDown
Definition: EInput.cs:265
void Add(Point point, float tile=0f, float color=0f)
Definition: MeshPass.cs:122
string lastBuildCategory
Definition: Player.cs:26
Pref pref
Definition: Player.cs:814
Definition: Point.cs:9
ref Vector3 Position(int height)
Definition: Point.cs:524
bool HasDesignation
Definition: Point.cs:83
CellDetail detail
Definition: Point.cs:71
bool Equals(int _x, int _z)
Definition: Point.cs:924
Cell cell
Definition: Point.cs:51
Definition: Recipe.cs:7
virtual void OnRenderMarker(Point point, bool active, HitResult result, bool main, int dir, int bridgeHeight)
Definition: Recipe.cs:688
virtual bool CanRotate
Definition: Recipe.cs:282
virtual void Rotate()
Definition: Recipe.cs:825
virtual TileType tileType
Definition: Recipe.cs:198
List< Ingredient > ingredients
Definition: Recipe.cs:164
virtual bool IsFloorOrBridge
Definition: Recipe.cs:209
virtual bool IsBlock
Definition: Recipe.cs:229
virtual int H
Definition: Recipe.cs:252
int MaxAltitude
Definition: Recipe.cs:212
virtual bool IsThing
Definition: Recipe.cs:235
bool IsFloor
Definition: Recipe.cs:225
bool IsWallOrFence
Definition: Recipe.cs:231
bool UseStock
Definition: Recipe.cs:167
int _dir
Definition: Recipe.cs:175
bool IsBridge
Definition: Recipe.cs:233
BaseTileSelector.BoxType GetBoxType()
Definition: Recipe.cs:448
virtual void OnChangeAltitude(int a)
Definition: Recipe.cs:821
virtual int W
Definition: Recipe.cs:240
MeshPass passGuideBlock
Definition: ScreenGuide.cs:5
MeshPass passGuideFloor
Definition: ScreenGuide.cs:7
Status Destroy()
Definition: Task.cs:31
Definition: Thing.cs:8
virtual BaseTileSelector.HitType HitType
Definition: TileType.cs:263
virtual BaseTileSelector.SelectType SelectType
Definition: TileType.cs:259
virtual bool AltitudeAsDir
Definition: TileType.cs:205
virtual int GetDesiredDir(Point p, int d)
Definition: TileType.cs:362
virtual int MinAltitude
Definition: TileType.cs:201
virtual bool CanInstaComplete
Definition: TileType.cs:199
virtual bool CanOnlyCarry
Definition: Trait.cs:283