]> git.lizzy.rs Git - worldedit.git/blobdiff - worldedit/visualization.lua
Change compatibility notices.
[worldedit.git] / worldedit / visualization.lua
index 3d697a20d28526c9f22f0c40bcb689d8fd34b14c..dbee5d087029c680bbaa7b2b9bb8ffbeb70f3f8d 100644 (file)
@@ -1,4 +1,5 @@
 worldedit = worldedit or {}\r
+local minetest = minetest --local copy of global\r
 \r
 --modifies positions `pos1` and `pos2` so that each component of `pos1` is less than or equal to its corresponding conent of `pos2`, returning two new positions\r
 worldedit.sort_pos = function(pos1, pos2)\r
@@ -32,9 +33,12 @@ minetest.register_node("worldedit:placeholder", {
 \r
 --hides all nodes in a region defined by positions `pos1` and `pos2` by non-destructively replacing them with invisible nodes, returning the number of nodes hidden\r
 worldedit.hide = function(pos1, pos2)\r
+       --make area stay loaded\r
+       local manip = minetest.get_voxel_manip()\r
+       manip:read_from_map(pos1, pos2)\r
+\r
        local pos1, pos2 = worldedit.sort_pos(pos1, pos2)\r
        local pos = {x=pos1.x, y=0, z=0}\r
-       local placeholder = {name="worldedit:placeholder", param1=0, param2=0}\r
        local get_node, get_meta, add_node = minetest.get_node, minetest.get_meta, minetest.add_node\r
        while pos.x <= pos2.x do\r
                pos.y = pos1.y\r
@@ -42,12 +46,13 @@ worldedit.hide = function(pos1, pos2)
                        pos.z = pos1.z\r
                        while pos.z <= pos2.z do\r
                                local node = get_node(pos)\r
-                               placeholder.param1, placeholder.param2 = node.param1, node.param2 --copy node's param1 and param2\r
-                               local data = get_meta(pos):to_table() --obtain metadata of original node\r
-                               add_node(pos, placeholder) --add placeholder node\r
-                               local meta = get_meta(pos) --obtain placeholder meta\r
-                               meta:from_table(data) --set placeholder metadata to the original node's metadata\r
-                               meta:set_string("worldedit_placeholder", node.name)  --add the node's name\r
+                               if node.name ~= "worldedit:placeholder" then\r
+                                       local data = get_meta(pos):to_table() --obtain metadata of original node\r
+                                       data.fields.worldedit_placeholder = node.name --add the node's name\r
+                                       node.name = "worldedit:placeholder" --set node name\r
+                                       add_node(pos, node) --add placeholder node\r
+                                       get_meta(pos):from_table(data) --set placeholder metadata to the original node's metadata\r
+                               end\r
                                pos.z = pos.z + 1\r
                        end\r
                        pos.y = pos.y + 1\r
@@ -59,27 +64,37 @@ end
 \r
 --suppresses all instances of `nodename` in a region defined by positions `pos1` and `pos2` by non-destructively replacing them with invisible nodes, returning the number of nodes suppressed\r
 worldedit.suppress = function(pos1, pos2, nodename)\r
+       --ignore placeholder supression\r
+       if nodename == "worldedit:placeholder" then\r
+               return 0\r
+       end\r
+\r
+       --make area stay loaded\r
+       local manip = minetest.get_voxel_manip()\r
+       manip:read_from_map(pos1, pos2)\r
+\r
        local pos1, pos2 = worldedit.sort_pos(pos1, pos2)\r
-       local placeholder = {name="worldedit:placeholder", param1=0, param2=0}\r
        local nodes = minetest.find_nodes_in_area(pos1, pos2, nodename)\r
        local get_node, get_meta, add_node = minetest.get_node, minetest.get_meta, minetest.add_node\r
        for _, pos in ipairs(nodes) do\r
                local node = get_node(pos)\r
-               placeholder.param1, placeholder.param2 = node.param1, node.param2 --copy node's param1 and param2\r
                local data = get_meta(pos):to_table() --obtain metadata of original node\r
-               add_node(pos, placeholder) --add placeholder node\r
-               local meta = get_meta(pos) --obtain placeholder meta\r
-               meta:from_table(data) --set placeholder metadata to the original node's metadata\r
-               meta:set_string("worldedit_placeholder", nodename)  --add the node's name\r
+               data.fields.worldedit_placeholder = node.name --add the node's name\r
+               node.name = "worldedit:placeholder" --set node name\r
+               add_node(pos, node) --add placeholder node\r
+               get_meta(pos):from_table(data) --set placeholder metadata to the original node's metadata\r
        end\r
        return #nodes\r
 end\r
 \r
 --highlights all instances of `nodename` in a region defined by positions `pos1` and `pos2` by non-destructively hiding all other nodes, returning the number of nodes found\r
 worldedit.highlight = function(pos1, pos2, nodename)\r
+       --make area stay loaded\r
+       local manip = minetest.get_voxel_manip()\r
+       manip:read_from_map(pos1, pos2)\r
+\r
        local pos1, pos2 = worldedit.sort_pos(pos1, pos2)\r
        local pos = {x=pos1.x, y=0, z=0}\r
-       local placeholder = {name="worldedit:placeholder", param1=0, param2=0}\r
        local get_node, get_meta, add_node = minetest.get_node, minetest.get_meta, minetest.add_node\r
        local count = 0\r
        while pos.x <= pos2.x do\r
@@ -90,13 +105,12 @@ worldedit.highlight = function(pos1, pos2, nodename)
                                local node = get_node(pos)\r
                                if node.name == nodename then --node found\r
                                        count = count + 1\r
-                               else --hide other nodes\r
-                                       placeholder.param1, placeholder.param2 = node.param1, node.param2 --copy node's param1 and param2\r
+                               elseif node.name ~= "worldedit:placeholder" then --hide other nodes\r
                                        local data = get_meta(pos):to_table() --obtain metadata of original node\r
-                                       add_node(pos, placeholder) --add placeholder node\r
-                                       local meta = get_meta(pos) --obtain placeholder meta\r
-                                       meta:from_table(data) --set placeholder metadata to the original node's metadata\r
-                                       meta:set_string("worldedit_placeholder", node.name)  --add the node's name\r
+                                       data.fields.worldedit_placeholder = node.name --add the node's name\r
+                                       node.name = "worldedit:placeholder" --set node name\r
+                                       add_node(pos, node) --add placeholder node\r
+                                       get_meta(pos):from_table(data) --set placeholder metadata to the original node's metadata\r
                                end\r
                                pos.z = pos.z + 1\r
                        end\r
@@ -109,17 +123,19 @@ end
 \r
 --restores all nodes hidden with WorldEdit functions in a region defined by positions `pos1` and `pos2`, returning the number of nodes restored\r
 worldedit.restore = function(pos1, pos2)\r
+       --make area stay loaded\r
+       local manip = minetest.get_voxel_manip()\r
+       manip:read_from_map(pos1, pos2)\r
+\r
        local pos1, pos2 = worldedit.sort_pos(pos1, pos2)\r
-       local node = {name="", param1=0, param2=0}\r
        local nodes = minetest.find_nodes_in_area(pos1, pos2, "worldedit:placeholder")\r
        local get_node, get_meta, add_node = minetest.get_node, minetest.get_meta, minetest.add_node\r
        for _, pos in ipairs(nodes) do\r
-               local currentnode = get_node(pos)\r
-               node.param1, node.param2 = currentnode.param1, currentnode.param2 --copy node's param1 and param2\r
+               local node = get_node(pos)\r
                local data = get_meta(pos):to_table() --obtain node metadata\r
                node.name = data.fields.worldedit_placeholder --set node name\r
                data.fields.worldedit_placeholder = nil --delete old nodename\r
-               add_node(pos, placeholder) --add original node\r
+               add_node(pos, node) --add original node\r
                get_meta(pos):from_table(data) --set original node metadata\r
        end\r
        return #nodes\r