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