Decorations: Fix decoration height check errors

Fix height check comparison from '>=' to '>'.
Fix getHeight() for schematic decorations to account for
'deco place center y' flag and for how normal placement
sinks schematic 1 node into the ground.

Jungletrees were not being placed at y = 46, y = 47 despite
having an acceptable 16 nodes of height above ground surface.
master
paramat 2016-08-03 03:44:33 +01:00
parent ea12da939f
commit b6d845adb4
1 changed files with 6 additions and 2 deletions

View File

@ -145,7 +145,7 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
y < y_min || y > y_max) y < y_min || y > y_max)
continue; continue;
if (y + getHeight() >= mg->vm->m_area.MaxEdge.Y) { if (y + getHeight() > mg->vm->m_area.MaxEdge.Y) {
continue; continue;
#if 0 #if 0
printf("Decoration at (%d %d %d) cut off\n", x, y, z); printf("Decoration at (%d %d %d) cut off\n", x, y, z);
@ -370,5 +370,9 @@ size_t DecoSchematic::generate(MMVManip *vm, PcgRandom *pr, v3s16 p)
int DecoSchematic::getHeight() int DecoSchematic::getHeight()
{ {
return schematic->size.Y; // Account for a schematic being sunk into the ground by flag.
// When placed normally account for how a schematic is placed
// sunk 1 node into the ground.
return (flags & DECO_PLACE_CENTER_Y) ?
(schematic->size.Y - 1) / 2 : schematic->size.Y - 1;
} }