From c3708b456e90bccf19e7c82c54a93c8cb7c8896c Mon Sep 17 00:00:00 2001 From: kwolekr Date: Sat, 14 Dec 2013 01:52:06 -0500 Subject: Add map feature generation notify Lua API --- src/script/lua_api/l_mapgen.cpp | 50 +++++++++++++++++++++++++++++++++-------- src/script/lua_api/l_mapgen.h | 3 +++ 2 files changed, 44 insertions(+), 9 deletions(-) (limited to 'src/script') diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index fe7ac8dd6..5489531b6 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -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 *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); diff --git a/src/script/lua_api/l_mapgen.h b/src/script/lua_api/l_mapgen.h index d0da5bb13..43fd6a09f 100644 --- a/src/script/lua_api/l_mapgen.h +++ b/src/script/lua_api/l_mapgen.h @@ -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); -- cgit v1.2.3