diff options
| author | Freya Murphy <freya@freyacat.org> | 2025-11-09 20:53:36 -0500 |
|---|---|---|
| committer | Freya Murphy <freya@freyacat.org> | 2025-11-09 20:53:36 -0500 |
| commit | 2f7c963c8ffb3bceef08f760cdfac758ddae3758 (patch) | |
| tree | fef94830f2f87586e27ced85d9a9ca965fe32398 /dungeon/src/entity.rs | |
| parent | dungeon: fix astar neighbor generation (diff) | |
| download | DungeonCrawl-2f7c963c8ffb3bceef08f760cdfac758ddae3758.tar.gz DungeonCrawl-2f7c963c8ffb3bceef08f760cdfac758ddae3758.tar.bz2 DungeonCrawl-2f7c963c8ffb3bceef08f760cdfac758ddae3758.zip | |
dungeon: always use seeded rand, other minor refactoring
Diffstat (limited to 'dungeon/src/entity.rs')
| -rw-r--r-- | dungeon/src/entity.rs | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/dungeon/src/entity.rs b/dungeon/src/entity.rs index badb43c..931947c 100644 --- a/dungeon/src/entity.rs +++ b/dungeon/src/entity.rs @@ -1,5 +1,7 @@ //! The `entity` module contains structures of all entities including players and enimies. +use rand::Rng; + use crate::{Direction, FPos, Floor, Pos, astar, const_pos}; /// `PLAYER_FULL_HEALTH` is the starting health of the player entity @@ -70,12 +72,13 @@ impl EnemyMoveState { None } - pub fn new_roam(starting_pos: Pos, floor: &Floor) -> Self { - let mut rand_dir = Direction::get_random_dir(); - let mut rand_tiles = rand::random_range(MIN_ROAM_DIST..=MAX_ROAM_DIST); + pub fn new_roam(starting_pos: Pos, floor: &mut Floor) -> Self { let mut loop_index = 0; loop { - if let Some(p) = starting_pos.step_by(rand_dir, rand_tiles) { + let dir = Direction::random(floor.rand()); + let dist = floor.rand().random_range(MIN_ROAM_DIST..=MIN_ROAM_DIST); + + if let Some(p) = starting_pos.step_by(dir, dist) { if !floor.get(p).is_wall() { if let Some(data) = astar::astar(starting_pos, p, floor) { let mut path = data.0; @@ -85,9 +88,6 @@ impl EnemyMoveState { } } - rand_dir = Direction::get_random_dir(); - rand_tiles = rand::random_range(MIN_ROAM_DIST..=MAX_ROAM_DIST); - // Safety check loop_index += 1; if loop_index >= 100 { @@ -186,7 +186,7 @@ impl Entity { } } - pub fn handle_movement(&mut self, player_pos: Pos, floor: &Floor, delta_time: f32) { + pub fn handle_movement(&mut self, player_pos: Pos, floor: &mut Floor, delta_time: f32) { match &self.kind { EntityKind::Zombie(move_state) => { self.zombie_movement(move_state.clone(), player_pos, delta_time, floor); @@ -201,7 +201,7 @@ impl Entity { move_state: EnemyMoveState, player_pos: Pos, delta_time: f32, - floor: &Floor, + floor: &mut Floor, ) { // Check if player is in range if !matches!(move_state, EnemyMoveState::Attack { .. }) |