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.rs43
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 {