Elin Decompiled Documentation EA 23.344.1 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 {
103 if (!recipe.IsThing)
104 {
105 return 1 + bridgeHeight + ((!recipe.tileType.AltitudeAsDir) ? altitude : 0);
106 }
107 if (altitude != 0)
108 {
109 return altitude;
110 }
111 return 0;
112 }
113
115 {
116 if (p.detail?.designation is TaskBuild)
117 {
118 return HitResult.Warning;
119 }
120 return HitResult.Invalid;
121 }
122
123 public override MeshPass GetGuidePass(Point point)
124 {
125 if (!recipe.IsBlock)
126 {
128 }
130 }
131
132 public override bool ForcedInstaComplete(TaskBuild t)
133 {
135 }
136
137 public override void OnUpdateCursor()
138 {
139 SetCursorOnMap(CursorSystem.Build);
140 }
141
142 public override void OnActivate()
143 {
144 list = base.Designations.build;
145 base.OnActivate();
146 }
147
148 public override void OnDeactivate()
149 {
150 base.Summary.SetRecipe(null);
151 recipe = (mold.recipe = null);
152 houseBoard = null;
153 if ((bool)BuildMenu.Instance)
154 {
156 }
157 }
158
159 public override void OnCancel()
160 {
162 }
163
164 public void StartBuild(Recipe r, Func<ButtonGrid> _button)
165 {
166 recipe = r;
167 button = _button;
168 if (!base.IsActive)
169 {
170 Activate();
171 }
173 bridgeHeight = -1;
175 base.Summary.SetRecipe(r);
176 EClass.ui.hud.hint.Refresh();
177 }
178
179 public override void OnCreateMold(bool processing = false)
180 {
181 mold.recipe = (processing ? _recipe : recipe);
183 }
184
185 public override HitResult HitTest(Point point, Point start)
186 {
187 if (start != null)
188 {
189 mold.bridgeHeight = start.cell.bridgeHeight;
190 }
191 else
192 {
193 mold.bridgeHeight = point.cell.bridgeHeight;
194 }
195 if (recipe == null)
196 {
197 return HitResult.Default;
198 }
199 if (IsRoofEditMode())
200 {
201 return HitResult.Valid;
202 }
203 if (IsFillMode())
204 {
205 Cell cell = point.cell;
206 if (recipe.IsBridge)
207 {
208 if (cell._bridge != start.cell._bridge)
209 {
210 return HitResult.NoTarget;
211 }
212 return HitResult.Valid;
213 }
214 if (recipe.IsFloor)
215 {
216 if (cell._floor != start.cell._floor)
217 {
218 return HitResult.NoTarget;
219 }
220 return HitResult.Valid;
221 }
222 if (recipe.IsBlock)
223 {
224 if (cell._block != start.cell._block)
225 {
226 return HitResult.NoTarget;
227 }
228 return HitResult.Valid;
229 }
230 }
232 {
233 return HitResult.Invalid;
234 }
235 return base.HitTest(point, start);
236 }
237
238 public void FixBridge(Point point, Recipe recipe)
239 {
240 bridgeHeight = -1;
241 if (recipe.IsBridge)
242 {
243 bridgeHeight = (byte)((point.cell.bridgeHeight == 0) ? (point.cell.height + recipe.tileType.MinBridgeAltitude) : point.cell.bridgeHeight);
244 }
245 }
246
247 public override void OnRenderTile(Point point, HitResult result, int dir)
248 {
249 if (recipe == null)
250 {
251 return;
252 }
254 {
255 base.OnRenderTile(point, result, dir);
256 return;
257 }
258 if (EClass.screen.tileSelector.start == null)
259 {
260 FixBridge(point, recipe);
261 }
263 {
264 OnRenderTileFloor(point, result);
265 return;
266 }
267 if (result != HitResult.Valid && result != HitResult.Warning)
268 {
269 base.OnRenderTile(point, result, dir);
270 return;
271 }
272 if (bridgeHeight != -1)
273 {
274 Vector3 vector = point.Position();
275 EClass.screen.guide.passGuideFloor.Add(vector.x, vector.y, vector.z - 0.01f, (float)result);
276 }
277 int desiredDir = recipe.tileType.GetDesiredDir(point, recipe._dir);
278 if (desiredDir != -1)
279 {
280 dir = (recipe._dir = desiredDir);
281 }
282 bool main = !base.tileSelector.multisize || (base.tileSelector.firstInMulti && base.Summary.count == base.Summary.countValid);
283 recipe.OnRenderMarker(point, active: false, result, main, dir, bridgeHeight + ((!recipe.tileType.AltitudeAsDir || IsRoofEditMode()) ? altitude : 0));
284 }
285
286 public override void OnBeforeProcessTiles()
287 {
288 _recipe = recipe;
289 _recipe._dir = recipe._dir;
290 mold.dir = recipe._dir;
291 base.OnBeforeProcessTiles();
292 }
293
294 public override void OnProcessTiles(Point point, int dir)
295 {
296 if (dir != -1)
297 {
298 mold.dir = dir;
299 }
300 else
301 {
302 mold.dir = recipe._dir;
303 }
304 if (point.HasDesignation)
305 {
306 if (point.detail.designation is TaskBuild taskBuild && recipe.IsWallOrFence && taskBuild.recipe.IsWallOrFence && taskBuild.dir != dir)
307 {
308 mold.dir = (dir = 2);
309 }
310 point.detail?.designation.Destroy();
311 }
312 mold.bridgeHeight = bridgeHeight;
314 base.OnProcessTiles(point, dir);
315 }
316
317 public override void OnFinishProcessTiles()
318 {
319 base.OnFinishProcessTiles();
320 ButtonGrid buttonGrid = button();
321 if (recipe.UseStock)
322 {
323 Thing thing = recipe.ingredients[0].thing;
324 if (thing == null || thing.isDestroyed || thing.ExistsOnMap || thing.Num <= 0)
325 {
326 ActionMode.ignoreSound = true;
327 if ((bool)buttonGrid)
328 {
329 buttonGrid.selected = false;
330 buttonGrid.DoNormalTransition();
331 }
336 return;
337 }
338 }
339 if ((bool)buttonGrid)
340 {
341 buttonGrid.SetRecipe();
342 }
343 if (recipe.IsBridge)
344 {
345 SetAltitude(0);
346 }
347 }
348
349 public override void RotateUnderMouse()
350 {
351 if (recipe != null && recipe.CanRotate)
352 {
353 SE.Rotate();
354 recipe.Rotate();
355 }
356 }
357
358 public override void InputWheel(int wheel)
359 {
360 if (recipe.MaxAltitude > 0)
361 {
362 ModAltitude(wheel);
364 }
365 else
366 {
367 base.InputWheel(wheel);
368 }
369 }
370
371 public void ModAltitude(int a)
372 {
373 altitude += a;
375 {
377 }
378 if (altitude > MaxAltitude)
379 {
380 altitude = (recipe.IsBridge ? (-10) : 0);
381 }
383 }
384
385 public void SetAltitude(int a)
386 {
387 if (mold == null)
388 {
390 }
391 altitude = (mold.altitude = a);
394 {
395 mold.dir = (recipe._dir = altitude);
396 }
397 }
398}
HitResult
Definition: HitResult.cs:2
override bool ForcedInstaComplete(TaskBuild t)
Definition: AM_Build.cs:132
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:114
override void OnCancel()
Definition: AM_Build.cs:159
override void RotateUnderMouse()
Definition: AM_Build.cs:349
Recipe _recipe
Definition: AM_Build.cs:12
override int hitW
Definition: AM_Build.cs:58
override void OnFinishProcessTiles()
Definition: AM_Build.cs:317
void StartBuild(Recipe r, Func< ButtonGrid > _button)
Definition: AM_Build.cs:164
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:185
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:294
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:286
override void OnActivate()
Definition: AM_Build.cs:142
override void OnDeactivate()
Definition: AM_Build.cs:148
void ModAltitude(int a)
Definition: AM_Build.cs:371
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:179
override void OnUpdateCursor()
Definition: AM_Build.cs:137
override BaseTileSelector.BoxType boxType
Definition: AM_Build.cs:56
override MeshPass GetGuidePass(Point point)
Definition: AM_Build.cs:123
override BaseTileSelector.SelectType selectType
Definition: AM_Build.cs:54
override void OnRenderTile(Point point, HitResult result, int dir)
Definition: AM_Build.cs:247
void FixBridge(Point point, Recipe recipe)
Definition: AM_Build.cs:238
override void InputWheel(int wheel)
Definition: AM_Build.cs:358
override int hitH
Definition: AM_Build.cs:60
void SetAltitude(int a)
Definition: AM_Build.cs:385
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:448
void RefreshCategory(string cat)
Definition: BuildMenu.cs:498
void SetRecipe()
Definition: ButtonGrid.cs:540
Definition: Card.cs:11
bool isDestroyed
Definition: Card.cs:78
bool ExistsOnMap
Definition: Card.cs:2137
Trait trait
Definition: Card.cs:54
int Num
Definition: Card.cs:161
TaskDesignation designation
Definition: CellDetail.cs:19
Definition: Cell.cs:7
int _floor
Definition: Cell.cs:46
byte height
Definition: Cell.cs:94
byte bridgeHeight
Definition: Cell.cs:96
int _bridge
Definition: Cell.cs:54
int _block
Definition: Cell.cs:42
bool godBuild
Definition: CoreDebug.cs:320
static CursorInfo Build
Definition: CursorSystem.cs:70
Definition: EClass.cs:6
static BaseGameScreen screen
Definition: EClass.cs:33
static Player player
Definition: EClass.cs:13
static CoreDebug debug
Definition: EClass.cs:49
static UI ui
Definition: EClass.cs:17
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:1083
Definition: Point.cs:9
ref Vector3 Position(int height)
Definition: Point.cs:553
bool HasDesignation
Definition: Point.cs:83
CellDetail detail
Definition: Point.cs:71
bool Equals(int _x, int _z)
Definition: Point.cs:966
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:735
virtual bool CanRotate
Definition: Recipe.cs:299
virtual void Rotate()
Definition: Recipe.cs:877
virtual TileType tileType
Definition: Recipe.cs:215
virtual RenderRow renderRow
Definition: Recipe.cs:210
List< Ingredient > ingredients
Definition: Recipe.cs:181
virtual bool IsFloorOrBridge
Definition: Recipe.cs:226
virtual bool IsBlock
Definition: Recipe.cs:246
virtual int H
Definition: Recipe.cs:269
int MaxAltitude
Definition: Recipe.cs:229
virtual bool IsThing
Definition: Recipe.cs:252
bool IsFloor
Definition: Recipe.cs:242
bool IsWallOrFence
Definition: Recipe.cs:248
bool UseStock
Definition: Recipe.cs:184
int _dir
Definition: Recipe.cs:192
bool IsBridge
Definition: Recipe.cs:250
BaseTileSelector.BoxType GetBoxType()
Definition: Recipe.cs:473
virtual void OnChangeAltitude(int a)
Definition: Recipe.cs:873
virtual int W
Definition: Recipe.cs:257
virtual SourcePref GetPref()
Definition: RenderRow.cs:373
MeshPass passGuideBlock
Definition: ScreenGuide.cs:5
MeshPass passGuideFloor
Definition: ScreenGuide.cs:7
int defaultAltitude
Definition: SourcePref.cs:305
Status Destroy()
Definition: Task.cs:31
Definition: Thing.cs:8
virtual BaseTileSelector.HitType HitType
Definition: TileType.cs:297
virtual BaseTileSelector.SelectType SelectType
Definition: TileType.cs:293
virtual int MinBridgeAltitude
Definition: TileType.cs:213
virtual bool AltitudeAsDir
Definition: TileType.cs:239
virtual int GetDesiredDir(Point p, int d)
Definition: TileType.cs:400
virtual int MinAltitude
Definition: TileType.cs:216
virtual bool CanInstaComplete
Definition: TileType.cs:211
virtual bool CanOnlyCarry
Definition: Trait.cs:305