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:
parent
a637107a4e
commit
241fe649f7
5 changed files with 197 additions and 79 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue