feat: add biome properties for temperature, humidity, and ocean status

Signed-off-by: szdytom <szdytom@qq.com>
This commit is contained in:
方而静 2025-08-02 09:16:41 +08:00
parent ad68a23629
commit 7718d3fbf4
Signed by: szTom
GPG Key ID: 072D999D60C6473C
3 changed files with 33 additions and 2 deletions

View File

@ -36,6 +36,11 @@ struct BiomeProperties {
// Biome name for debugging
std::string_view name;
// Categories
BiomeTemperature temperature;
BiomeHumidity humidity;
bool is_ocean;
// Base terrain ratios (0.0 - 1.0)
double water_ratio;
double ice_ratio;

View File

@ -33,8 +33,7 @@ class TerrainGenerator {
private:
GenerationConfig config_;
UniformPerlinNoise
base_noise_; // For base terrain generation (uniform distribution)
UniformPerlinNoise base_noise_; // For base terrain
UniformPerlinNoise temperature_noise_; // For temperature
UniformPerlinNoise humidity_noise_; // For humidity

View File

@ -11,6 +11,9 @@ constexpr BiomeProperties biome_properties[] = {
// Snowy Peeks (Cold & Dry)
{
.name = "Snowy Peeks",
.temperature = BiomeTemperature::Cold,
.humidity = BiomeHumidity::Dry,
.is_ocean = false,
.water_ratio = .05,
.ice_ratio = .2,
.sand_ratio = .05,
@ -19,6 +22,9 @@ constexpr BiomeProperties biome_properties[] = {
// Snowy Plains (Cold & Moderate)
{
.name = "Snowy Plains",
.temperature = BiomeTemperature::Cold,
.humidity = BiomeHumidity::Moderate,
.is_ocean = false,
.water_ratio = .05,
.ice_ratio = .25,
.sand_ratio = .1,
@ -27,6 +33,9 @@ constexpr BiomeProperties biome_properties[] = {
// Frozen Ocean (Cold & Wet)
{
.name = "Frozen Ocean",
.temperature = BiomeTemperature::Cold,
.humidity = BiomeHumidity::Wet,
.is_ocean = true,
.water_ratio = .1,
.ice_ratio = .7,
.sand_ratio = .25,
@ -35,6 +44,9 @@ constexpr BiomeProperties biome_properties[] = {
// Plains (Temperate & Dry)
{
.name = "Plains",
.temperature = BiomeTemperature::Temperate,
.humidity = BiomeHumidity::Dry,
.is_ocean = false,
.water_ratio = .05,
.ice_ratio = .0,
.sand_ratio = .05,
@ -43,6 +55,9 @@ constexpr BiomeProperties biome_properties[] = {
// Forest (Temperate & Moderate)
{
.name = "Forest",
.temperature = BiomeTemperature::Temperate,
.humidity = BiomeHumidity::Moderate,
.is_ocean = false,
.water_ratio = .1,
.ice_ratio = .0,
.sand_ratio = .05,
@ -51,6 +66,9 @@ constexpr BiomeProperties biome_properties[] = {
// Ocean (Temperate & Wet)
{
.name = "Ocean",
.temperature = BiomeTemperature::Temperate,
.humidity = BiomeHumidity::Wet,
.is_ocean = true,
.water_ratio = .8,
.ice_ratio = .0,
.sand_ratio = .15,
@ -59,6 +77,9 @@ constexpr BiomeProperties biome_properties[] = {
// Desert (Hot & Dry)
{
.name = "Desert",
.temperature = BiomeTemperature::Hot,
.humidity = BiomeHumidity::Dry,
.is_ocean = false,
.water_ratio = .0,
.ice_ratio = .0,
.sand_ratio = .8,
@ -67,6 +88,9 @@ constexpr BiomeProperties biome_properties[] = {
// Savanna (Hot & Moderate)
{
.name = "Savanna",
.temperature = BiomeTemperature::Hot,
.humidity = BiomeHumidity::Moderate,
.is_ocean = false,
.water_ratio = .2,
.ice_ratio = .0,
.sand_ratio = .1,
@ -75,6 +99,9 @@ constexpr BiomeProperties biome_properties[] = {
// Luke Ocean (Hot & Wet)
{
.name = "Luke Ocean",
.temperature = BiomeTemperature::Hot,
.humidity = BiomeHumidity::Wet,
.is_ocean = true,
.water_ratio = .8,
.ice_ratio = .0,
.sand_ratio = .05,