using VoxelEngine.Core; using VoxelEngine.World.Blocks; namespace VoxelEngine.World.WorldGen.Biomes; public sealed class DesertBiome : IBiome { private readonly FastNoiseLite _detail; private readonly Configuration _cfg; public string Name => "Desert"; public SurfacePalette Surface { get; } public DesertBiome(int seed, BlockRegistry blocks, Configuration cfg) { this._cfg = cfg; this._detail = new FastNoiseLite(seed + 101); this._detail.SetNoiseType(FastNoiseLite.NoiseType.OpenSimplex2); this._detail.SetFrequency(cfg.DesertDetailFrequency); this.Surface = new SurfacePalette(blocks.Sand, blocks.Sand, blocks.Stone); } public float SampleHeight(NoiseSource noise, float worldX, float worldZ) => WorldConstants.SeaLevel + this._cfg.DesertContinentAmplitude * noise.Continent(worldX, worldZ) + this._cfg.DesertDetailAmplitude * this._detail.GetNoise(worldX, worldZ); public IBlock TopBlock(int worldY) => this.Surface.Top; }