From 656575b59d4f0d67452cca7409c9064f690f038c Mon Sep 17 00:00:00 2001 From: kwolekr Date: Thu, 7 May 2015 02:34:15 -0400 Subject: NodeResolver: Remove NodeResolveMethod This simplifies NodeResolver logic and makes some interfaces cleaner. --- src/script/lua_api/l_mapgen.cpp | 69 +++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 41 deletions(-) (limited to 'src/script') diff --git a/src/script/lua_api/l_mapgen.cpp b/src/script/lua_api/l_mapgen.cpp index 7057344ab..d99f40ccd 100644 --- a/src/script/lua_api/l_mapgen.cpp +++ b/src/script/lua_api/l_mapgen.cpp @@ -92,14 +92,6 @@ struct EnumString ModApiMapgen::es_SchematicFormatType[] = {0, NULL}, }; -struct EnumString ModApiMapgen::es_NodeResolveMethod[] = -{ - {NODE_RESOLVE_NONE, "none"}, - {NODE_RESOLVE_DIRECT, "direct"}, - {NODE_RESOLVE_DEFERRED, "deferred"}, - {0, NULL}, -}; - ObjDef *get_objdef(lua_State *L, int index, ObjDefManager *objmgr); Biome *get_or_load_biome(lua_State *L, int index, @@ -109,14 +101,11 @@ size_t get_biome_list(lua_State *L, int index, BiomeManager *biomemgr, std::set *biome_id_list); Schematic *get_or_load_schematic(lua_State *L, int index, - SchematicManager *schemmgr, StringMap *replace_names, - bool register_on_load=true, - NodeResolveMethod resolve_method=NODE_RESOLVE_DEFERRED); + SchematicManager *schemmgr, StringMap *replace_names); Schematic *load_schematic(lua_State *L, int index, INodeDefManager *ndef, - StringMap *replace_names, NodeResolveMethod resolve_method); + StringMap *replace_names); Schematic *load_schematic_from_def(lua_State *L, int index, - INodeDefManager *ndef, StringMap *replace_names, - NodeResolveMethod resolve_method); + INodeDefManager *ndef, StringMap *replace_names); bool read_schematic_def(lua_State *L, int index, Schematic *schem, std::vector *names); @@ -145,9 +134,7 @@ ObjDef *get_objdef(lua_State *L, int index, ObjDefManager *objmgr) /////////////////////////////////////////////////////////////////////////////// Schematic *get_or_load_schematic(lua_State *L, int index, - SchematicManager *schemmgr, StringMap *replace_names, - bool register_on_load, - NodeResolveMethod resolve_method) + SchematicManager *schemmgr, StringMap *replace_names) { if (index < 0) index = lua_gettop(L) + 1 + index; @@ -157,13 +144,10 @@ Schematic *get_or_load_schematic(lua_State *L, int index, return schem; schem = load_schematic(L, index, schemmgr->getNodeDef(), - replace_names, resolve_method); + replace_names); if (!schem) return NULL; - if (!register_on_load) - return schem; - if (schemmgr->add(schem) == OBJDEF_INVALID_HANDLE) { delete schem; return NULL; @@ -174,7 +158,7 @@ Schematic *get_or_load_schematic(lua_State *L, int index, Schematic *load_schematic(lua_State *L, int index, INodeDefManager *ndef, - StringMap *replace_names, NodeResolveMethod resolve_method) + StringMap *replace_names) { if (index < 0) index = lua_gettop(L) + 1 + index; @@ -183,7 +167,7 @@ Schematic *load_schematic(lua_State *L, int index, INodeDefManager *ndef, if (lua_istable(L, index)) { schem = load_schematic_from_def(L, index, ndef, - replace_names, resolve_method); + replace_names); if (!schem) { delete schem; return NULL; @@ -198,7 +182,7 @@ Schematic *load_schematic(lua_State *L, int index, INodeDefManager *ndef, filepath = ModApiBase::getCurrentModPath(L) + DIR_DELIM + filepath; if (!schem->loadSchematicFromFile(filepath, ndef, - replace_names, resolve_method)) { + replace_names)) { delete schem; return NULL; } @@ -208,8 +192,8 @@ Schematic *load_schematic(lua_State *L, int index, INodeDefManager *ndef, } -Schematic *load_schematic_from_def(lua_State *L, int index, INodeDefManager *ndef, - StringMap *replace_names, NodeResolveMethod resolve_method) +Schematic *load_schematic_from_def(lua_State *L, int index, + INodeDefManager *ndef, StringMap *replace_names) { Schematic *schem = SchematicManager::create(SCHEMATIC_NORMAL); @@ -230,7 +214,7 @@ Schematic *load_schematic_from_def(lua_State *L, int index, INodeDefManager *nde } } - ndef->pendNodeResolve(schem, resolve_method); + ndef->pendNodeResolve(schem); return schem; } @@ -406,7 +390,7 @@ Biome *read_biome_def(lua_State *L, int index, INodeDefManager *ndef) nn.push_back(getstringfield_default(L, index, "node_water", "")); nn.push_back(getstringfield_default(L, index, "node_river_water", "")); nn.push_back(getstringfield_default(L, index, "node_dust", "")); - ndef->pendNodeResolve(b, NODE_RESOLVE_DEFERRED); + ndef->pendNodeResolve(b); return b; } @@ -770,7 +754,7 @@ int ModApiMapgen::l_register_decoration(lua_State *L) return 0; } - ndef->pendNodeResolve(deco, NODE_RESOLVE_DEFERRED); + ndef->pendNodeResolve(deco); ObjDefHandle handle = decomgr->add(deco); if (handle == OBJDEF_INVALID_HANDLE) { @@ -928,7 +912,7 @@ int ModApiMapgen::l_register_ore(lua_State *L) size_t nnames = getstringlistfield(L, index, "wherein", &ore->m_nodenames); ore->m_nnlistsizes.push_back(nnames); - ndef->pendNodeResolve(ore, NODE_RESOLVE_DEFERRED); + ndef->pendNodeResolve(ore); lua_pushinteger(L, handle); return 1; @@ -945,7 +929,7 @@ int ModApiMapgen::l_register_schematic(lua_State *L) read_schematic_replacements(L, 2, &replace_names); Schematic *schem = load_schematic(L, 1, schemmgr->getNodeDef(), - &replace_names, NODE_RESOLVE_DEFERRED); + &replace_names); if (!schem) return 0; @@ -1138,8 +1122,7 @@ int ModApiMapgen::l_place_schematic(lua_State *L) return 0; } - schem->placeStructure(map, p, 0, (Rotation)rot, force_placement, - schemmgr->getNodeDef()); + schem->placeStructure(map, p, 0, (Rotation)rot, force_placement); lua_pushboolean(L, true); return 1; @@ -1151,14 +1134,15 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L) SchematicManager *schemmgr = getServer(L)->getEmergeManager()->schemmgr; //// Read options - NodeResolveMethod resolve_method = (NodeResolveMethod)getenumfield(L, 3, - "node_resolve_method", es_NodeResolveMethod, NODE_RESOLVE_NONE); - bool register_on_load = getboolfield_default(L, 3, "register_on_load", false); bool use_comments = getboolfield_default(L, 3, "use_lua_comments", false); - //// Read schematic - Schematic *schem = get_or_load_schematic(L, 1, schemmgr, NULL, - register_on_load, resolve_method); + //// Get schematic + bool was_loaded = false; + Schematic *schem = (Schematic *)get_objdef(L, 1, schemmgr); + if (!schem) { + schem = load_schematic(L, 1, NULL, NULL); + was_loaded = true; + } if (!schem) { errorstream << "serialize_schematic: failed to get schematic" << std::endl; return 0; @@ -1174,15 +1158,18 @@ int ModApiMapgen::l_serialize_schematic(lua_State *L) std::ostringstream os(std::ios_base::binary); switch (schem_format) { case SCHEM_FMT_MTS: - schem->serializeToMts(&os); + schem->serializeToMts(&os, schem->m_nodenames); break; case SCHEM_FMT_LUA: - schem->serializeToLua(&os, use_comments); + schem->serializeToLua(&os, schem->m_nodenames, use_comments); break; default: return 0; } + if (was_loaded) + delete schem; + std::string ser = os.str(); lua_pushlstring(L, ser.c_str(), ser.length()); return 1; -- cgit v1.2.3