summaryrefslogtreecommitdiff
path: root/src/state.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/state.rs')
-rw-r--r--src/state.rs20
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();