From 99378ed484b04c710e0307db93ada65b29d93bae Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Sun, 1 Jul 2018 22:39:44 +0200 Subject: Started filling in bitwise simulation logic --- src/engine/bitwise_engine.rs | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'src/engine') diff --git a/src/engine/bitwise_engine.rs b/src/engine/bitwise_engine.rs index 04e4f85..7e02cde 100644 --- a/src/engine/bitwise_engine.rs +++ b/src/engine/bitwise_engine.rs @@ -4,7 +4,6 @@ use engine::settings::{GameSettings}; use engine::{GameStatus, Player, GameState}; const MAP_WIDTH: usize = 16; -const MAP_HEIGHT: usize = 8; const MISSILE_COOLDOWN: usize = 3; @@ -51,8 +50,17 @@ pub struct TeslaCooldown { const EMPTY: [Point; 0] = []; impl GameState for BitwiseGameState { - fn simulate(&mut self, _settings: &GameSettings, _player_command: Command, _opponent_command: Command) -> GameStatus { - //TODO + fn simulate(&mut self, settings: &GameSettings, _player_command: Command, _opponent_command: Command) -> GameStatus { + //TODO: Commands + //TODO: Make buildings out of under construction buildings + //TODO: Fire the TESLAS! + //TODO: Put missiles on the map + //TODO: Move and collide missiles + + BitwiseGameState::add_energy(settings, &mut self.player, &mut self.player_buildings); + BitwiseGameState::add_energy(settings, &mut self.opponent, &mut self.opponent_buildings); + + self.update_status(); self.status } @@ -76,6 +84,23 @@ impl BitwiseGameState { player_buildings, opponent_buildings } } + + fn add_energy(settings: &GameSettings, player: &mut Player, player_buildings: &mut PlayerBuildings) { + player.energy_generated = player_buildings.energy_towers.count_ones() as u16 * settings.energy.energy_generated_per_turn; + player.energy += player.energy_generated; + } + + fn update_status(&mut self) { + let player_dead = self.player.health == 0; + let opponent_dead = self.opponent.health == 0; + self.status = match (player_dead, opponent_dead) { + (true, true) => GameStatus::Draw, + (false, true) => GameStatus::PlayerWon, + (true, false) => GameStatus::OpponentWon, + (false, false) => GameStatus::Continue, + }; + } + } impl PlayerBuildings { -- cgit v1.2.3