BSP Rooms as an example

This commit is contained in:
klangner 2020-10-22 22:35:06 +02:00
parent fc1bebb4c3
commit f231a5f4d6
3 changed files with 28 additions and 6 deletions

View File

@ -57,7 +57,19 @@ impl World {
let map = MapBuilder::new(width as usize, height as usize) let map = MapBuilder::new(width as usize, height as usize)
.with(SimpleRooms::new()) .with(SimpleRooms::new())
.with(NearestCorridors::new()) .with(NearestCorridors::new())
.with(AreaStartingPosition::new(XStart::CENTER, YStart::CENTER)) .with(AreaStartingPosition::new(XStart::LEFT, YStart::TOP))
.with(DistantExit::new())
.build_with_rng(&mut rng);
World::new(width, height, map)
}
pub fn new_bsp_rooms(width: u32, height: u32, seed: u32) -> World {
World::print_map_info(format!("BSP Rooms with the seed: {}", seed));
let mut rng = StdRng::seed_from_u64(seed as u64);
let map = MapBuilder::new(width as usize, height as usize)
.with(BspRooms::new())
.with(NearestCorridors::new())
.with(AreaStartingPosition::new(XStart::LEFT, YStart::BOTTOM))
.with(DistantExit::new()) .with(DistantExit::new())
.build_with_rng(&mut rng); .build_with_rng(&mut rng);
World::new(width, height, map) World::new(width, height, map)
@ -80,7 +92,7 @@ impl World {
let mut rng = StdRng::seed_from_u64(seed as u64); let mut rng = StdRng::seed_from_u64(seed as u64);
let map = MapBuilder::new(width as usize, height as usize) let map = MapBuilder::new(width as usize, height as usize)
.with(DrunkardsWalk::open_halls()) .with(DrunkardsWalk::open_halls())
.with(AreaStartingPosition::new(XStart::CENTER, YStart::CENTER)) .with(AreaStartingPosition::new(XStart::RIGHT, YStart::BOTTOM))
.with(CullUnreachable::new()) .with(CullUnreachable::new())
.with(DistantExit::new()) .with(DistantExit::new())
.build_with_rng(&mut rng); .build_with_rng(&mut rng);
@ -90,12 +102,14 @@ impl World {
pub fn new_random(width: u32, height: u32, seed: u32) -> World { pub fn new_random(width: u32, height: u32, seed: u32) -> World {
let mut rng = rand::thread_rng(); let mut rng = rand::thread_rng();
let px = rng.gen::<f32>(); let px = rng.gen::<f32>();
if px < 0.25 { if px < 0.2 {
World::new_cellular_automata(width, height, seed) World::new_cellular_automata(width, height, seed)
} else if px < 0.5 { } else if px < 0.4 {
World::new_simple_rooms(width, height, seed) World::new_simple_rooms(width, height, seed)
} else if px < 0.75 { } else if px < 0.6 {
World::new_drunkard(width, height, seed) World::new_drunkard(width, height, seed)
} else if px < 0.8 {
World::new_bsp_rooms(width, height, seed)
} else { } else {
World::new_bsp_interior(width, height, seed) World::new_bsp_interior(width, height, seed)
} }

View File

@ -38,6 +38,7 @@
<div class="dropdown-menu" aria-labelledby="navbarDropdown"> <div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" id="cellular-automata-option">Cellular Automata</a> <a class="dropdown-item" id="cellular-automata-option">Cellular Automata</a>
<a class="dropdown-item" id="simple-rooms-option">Simple Rooms</a> <a class="dropdown-item" id="simple-rooms-option">Simple Rooms</a>
<a class="dropdown-item" id="bsp-rooms-option">BSP Rooms</a>
<a class="dropdown-item" id="bsp-interior-option">BSP Interior</a> <a class="dropdown-item" id="bsp-interior-option">BSP Interior</a>
<a class="dropdown-item" id="drunkard-option">Drunkard Walk</a> <a class="dropdown-item" id="drunkard-option">Drunkard Walk</a>
<a class="dropdown-item" id="random-option">Random Generator</a> <a class="dropdown-item" id="random-option">Random Generator</a>

View File

@ -54,6 +54,12 @@ function newDrunkard() {
requestAnimationFrame(renderLoop); requestAnimationFrame(renderLoop);
} }
function newBspRooms() {
var seed = Date.now();
world = World.new_bsp_rooms(GRID_COLS, GRID_ROWS, get_seed());
requestAnimationFrame(renderLoop);
}
function newRandomGen() { function newRandomGen() {
var seed = Date.now(); var seed = Date.now();
world = World.new_random(GRID_COLS, GRID_ROWS, get_seed()); world = World.new_random(GRID_COLS, GRID_ROWS, get_seed());
@ -147,6 +153,7 @@ newRandomGen();
// Connect UI element // Connect UI element
document.getElementById('cellular-automata-option').addEventListener('click', newCellularAutomata); document.getElementById('cellular-automata-option').addEventListener('click', newCellularAutomata);
document.getElementById('simple-rooms-option').addEventListener('click', newSimpleRooms); document.getElementById('simple-rooms-option').addEventListener('click', newSimpleRooms);
document.getElementById('bsp-interior-option').addEventListener('click', newBspInterior); document.getElementById('bsp-rooms-option').addEventListener('click', newBspRooms);
document.getElementById('drunkard-option').addEventListener('click', newDrunkard); document.getElementById('drunkard-option').addEventListener('click', newDrunkard);
document.getElementById('bsp-interior-option').addEventListener('click', newBspInterior);
document.getElementById('random-option').addEventListener('click', newRandomGen); document.getElementById('random-option').addEventListener('click', newRandomGen);