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

@ -43,13 +43,7 @@ pub fn setup_log() {
for _ in 0..5 {
Logger::new().log();
}
Logger::new()
.append("Welcome!")
.colour(rltk::CYAN)
.append("(")
.append("pretend i wrote a paragraph explaining why you're here")
.append(")")
.log();
Logger::new().append("Welcome!").colour(rltk::CYAN).append("Press [?] at any time to view controls").period().log();
}
pub fn clone_log() -> Vec<Vec<crate::gamelog::LogFragment>> {

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()));

View file

@ -228,7 +228,7 @@ pub fn scroll_table(_map_depth: i32) -> RandomTable {
.add("fireball scroll", 2)
.add("cursed fireball scroll", 2)
.add("confusion scroll", 4)
.add("magic missile scroll", 10)
.add("magic missile scroll", 6)
.add("magic map scroll", 4)
.add("cursed magic map scroll", 2);
}