diff options
Diffstat (limited to 'src/state.rs')
-rw-r--r-- | src/state.rs | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/state.rs b/src/state.rs index 177db45..78f8267 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,5 +1,6 @@ use crate::command::Command; use crate::consts::*; +use std::rc::Rc; #[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] pub enum GameStatus { @@ -13,10 +14,10 @@ pub enum GameStatus { pub struct GameState { pub status: GameStatus, pub players: [Player; 2], - pub obstacles: Vec<Position>, - pub powerup_oils: Vec<Position>, - pub powerup_boosts: Vec<Position>, - pub finish_lines: Vec<Position>, + pub obstacles: Rc<Vec<Position>>, + pub powerup_oils: Rc<Vec<Position>>, + pub powerup_boosts: Rc<Vec<Position>>, + pub finish_lines: Rc<Vec<Position>>, } #[derive(Debug, Clone, Hash, PartialEq, Eq)] @@ -91,10 +92,12 @@ impl GameState { debug_assert!(self.players[player_index].oils > 0); self.players[player_index].oils = self.players[player_index].oils.saturating_sub(1); let player_position = self.players[player_index].position; - self.obstacles.push(Position { + let mut obstacles = (*self.obstacles).clone(); + obstacles.push(Position { x: player_position.x.saturating_sub(1), y: player_position.y, }); + self.obstacles = Rc::new(obstacles); } } @@ -155,7 +158,7 @@ impl GameState { if player.boosts > 0 { result.push(Command::UseBoost); } - if player.oils > 0 { + if false && player.oils > 0 { result.push(Command::UseOil); } result |