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