atomises rooms and corridors

- room sorter
- rounding room corners
- dogleg and bsp corridors
- room exploder
This commit is contained in:
Llywelwyn 2023-07-23 16:44:14 +01:00
parent b7b2061228
commit 2ceb20a822
9 changed files with 411 additions and 59 deletions

View file

@ -1,4 +1,4 @@
use super::{apply_horizontal_tunnel, apply_room_to_map, apply_vertical_tunnel, BuilderMap, InitialMapBuilder, Rect};
use super::{apply_room_to_map, apply_vertical_tunnel, BuilderMap, InitialMapBuilder, Rect};
use rltk::RandomNumberGenerator;
pub struct SimpleMapBuilder {}
@ -6,7 +6,7 @@ pub struct SimpleMapBuilder {}
impl InitialMapBuilder for SimpleMapBuilder {
#[allow(dead_code)]
fn build_map(&mut self, rng: &mut rltk::RandomNumberGenerator, build_data: &mut BuilderMap) {
self.rooms_and_corridors(rng, build_data);
self.build_rooms(rng, build_data);
}
}
@ -16,7 +16,7 @@ impl SimpleMapBuilder {
Box::new(SimpleMapBuilder {})
}
fn rooms_and_corridors(&mut self, rng: &mut RandomNumberGenerator, build_data: &mut BuilderMap) {
fn build_rooms(&mut self, rng: &mut RandomNumberGenerator, build_data: &mut BuilderMap) {
const MAX_ROOMS: i32 = 30;
const MIN_SIZE: i32 = 6;
const MAX_SIZE: i32 = 10;
@ -38,18 +38,6 @@ impl SimpleMapBuilder {
apply_room_to_map(&mut build_data.map, &new_room);
build_data.take_snapshot();
if !rooms.is_empty() {
let (new_x, new_y) = new_room.centre();
let (prev_x, prev_y) = rooms[rooms.len() - 1].centre();
if rng.range(0, 2) == 1 {
apply_horizontal_tunnel(&mut build_data.map, prev_x, new_x, prev_y);
apply_vertical_tunnel(&mut build_data.map, prev_y, new_y, new_x);
} else {
apply_vertical_tunnel(&mut build_data.map, prev_y, new_y, prev_x);
apply_horizontal_tunnel(&mut build_data.map, prev_x, new_x, new_y);
}
}
rooms.push(new_room);
build_data.take_snapshot();
}