# Here Be Dragons [![Crates.io](https://img.shields.io/crates/v/here_be_dragons.svg)](https://crates.io/crates/here_be_dragons) [![here_be_dragons](https://docs.rs/here_be_dragons/badge.svg)](https://docs.rs/here_be_dragons/) Generate procedural maps for games. ## Acknowledgments This crate is based on [mapgen.rs](https://github.com/klangner/mapgen.rs). Thanks to Krzysztof Langner for doing the hard work of implementing the many map generation algorithms this crate includes. ## Map filters This library consists of different map filters which can be combined to create custom map generators. ### Implemented filters * [x] Area exit point * [x] Area starting point * [x] BSP Interior * [x] BSP Rooms * [x] Cellular automata * [x] Cull unreachable areas * [ ] Diffusion-Limited Aggregation (DLA) * [x] Drunkard's walk * [x] Maze * [x] Noise generator * [ ] Prefabs * [x] Room corridors nearest * [x] Simple rooms * [x] Voronoi hive * [ ] Wave Function Collapse ## Usage Add the dependency to your project ``` here_be_dragons = "0.1" ``` Using single map generator: ```rust use rand::prelude::*; use here_be_dragons::{Map, MapFilter}; use here_be_dragons::filter::CellularAutomata; let mut rng = StdRng::seed_from_u64(100); let gen = CellularAutomata::new(); let map = gen.modify_map(&mut rng, &Map::new(80, 50)); ``` Use MapBuilder for chaining map generator and modifiers ```rust use here_be_dragons::{ MapBuilder, filter::{ NoiseGenerator, CellularAutomata, AreaStartingPosition, XStart, YStart, }, }; let map = MapBuilder::new(80, 50) .with(NoiseGenerator::uniform()) .with(CellularAutomata::new()) .with(AreaStartingPosition::new(XStart::CENTER, YStart::CENTER)) .with(CullUnreachable::new()) .with(DistantExit::new()) .build(); ``` For more information check the [docs](https://docs.rs/here_be_dragons). This library is based on the code from the [Roguelike tutorial](https://github.com/thebracket/rustrogueliketutorial). I highly recommend it for learning how to write a Roguelike in Rust. ## License Licensed under either of * [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) * [MIT license](http://opensource.org/licenses/MIT) at your option. **Contributions** Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.