diff options
| -rw-r--r-- | dungeon/src/entity.rs | 2 | ||||
| -rw-r--r-- | dungeon/src/lib.rs | 21 |
2 files changed, 13 insertions, 10 deletions
diff --git a/dungeon/src/entity.rs b/dungeon/src/entity.rs index 794ef05..b290a2f 100644 --- a/dungeon/src/entity.rs +++ b/dungeon/src/entity.rs @@ -413,7 +413,7 @@ impl Dungeon { pub(crate) fn update_entities(&mut self, input: PlayerInput, delta_time: f32) { let mut updater = Updater { floor: &self.floor, - rng: &mut self.rng, + rng: &mut self.game_rng, player_pos: self.player.entity.pos, input, delta_time, diff --git a/dungeon/src/lib.rs b/dungeon/src/lib.rs index 036671c..76a2bda 100644 --- a/dungeon/src/lib.rs +++ b/dungeon/src/lib.rs @@ -10,7 +10,7 @@ pub mod player_input; pub mod pos; use rand::{ - SeedableRng, TryRngCore, + Rng, SeedableRng, TryRngCore, rngs::{OsRng, SmallRng}, }; @@ -45,7 +45,8 @@ pub struct Dungeon { pub enemies: Vec<Entity>, pub msg: Message, seed: u64, - rng: SmallRng, + level_rng: SmallRng, + game_rng: SmallRng, } impl Dungeon { /// Creates a new `Dungeon` with a provided seed. @@ -60,8 +61,9 @@ impl Dungeon { /// ``` #[must_use] pub fn new(seed: u64) -> Self { - let mut rng = SmallRng::seed_from_u64(seed); - let floor = bsp::generate(&mut rng); + let mut game_rng = SmallRng::seed_from_u64(seed); + let mut level_rng = SmallRng::seed_from_u64(game_rng.random()); + let floor = bsp::generate(&mut level_rng); let player = Player::new(floor.player_start()); let enemies = vec![]; let msg = Message::empty(); @@ -71,7 +73,8 @@ impl Dungeon { enemies, msg, seed, - rng, + level_rng, + game_rng, }; dungeon.spawn_enimies(); @@ -105,10 +108,10 @@ impl Dungeon { self.seed } - /// Returns the random number gen for the `Floor` + /// Returns the runtime random number gen for the `Floor` #[must_use] pub const fn rng(&mut self) -> &mut SmallRng { - &mut self.rng + &mut self.game_rng } pub fn update(&mut self, player_input: PlayerInput, delta_time: f32) -> UpdateResult { @@ -120,7 +123,7 @@ impl Dungeon { if self.floor.get(self.player.entity.pos) == Tile::Stairs { // we are moving to a new floor - self.floor = bsp::generate(&mut self.rng); + self.floor = bsp::generate(&mut self.level_rng); self.player.entity.teleport(self.floor.player_start()); self.spawn_enimies(); return UpdateResult::NextFloor; @@ -132,7 +135,7 @@ impl Dungeon { fn spawn_enimies(&mut self) { // TODO: better entity spawning - let zombie = Entity::zombie(self.floor.random_walkable_pos(&mut self.rng)); + let zombie = Entity::zombie(self.floor.random_walkable_pos(&mut self.level_rng)); self.enemies.clear(); self.enemies.push(zombie); } |