Decoration API: Fix missing low density decorations

For a decoration count between 0 and 1 calculate a chance for 1
master
paramat 2015-11-13 07:16:15 +00:00
parent 987d6a82f6
commit fc89f46700
1 changed files with 9 additions and 1 deletions

View File

@ -117,7 +117,15 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
float nval = (flags & DECO_USE_NOISE) ? float nval = (flags & DECO_USE_NOISE) ?
NoisePerlin2D(&np, p2d_center.X, p2d_center.Y, mapseed) : NoisePerlin2D(&np, p2d_center.X, p2d_center.Y, mapseed) :
fill_ratio; fill_ratio;
u32 deco_count = area * MYMAX(nval, 0.f); u32 deco_count = 0;
float deco_count_f = (float)area * nval;
if (deco_count_f >= 1.f) {
deco_count = deco_count_f;
} else if (deco_count_f > 0.f) {
// For low density decorations calculate a chance for 1 decoration
if (ps.range(1000) <= deco_count_f * 1000.f)
deco_count = 1;
}
for (u32 i = 0; i < deco_count; i++) { for (u32 i = 0; i < deco_count; i++) {
s16 x = ps.range(p2d_min.X, p2d_max.X); s16 x = ps.range(p2d_min.X, p2d_max.X);