From cfbd535191552fc085762738c820f3cbc49a0ebd Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Sun, 15 Jul 2018 22:05:19 +0200 Subject: Implemented shooting teslas in the same order as the game engine Order by age --- src/engine/expressive_engine.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'src/engine/expressive_engine.rs') diff --git a/src/engine/expressive_engine.rs b/src/engine/expressive_engine.rs index aa9448b..557e0fa 100644 --- a/src/engine/expressive_engine.rs +++ b/src/engine/expressive_engine.rs @@ -38,7 +38,8 @@ pub struct Building { pub weapon_speed: u8, pub weapon_cooldown_time_left: u8, pub weapon_cooldown_period: u8, - pub energy_generated_per_turn: u16 + pub energy_generated_per_turn: u16, + pub age: u16 } #[derive(Debug, Clone, PartialEq)] @@ -193,11 +194,12 @@ impl ExpressiveGameState { fn fire_teslas(player: &mut Player, player_buildings: &mut Vec, player_unoccupied_cells: &mut Vec, opponent: &mut Player, opponent_buildings: &mut Vec, opponent_unoccupied_cells: &mut Vec,settings: &GameSettings) { #[cfg(debug_assertions)] { - player_buildings.sort_by_key(|b| b.pos); - opponent_buildings.sort_by_key(|b| b.pos); + player_buildings.sort_by(|a, b| b.age.cmp(&a.age).then(a.pos.cmp(&b.pos))); + opponent_buildings.sort_by(|a, b| b.age.cmp(&a.age).then(a.pos.cmp(&b.pos))); } for tesla in player_buildings.iter_mut().filter(|b| b.weapon_damage == 20) { + tesla.age += 1; if tesla.weapon_cooldown_time_left > 0 { tesla.weapon_cooldown_time_left -= 1; } else if player.energy >= 100 { @@ -222,6 +224,7 @@ impl ExpressiveGameState { } for tesla in opponent_buildings.iter_mut().filter(|b| b.weapon_damage == 20) { + tesla.age += 1; if tesla.weapon_cooldown_time_left > 0 { tesla.weapon_cooldown_time_left -= 1; } else if opponent.energy >= 100 { @@ -382,7 +385,8 @@ impl UnconstructedBuilding { weapon_speed: self.weapon_speed, weapon_cooldown_time_left: 0, weapon_cooldown_period: self.weapon_cooldown_period, - energy_generated_per_turn: self.energy_generated_per_turn + energy_generated_per_turn: self.energy_generated_per_turn, + age: 0 } } } @@ -396,7 +400,8 @@ impl Building { weapon_speed: blueprint.weapon_speed, weapon_cooldown_time_left: 0, weapon_cooldown_period: blueprint.weapon_cooldown_period, - energy_generated_per_turn: blueprint.energy_generated_per_turn + energy_generated_per_turn: blueprint.energy_generated_per_turn, + age: 0 } } -- cgit v1.2.3