summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-11-18 09:44:25 -0500
committerFreya Murphy <freya@freyacat.org>2025-11-18 09:44:25 -0500
commitc6dfeff327a5f115249e6fcf8c4d6aa0319f3610 (patch)
treeb6ceceae982ddac121eba572a90f3c0a625b9daa
parentreadme: link jenkins (diff)
downloadDungeonCrawl-c6dfeff327a5f115249e6fcf8c4d6aa0319f3610.tar.gz
DungeonCrawl-c6dfeff327a5f115249e6fcf8c4d6aa0319f3610.tar.bz2
DungeonCrawl-c6dfeff327a5f115249e6fcf8c4d6aa0319f3610.zip
dungeon: split rng into game/level to make maps consistant
-rw-r--r--dungeon/src/entity.rs2
-rw-r--r--dungeon/src/lib.rs21
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);
}