forked from Mirrorlandia_minetest/minetest
Use std::vector instead of dynamic C-Array (#6744)
This commit is contained in:
parent
da298a26ff
commit
d677f292cc
@ -301,10 +301,8 @@ void Mapgen::updateHeightmap(v3s16 nmin, v3s16 nmax)
|
|||||||
|
|
||||||
|
|
||||||
void Mapgen::getSurfaces(v2s16 p2d, s16 ymin, s16 ymax,
|
void Mapgen::getSurfaces(v2s16 p2d, s16 ymin, s16 ymax,
|
||||||
s16 *floors, s16 *ceilings, u16 *num_floors, u16 *num_ceilings)
|
std::vector<s16> &floors, std::vector<s16> &ceilings)
|
||||||
{
|
{
|
||||||
u16 floor_i = 0;
|
|
||||||
u16 ceiling_i = 0;
|
|
||||||
const v3s16 &em = vm->m_area.getExtent();
|
const v3s16 &em = vm->m_area.getExtent();
|
||||||
|
|
||||||
bool is_walkable = false;
|
bool is_walkable = false;
|
||||||
@ -318,19 +316,14 @@ void Mapgen::getSurfaces(v2s16 p2d, s16 ymin, s16 ymax,
|
|||||||
is_walkable = ndef->get(mn).walkable;
|
is_walkable = ndef->get(mn).walkable;
|
||||||
|
|
||||||
if (is_walkable && !walkable_above) {
|
if (is_walkable && !walkable_above) {
|
||||||
floors[floor_i] = y;
|
floors.push_back(y);
|
||||||
floor_i++;
|
|
||||||
} else if (!is_walkable && walkable_above) {
|
} else if (!is_walkable && walkable_above) {
|
||||||
ceilings[ceiling_i] = y + 1;
|
ceilings.push_back(y + 1);
|
||||||
ceiling_i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vm->m_area.add_y(em, vi, -1);
|
vm->m_area.add_y(em, vi, -1);
|
||||||
walkable_above = is_walkable;
|
walkable_above = is_walkable;
|
||||||
}
|
}
|
||||||
|
|
||||||
*num_floors = floor_i;
|
|
||||||
*num_ceilings = ceiling_i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -194,7 +194,7 @@ public:
|
|||||||
s16 findLiquidSurface(v2s16 p2d, s16 ymin, s16 ymax);
|
s16 findLiquidSurface(v2s16 p2d, s16 ymin, s16 ymax);
|
||||||
void updateHeightmap(v3s16 nmin, v3s16 nmax);
|
void updateHeightmap(v3s16 nmin, v3s16 nmax);
|
||||||
void getSurfaces(v2s16 p2d, s16 ymin, s16 ymax,
|
void getSurfaces(v2s16 p2d, s16 ymin, s16 ymax,
|
||||||
s16 *floors, s16 *ceilings, u16 *num_floors, u16 *num_ceilings);
|
std::vector<s16> &floors, std::vector<s16> &ceilings);
|
||||||
|
|
||||||
void updateLiquid(UniqueQueue<v3s16> *trans_liquid, v3s16 nmin, v3s16 nmax);
|
void updateLiquid(UniqueQueue<v3s16> *trans_liquid, v3s16 nmin, v3s16 nmax);
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "util/numeric.h"
|
#include "util/numeric.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
FlagDesc flagdesc_deco[] = {
|
FlagDesc flagdesc_deco[] = {
|
||||||
@ -186,18 +187,16 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
|
|||||||
|
|
||||||
// Get all floors and ceilings in node column
|
// Get all floors and ceilings in node column
|
||||||
u16 size = (nmax.Y - nmin.Y + 1) / 2;
|
u16 size = (nmax.Y - nmin.Y + 1) / 2;
|
||||||
s16 floors[size];
|
std::vector<s16> floors;
|
||||||
s16 ceilings[size];
|
std::vector<s16> ceilings;
|
||||||
u16 num_floors = 0;
|
floors.reserve(size);
|
||||||
u16 num_ceilings = 0;
|
ceilings.reserve(size);
|
||||||
|
|
||||||
mg->getSurfaces(v2s16(x, z), nmin.Y, nmax.Y,
|
mg->getSurfaces(v2s16(x, z), nmin.Y, nmax.Y, floors, ceilings);
|
||||||
floors, ceilings, &num_floors, &num_ceilings);
|
|
||||||
|
|
||||||
if ((flags & DECO_ALL_FLOORS) && num_floors > 0) {
|
if (flags & DECO_ALL_FLOORS) {
|
||||||
// Floor decorations
|
// Floor decorations
|
||||||
for (u16 fi = 0; fi < num_floors; fi++) {
|
for (const s16 y : floors) {
|
||||||
s16 y = floors[fi];
|
|
||||||
if (y < y_min || y > y_max)
|
if (y < y_min || y > y_max)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -208,10 +207,9 @@ size_t Decoration::placeDeco(Mapgen *mg, u32 blockseed, v3s16 nmin, v3s16 nmax)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((flags & DECO_ALL_CEILINGS) && num_ceilings > 0) {
|
if (flags & DECO_ALL_CEILINGS) {
|
||||||
// Ceiling decorations
|
// Ceiling decorations
|
||||||
for (u16 ci = 0; ci < num_ceilings; ci++) {
|
for (const s16 y : ceilings) {
|
||||||
s16 y = ceilings[ci];
|
|
||||||
if (y < y_min || y > y_max)
|
if (y < y_min || y > y_max)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user