chunkgen 0.2.0

Minecraft world generation library
Documentation
use crate::world::worldgen::aquifer::{Aquifer, FluidPicker};
use crate::world::worldgen::beardifier::Beardifier;
use crate::world::worldgen::densityfunction::context::SamplerContext;
use crate::world::worldgen::densityfunction::volume::DensityVolume;
use crate::world::worldgen::noise_generator_settings::NoiseGeneratorSettings;
use crate::world::worldgen::random_state::RandomState;

const AQUIFER_RANDOM: &str = "minecraft:aquifer";

pub struct NoiseChunk<'a> {
    pub volume: DensityVolume,
    pub aquifer: Aquifer,
    pub caching_samplers: SamplerContext<'a>,
}

impl<'a> NoiseChunk<'a> {
    pub fn new(
        random_state: &RandomState,
        beardifier: Option<&'a Beardifier>,
        settings: &NoiseGeneratorSettings,
        global_fluid_picker: FluidPicker,
        volume: DensityVolume,
    ) -> Self {
        let mut caching_samplers = SamplerContext::cached().with_beardifier(beardifier);
        let aquifer = match &settings.aquifers {
            Some(config) => config.create(
                random_state,
                &mut caching_samplers,
                random_state.get_or_create_random_factory(AQUIFER_RANDOM),
                &volume,
                global_fluid_picker,
            ),
            None => Aquifer::create_disabled(global_fluid_picker),
        };
        Self {
            volume,
            aquifer,
            caching_samplers,
        }
    }
}