mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Simplify and optimize schematic replacements
This commit is contained in:
parent
b8ba6318d6
commit
2f170a63c6
2 changed files with 29 additions and 29 deletions
|
@ -78,6 +78,31 @@ struct EnumString ModApiMapgen::es_Rotation[] =
|
|||
};
|
||||
|
||||
|
||||
static void read_schematic_replacements(lua_State *L, DecoSchematic *dschem, int index)
|
||||
{
|
||||
lua_pushnil(L);
|
||||
while (lua_next(L, index)) {
|
||||
// key at index -2 and value at index -1
|
||||
std::string replace_from;
|
||||
std::string replace_to;
|
||||
if (lua_istable(L, -1)) { // Old {{"x", "y"}, ...} format
|
||||
lua_rawgeti(L, -1, 1);
|
||||
replace_from = lua_tostring(L, -1);
|
||||
lua_pop(L, 1);
|
||||
lua_rawgeti(L, -1, 2);
|
||||
replace_to = lua_tostring(L, -1);
|
||||
lua_pop(L, 1);
|
||||
} else { // New {x = "y", ...} format
|
||||
replace_from = lua_tostring(L, -2);
|
||||
replace_to = lua_tostring(L, -1);
|
||||
}
|
||||
dschem->replacements[replace_from] = replace_to;
|
||||
// removes value, keeps key for next iteration
|
||||
lua_pop(L, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// get_mapgen_object(objectname)
|
||||
// returns the requested object used during map generation
|
||||
int ModApiMapgen::l_get_mapgen_object(lua_State *L)
|
||||
|
@ -414,20 +439,7 @@ int ModApiMapgen::l_register_decoration(lua_State *L)
|
|||
|
||||
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);
|
||||
}
|
||||
read_schematic_replacements(L, dschem, lua_gettop(L));
|
||||
}
|
||||
lua_pop(L, 1);
|
||||
|
||||
|
@ -602,19 +614,7 @@ int ModApiMapgen::l_place_schematic(lua_State *L)
|
|||
dschem.rotation = (Rotation)rot;
|
||||
|
||||
if (lua_istable(L, 4)) {
|
||||
lua_pushnil(L);
|
||||
while (lua_next(L, 4) != 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);
|
||||
}
|
||||
read_schematic_replacements(L, &dschem, 4);
|
||||
}
|
||||
|
||||
bool force_placement = true;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue