Mapgen objects: Enable heatmap and humidmap for all biome api mapgens

This commit is contained in:
paramat 2015-06-19 00:17:03 +01:00
parent d7190df07e
commit 70da8a940b
6 changed files with 49 additions and 31 deletions

@ -67,33 +67,37 @@ FlagDesc flagdesc_gennotify[] = {
Mapgen::Mapgen() Mapgen::Mapgen()
{ {
generating = false; generating = false;
id = -1; id = -1;
seed = 0; seed = 0;
water_level = 0; water_level = 0;
flags = 0; flags = 0;
vm = NULL; vm = NULL;
ndef = NULL; ndef = NULL;
heightmap = NULL; heightmap = NULL;
biomemap = NULL; biomemap = NULL;
heatmap = NULL;
humidmap = NULL;
} }
Mapgen::Mapgen(int mapgenid, MapgenParams *params, EmergeManager *emerge) : Mapgen::Mapgen(int mapgenid, MapgenParams *params, EmergeManager *emerge) :
gennotify(emerge->gen_notify_on, &emerge->gen_notify_on_deco_ids) gennotify(emerge->gen_notify_on, &emerge->gen_notify_on_deco_ids)
{ {
generating = false; generating = false;
id = mapgenid; id = mapgenid;
seed = (int)params->seed; seed = (int)params->seed;
water_level = params->water_level; water_level = params->water_level;
flags = params->flags; flags = params->flags;
csize = v3s16(1, 1, 1) * (params->chunksize * MAP_BLOCKSIZE); csize = v3s16(1, 1, 1) * (params->chunksize * MAP_BLOCKSIZE);
vm = NULL; vm = NULL;
ndef = NULL; ndef = NULL;
heightmap = NULL; heightmap = NULL;
biomemap = NULL; biomemap = NULL;
heatmap = NULL;
humidmap = NULL;
} }

@ -152,6 +152,8 @@ public:
u32 blockseed; u32 blockseed;
s16 *heightmap; s16 *heightmap;
u8 *biomemap; u8 *biomemap;
float *heatmap;
float *humidmap;
v3s16 csize; v3s16 csize;
GenerateNotifier gennotify; GenerateNotifier gennotify;

@ -58,6 +58,8 @@ MapgenV5::MapgenV5(int mapgenid, MapgenParams *params, EmergeManager *emerge)
this->biomemap = new u8[csize.X * csize.Z]; this->biomemap = new u8[csize.X * csize.Z];
this->heightmap = new s16[csize.X * csize.Z]; this->heightmap = new s16[csize.X * csize.Z];
this->heatmap = NULL;
this->humidmap = NULL;
MapgenV5Params *sp = (MapgenV5Params *)params->sparams; MapgenV5Params *sp = (MapgenV5Params *)params->sparams;
this->spflags = sp->spflags; this->spflags = sp->spflags;
@ -341,6 +343,9 @@ void MapgenV5::calculateNoise()
noise_heat->result[i] += noise_heat_blend->result[i]; noise_heat->result[i] += noise_heat_blend->result[i];
noise_humidity->result[i] += noise_humidity_blend->result[i]; noise_humidity->result[i] += noise_humidity_blend->result[i];
} }
heatmap = noise_heat->result;
humidmap = noise_humidity->result;
//printf("calculateNoise: %dus\n", t.stop()); //printf("calculateNoise: %dus\n", t.stop());
} }

@ -24,9 +24,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#define LARGE_CAVE_DEPTH -256 #define LARGE_CAVE_DEPTH -256
/////////////////// Mapgen V5 flags
//#define MGV5_ 0x01
class BiomeManager; class BiomeManager;
extern FlagDesc flagdesc_mapgen_v5[]; extern FlagDesc flagdesc_mapgen_v5[];

@ -59,8 +59,10 @@ MapgenV7::MapgenV7(int mapgenid, MapgenParams *params, EmergeManager *emerge)
this->ystride = csize.X; this->ystride = csize.X;
this->zstride = csize.X * (csize.Y + 2); this->zstride = csize.X * (csize.Y + 2);
this->biomemap = new u8[csize.X * csize.Z]; this->biomemap = new u8[csize.X * csize.Z];
this->heightmap = new s16[csize.X * csize.Z]; this->heightmap = new s16[csize.X * csize.Z];
this->heatmap = NULL;
this->humidmap = NULL;
this->ridge_heightmap = new s16[csize.X * csize.Z]; this->ridge_heightmap = new s16[csize.X * csize.Z];
MapgenV7Params *sp = (MapgenV7Params *)params->sparams; MapgenV7Params *sp = (MapgenV7Params *)params->sparams;
@ -376,6 +378,9 @@ void MapgenV7::calculateNoise()
noise_heat->result[i] += noise_heat_blend->result[i]; noise_heat->result[i] += noise_heat_blend->result[i];
noise_humidity->result[i] += noise_humidity_blend->result[i]; noise_humidity->result[i] += noise_humidity_blend->result[i];
} }
heatmap = noise_heat->result;
humidmap = noise_humidity->result;
//printf("calculateNoise: %dus\n", t.stop()); //printf("calculateNoise: %dus\n", t.stop());
} }

@ -510,21 +510,26 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L)
return 1; return 1;
} }
case MGOBJ_HEATMAP: { // Mapgen V7 specific objects case MGOBJ_HEATMAP: {
case MGOBJ_HUMIDMAP: if (!mg->heatmap)
if (strcmp(emerge->params.mg_name.c_str(), "v7"))
return 0;
MapgenV7 *mgv7 = (MapgenV7 *)mg;
float *arr = (mgobj == MGOBJ_HEATMAP) ?
mgv7->noise_heat->result : mgv7->noise_humidity->result;
if (!arr)
return 0; return 0;
lua_newtable(L); lua_newtable(L);
for (size_t i = 0; i != maplen; i++) { for (size_t i = 0; i != maplen; i++) {
lua_pushnumber(L, arr[i]); lua_pushnumber(L, mg->heatmap[i]);
lua_rawseti(L, -2, i + 1);
}
return 1;
}
case MGOBJ_HUMIDMAP: {
if (!mg->humidmap)
return 0;
lua_newtable(L);
for (size_t i = 0; i != maplen; i++) {
lua_pushnumber(L, mg->humidmap[i]);
lua_rawseti(L, -2, i + 1); lua_rawseti(L, -2, i + 1);
} }