mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Add map feature generation notify Lua API
This commit is contained in:
parent
83853ccd41
commit
c3708b456e
12 changed files with 252 additions and 151 deletions
|
@ -54,6 +54,7 @@ struct EnumString ModApiMapgen::es_MapgenObject[] =
|
|||
{MGOBJ_BIOMEMAP, "biomemap"},
|
||||
{MGOBJ_HEATMAP, "heatmap"},
|
||||
{MGOBJ_HUMIDMAP, "humiditymap"},
|
||||
{MGOBJ_GENNOTIFY, "gennotify"},
|
||||
{0, NULL},
|
||||
};
|
||||
|
||||
|
@ -95,8 +96,6 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L)
|
|||
|
||||
size_t maplen = mg->csize.X * mg->csize.Z;
|
||||
|
||||
int nargs = 1;
|
||||
|
||||
switch (mgobj) {
|
||||
case MGOBJ_VMANIP: {
|
||||
ManualMapVoxelManipulator *vm = mg->vm;
|
||||
|
@ -113,9 +112,7 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L)
|
|||
// emerged max pos
|
||||
push_v3s16(L, vm->m_area.MaxEdge);
|
||||
|
||||
nargs = 3;
|
||||
|
||||
break; }
|
||||
return 3; }
|
||||
case MGOBJ_HEIGHTMAP: {
|
||||
if (!mg->heightmap)
|
||||
return 0;
|
||||
|
@ -125,7 +122,8 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L)
|
|||
lua_pushinteger(L, mg->heightmap[i]);
|
||||
lua_rawseti(L, -2, i + 1);
|
||||
}
|
||||
break; }
|
||||
|
||||
return 1; }
|
||||
case MGOBJ_BIOMEMAP: {
|
||||
if (!mg->biomemap)
|
||||
return 0;
|
||||
|
@ -135,7 +133,8 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L)
|
|||
lua_pushinteger(L, mg->biomemap[i]);
|
||||
lua_rawseti(L, -2, i + 1);
|
||||
}
|
||||
break; }
|
||||
|
||||
return 1; }
|
||||
case MGOBJ_HEATMAP: { // Mapgen V7 specific objects
|
||||
case MGOBJ_HUMIDMAP:
|
||||
if (strcmp(emerge->params->mg_name.c_str(), "v7"))
|
||||
|
@ -153,10 +152,32 @@ int ModApiMapgen::l_get_mapgen_object(lua_State *L)
|
|||
lua_pushnumber(L, arr[i]);
|
||||
lua_rawseti(L, -2, i + 1);
|
||||
}
|
||||
break; }
|
||||
|
||||
return 1; }
|
||||
case MGOBJ_GENNOTIFY: {
|
||||
lua_newtable(L);
|
||||
for (int i = 0; flagdesc_gennotify[i].name; i++) {
|
||||
if (!(emerge->gennotify & flagdesc_gennotify[i].flag))
|
||||
continue;
|
||||
|
||||
std::vector<v3s16> *posvec = mg->gen_notifications[i];
|
||||
if (!posvec)
|
||||
return 0;
|
||||
|
||||
lua_newtable(L);
|
||||
for (unsigned int j = 0; j != posvec->size(); j++) {
|
||||
push_v3s16(L, (*posvec)[j]);
|
||||
lua_rawseti(L, -2, j + 1);
|
||||
}
|
||||
lua_setfield(L, -2, flagdesc_gennotify[i].name);
|
||||
|
||||
posvec->clear();
|
||||
}
|
||||
|
||||
return 1; }
|
||||
}
|
||||
|
||||
return nargs;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// minetest.set_mapgen_params(params)
|
||||
|
@ -214,6 +235,16 @@ int ModApiMapgen::l_set_mapgen_params(lua_State *L)
|
|||
return 0;
|
||||
}
|
||||
|
||||
// set_gen_notify(string)
|
||||
int ModApiMapgen::l_set_gen_notify(lua_State *L)
|
||||
{
|
||||
if (lua_isstring(L, 1)) {
|
||||
EmergeManager *emerge = getServer(L)->getEmergeManager();
|
||||
emerge->gennotify = readFlagString(lua_tostring(L, 1), flagdesc_gennotify);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// register_biome({lots of stuff})
|
||||
int ModApiMapgen::l_register_biome(lua_State *L)
|
||||
{
|
||||
|
@ -581,6 +612,7 @@ void ModApiMapgen::Initialize(lua_State *L, int top)
|
|||
API_FCT(get_mapgen_object);
|
||||
|
||||
API_FCT(set_mapgen_params);
|
||||
API_FCT(set_gen_notify);
|
||||
|
||||
API_FCT(register_biome);
|
||||
API_FCT(register_decoration);
|
||||
|
|
|
@ -32,6 +32,9 @@ private:
|
|||
// set mapgen parameters
|
||||
static int l_set_mapgen_params(lua_State *L);
|
||||
|
||||
// set_gen_notify(flagstring)
|
||||
static int l_set_gen_notify(lua_State *L);
|
||||
|
||||
// register_biome({lots of stuff})
|
||||
static int l_register_biome(lua_State *L);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue