diff options
Diffstat (limited to 'src/state.rs')
-rw-r--r-- | src/state.rs | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/state.rs b/src/state.rs index e05a884..177db45 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,7 +1,7 @@ use crate::command::Command; use crate::consts::*; -#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] pub enum GameStatus { Continue, PlayerOneWon, @@ -9,7 +9,7 @@ pub enum GameStatus { Draw, // Until I add score I guess } -#[derive(Debug, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, Hash, PartialEq, Eq)] pub struct GameState { pub status: GameStatus, pub players: [Player; 2], @@ -19,7 +19,7 @@ pub struct GameState { pub finish_lines: Vec<Position>, } -#[derive(Debug, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, Hash, PartialEq, Eq)] pub struct Player { pub position: Position, pub next_position: Position, @@ -30,7 +30,7 @@ pub struct Player { pub finished: bool, } -#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] pub struct Position { pub x: usize, pub y: usize, @@ -64,6 +64,18 @@ impl GameState { }; } + pub fn reset_players_to_start(&mut self) { + self.players[0].position = Position { x: 1, y: 1 }; + self.players[1].position = Position { x: 1, y: 4 }; + for player in &mut self.players { + player.speed = 5; + player.boost_remaining = 0; + player.oils = 0; + player.boosts = 0; + player.finished = false; + } + } + fn do_command(&mut self, player_index: usize, command: &Command) { use Command::*; self.players[player_index].tick_boost(); |