From 45589fae58157c8a66c640a1db5795a42a86fc1c Mon Sep 17 00:00:00 2001 From: PilzAdam Date: Sat, 3 Aug 2013 01:58:29 +0200 Subject: Add replacements to schematics --- src/script/lua_api/luaapi.cpp | 40 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) (limited to 'src/script/lua_api/luaapi.cpp') diff --git a/src/script/lua_api/luaapi.cpp b/src/script/lua_api/luaapi.cpp index 0d4c7da7b..929aa40d0 100644 --- a/src/script/lua_api/luaapi.cpp +++ b/src/script/lua_api/luaapi.cpp @@ -808,7 +808,26 @@ int ModApiBasic::l_register_decoration(lua_State *L) dschem->flags = getflagsfield(L, index, "flags", flagdesc_deco_schematic); dschem->rotation = (Rotation)getenumfield(L, index, "rotation", es_Rotation, ROTATE_0); - + + lua_getfield(L, index, "replacements"); + if (lua_istable(L, -1)) { + int i = lua_gettop(L); + lua_pushnil(L); + while (lua_next(L, i) != 0) { + // key at index -2 and value at index -1 + lua_rawgeti(L, -1, 1); + std::string replace_from = lua_tostring(L, -1); + lua_pop(L, 1); + lua_rawgeti(L, -1, 2); + std::string replace_to = lua_tostring(L, -1); + lua_pop(L, 1); + dschem->replacements[replace_from] = replace_to; + // removes value, keeps key for next iteration + lua_pop(L, 1); + } + } + lua_pop(L, 1); + lua_getfield(L, index, "schematic"); if (!read_schematic(L, -1, dschem, getServer(L))) { delete dschem; @@ -888,7 +907,7 @@ int ModApiBasic::l_create_schematic(lua_State *L) } -// place_schematic(p, schematic, rotation) +// place_schematic(p, schematic, rotation, replacement) int ModApiBasic::l_place_schematic(lua_State *L) { DecoSchematic dschem; @@ -906,6 +925,23 @@ int ModApiBasic::l_place_schematic(lua_State *L) dschem.rotation = rot; + if (lua_istable(L, 4)) { + int index = 4; + lua_pushnil(L); + while (lua_next(L, index) != 0) { + // key at index -2 and value at index -1 + lua_rawgeti(L, -1, 1); + std::string replace_from = lua_tostring(L, -1); + lua_pop(L, 1); + lua_rawgeti(L, -1, 2); + std::string replace_to = lua_tostring(L, -1); + lua_pop(L, 1); + dschem.replacements[replace_from] = replace_to; + // removes value, keeps key for next iteration + lua_pop(L, 1); + } + } + if (!dschem.filename.empty()) { if (!dschem.loadSchematicFile()) { errorstream << "place_schematic: failed to load schematic file '" -- cgit v1.2.3