diff options
Diffstat (limited to 'dungeon/src/lib.rs')
| -rw-r--r-- | dungeon/src/lib.rs | 43 |
1 files changed, 24 insertions, 19 deletions
diff --git a/dungeon/src/lib.rs b/dungeon/src/lib.rs index 4767942..7bc9c05 100644 --- a/dungeon/src/lib.rs +++ b/dungeon/src/lib.rs @@ -14,42 +14,35 @@ pub use map::*; pub use player_input::*; pub use pos::*; +use rand::{ + SeedableRng, TryRngCore, + rngs::{OsRng, SmallRng}, +}; + /// The `Dungeon` type represents the game state of the /// dungeon crawler. -#[derive(Clone, Debug, PartialEq)] +#[derive(Debug, Clone)] pub struct Dungeon { pub floor: Floor, pub player: Player, pub enemies: Vec<Entity>, } impl Dungeon { - /// Creates a new `Dungeon`. - /// - /// # Examples - /// - /// ```no_run - /// use dungeon::Dungeon; - /// - /// let dungeon = Dungeon::new(); - /// ``` - #[must_use] - pub fn new() -> Self { - Self::from(Floor::generate()) - } - /// Creates a new `Dungeon` with a provided seed. /// /// # Examples /// /// ```no_run /// use dungeon::Dungeon; + /// use rand::{SeedableRng, rngs::SmallRng}; /// /// let seed = 234690523482u64; - /// let dungeon = Dungeon::new_seeded(seed); + /// let rng = SmallRng::seed_from_u64(seed); + /// let dungeon = Dungeon::with_rng(seed, rng); /// ``` #[must_use] - pub fn new_seeded(seed: u64) -> Self { - Self::from(Floor::generate_seeded(seed)) + pub fn with_rng(seed: u64, rng: SmallRng) -> Self { + Self::from(bsp::generate(seed, rng)) } /// Returns the current position of the camera (viewer) @@ -110,8 +103,20 @@ impl Dungeon { } } impl Default for Dungeon { + /// Creates a new `Dungeon` with a default rng. + /// + /// # Examples + /// + /// ```no_run + /// use dungeon::Dungeon; + /// + /// let dungeon = Dungeon::default(); + /// ``` fn default() -> Self { - Self::from(Floor::default()) + let seed = OsRng.try_next_u64().unwrap_or(0); + let rng = SmallRng::seed_from_u64(seed); + let floor = bsp::generate(seed, rng); + Self::from(floor) } } impl From<Floor> for Dungeon { |