aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/lua_api.txt4
-rw-r--r--src/map.cpp23
-rw-r--r--src/map.h4
-rw-r--r--src/script/lua_api/l_env.cpp11
-rw-r--r--src/script/lua_api/l_vmanip.cpp22
-rw-r--r--src/script/lua_api/l_vmanip.h4
6 files changed, 22 insertions, 46 deletions
diff --git a/doc/lua_api.txt b/doc/lua_api.txt
index 557fdccb1..f48c433c6 100644
--- a/doc/lua_api.txt
+++ b/doc/lua_api.txt
@@ -1613,7 +1613,7 @@ minetest.get_perlin(seeddiff, octaves, persistence, scale)
minetest.get_voxel_manip()
^ Return voxel manipulator object
minetest.get_voxel_manip(p1, p2)
-^ Return voxel manipulator object with blank data preallocated
+^ Return voxel manipulator object with map pre-loaded
minetest.set_gen_notify(flags, {deco_ids})
^ Set the types of on-generate notifications that should be collected
^ flags is a flag field with the available flags:
@@ -2215,7 +2215,7 @@ methods:
VoxelManip: An interface to the MapVoxelManipulator for Lua
- Can be created via VoxelManip()
- Also minetest.get_voxel_manip()
-- Specify a pmin, pmax in either to allocate a blank chunk of data prefilled with cignore
+- Specify a pmin, pmax to create a VoxelManip with map already loaded
methods:
- read_from_map(p1, p2): Reads a chunk of map from the map containing the region formed by p1 and p2.
^ returns actual emerged pmin, actual emerged pmax
diff --git a/src/map.cpp b/src/map.cpp
index 05e07212d..7a58c90c7 100644
--- a/src/map.cpp
+++ b/src/map.cpp
@@ -3597,29 +3597,6 @@ ManualMapVoxelManipulator::~ManualMapVoxelManipulator()
{
}
-void ManualMapVoxelManipulator::initializeBlank(v3s16 blockpos_min,
- v3s16 blockpos_max)
-{
- // Units of these are MapBlocks
- v3s16 pmin = blockpos_min;
- v3s16 pmax = blockpos_max;
-
- VoxelArea block_area_nodes(pmin * MAP_BLOCKSIZE,
- (pmax + 1) * MAP_BLOCKSIZE - v3s16(1,1,1));
-
- addArea(block_area_nodes);
- u32 extent = m_area.getVolume();
- for (u32 i = 0; i != extent; i++)
- m_data[i] = MapNode(CONTENT_IGNORE);
-
- for (s32 z = pmin.Z; z <= pmax.Z; z++)
- for (s32 y = pmin.Y; y <= pmax.Y; y++)
- for (s32 x = pmin.X; x <= pmax.X; x++)
- m_loaded_blocks[v3s16(x, y, z)] = 0;
-
- m_is_dirty = false;
-}
-
void ManualMapVoxelManipulator::initialEmerge(v3s16 blockpos_min,
v3s16 blockpos_max, bool load_if_inexistent)
{
diff --git a/src/map.h b/src/map.h
index 57edd7708..f23cd3783 100644
--- a/src/map.h
+++ b/src/map.h
@@ -189,7 +189,7 @@ public:
MapBlock * getBlockNoCreateNoEx(v3s16 p);
/* Server overrides */
- virtual MapBlock * emergeBlock(v3s16 p, bool allow_generate=true)
+ virtual MapBlock * emergeBlock(v3s16 p, bool create_blank=true)
{ return getBlockNoCreateNoEx(p); }
// Returns InvalidPositionException if not found
@@ -550,8 +550,6 @@ public:
void setMap(Map *map)
{m_map = map;}
- void initializeBlank(v3s16 pmin, v3s16 pmax);
-
void initialEmerge(v3s16 blockpos_min, v3s16 blockpos_max,
bool load_if_inexistent = true);
diff --git a/src/script/lua_api/l_env.cpp b/src/script/lua_api/l_env.cpp
index 9e713b9b8..c8c1ca0e1 100644
--- a/src/script/lua_api/l_env.cpp
+++ b/src/script/lua_api/l_env.cpp
@@ -636,14 +636,9 @@ int ModApiEnvMod::l_get_voxel_manip(lua_State *L)
GET_ENV_PTR;
Map *map = &(env->getMap());
- LuaVoxelManip *o = new LuaVoxelManip(map);
-
- if (lua_istable(L, 1) && lua_istable(L, 2)) {
- v3s16 p1 = getNodeBlockPos(read_v3s16(L, 1));
- v3s16 p2 = getNodeBlockPos(read_v3s16(L, 2));
- sortBoxVerticies(p1, p2);
- o->vm->initializeBlank(p1, p2);
- }
+ LuaVoxelManip *o = (lua_istable(L, 1) && lua_istable(L, 2)) ?
+ new LuaVoxelManip(map, read_v3s16(L, 1), read_v3s16(L, 2)) :
+ new LuaVoxelManip(map);
*(void **)(lua_newuserdata(L, sizeof(void *))) = o;
luaL_getmetatable(L, "VoxelManip");
diff --git a/src/script/lua_api/l_vmanip.cpp b/src/script/lua_api/l_vmanip.cpp
index fb52aa21a..6c12baf92 100644
--- a/src/script/lua_api/l_vmanip.cpp
+++ b/src/script/lua_api/l_vmanip.cpp
@@ -367,6 +367,17 @@ LuaVoxelManip::LuaVoxelManip(Map *map)
this->is_mapgen_vm = false;
}
+LuaVoxelManip::LuaVoxelManip(Map *map, v3s16 p1, v3s16 p2)
+{
+ this->vm = new ManualMapVoxelManipulator(map);
+ this->is_mapgen_vm = false;
+
+ v3s16 bp1 = getNodeBlockPos(p1);
+ v3s16 bp2 = getNodeBlockPos(p2);
+ sortBoxVerticies(bp1, bp2);
+ vm->initialEmerge(bp1, bp2);
+}
+
LuaVoxelManip::~LuaVoxelManip()
{
if (!is_mapgen_vm)
@@ -384,14 +395,9 @@ int LuaVoxelManip::create_object(lua_State *L)
return 0;
Map *map = &(env->getMap());
- LuaVoxelManip *o = new LuaVoxelManip(map);
-
- if (lua_istable(L, 1) && lua_istable(L, 2)) {
- v3s16 p1 = getNodeBlockPos(read_v3s16(L, 1));
- v3s16 p2 = getNodeBlockPos(read_v3s16(L, 2));
- sortBoxVerticies(p1, p2);
- o->vm->initializeBlank(p1, p2);
- }
+ LuaVoxelManip *o = (lua_istable(L, 1) && lua_istable(L, 2)) ?
+ new LuaVoxelManip(map, read_v3s16(L, 1), read_v3s16(L, 2)) :
+ new LuaVoxelManip(map);
*(void **)(lua_newuserdata(L, sizeof(void *))) = o;
luaL_getmetatable(L, className);
diff --git a/src/script/lua_api/l_vmanip.h b/src/script/lua_api/l_vmanip.h
index ead6efbc4..887b18663 100644
--- a/src/script/lua_api/l_vmanip.h
+++ b/src/script/lua_api/l_vmanip.h
@@ -33,6 +33,7 @@ class ManualMapVoxelManipulator;
*/
class LuaVoxelManip : public ModApiBase {
private:
+ ManualMapVoxelManipulator *vm;
std::map<v3s16, MapBlock *> modified_blocks;
bool is_mapgen_vm;
@@ -64,9 +65,8 @@ private:
static int l_get_emerged_area(lua_State *L);
public:
- ManualMapVoxelManipulator *vm;
-
LuaVoxelManip(ManualMapVoxelManipulator *mmvm, bool is_mapgen_vm);
+ LuaVoxelManip(Map *map, v3s16 p1, v3s16 p2);
LuaVoxelManip(Map *map);
~LuaVoxelManip();