Description:
Add bulldozer tool.
Adds a bulldozer tool for removing structures. For the moment, works like
dezone, i.e., it can delete entire areas rather than working on one area at a
time.
Commit status:
[Not Reviewed]
References:
Diff options:
Comments:
0 Commit comments
0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
@@ -9,7 +9,8 | |||||
|
9 | None, |
|
9 | None, |
|
10 | Preserve, |
|
10 | Preserve, |
|
11 | Dezone, |
|
11 | Dezone, |
|
12 | Tower |
|
12 | Tower, |
|
|
13 | Bulldozer | ||
|
13 |
|
14 | ||
|
14 | } |
|
15 | } |
|
15 |
|
16 |
@@ -52,7 +52,7 | |||||
|
52 | } |
|
52 | } |
|
53 | } |
|
53 | } |
|
54 |
|
54 | ||
|
55 | private void clear(Vector2[] clear_squares) { |
|
55 | private void clear_areas(Vector2[] clear_squares) { |
|
56 | List<Entity> entities = new List<Entity>(); |
|
56 | List<Entity> entities = new List<Entity>(); |
|
57 | foreach(ref readonly var entity in ReadEntities<AreaComponent>() ) { |
|
57 | foreach(ref readonly var entity in ReadEntities<AreaComponent>() ) { |
|
58 | var squares = GetComponent<AreaComponent>(entity).squares; |
|
58 | var squares = GetComponent<AreaComponent>(entity).squares; |
@@ -80,6 +80,24 | |||||
|
80 | } |
|
80 | } |
|
81 | } |
|
81 | } |
|
82 |
|
82 | ||
|
|
83 | private void clear_structures(Vector2[] clear_squares) { | ||
|
|
84 | List<Entity> entities = new List<Entity>(); | ||
|
|
85 | foreach(ref readonly var entity in ReadEntities<StructureComponent>() ) { | ||
|
|
86 | var square = GetComponent<PointComponent>(entity).Square; | ||
|
|
87 | |||
|
|
88 | foreach(var clear_square in clear_squares) { | ||
|
|
89 | if(square == clear_square) { | ||
|
|
90 | entities.Add(entity); | ||
|
|
91 | } | ||
|
|
92 | } | ||
|
|
93 | } | ||
|
|
94 | |||
|
|
95 | foreach(var entity in entities) { | ||
|
|
96 | Logging.Debug("Deleting entity."); | ||
|
|
97 | Destroy(entity); | ||
|
|
98 | } | ||
|
|
99 | } | ||
|
|
100 | |||
|
83 | public List<Vector2> GetOccupied() { |
|
101 | public List<Vector2> GetOccupied() { |
|
84 | List<Vector2> occupied = new List<Vector2>(); |
|
102 | List<Vector2> occupied = new List<Vector2>(); |
|
85 |
|
103 | ||
@@ -165,7 +183,6 | |||||
|
165 | } |
|
183 | } |
|
166 | } |
|
184 | } |
|
167 | else if (statuses.ContainsKey(Tool.Dezone) && statuses[Tool.Dezone]) { |
|
185 | else if (statuses.ContainsKey(Tool.Dezone) && statuses[Tool.Dezone]) { |
|
168 |
|
|||
|
169 | foreach (ref readonly var message in ReadMessages<SpawnSelection>()) |
|
186 | foreach (ref readonly var message in ReadMessages<SpawnSelection>()) |
|
170 | { |
|
187 | { |
|
171 | if (message.Start.X >= 0 && message.Start.X < this.Map.MapWidth |
|
188 | if (message.Start.X >= 0 && message.Start.X < this.Map.MapWidth |
@@ -188,7 +205,7 | |||||
|
188 | } |
|
205 | } |
|
189 | else if(message.Type == AdjustmentType.Complete) { |
|
206 | else if(message.Type == AdjustmentType.Complete) { |
|
190 | var squares = GetComponent<AreaComponent>(entity).squares; |
|
207 | var squares = GetComponent<AreaComponent>(entity).squares; |
|
191 | clear(squares); |
|
208 | clear_areas(squares); |
|
192 | } |
|
209 | } |
|
193 | else { |
|
210 | else { |
|
194 | var area = GetComponent<AreaComponent>(entity); |
|
211 | var area = GetComponent<AreaComponent>(entity); |
@@ -233,7 +250,7 | |||||
|
233 | } |
|
250 | } |
|
234 |
|
251 | ||
|
235 | foreach (ref readonly var message in ReadMessages<AdjustSelection>()) { |
|
252 | foreach (ref readonly var message in ReadMessages<AdjustSelection>()) { |
|
236 |
foreach (ref readonly |
|
253 | foreach (ref readonly var entity in ReadEntities<SelectedComponent>()) { |
|
237 | var selection = GetComponent<SelectedComponent>(entity); |
|
254 | var selection = GetComponent<SelectedComponent>(entity); |
|
238 |
|
255 | ||
|
239 | if (selection.Type == SelectionType.Area |
|
256 | if (selection.Type == SelectionType.Area |
@@ -241,7 +258,7 | |||||
|
241 | if(message.Type == AdjustmentType.Clear) { |
|
258 | if(message.Type == AdjustmentType.Clear) { |
|
242 | Destroy(entity); |
|
259 | Destroy(entity); |
|
243 | } |
|
260 | } |
|
244 | else if(message.Type == AdjustmentType.Complete) { |
|
261 | else if (message.Type == AdjustmentType.Complete) { |
|
245 | var point = GetComponent<PointComponent>(entity); |
|
262 | var point = GetComponent<PointComponent>(entity); |
|
246 | var structure_entity = CreateEntity(); |
|
263 | var structure_entity = CreateEntity(); |
|
247 | var cell = this.Map.cells[(int)point.Square.X][(int)point.Square.Y]; |
|
264 | var cell = this.Map.cells[(int)point.Square.X][(int)point.Square.Y]; |
@@ -251,7 +268,7 | |||||
|
251 |
|
268 | ||
|
252 | AddComponent(structure_entity, new PointComponent {Square = point.Square, |
|
269 | AddComponent(structure_entity, new PointComponent {Square = point.Square, |
|
253 | Tool = point.Tool} ); |
|
270 | Tool = point.Tool} ); |
|
254 |
AddComponent(structure_entity, |
|
271 | AddComponent(structure_entity, |
|
255 | new StructureComponent { Structure = Structure.Tower}); |
|
272 | new StructureComponent { Structure = Structure.Tower}); |
|
256 | Destroy(entity); |
|
273 | Destroy(entity); |
|
257 | SendMessage(new PlaySoundMessage { SoundName = "ConstructionShort" }); |
|
274 | SendMessage(new PlaySoundMessage { SoundName = "ConstructionShort" }); |
@@ -270,6 +287,53 | |||||
|
270 | } |
|
287 | } |
|
271 | } |
|
288 | } |
|
272 | } |
|
289 | } |
|
|
290 | |||
|
|
291 | else if ((statuses.ContainsKey(Tool.Bulldozer) && statuses[Tool.Bulldozer])) { | ||
|
|
292 | foreach (ref readonly var message in ReadMessages<SpawnSelection>()) | ||
|
|
293 | { | ||
|
|
294 | if (message.Start.X >= 0 && message.Start.X < this.Map.MapWidth | ||
|
|
295 | && message.Start.Y >= 0 && message.Start.Y < this.Map.MapHeight) { | ||
|
|
296 | var entity = CreateEntity(); | ||
|
|
297 | |||
|
|
298 | AddComponent(entity, new AreaComponent { squares = new[] {message.Start}, | ||
|
|
299 | Tool = Tool.Bulldozer }); | ||
|
|
300 | AddComponent(entity, new SelectedComponent { selected = true, Type= SelectionType.Area}); | ||
|
|
301 | } | ||
|
|
302 | } | ||
|
|
303 | |||
|
|
304 | foreach (ref readonly var message in ReadMessages<AdjustSelection>()) { | ||
|
|
305 | foreach (ref readonly var entity in ReadEntities<SelectedComponent>()) { | ||
|
|
306 | var selection = GetComponent<SelectedComponent>(entity); | ||
|
|
307 | if(selection.Type == SelectionType.Area | ||
|
|
308 | && selection.selected) { | ||
|
|
309 | if (message.Type == AdjustmentType.Clear) { | ||
|
|
310 | Destroy(entity); | ||
|
|
311 | } | ||
|
|
312 | else if (message.Type == AdjustmentType.Complete) { | ||
|
|
313 | var squares = GetComponent<AreaComponent>(entity).squares; | ||
|
|
314 | clear_structures(squares); | ||
|
|
315 | Destroy(entity); //Dezone destroys itself, so it doesn't need this command. | ||
|
|
316 | } | ||
|
|
317 | else { | ||
|
|
318 | var area = GetComponent<AreaComponent>(entity); | ||
|
|
319 | |||
|
|
320 | var newSquares = new List<Vector2>(); | ||
|
|
321 | |||
|
|
322 | var end_x = MathUtils.Clamp(message.End.X, 0.0f, this.Map.MapWidth); | ||
|
|
323 | var end_y = MathUtils.Clamp(message.End.Y, 0.0f, this.Map.MapHeight); | ||
|
|
324 | |||
|
|
325 | foreach (var i in step_until(area.squares[0].X, end_x)) { | ||
|
|
326 | foreach (var j in step_until(area.squares[0].Y, end_y)) { | ||
|
|
327 | var newSquare = new Vector2(i, j); | ||
|
|
328 | newSquares.Add(newSquare); | ||
|
|
329 | } | ||
|
|
330 | } | ||
|
|
331 | SetComponent(entity, new AreaComponent { squares = newSquares.ToArray(), Tool = area.Tool}); | ||
|
|
332 | } | ||
|
|
333 | } | ||
|
|
334 | } | ||
|
|
335 | } | ||
|
|
336 | } | ||
|
273 | } |
|
337 | } |
|
274 | } |
|
338 | } |
|
275 | } |
|
339 | } |
@@ -99,7 +99,7 | |||||
|
99 | ImGui.Text(header); |
|
99 | ImGui.Text(header); |
|
100 |
|
100 | ||
|
101 |
|
101 | ||
|
102 | var dimensions = ImGui.CalcTextSize("X Tower X Preserve X Dezone | X Graph X Contracts $ Budget X Forest X News X | Pause 1 2 3 4 5") ; |
|
102 | var dimensions = ImGui.CalcTextSize("X Tower X Preserve X Dezone X Bulldozer | X Graph X Contracts $ Budget X Forest X News X | Pause 1 2 3 4 5") ; |
|
103 |
|
103 | ||
|
104 | // ImGui.SetCursorPosX(width - 520); |
|
104 | // ImGui.SetCursorPosX(width - 520); |
|
105 | // Add 12 pixels for each button, plus separator |
|
105 | // Add 12 pixels for each button, plus separator |
@@ -117,7 +117,10 | |||||
|
117 | { |
|
117 | { |
|
118 | bridgeEngine.toggleToolMessages.Add(new ToggleToolMessage {Tool = Tool.Dezone}); |
|
118 | bridgeEngine.toggleToolMessages.Add(new ToggleToolMessage {Tool = Tool.Dezone}); |
|
119 | } |
|
119 | } |
|
120 |
|
120 | if (Menu.activeButton("\ue122 Bulldozer", bridgeEngine.toolStatuses[Tool.Bulldozer], StyleSets.selected, StyleSets.white)) | |
|
|
121 | { | ||
|
|
122 | bridgeEngine.toggleToolMessages.Add(new ToggleToolMessage {Tool = Tool.Bulldozer}); | ||
|
|
123 | } | ||
|
121 | ImGui.Text("|"); |
|
124 | ImGui.Text("|"); |
|
122 |
|
125 | ||
|
123 | if (Menu.activeButton("\ue03e Graph", bridgeEngine.windowStatuses[Window.Graph], StyleSets.selected, StyleSets.white)) |
|
126 | if (Menu.activeButton("\ue03e Graph", bridgeEngine.windowStatuses[Window.Graph], StyleSets.selected, StyleSets.white)) |
You need to be logged in to leave comments.
Login now