summaryrefslogtreecommitdiff
path: root/worldedit
diff options
context:
space:
mode:
authorAnthony Zhang <azhang9@gmail.com>2013-07-28 18:15:46 -0400
committerAnthony Zhang <azhang9@gmail.com>2013-07-28 18:15:46 -0400
commitc1f3cfc1e43668d07e95271febc261c82478f7aa (patch)
treec571989bc44466fd5b4bf9bebbd22ea66de2af96 /worldedit
parentb252df21666406e1701665847fd25d6e37cc5606 (diff)
Fix bugs in visualization API and make it ore robust. Fix bugs in //fixedpos, //suppress, and //highlight.
Diffstat (limited to 'worldedit')
-rw-r--r--worldedit/primitives.lua5
-rw-r--r--worldedit/serialization.lua2
-rw-r--r--worldedit/visualization.lua47
3 files changed, 26 insertions, 28 deletions
diff --git a/worldedit/primitives.lua b/worldedit/primitives.lua
index b4b7bc7..cdb6e0f 100644
--- a/worldedit/primitives.lua
+++ b/worldedit/primitives.lua
@@ -136,7 +136,7 @@ worldedit.hollow_dome = function(pos, radius, nodename)
end
--adds a dome centered at `pos` with radius `radius`, composed of `nodename`, returning the number of nodes added
-worldedit.dome = function(pos, radius, nodename) --wip: use bresenham sphere for maximum speed
+worldedit.dome = function(pos, radius, nodename)
--set up voxel manipulator
local manip = minetest.get_voxel_manip()
local pos1 = {x=pos.x - radius, y=pos.y, z=pos.z - radius}
@@ -361,9 +361,8 @@ worldedit.pyramid = function(pos, height, nodename, env)
end
--adds a spiral centered at `pos` with width `width`, height `height`, space between walls `spacer`, composed of `nodename`, returning the number of nodes added
-worldedit.spiral = function(pos, width, height, spacer, nodename, env) --wip: clean this up
+worldedit.spiral = function(pos, width, height, spacer, nodename, env) --wip: rewrite this whole thing, nobody can understand it anyways
-- spiral matrix - http://rosettacode.org/wiki/Spiral_matrix#Lua
- --wip: rewrite this whole thing, nobody can understand it anyways
av, sn = math.abs, function(s) return s~=0 and s/av(s) or 0 end
local function sindex(z, x) -- returns the value at (x, z) in a spiral that starts at 1 and goes outwards
if z == -x and z >= x then return (2*z+1)^2 end
diff --git a/worldedit/serialization.lua b/worldedit/serialization.lua
index e0d960d..5fbc16c 100644
--- a/worldedit/serialization.lua
+++ b/worldedit/serialization.lua
@@ -33,7 +33,7 @@ worldedit.valueversion = function(value)
end
--converts the region defined by positions `pos1` and `pos2` into a single string, returning the serialized data and the number of nodes serialized
-worldedit.serialize = function(pos1, pos2) --wip: check for ItemStacks and whether they can be serialized
+worldedit.serialize = function(pos1, pos2)
--make area stay loaded
local manip = minetest.get_voxel_manip()
manip:read_from_map(pos1, pos2)
diff --git a/worldedit/visualization.lua b/worldedit/visualization.lua
index d654146..7b600d5 100644
--- a/worldedit/visualization.lua
+++ b/worldedit/visualization.lua
@@ -39,7 +39,6 @@ worldedit.hide = function(pos1, pos2)
local pos1, pos2 = worldedit.sort_pos(pos1, pos2)
local pos = {x=pos1.x, y=0, z=0}
- local placeholder = {name="worldedit:placeholder", param1=0, param2=0}
local get_node, get_meta, add_node = minetest.get_node, minetest.get_meta, minetest.add_node
while pos.x <= pos2.x do
pos.y = pos1.y
@@ -47,12 +46,13 @@ worldedit.hide = function(pos1, pos2)
pos.z = pos1.z
while pos.z <= pos2.z do
local node = get_node(pos)
- placeholder.param1, placeholder.param2 = node.param1, node.param2 --copy node's param1 and param2
- local data = get_meta(pos):to_table() --obtain metadata of original node
- add_node(pos, placeholder) --add placeholder node
- local meta = get_meta(pos) --obtain placeholder meta
- meta:from_table(data) --set placeholder metadata to the original node's metadata
- meta:set_string("worldedit_placeholder", node.name) --add the node's name
+ if node.name ~= "worldedit:placeholder" then
+ local data = get_meta(pos):to_table() --obtain metadata of original node
+ data.fields.worldedit_placeholder = node.name --add the node's name
+ node.name = "worldedit:placeholder" --set node name
+ add_node(pos, node) --add placeholder node
+ get_meta(pos):from_table(data) --set placeholder metadata to the original node's metadata
+ end
pos.z = pos.z + 1
end
pos.y = pos.y + 1
@@ -64,22 +64,25 @@ end
--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
worldedit.suppress = function(pos1, pos2, nodename)
+ --ignore placeholder supression
+ if nodename == "worldedit:placeholder" then
+ return 0
+ end
+
--make area stay loaded
local manip = minetest.get_voxel_manip()
manip:read_from_map(pos1, pos2)
local pos1, pos2 = worldedit.sort_pos(pos1, pos2)
- local placeholder = {name="worldedit:placeholder", param1=0, param2=0}
local nodes = minetest.find_nodes_in_area(pos1, pos2, nodename)
local get_node, get_meta, add_node = minetest.get_node, minetest.get_meta, minetest.add_node
for _, pos in ipairs(nodes) do
local node = get_node(pos)
- placeholder.param1, placeholder.param2 = node.param1, node.param2 --copy node's param1 and param2
local data = get_meta(pos):to_table() --obtain metadata of original node
- add_node(pos, placeholder) --add placeholder node
- local meta = get_meta(pos) --obtain placeholder meta
- meta:from_table(data) --set placeholder metadata to the original node's metadata
- meta:set_string("worldedit_placeholder", nodename) --add the node's name
+ data.fields.worldedit_placeholder = node.name --add the node's name
+ node.name = "worldedit:placeholder" --set node name
+ add_node(pos, node) --add placeholder node
+ get_meta(pos):from_table(data) --set placeholder metadata to the original node's metadata
end
return #nodes
end
@@ -92,7 +95,6 @@ worldedit.highlight = function(pos1, pos2, nodename) --wip: speed this up with v
local pos1, pos2 = worldedit.sort_pos(pos1, pos2)
local pos = {x=pos1.x, y=0, z=0}
- local placeholder = {name="worldedit:placeholder", param1=0, param2=0}
local get_node, get_meta, add_node = minetest.get_node, minetest.get_meta, minetest.add_node
local count = 0
while pos.x <= pos2.x do
@@ -103,13 +105,12 @@ worldedit.highlight = function(pos1, pos2, nodename) --wip: speed this up with v
local node = get_node(pos)
if node.name == nodename then --node found
count = count + 1
- else --hide other nodes
- placeholder.param1, placeholder.param2 = node.param1, node.param2 --copy node's param1 and param2
+ elseif node.name ~= "worldedit:placeholder" then --hide other nodes
local data = get_meta(pos):to_table() --obtain metadata of original node
- add_node(pos, placeholder) --add placeholder node
- local meta = get_meta(pos) --obtain placeholder meta
- meta:from_table(data) --set placeholder metadata to the original node's metadata
- meta:set_string("worldedit_placeholder", node.name) --add the node's name
+ data.fields.worldedit_placeholder = node.name --add the node's name
+ node.name = "worldedit:placeholder" --set node name
+ add_node(pos, node) --add placeholder node
+ get_meta(pos):from_table(data) --set placeholder metadata to the original node's metadata
end
pos.z = pos.z + 1
end
@@ -127,16 +128,14 @@ worldedit.restore = function(pos1, pos2)
manip:read_from_map(pos1, pos2)
local pos1, pos2 = worldedit.sort_pos(pos1, pos2)
- local node = {name="", param1=0, param2=0}
local nodes = minetest.find_nodes_in_area(pos1, pos2, "worldedit:placeholder")
local get_node, get_meta, add_node = minetest.get_node, minetest.get_meta, minetest.add_node
for _, pos in ipairs(nodes) do
- local currentnode = get_node(pos)
- node.param1, node.param2 = currentnode.param1, currentnode.param2 --copy node's param1 and param2
+ local node = get_node(pos)
local data = get_meta(pos):to_table() --obtain node metadata
node.name = data.fields.worldedit_placeholder --set node name
data.fields.worldedit_placeholder = nil --delete old nodename
- add_node(pos, placeholder) --add original node
+ add_node(pos, node) --add original node
get_meta(pos):from_table(data) --set original node metadata
end
return #nodes