Description:
Draw areas when clicked.
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r536:e3be69aada5b -

@@ -0,0 +1,29
1 using System;
2 using Microsoft.Xna.Framework;
3 using Microsoft.Xna.Framework.Graphics;
4 using Microsoft.Xna.Framework.Input;
5
6 using Encompass;
7
8 using isometricparkfna.Messages;
9 using isometricparkfna.Components;
10
11 namespace isometricparkfna.Engines {
12
13 [Receives(typeof(SpawnSelection),
14 typeof(AdjustSelection))]
15 [Writes(typeof(AreaComponent))]
16 public class BuildToolEngine : Engine {
17 public override void Update(double dt) {
18
19 foreach (ref readonly var message in ReadMessages<SpawnSelection>())
20 {
21 var entity = CreateEntity();
22
23 AddComponent(entity, new AreaComponent { squares = new[] {message.Start} });
24 AddComponent(entity, new SelectedComponent { selected = false});
25 }
26 }
27 }
28 }
29
@@ -0,0 +1,9
1 using Microsoft.Xna.Framework;
2
3 using Encompass;
4
5 namespace isometricparkfna.Messages {
6 public struct AdjustSelection : IMessage {
7 public Vector2 End;
8 }
9 }
@@ -0,0 +1,9
1 using Microsoft.Xna.Framework;
2
3 using Encompass;
4
5 namespace isometricparkfna.Messages {
6 public struct SpawnSelection : IMessage {
7 public Vector2 Start;
8 }
9 }
@@ -1,6 +1,8
1 using System;
1 using System;
2 using System.Collections.Generic;
2 using System.Collections.Generic;
3
3
4 using Microsoft.Xna.Framework;
5
4 namespace isometricparkfna
6 namespace isometricparkfna
5 {
7 {
6
8
@@ -186,6 +188,17
186 return count;
188 return count;
187 }
189 }
188
190
191 public static Vector2 calculateMousegrid(Vector2 normalizedMousePos)
192 {
193 Vector2 adjust = new Vector2(Tile.TileSpriteWidth / 2, Tile.TileSpriteHeight);
194 Vector2 adjustedMousePos = normalizedMousePos - adjust;
195
196 float boardx = ((adjustedMousePos.X / Tile.TileSpriteWidth) + (adjustedMousePos.Y / Tile.TileSpriteHeight));
197 float boardy = ((adjustedMousePos.Y / Tile.TileSpriteHeight) - (adjustedMousePos.X / Tile.TileSpriteWidth));
198
199 return new Vector2((int)boardx, (int)boardy);
200 }
201
189 public System.Collections.Generic.IEnumerable<Cell> iterate_cells_with_neighbors(int neighbors)
202 public System.Collections.Generic.IEnumerable<Cell> iterate_cells_with_neighbors(int neighbors)
190 {
203 {
191 for (int i = 0; i < MapHeight; i++)
204 for (int i = 0; i < MapHeight; i++)
@@ -91,19 +91,23
91 foreach (ref readonly var entity in ReadEntities<AreaComponent>())
91 foreach (ref readonly var entity in ReadEntities<AreaComponent>())
92 {
92 {
93 var areaComponent = GetComponent<AreaComponent>(entity);
93 var areaComponent = GetComponent<AreaComponent>(entity);
94 var contractStatusComponent = GetComponent<ContractStatusComponent>(entity);
94
95 foreach (var square in areaComponent.squares)
95 if (HasComponent<ContractStatusComponent>(entity))
96 {
96 {
97 if (game.mouseGrid == square)
97 var contractStatusComponent = GetComponent<ContractStatusComponent>(entity);
98 {
98 foreach (var square in areaComponent.squares)
99 game.in_zone = true;
99 {
100 if ((contractStatusComponent.status == ContractStatus.Active)
100 if (game.mouseGrid == square)
101 || (contractStatusComponent.status == ContractStatus.Accepted))
101 {
102 {
102 game.in_zone = true;
103 game.in_active_zone = true;
103 if ((contractStatusComponent.status == ContractStatus.Active)
104 }
104 || (contractStatusComponent.status == ContractStatus.Accepted))
105 }
105 {
106 }
106 game.in_active_zone = true;
107 }
108 }
109 }
110 }
107 }
111 }
108
112
109 foreach (ref readonly var message in ReadMessages<QuitGameMessage>())
113 foreach (ref readonly var message in ReadMessages<QuitGameMessage>())
@@ -20,7 +20,9
20 typeof(TogglePauseMessage),
20 typeof(TogglePauseMessage),
21 typeof(GameRateMessage),
21 typeof(GameRateMessage),
22 typeof(GameStateMessage),
22 typeof(GameStateMessage),
23 typeof(QuitGameMessage))]
23 typeof(QuitGameMessage),
24 typeof(SpawnSelection),
25 typeof(AdjustSelection))]
24 [Reads(typeof(WindowTypeComponent),
26 [Reads(typeof(WindowTypeComponent),
25 typeof(GameStateComponent),
27 typeof(GameStateComponent),
26 typeof(VisibilityComponent))]
28 typeof(VisibilityComponent))]
@@ -52,7 +54,6
52 var mouseCur = Mouse.GetState();
54 var mouseCur = Mouse.GetState();
53 var original_point = Vector2.Transform(new Vector2(mouseCur.X, mouseCur.Y),
55 var original_point = Vector2.Transform(new Vector2(mouseCur.X, mouseCur.Y),
54 Matrix.Invert(this.camera.get_transformation(this.graphicsDevice)));
56 Matrix.Invert(this.camera.get_transformation(this.graphicsDevice)));
55
56 bool isPlaying = false;
57 bool isPlaying = false;
57
58
58 var viewWidth = gdm.PreferredBackBufferWidth;
59 var viewWidth = gdm.PreferredBackBufferWidth;
@@ -238,6 +239,13
238 SendMessage(new JumpCameraMessage {Movement = original_point});
239 SendMessage(new JumpCameraMessage {Movement = original_point});
239 }
240 }
240
241
242 if (mouseCur.LeftButton == ButtonState.Pressed && mousePrev.LeftButton == ButtonState.Released
243 && keyboardCur.IsKeyDown(Keys.LeftShift)
244 )
245 {
246 SendMessage(new SpawnSelection {Start = CellMap.calculateMousegrid(original_point)});
247 }
248
241 #endregion
249 #endregion
242 this.keyboardPrev = keyboardCur;
250 this.keyboardPrev = keyboardCur;
243 this.mousePrev = mouseCur;
251 this.mousePrev = mouseCur;
@@ -288,7 +288,7
288 WorldBuilder.AddEngine(new PolicyEngine());
288 WorldBuilder.AddEngine(new PolicyEngine());
289 WorldBuilder.AddEngine(new TraceryBridgeEngine(this.grammar));
289 WorldBuilder.AddEngine(new TraceryBridgeEngine(this.grammar));
290 WorldBuilder.AddEngine(new SimulationGameRateBridgeEngine(this.simulation));
290 WorldBuilder.AddEngine(new SimulationGameRateBridgeEngine(this.simulation));
291
291 WorldBuilder.AddEngine(new BuildToolEngine());
292
292
293 WorldBuilder.AddGeneralRenderer(new AreaRenderer(this.tileBatch, this.monoFont), 1);
293 WorldBuilder.AddGeneralRenderer(new AreaRenderer(this.tileBatch, this.monoFont), 1);
294 WorldBuilder.AddGeneralRenderer(new ImGuiWindowRenderer(this, this.simulation, this.imGuiWindowBridgeEngine, this.gdm), 2);
294 WorldBuilder.AddGeneralRenderer(new ImGuiWindowRenderer(this, this.simulation, this.imGuiWindowBridgeEngine, this.gdm), 2);
@@ -32,6 +32,7
32 {
32 {
33 var areaComponent = GetComponent<AreaComponent>(entity);
33 var areaComponent = GetComponent<AreaComponent>(entity);
34 // var SelectedComponent = GetComponent<SelectedComponent>(entity);
34 // var SelectedComponent = GetComponent<SelectedComponent>(entity);
35 var selected = GetComponent<SelectedComponent>(entity).selected;
35
36
36 if (!HasComponent<ContractStatusComponent>(entity)
37 if (!HasComponent<ContractStatusComponent>(entity)
37 || GetComponent<ContractStatusComponent>(entity).status == ContractStatus.Accepted
38 || GetComponent<ContractStatusComponent>(entity).status == ContractStatus.Accepted
@@ -41,9 +42,7
41 Quad.FillSquares(batch, areaComponent.squares, Color.Teal, 0.5f, 0.79f);
42 Quad.FillSquares(batch, areaComponent.squares, Color.Teal, 0.5f, 0.79f);
42 }
43 }
43
44
44 var selected = GetComponent<SelectedComponent>(entity).selected;
45 else if (HasComponent<ContractStatusComponent>(entity)
45
46 if (HasComponent<ContractStatusComponent>(entity)
47 && selected
46 && selected
48 // && GetComponent<SelectedComponent>(entity).selected
47 // && GetComponent<SelectedComponent>(entity).selected
49 )
48 )
@@ -51,6 +50,11
51 Tile.DrawOutlinedSquares(batch, areaComponent.squares, Color.Teal);
50 Tile.DrawOutlinedSquares(batch, areaComponent.squares, Color.Teal);
52 Quad.FillSquares(batch, areaComponent.squares, Color.Gray, 0.5f, 0.80f);
51 Quad.FillSquares(batch, areaComponent.squares, Color.Gray, 0.5f, 0.80f);
53 }
52 }
53 else if (!HasComponent<ContractStatusComponent>(entity) )
54 {
55 Quad.FillSquares(batch, areaComponent.squares, Color.Red, 0.5f, 0.80f);
56 Tile.DrawOutlinedSquares(batch, areaComponent.squares, Color.Red);
57 }
54 }
58 }
55 }
59 }
56 }
60 }
You need to be logged in to leave comments. Login now