fix: reset code borrows

This commit is contained in:
2025-07-23 17:20:12 -05:00
parent 785a760343
commit c98c6e1c64

View File

@@ -208,29 +208,31 @@ impl Game<'_> {
// Reset the score // Reset the score
self.score = 0; self.score = 0;
// Get valid positions from the cached flood fill // Get valid positions from the cached flood fill and randomize positions in a single block
let mut map = self.map.borrow_mut(); {
let valid_positions = map.get_valid_playable_positions(); let mut map = self.map.borrow_mut();
let mut rng = rand::rng(); let valid_positions = map.get_valid_playable_positions();
let mut rng = rand::rng();
// Randomize Pac-Man position // Randomize Pac-Man position
if let Some(pos) = valid_positions.iter().choose(&mut rng) { if let Some(pos) = valid_positions.iter().choose(&mut rng) {
let mut pacman = self.pacman.borrow_mut(); let mut pacman = self.pacman.borrow_mut();
pacman.base.base.pixel_position = Map::cell_to_pixel((pos.x, pos.y)); pacman.base.base.pixel_position = Map::cell_to_pixel((pos.x, pos.y));
pacman.base.base.cell_position = (pos.x, pos.y); pacman.base.base.cell_position = (pos.x, pos.y);
pacman.base.in_tunnel = false; pacman.base.in_tunnel = false;
pacman.base.direction = Direction::Right; pacman.base.direction = Direction::Right;
pacman.next_direction = None; pacman.next_direction = None;
pacman.stopped = false; pacman.stopped = false;
} }
// Randomize ghost position // Randomize ghost position
if let Some(pos) = valid_positions.iter().choose(&mut rng) { if let Some(pos) = valid_positions.iter().choose(&mut rng) {
self.blinky.base.base.pixel_position = Map::cell_to_pixel((pos.x, pos.y)); self.blinky.base.base.pixel_position = Map::cell_to_pixel((pos.x, pos.y));
self.blinky.base.base.cell_position = (pos.x, pos.y); self.blinky.base.base.cell_position = (pos.x, pos.y);
self.blinky.base.in_tunnel = false; self.blinky.base.in_tunnel = false;
self.blinky.base.direction = Direction::Left; self.blinky.base.direction = Direction::Left;
self.blinky.mode = crate::ghost::GhostMode::Chase; self.blinky.mode = crate::ghost::GhostMode::Chase;
}
} }
self.edibles = reconstruct_edibles( self.edibles = reconstruct_edibles(
@@ -289,8 +291,7 @@ impl Game<'_> {
.copy(&self.map_texture, None, None) .copy(&self.map_texture, None, None)
.expect("Could not render texture on canvas"); .expect("Could not render texture on canvas");
// Remove old pellet rendering // Render all edibles
// Instead, render all edibles
for edible in &self.edibles { for edible in &self.edibles {
edible.render(self.canvas); edible.render(self.canvas);
} }