Defer to read_from_map in VoxelManip ctor

concrete problem: the getEmergeThread safety check was missing there
This commit is contained in:
sfan5
2024-10-10 16:59:21 +02:00
parent 244f4f285a
commit d95e916a42
2 changed files with 14 additions and 16 deletions

View File

@ -369,36 +369,35 @@ LuaVoxelManip::LuaVoxelManip(Map *map) : vm(new MMVManip(map))
{
}
LuaVoxelManip::LuaVoxelManip(Map *map, v3s16 p1, v3s16 p2)
{
vm = new MMVManip(map);
v3s16 bp1 = getNodeBlockPos(p1);
v3s16 bp2 = getNodeBlockPos(p2);
sortBoxVerticies(bp1, bp2);
vm->initialEmerge(bp1, bp2);
}
LuaVoxelManip::~LuaVoxelManip()
{
if (!is_mapgen_vm)
delete vm;
}
// LuaVoxelManip()
// LuaVoxelManip([p1, p2])
// Creates an LuaVoxelManip and leaves it on top of stack
int LuaVoxelManip::create_object(lua_State *L)
{
GET_ENV_PTR;
Map *map = &(env->getMap());
LuaVoxelManip *o = (lua_istable(L, 1) && lua_istable(L, 2)) ?
new LuaVoxelManip(map, check_v3s16(L, 1), check_v3s16(L, 2)) :
new LuaVoxelManip(map);
LuaVoxelManip *o = new LuaVoxelManip(&env->getMap());
*(void **)(lua_newuserdata(L, sizeof(void *))) = o;
luaL_getmetatable(L, className);
lua_setmetatable(L, -2);
// Call read_from_map so we don't have to duplicate it here
const int top = lua_gettop(L);
if (lua_istable(L, 1) && lua_istable(L, 2)) {
lua_pushcfunction(L, l_read_from_map);
lua_pushvalue(L, top);
lua_pushvalue(L, 1);
lua_pushvalue(L, 2);
lua_call(L, 3, 0);
}
lua_settop(L, top);
return 1;
}

View File

@ -64,7 +64,6 @@ public:
MMVManip *vm = nullptr;
LuaVoxelManip(MMVManip *mmvm, bool is_mapgen_vm);
LuaVoxelManip(Map *map, v3s16 p1, v3s16 p2);
LuaVoxelManip(Map *map);
~LuaVoxelManip();