Skip to main content

steel_core/worldgen/structure/
mod.rs

1//! Core chunk adapter for the worldgen structure engine.
2
3pub(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
14/// Generates structure starts and writes them into the chunk.
15pub 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}