From b11f074ceba10af62b35b414ecaa51a8f13c6550 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 7 Oct 2025 11:01:19 -0400 Subject: initial baseline --- dungeon/src/lib.rs | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 dungeon/src/lib.rs (limited to 'dungeon/src/lib.rs') diff --git a/dungeon/src/lib.rs b/dungeon/src/lib.rs new file mode 100644 index 0000000..66faec3 --- /dev/null +++ b/dungeon/src/lib.rs @@ -0,0 +1,58 @@ +//! The `dungon` crate contains the core functionality for +//! interacting with a `Dungeon` and its components. + +mod map; +mod pos; + +pub use map::*; +pub use pos::*; + +/// The `Dungeon` type represents the game state of the +/// dungeon crawler. +#[derive(Clone, Debug, PartialEq, Eq, Hash)] +pub struct Dungeon { + player: Entity, + floor: Floor, +} +impl Dungeon { + /// Creates a new `Dungeon`. + /// + /// # Examples + /// + /// ```no_run + /// use dungeon::Dungeon; + /// + /// let dungeon = Dungeon::new(); + /// ``` + #[must_use] + pub fn new() -> Self { + let floor = Floor::generate(); + let player = Entity::player(floor.player_start()); + + Self { player, floor } + } + + /// Creates a new `Dungeon` with a provided seed. + /// + /// # Examples + /// + /// ```no_run + /// use dungeon::Dungeon; + /// + /// let seed = 234690523482u64; + /// let dungeon = Dungeon::new_seeded(seed); + /// ``` + #[must_use] + pub fn new_seeded(seed: u64) -> Self { + let floor = Floor::generate_seeded(seed); + let player = Entity::player(floor.player_start()); + + Self { player, floor } + } +} + +impl Default for Dungeon { + fn default() -> Self { + Self::new() + } +} -- cgit v1.2.3-freya