finishes decoupling map from camera

This commit is contained in:
Llywelwyn 2023-07-24 18:53:51 +01:00
parent 2ecfd25d95
commit 7f0465da73
13 changed files with 110 additions and 254 deletions

View file

@ -1,7 +1,9 @@
use super::{apply_room_to_map, apply_vertical_tunnel, BuilderMap, InitialMapBuilder, Rect};
use super::{BuilderMap, InitialMapBuilder, Rect};
use rltk::RandomNumberGenerator;
pub struct SimpleMapBuilder {}
pub struct SimpleMapBuilder {
room_params: (i32, i32, i32),
}
impl InitialMapBuilder for SimpleMapBuilder {
#[allow(dead_code)]
@ -12,19 +14,28 @@ impl InitialMapBuilder for SimpleMapBuilder {
impl SimpleMapBuilder {
#[allow(dead_code)]
pub fn new() -> Box<SimpleMapBuilder> {
Box::new(SimpleMapBuilder {})
pub fn new(room_params: Option<(i32, i32, i32)>) -> Box<SimpleMapBuilder> {
const DEFAULT_MAX_ROOMS: i32 = 40;
const DEFAULT_MIN_SIZE: i32 = 6;
const DEFAULT_MAX_SIZE: i32 = 16;
let (max_rooms, min_size, max_size);
if let Some(room_params) = room_params {
(max_rooms, min_size, max_size) = (room_params.0, room_params.1, room_params.2)
} else {
(max_rooms, min_size, max_size) = (DEFAULT_MAX_ROOMS, DEFAULT_MIN_SIZE, DEFAULT_MAX_SIZE)
}
Box::new(SimpleMapBuilder { room_params: (max_rooms, min_size, max_size) })
}
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;
let mut rooms: Vec<Rect> = Vec::new();
for _i in 0..MAX_ROOMS {
let w = rng.range(MIN_SIZE, MAX_SIZE);
let h = rng.range(MIN_SIZE, MAX_SIZE);
for _i in 0..self.room_params.0 {
let w = rng.range(self.room_params.1, self.room_params.2);
let h = rng.range(self.room_params.1, self.room_params.2);
let x = rng.roll_dice(1, build_data.map.width - w - 1) - 1;
let y = rng.roll_dice(1, build_data.map.height - h - 1) - 1;
let new_room = Rect::new(x, y, w, h);