1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Biome API: Add decoration flags for underground decorations

Add "all_floors" and "all_ceilings" flags for simple and schematic
decorations. Decorations are placed on all floor and/or ceiling surfaces.
Decorations are placed before dungeon generation so placement in dungeons
is not possible.

Add 'getSurfaces()' function to mapgen.cpp that returns 2 arrays of y
coordinates for all floor and ceiling surfaces in a specified node column.

Move 'getHeight()' checks into DecoSimple and DecoSchematic. Delete
'getHeight()' functions.
This commit is contained in:
paramat 2017-10-11 01:06:40 +01:00 committed by paramat
parent a637107a4e
commit 241fe649f7
5 changed files with 197 additions and 79 deletions

View file

@ -299,6 +299,41 @@ void Mapgen::updateHeightmap(v3s16 nmin, v3s16 nmax)
}
}
void Mapgen::getSurfaces(v2s16 p2d, s16 ymin, s16 ymax,
s16 *floors, s16 *ceilings, u16 *num_floors, u16 *num_ceilings)
{
u16 floor_i = 0;
u16 ceiling_i = 0;
const v3s16 &em = vm->m_area.getExtent();
bool is_walkable = false;
u32 vi = vm->m_area.index(p2d.X, ymax, p2d.Y);
MapNode mn_max = vm->m_data[vi];
bool walkable_above = ndef->get(mn_max).walkable;
vm->m_area.add_y(em, vi, -1);
for (s16 y = ymax - 1; y >= ymin; y--) {
MapNode mn = vm->m_data[vi];
is_walkable = ndef->get(mn).walkable;
if (is_walkable && !walkable_above) {
floors[floor_i] = y;
floor_i++;
} else if (!is_walkable && walkable_above) {
ceilings[ceiling_i] = y + 1;
ceiling_i++;
}
vm->m_area.add_y(em, vi, -1);
walkable_above = is_walkable;
}
*num_floors = floor_i;
*num_ceilings = ceiling_i;
}
inline bool Mapgen::isLiquidHorizontallyFlowable(u32 vi, v3s16 em)
{
u32 vi_neg_x = vi;