FillEdges builder, and a welcome message

This commit is contained in:
Llywelwyn 2023-07-24 19:16:20 +01:00
parent 0fe866c048
commit b80c3ac9d1
5 changed files with 54 additions and 11 deletions

View file

@ -0,0 +1,35 @@
use super::{BuilderMap, MetaMapBuilder, TileType};
use rltk::RandomNumberGenerator;
pub struct FillEdges {
fill_with: TileType,
}
impl MetaMapBuilder for FillEdges {
#[allow(dead_code)]
fn build_map(&mut self, rng: &mut rltk::RandomNumberGenerator, build_data: &mut BuilderMap) {
self.fill_edges(rng, build_data);
}
}
impl FillEdges {
#[allow(dead_code)]
pub fn wall() -> Box<FillEdges> {
return Box::new(FillEdges { fill_with: TileType::Wall });
}
fn fill_edges(&mut self, _rng: &mut RandomNumberGenerator, build_data: &mut BuilderMap) {
for x in 0..build_data.map.width {
let mut idx = build_data.map.xy_idx(x, 0);
build_data.map.tiles[idx] = self.fill_with;
idx = build_data.map.xy_idx(x, build_data.map.height - 1);
build_data.map.tiles[idx] = self.fill_with;
}
for y in 0..build_data.map.height {
let mut idx = build_data.map.xy_idx(0, y);
build_data.map.tiles[idx] = self.fill_with;
idx = build_data.map.xy_idx(build_data.map.width - 1, y);
build_data.map.tiles[idx] = self.fill_with;
}
}
}

View file

@ -56,6 +56,8 @@ mod rooms_corridors_spawner;
use rooms_corridors_spawner::CorridorSpawner;
mod door_placement;
use door_placement::DoorPlacement;
mod fill_edges;
use fill_edges::FillEdges;
// Shared data to be passed around build chain
pub struct BuilderMap {
@ -283,8 +285,12 @@ pub fn random_builder(new_depth: i32, rng: &mut rltk::RandomNumberGenerator, wid
_ => random_shape_builder(rng, &mut builder),
}
/*if rng.roll_dice(1, 3)==1 {
builder.with(WaveformCollapseBuilder::new());
/*
WFC needs polishing up before it makes good maps. Right now it leaves too much unusable area,
by making disconnected sections and having no methods to connect them.
if rng.roll_dice(1, 1) == 1 {
builder.with(WaveFunctionCollapseBuilder::new());
// Now set the start to a random starting area
let (start_x, start_y) = random_start_position(rng);
@ -293,7 +299,8 @@ pub fn random_builder(new_depth: i32, rng: &mut rltk::RandomNumberGenerator, wid
// Setup an exit and spawn mobs
builder.with(VoronoiSpawning::new());
builder.with(DistantExit::new());
}*/
}
*/
if rng.roll_dice(1, 20) == 1 {
builder.with(PrefabBuilder::sectional(prefab_builder::prefab_sections::UNDERGROUND_FORT));
@ -301,6 +308,9 @@ pub fn random_builder(new_depth: i32, rng: &mut rltk::RandomNumberGenerator, wid
builder.with(DoorPlacement::new());
builder.with(PrefabBuilder::vaults());
// Regardless of anything else, fill the edges back in with walls. We can't walk
// there anyway, and we don't want an open line of sight into the unmapped void.
builder.with(FillEdges::wall());
builder
}

View file

@ -83,6 +83,10 @@ impl PrefabBuilder {
build_data.map.tiles[idx] = TileType::Floor;
build_data.starting_position = Some(Position { x: x as i32, y: y as i32 });
}
'+' => {
build_data.map.tiles[idx] = TileType::Floor;
build_data.spawn_list.push((idx, "door".to_string()));
}
'g' => {
build_data.map.tiles[idx] = TileType::Floor;
build_data.spawn_list.push((idx, "goblin".to_string()));