feat: tweak tilemap params
Signed-off-by: szdytom <szdytom@qq.com>
This commit is contained in:
parent
06a60b1a19
commit
ad68a23629
@ -15,11 +15,11 @@ struct GenerationConfig {
|
|||||||
Seed seed;
|
Seed seed;
|
||||||
|
|
||||||
// Noise parameters
|
// Noise parameters
|
||||||
double temperature_scale = 0.005; // Scale for temperature noise
|
double temperature_scale = 0.05; // Scale for temperature noise
|
||||||
int temperature_octaves = 3; // Number of octaves for temperature noise
|
int temperature_octaves = 3; // Number of octaves for temperature noise
|
||||||
double temperature_persistence = 0.4; // Persistence for temperature noise
|
double temperature_persistence = 0.4; // Persistence for temperature noise
|
||||||
|
|
||||||
double humidity_scale = 0.005; // Scale for humidity noise
|
double humidity_scale = 0.05; // Scale for humidity noise
|
||||||
int humidity_octaves = 3; // Number of octaves for humidity noise
|
int humidity_octaves = 3; // Number of octaves for humidity noise
|
||||||
double humidity_persistence = 0.4; // Persistence for humidity noise
|
double humidity_persistence = 0.4; // Persistence for humidity noise
|
||||||
|
|
||||||
@ -35,8 +35,8 @@ private:
|
|||||||
|
|
||||||
UniformPerlinNoise
|
UniformPerlinNoise
|
||||||
base_noise_; // For base terrain generation (uniform distribution)
|
base_noise_; // For base terrain generation (uniform distribution)
|
||||||
PerlinNoise temperature_noise_; // For temperature
|
UniformPerlinNoise temperature_noise_; // For temperature
|
||||||
PerlinNoise humidity_noise_; // For humidity
|
UniformPerlinNoise humidity_noise_; // For humidity
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
@ -11,11 +11,10 @@ constexpr BiomeProperties biome_properties[] = {
|
|||||||
// Snowy Peeks (Cold & Dry)
|
// Snowy Peeks (Cold & Dry)
|
||||||
{
|
{
|
||||||
.name = "Snowy Peeks",
|
.name = "Snowy Peeks",
|
||||||
|
|
||||||
.water_ratio = .05,
|
.water_ratio = .05,
|
||||||
.ice_ratio = .15,
|
.ice_ratio = .2,
|
||||||
.sand_ratio = .1,
|
.sand_ratio = .05,
|
||||||
.land_ratio = .2,
|
.land_ratio = .3,
|
||||||
},
|
},
|
||||||
// Snowy Plains (Cold & Moderate)
|
// Snowy Plains (Cold & Moderate)
|
||||||
{
|
{
|
||||||
@ -28,42 +27,42 @@ constexpr BiomeProperties biome_properties[] = {
|
|||||||
// Frozen Ocean (Cold & Wet)
|
// Frozen Ocean (Cold & Wet)
|
||||||
{
|
{
|
||||||
.name = "Frozen Ocean",
|
.name = "Frozen Ocean",
|
||||||
.water_ratio = .3,
|
.water_ratio = .1,
|
||||||
.ice_ratio = .4,
|
.ice_ratio = .7,
|
||||||
.sand_ratio = .25,
|
.sand_ratio = .25,
|
||||||
.land_ratio = .05,
|
.land_ratio = .05,
|
||||||
},
|
},
|
||||||
// Plains (Temperate & Dry)
|
// Plains (Temperate & Dry)
|
||||||
{
|
{
|
||||||
.name = "Plains",
|
.name = "Plains",
|
||||||
.water_ratio = .1,
|
.water_ratio = .05,
|
||||||
.ice_ratio = .0,
|
.ice_ratio = .0,
|
||||||
.sand_ratio = .05,
|
.sand_ratio = .05,
|
||||||
.land_ratio = .65,
|
.land_ratio = .7,
|
||||||
},
|
},
|
||||||
// Forest (Temperate & Moderate)
|
// Forest (Temperate & Moderate)
|
||||||
{
|
{
|
||||||
.name = "Forest",
|
.name = "Forest",
|
||||||
.water_ratio = .2,
|
.water_ratio = .1,
|
||||||
.ice_ratio = .0,
|
.ice_ratio = .0,
|
||||||
.sand_ratio = .1,
|
.sand_ratio = .05,
|
||||||
.land_ratio = .5,
|
.land_ratio = .75,
|
||||||
},
|
},
|
||||||
// Ocean (Temperate & Wet)
|
// Ocean (Temperate & Wet)
|
||||||
{
|
{
|
||||||
.name = "Ocean",
|
.name = "Ocean",
|
||||||
.water_ratio = .7,
|
.water_ratio = .8,
|
||||||
.ice_ratio = .0,
|
.ice_ratio = .0,
|
||||||
.sand_ratio = .2,
|
.sand_ratio = .15,
|
||||||
.land_ratio = .1,
|
.land_ratio = .05,
|
||||||
},
|
},
|
||||||
// Desert (Hot & Dry)
|
// Desert (Hot & Dry)
|
||||||
{
|
{
|
||||||
.name = "Desert",
|
.name = "Desert",
|
||||||
.water_ratio = .0,
|
.water_ratio = .0,
|
||||||
.ice_ratio = .0,
|
.ice_ratio = .0,
|
||||||
.sand_ratio = .75,
|
.sand_ratio = .8,
|
||||||
.land_ratio = .05,
|
.land_ratio = .0,
|
||||||
},
|
},
|
||||||
// Savanna (Hot & Moderate)
|
// Savanna (Hot & Moderate)
|
||||||
{
|
{
|
||||||
@ -78,8 +77,8 @@ constexpr BiomeProperties biome_properties[] = {
|
|||||||
.name = "Luke Ocean",
|
.name = "Luke Ocean",
|
||||||
.water_ratio = .8,
|
.water_ratio = .8,
|
||||||
.ice_ratio = .0,
|
.ice_ratio = .0,
|
||||||
.sand_ratio = .2,
|
.sand_ratio = .05,
|
||||||
.land_ratio = .0,
|
.land_ratio = .15,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -92,8 +91,8 @@ BiomeType determine_biome(double temperature, double humidity) {
|
|||||||
temperature = std::clamp(temperature, 0.0, 1.0);
|
temperature = std::clamp(temperature, 0.0, 1.0);
|
||||||
humidity = std::clamp(humidity, 0.0, 1.0);
|
humidity = std::clamp(humidity, 0.0, 1.0);
|
||||||
|
|
||||||
const double threshold1 = 0.4;
|
const double threshold1 = 0.33;
|
||||||
const double threshold2 = 0.6;
|
const double threshold2 = 0.67;
|
||||||
|
|
||||||
BiomeTemperature temp_category;
|
BiomeTemperature temp_category;
|
||||||
if (temperature < threshold1) {
|
if (temperature < threshold1) {
|
||||||
|
@ -11,15 +11,23 @@ TerrainGenerator::TerrainGenerator(const GenerationConfig &config)
|
|||||||
Xoroshiro128PP rng{config.seed};
|
Xoroshiro128PP rng{config.seed};
|
||||||
base_noise_ = UniformPerlinNoise(rng);
|
base_noise_ = UniformPerlinNoise(rng);
|
||||||
rng = rng.jump_96();
|
rng = rng.jump_96();
|
||||||
temperature_noise_ = PerlinNoise(rng);
|
temperature_noise_ = UniformPerlinNoise(rng);
|
||||||
rng = rng.jump_96();
|
rng = rng.jump_96();
|
||||||
humidity_noise_ = PerlinNoise(rng);
|
humidity_noise_ = UniformPerlinNoise(rng);
|
||||||
|
|
||||||
// Calibrate the uniform base noise with the same parameters that will be
|
|
||||||
// used for generation
|
|
||||||
base_noise_.calibrate(
|
base_noise_.calibrate(
|
||||||
config.base_scale, config.base_octaves, config.base_persistence
|
config.base_scale, config.base_octaves, config.base_persistence
|
||||||
);
|
);
|
||||||
|
|
||||||
|
temperature_noise_.calibrate(
|
||||||
|
config.temperature_scale, config.temperature_octaves,
|
||||||
|
config.temperature_persistence
|
||||||
|
);
|
||||||
|
|
||||||
|
humidity_noise_.calibrate(
|
||||||
|
config.humidity_scale, config.humidity_octaves,
|
||||||
|
config.humidity_persistence
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TerrainGenerator::generate_map(TileMap &tilemap) {
|
void TerrainGenerator::generate_map(TileMap &tilemap) {
|
||||||
@ -126,16 +134,14 @@ std::pair<double, double> TerrainGenerator::get_climate(
|
|||||||
double global_x, double global_y
|
double global_x, double global_y
|
||||||
) const {
|
) const {
|
||||||
// Generate temperature noise (0-1 range)
|
// Generate temperature noise (0-1 range)
|
||||||
double temperature = temperature_noise_.octave_noise(
|
double temperature = temperature_noise_.uniform_noise(
|
||||||
global_x * config_.temperature_scale,
|
global_x * config_.temperature_scale,
|
||||||
global_y * config_.temperature_scale, config_.temperature_octaves,
|
global_y * config_.temperature_scale
|
||||||
config_.temperature_persistence
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Generate humidity noise (0-1 range)
|
// Generate humidity noise (0-1 range)
|
||||||
double humidity = humidity_noise_.octave_noise(
|
double humidity = humidity_noise_.uniform_noise(
|
||||||
global_x * config_.humidity_scale, global_y * config_.humidity_scale,
|
global_x * config_.humidity_scale, global_y * config_.humidity_scale
|
||||||
config_.humidity_octaves, config_.humidity_persistence
|
|
||||||
);
|
);
|
||||||
|
|
||||||
return {temperature, humidity};
|
return {temperature, humidity};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user