diff options
Diffstat (limited to 'dungeon/src/lib.rs')
| -rw-r--r-- | dungeon/src/lib.rs | 21 |
1 files changed, 12 insertions, 9 deletions
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); } |