summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJustin Worthe <justin@worthe-it.co.za>2018-05-12 15:19:31 +0200
committerJustin Worthe <justin@worthe-it.co.za>2018-05-12 15:19:31 +0200
commitf43fa101538c6b4ae2531bb8d27c793e6b7579ec (patch)
tree958f48aec280c8933a379acba07a5b1bc862a124 /src
parentd6bec472109806eea2ad86741edd3eb1571b872c (diff)
Fixed engine not paying for new buildings
Diffstat (limited to 'src')
-rw-r--r--src/engine/mod.rs18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/engine/mod.rs b/src/engine/mod.rs
index f05d985..11dd5ed 100644
--- a/src/engine/mod.rs
+++ b/src/engine/mod.rs
@@ -61,8 +61,8 @@ impl GameState {
}
let mut state = self.clone();
- let player_valid = GameState::perform_command(&mut state.player_buildings, settings, player_command, &settings.size);
- let opponent_valid = GameState::perform_command(&mut state.opponent_buildings, settings, opponent_command, &settings.size);
+ let player_valid = GameState::perform_command(&mut state.player_buildings, &mut state.player, settings, player_command, &settings.size);
+ let opponent_valid = GameState::perform_command(&mut state.opponent_buildings, &mut state.opponent, settings, opponent_command, &settings.size);
if !player_valid || !opponent_valid {
state.status = GameStatus::InvalidMove;
@@ -87,14 +87,22 @@ impl GameState {
state
}
- fn perform_command(buildings: &mut Vec<Building>, settings: &GameSettings, command: Command, size: &Point) -> bool {
+ fn perform_command(buildings: &mut Vec<Building>, player: &mut Player, settings: &GameSettings, command: Command, size: &Point) -> bool {
match command {
Command::Nothing => { true },
Command::Build(p, b) => {
+ let blueprint = settings.building_settings(b);
+
let occupied = buildings.iter().any(|b| b.pos == p);
let in_range = p.x < size.x && p.y < size.y;
- buildings.push(Building::new(p, settings.building_settings(b)));
- !occupied && in_range
+ let has_energy = player.energy >= blueprint.price;
+
+ let valid = !occupied && in_range && has_energy;
+ if valid {
+ player.energy -= blueprint.price;
+ buildings.push(Building::new(p, blueprint));
+ }
+ valid
},
}
}