diff options
author | Justin Worthe <justin@worthe-it.co.za> | 2018-05-12 15:19:31 +0200 |
---|---|---|
committer | Justin Worthe <justin@worthe-it.co.za> | 2018-05-12 15:19:31 +0200 |
commit | f43fa101538c6b4ae2531bb8d27c793e6b7579ec (patch) | |
tree | 958f48aec280c8933a379acba07a5b1bc862a124 /src | |
parent | d6bec472109806eea2ad86741edd3eb1571b872c (diff) |
Fixed engine not paying for new buildings
Diffstat (limited to 'src')
-rw-r--r-- | src/engine/mod.rs | 18 |
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 }, } } |