forked from Mirrorlandia_minetest/minetest
Mapgen Flat: Fix and improve getSpawnLevelAtPoint() (#8756)
Previously, this wrongly returned ground level (a position containing a solid node) as spawn level. Return ground level + 2 (+ 2 to spawn above biome 'dust' nodes). Improve codestyle and make more consistent with generateTerrain().
This commit is contained in:
parent
ac856b20bf
commit
8da35c22d1
@ -143,26 +143,31 @@ void MapgenFlatParams::writeParams(Settings *settings) const
|
|||||||
|
|
||||||
int MapgenFlat::getSpawnLevelAtPoint(v2s16 p)
|
int MapgenFlat::getSpawnLevelAtPoint(v2s16 p)
|
||||||
{
|
{
|
||||||
s16 level_at_point = ground_level;
|
s16 stone_level = ground_level;
|
||||||
float n_terrain = 0.0f;
|
float n_terrain =
|
||||||
if ((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS))
|
((spflags & MGFLAT_LAKES) || (spflags & MGFLAT_HILLS)) ?
|
||||||
n_terrain = NoisePerlin2D(&noise_terrain->np, p.X, p.Y, seed);
|
NoisePerlin2D(&noise_terrain->np, p.X, p.Y, seed) :
|
||||||
|
0.0f;
|
||||||
|
|
||||||
if ((spflags & MGFLAT_LAKES) && n_terrain < lake_threshold) {
|
if ((spflags & MGFLAT_LAKES) && n_terrain < lake_threshold) {
|
||||||
level_at_point = ground_level -
|
s16 depress = (lake_threshold - n_terrain) * lake_steepness;
|
||||||
(lake_threshold - n_terrain) * lake_steepness;
|
stone_level = ground_level - depress;
|
||||||
} else if ((spflags & MGFLAT_HILLS) && n_terrain > hill_threshold) {
|
} else if ((spflags & MGFLAT_HILLS) && n_terrain > hill_threshold) {
|
||||||
level_at_point = ground_level +
|
s16 rise = (n_terrain - hill_threshold) * hill_steepness;
|
||||||
(n_terrain - hill_threshold) * hill_steepness;
|
stone_level = ground_level + rise;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ground_level < water_level) // Ocean world, allow spawn in water
|
if (ground_level < water_level)
|
||||||
return MYMAX(level_at_point, water_level);
|
// Ocean world, may not have islands so allow spawn in water
|
||||||
|
return MYMAX(stone_level + 2, water_level);
|
||||||
|
|
||||||
if (level_at_point > water_level)
|
if (stone_level >= water_level)
|
||||||
return level_at_point; // Spawn on land
|
// Spawn on land
|
||||||
|
// + 2 not + 1, to spawn above biome 'dust' nodes
|
||||||
|
return stone_level + 2;
|
||||||
|
|
||||||
return MAX_MAP_GENERATION_LIMIT; // Unsuitable spawn point
|
// Unsuitable spawn point
|
||||||
|
return MAX_MAP_GENERATION_LIMIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user