Add weights to biomes

This commit is contained in:
Erich Schubert 2024-09-10 16:51:28 +02:00 committed by Erich Schubert
parent 733a019bf5
commit 775cbef905
4 changed files with 10 additions and 1 deletions

View File

@ -10411,6 +10411,9 @@ performance and computing power the practical limit is much lower.
-- distribution of the biomes.
-- Heat and humidity have average values of 50, vary mostly between
-- 0 and 100 but can exceed these values.
weight = 1.0,
-- Relative weight of the biome in the Voronoi diagram
}
```

View File

@ -54,6 +54,7 @@ BiomeManager::BiomeManager(Server *server) :
b->heat_point = 0.0;
b->humidity_point = 0.0;
b->vertical_blend = 0;
b->weight = 1.0f;
b->m_nodenames.emplace_back("mapgen_stone");
b->m_nodenames.emplace_back("mapgen_stone");
@ -271,7 +272,9 @@ Biome *BiomeGenOriginal::calcBiomeFromNoise(float heat, float humidity, v3s16 po
float d_heat = heat - b->heat_point;
float d_humidity = humidity - b->humidity_point;
float dist = (d_heat * d_heat) + (d_humidity * d_humidity);
float dist = ((d_heat * d_heat) + (d_humidity * d_humidity));
if (b->weight > 0.f)
dist /= b->weight;
if (pos.Y <= b->max_pos.Y) { // Within y limits of biome b
if (dist < dist_min) {
@ -336,6 +339,7 @@ ObjDef *Biome::clone() const
obj->heat_point = heat_point;
obj->humidity_point = humidity_point;
obj->vertical_blend = vertical_blend;
obj->weight = weight;
return obj;
}

View File

@ -69,6 +69,7 @@ public:
float heat_point;
float humidity_point;
s16 vertical_blend;
float weight;
virtual void resolveNodeNames();
};

View File

@ -389,6 +389,7 @@ Biome *read_biome_def(lua_State *L, int index, const NodeDefManager *ndef)
b->heat_point = getfloatfield_default(L, index, "heat_point", 0.f);
b->humidity_point = getfloatfield_default(L, index, "humidity_point", 0.f);
b->vertical_blend = getintfield_default(L, index, "vertical_blend", 0);
b->weight = getfloatfield_default(L, index, "weight", 1.f);
b->flags = 0; // reserved
b->min_pos = getv3s16field_default(