steel_core/worldgen/structure/
mod.rs1pub(crate) mod piece_placer;
4
5use crate::chunk::Chunk;
6use steel_utils::Identifier;
7use steel_worldgen::structure::StructureGenerationContext;
8
9pub use steel_worldgen::structure::{
10 FixedStructureBiomeProvider, StructureGenerator, StructureLocateCandidate, StructureLocatePlan,
11 squared_distance,
12};
13
14pub fn create_structures(
16 generator: &StructureGenerator,
17 chunk: &Chunk,
18 ctx: &mut dyn StructureGenerationContext,
19) {
20 let starts = generator.generate_starts_for_chunk(ctx, |structure: &Identifier| {
21 chunk
22 .structure_starts()
23 .get(structure)
24 .is_some_and(|start| !start.pieces.is_empty())
25 });
26
27 if starts.is_empty() {
28 return;
29 }
30
31 {
32 let mut chunk_starts = chunk.structure_starts_mut();
33 for start in starts {
34 chunk_starts.insert(start.structure.clone(), start);
35 }
36 }
37 chunk.mark_dirty();
38}