mirror of
https://github.com/minetest/minetest.git
synced 2024-12-24 15:12:23 +01:00
parent
17345404ba
commit
6929206bc2
@ -31,9 +31,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
int LuaVoxelManip::gc_object(lua_State *L)
|
int LuaVoxelManip::gc_object(lua_State *L)
|
||||||
{
|
{
|
||||||
LuaVoxelManip *o = *(LuaVoxelManip **)(lua_touserdata(L, 1));
|
LuaVoxelManip *o = *(LuaVoxelManip **)(lua_touserdata(L, 1));
|
||||||
if (!o->is_mapgen_vm)
|
delete o;
|
||||||
delete o;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,16 +40,16 @@ int LuaVoxelManip::l_read_from_map(lua_State *L)
|
|||||||
{
|
{
|
||||||
LuaVoxelManip *o = checkobject(L, 1);
|
LuaVoxelManip *o = checkobject(L, 1);
|
||||||
ManualMapVoxelManipulator *vm = o->vm;
|
ManualMapVoxelManipulator *vm = o->vm;
|
||||||
|
|
||||||
v3s16 bp1 = getNodeBlockPos(read_v3s16(L, 2));
|
v3s16 bp1 = getNodeBlockPos(read_v3s16(L, 2));
|
||||||
v3s16 bp2 = getNodeBlockPos(read_v3s16(L, 3));
|
v3s16 bp2 = getNodeBlockPos(read_v3s16(L, 3));
|
||||||
sortBoxVerticies(bp1, bp2);
|
sortBoxVerticies(bp1, bp2);
|
||||||
|
|
||||||
vm->initialEmerge(bp1, bp2);
|
vm->initialEmerge(bp1, bp2);
|
||||||
|
|
||||||
push_v3s16(L, vm->m_area.MinEdge);
|
push_v3s16(L, vm->m_area.MinEdge);
|
||||||
push_v3s16(L, vm->m_area.MaxEdge);
|
push_v3s16(L, vm->m_area.MaxEdge);
|
||||||
|
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,39 +59,39 @@ int LuaVoxelManip::l_get_data(lua_State *L)
|
|||||||
|
|
||||||
LuaVoxelManip *o = checkobject(L, 1);
|
LuaVoxelManip *o = checkobject(L, 1);
|
||||||
ManualMapVoxelManipulator *vm = o->vm;
|
ManualMapVoxelManipulator *vm = o->vm;
|
||||||
|
|
||||||
int volume = vm->m_area.getVolume();
|
int volume = vm->m_area.getVolume();
|
||||||
|
|
||||||
lua_newtable(L);
|
lua_newtable(L);
|
||||||
for (int i = 0; i != volume; i++) {
|
for (int i = 0; i != volume; i++) {
|
||||||
lua_Integer cid = vm->m_data[i].getContent();
|
lua_Integer cid = vm->m_data[i].getContent();
|
||||||
lua_pushinteger(L, cid);
|
lua_pushinteger(L, cid);
|
||||||
lua_rawseti(L, -2, i + 1);
|
lua_rawseti(L, -2, i + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int LuaVoxelManip::l_set_data(lua_State *L)
|
int LuaVoxelManip::l_set_data(lua_State *L)
|
||||||
{
|
{
|
||||||
NO_MAP_LOCK_REQUIRED;
|
NO_MAP_LOCK_REQUIRED;
|
||||||
|
|
||||||
LuaVoxelManip *o = checkobject(L, 1);
|
LuaVoxelManip *o = checkobject(L, 1);
|
||||||
ManualMapVoxelManipulator *vm = o->vm;
|
ManualMapVoxelManipulator *vm = o->vm;
|
||||||
|
|
||||||
if (!lua_istable(L, 2))
|
if (!lua_istable(L, 2))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
int volume = vm->m_area.getVolume();
|
int volume = vm->m_area.getVolume();
|
||||||
for (int i = 0; i != volume; i++) {
|
for (int i = 0; i != volume; i++) {
|
||||||
lua_rawgeti(L, 2, i + 1);
|
lua_rawgeti(L, 2, i + 1);
|
||||||
content_t c = lua_tointeger(L, -1);
|
content_t c = lua_tointeger(L, -1);
|
||||||
|
|
||||||
vm->m_data[i].setContent(c);
|
vm->m_data[i].setContent(c);
|
||||||
|
|
||||||
lua_pop(L, 1);
|
lua_pop(L, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -103,7 +102,7 @@ int LuaVoxelManip::l_write_to_map(lua_State *L)
|
|||||||
|
|
||||||
vm->blitBackAll(&o->modified_blocks);
|
vm->blitBackAll(&o->modified_blocks);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int LuaVoxelManip::l_update_liquids(lua_State *L)
|
int LuaVoxelManip::l_update_liquids(lua_State *L)
|
||||||
@ -131,7 +130,7 @@ int LuaVoxelManip::l_update_liquids(lua_State *L)
|
|||||||
int LuaVoxelManip::l_calc_lighting(lua_State *L)
|
int LuaVoxelManip::l_calc_lighting(lua_State *L)
|
||||||
{
|
{
|
||||||
NO_MAP_LOCK_REQUIRED;
|
NO_MAP_LOCK_REQUIRED;
|
||||||
|
|
||||||
LuaVoxelManip *o = checkobject(L, 1);
|
LuaVoxelManip *o = checkobject(L, 1);
|
||||||
if (!o->is_mapgen_vm)
|
if (!o->is_mapgen_vm)
|
||||||
return 0;
|
return 0;
|
||||||
@ -150,7 +149,7 @@ int LuaVoxelManip::l_calc_lighting(lua_State *L)
|
|||||||
mg.vm = vm;
|
mg.vm = vm;
|
||||||
mg.ndef = ndef;
|
mg.ndef = ndef;
|
||||||
mg.water_level = emerge->params.water_level;
|
mg.water_level = emerge->params.water_level;
|
||||||
|
|
||||||
mg.calcLighting(p1, p2);
|
mg.calcLighting(p1, p2);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -159,20 +158,20 @@ int LuaVoxelManip::l_calc_lighting(lua_State *L)
|
|||||||
int LuaVoxelManip::l_set_lighting(lua_State *L)
|
int LuaVoxelManip::l_set_lighting(lua_State *L)
|
||||||
{
|
{
|
||||||
NO_MAP_LOCK_REQUIRED;
|
NO_MAP_LOCK_REQUIRED;
|
||||||
|
|
||||||
LuaVoxelManip *o = checkobject(L, 1);
|
LuaVoxelManip *o = checkobject(L, 1);
|
||||||
if (!o->is_mapgen_vm)
|
if (!o->is_mapgen_vm)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!lua_istable(L, 2))
|
if (!lua_istable(L, 2))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
u8 light;
|
u8 light;
|
||||||
light = (getintfield_default(L, 2, "day", 0) & 0x0F);
|
light = (getintfield_default(L, 2, "day", 0) & 0x0F);
|
||||||
light |= (getintfield_default(L, 2, "night", 0) & 0x0F) << 4;
|
light |= (getintfield_default(L, 2, "night", 0) & 0x0F) << 4;
|
||||||
|
|
||||||
ManualMapVoxelManipulator *vm = o->vm;
|
ManualMapVoxelManipulator *vm = o->vm;
|
||||||
|
|
||||||
v3s16 p1 = lua_istable(L, 3) ? read_v3s16(L, 3) :
|
v3s16 p1 = lua_istable(L, 3) ? read_v3s16(L, 3) :
|
||||||
vm->m_area.MinEdge + v3s16(0, 1, 0) * MAP_BLOCKSIZE;
|
vm->m_area.MinEdge + v3s16(0, 1, 0) * MAP_BLOCKSIZE;
|
||||||
v3s16 p2 = lua_istable(L, 4) ? read_v3s16(L, 4) :
|
v3s16 p2 = lua_istable(L, 4) ? read_v3s16(L, 4) :
|
||||||
@ -181,7 +180,7 @@ int LuaVoxelManip::l_set_lighting(lua_State *L)
|
|||||||
|
|
||||||
Mapgen mg;
|
Mapgen mg;
|
||||||
mg.vm = vm;
|
mg.vm = vm;
|
||||||
|
|
||||||
mg.setLighting(p1, p2, light);
|
mg.setLighting(p1, p2, light);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -276,7 +275,7 @@ int LuaVoxelManip::l_update_map(lua_State *L)
|
|||||||
LuaVoxelManip *o = checkobject(L, 1);
|
LuaVoxelManip *o = checkobject(L, 1);
|
||||||
if (o->is_mapgen_vm)
|
if (o->is_mapgen_vm)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
Environment *env = getEnv(L);
|
Environment *env = getEnv(L);
|
||||||
if (!env)
|
if (!env)
|
||||||
return 0;
|
return 0;
|
||||||
@ -286,9 +285,9 @@ int LuaVoxelManip::l_update_map(lua_State *L)
|
|||||||
// TODO: Optimize this by using Mapgen::calcLighting() instead
|
// TODO: Optimize this by using Mapgen::calcLighting() instead
|
||||||
std::map<v3s16, MapBlock *> lighting_mblocks;
|
std::map<v3s16, MapBlock *> lighting_mblocks;
|
||||||
std::map<v3s16, MapBlock *> *mblocks = &o->modified_blocks;
|
std::map<v3s16, MapBlock *> *mblocks = &o->modified_blocks;
|
||||||
|
|
||||||
lighting_mblocks.insert(mblocks->begin(), mblocks->end());
|
lighting_mblocks.insert(mblocks->begin(), mblocks->end());
|
||||||
|
|
||||||
map->updateLighting(lighting_mblocks, *mblocks);
|
map->updateLighting(lighting_mblocks, *mblocks);
|
||||||
|
|
||||||
MapEditEvent event;
|
MapEditEvent event;
|
||||||
@ -297,12 +296,12 @@ int LuaVoxelManip::l_update_map(lua_State *L)
|
|||||||
it = mblocks->begin();
|
it = mblocks->begin();
|
||||||
it != mblocks->end(); ++it)
|
it != mblocks->end(); ++it)
|
||||||
event.modified_blocks.insert(it->first);
|
event.modified_blocks.insert(it->first);
|
||||||
|
|
||||||
map->dispatchEvent(&event);
|
map->dispatchEvent(&event);
|
||||||
|
|
||||||
mblocks->clear();
|
mblocks->clear();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
LuaVoxelManip::LuaVoxelManip(ManualMapVoxelManipulator *mmvm, bool is_mg_vm)
|
LuaVoxelManip::LuaVoxelManip(ManualMapVoxelManipulator *mmvm, bool is_mg_vm)
|
||||||
@ -319,7 +318,8 @@ LuaVoxelManip::LuaVoxelManip(Map *map)
|
|||||||
|
|
||||||
LuaVoxelManip::~LuaVoxelManip()
|
LuaVoxelManip::~LuaVoxelManip()
|
||||||
{
|
{
|
||||||
delete vm;
|
if (!is_mapgen_vm)
|
||||||
|
delete vm;
|
||||||
}
|
}
|
||||||
|
|
||||||
// LuaVoxelManip()
|
// LuaVoxelManip()
|
||||||
@ -327,14 +327,14 @@ LuaVoxelManip::~LuaVoxelManip()
|
|||||||
int LuaVoxelManip::create_object(lua_State *L)
|
int LuaVoxelManip::create_object(lua_State *L)
|
||||||
{
|
{
|
||||||
NO_MAP_LOCK_REQUIRED;
|
NO_MAP_LOCK_REQUIRED;
|
||||||
|
|
||||||
Environment *env = getEnv(L);
|
Environment *env = getEnv(L);
|
||||||
if (!env)
|
if (!env)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
Map *map = &(env->getMap());
|
Map *map = &(env->getMap());
|
||||||
LuaVoxelManip *o = new LuaVoxelManip(map);
|
LuaVoxelManip *o = new LuaVoxelManip(map);
|
||||||
|
|
||||||
*(void **)(lua_newuserdata(L, sizeof(void *))) = o;
|
*(void **)(lua_newuserdata(L, sizeof(void *))) = o;
|
||||||
luaL_getmetatable(L, className);
|
luaL_getmetatable(L, className);
|
||||||
lua_setmetatable(L, -2);
|
lua_setmetatable(L, -2);
|
||||||
@ -344,13 +344,13 @@ int LuaVoxelManip::create_object(lua_State *L)
|
|||||||
LuaVoxelManip *LuaVoxelManip::checkobject(lua_State *L, int narg)
|
LuaVoxelManip *LuaVoxelManip::checkobject(lua_State *L, int narg)
|
||||||
{
|
{
|
||||||
NO_MAP_LOCK_REQUIRED;
|
NO_MAP_LOCK_REQUIRED;
|
||||||
|
|
||||||
luaL_checktype(L, narg, LUA_TUSERDATA);
|
luaL_checktype(L, narg, LUA_TUSERDATA);
|
||||||
|
|
||||||
void *ud = luaL_checkudata(L, narg, className);
|
void *ud = luaL_checkudata(L, narg, className);
|
||||||
if (!ud)
|
if (!ud)
|
||||||
luaL_typerror(L, narg, className);
|
luaL_typerror(L, narg, className);
|
||||||
|
|
||||||
return *(LuaVoxelManip **)ud; // unbox pointer
|
return *(LuaVoxelManip **)ud; // unbox pointer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user