1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- use super::{Map, Rect, TileType, Position, spawner, SHOW_MAPGEN_VISUALIZER};
- mod simple_map;
- use simple_map::SimpleMapBuilder;
- mod bsp_dungeon;
- use bsp_dungeon::BspDungeonBuilder;
- mod bsp_interior;
- use bsp_interior::BspInteriorBuilder;
- mod cellular_automota;
- use cellular_automota::CellularAutomotaBuilder;
- mod drunkard;
- use drunkard::*;
- mod maze;
- use maze::*;
- mod dla;
- use dla::*;
- mod common;
- use common::*;
- use specs::prelude::*;
- pub trait MapBuilder {
- fn build_map(&mut self);
- fn spawn_entities(&mut self, ecs : &mut World);
- fn get_map(&self) -> Map;
- fn get_starting_position(&self) -> Position;
- fn get_snapshot_history(&self) -> Vec<Map>;
- fn take_snapshot(&mut self);
- }
- pub fn random_builder(new_depth: i32) -> Box<dyn MapBuilder> {
- let mut rng = rltk::RandomNumberGenerator::new();
- let builder = rng.roll_dice(1, 12);
- match builder {
- 1 => Box::new(BspDungeonBuilder::new(new_depth)),
- 2 => Box::new(BspInteriorBuilder::new(new_depth)),
- 3 => Box::new(CellularAutomotaBuilder::new(new_depth)),
- 4 => Box::new(DrunkardsWalkBuilder::open_area(new_depth)),
- 5 => Box::new(DrunkardsWalkBuilder::open_halls(new_depth)),
- 6 => Box::new(DrunkardsWalkBuilder::winding_passages(new_depth)),
- 7 => Box::new(MazeBuilder::new(new_depth)),
- 8 => Box::new(DLABuilder::walk_inwards(new_depth)),
- 9 => Box::new(DLABuilder::walk_outwards(new_depth)),
- 10 => Box::new(DLABuilder::central_attractor(new_depth)),
- 11 => Box::new(DLABuilder::insectoid(new_depth)),
- _ => Box::new(SimpleMapBuilder::new(new_depth))
- }
- }
|