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