//! 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 { let floor = Floor::default(); let player = Entity::player(floor.player_start()); Self { player, floor } } }