]> git.lizzy.rs Git - worldedit.git/commitdiff
Normalization.
authorAnthony Zhang <azhang9@gmail.com>
Fri, 14 Sep 2012 03:13:54 +0000 (23:13 -0400)
committerAnthony Zhang <azhang9@gmail.com>
Fri, 14 Sep 2012 03:13:54 +0000 (23:13 -0400)
README.md
functions.lua
init.lua

index f76b9bd3b2430d76e806560ccc72dbed80040b28..6a9d928f67a4d57bd9a7c0cf0f401066016fbe0a 100644 (file)
--- a/README.md
+++ b/README.md
@@ -163,9 +163,9 @@ Flip the current WorldEdit region along the x/y/z/? axis.
    //flip z
    //flip ?
 
-### //rotate
+### //rotate x/y/z/? <angle>
 
-Rotate the current WorldEdit region around the axis <axis> by angle <angle> (90 degree increment).
+Rotate the current WorldEdit region along the x/y/z/? axis by angle <angle> (90 degree increment).
 
     //rotate x 90
     //rotate y 180
index ed205918d8bbfa261c4e9a0347594c2b1846864c..fbdfb54e226c9af30f8d0da3bdfecf5659b88739 100644 (file)
@@ -50,7 +50,7 @@ worldedit.replace = function(pos1, pos2, searchnode, replacenode)
        if minetest.registered_nodes[searchnode] == nil then\r
                searchnode = "default:" .. searchnode\r
        end\r
-    if minetest.registered_nodes[replacenode] == nil then\r
+       if minetest.registered_nodes[replacenode] == nil then\r
                replacenode = "default:" .. replacenode\r
        end\r
 \r
@@ -270,14 +270,13 @@ worldedit.copy = function(pos1, pos2, axis, amount)
                        while pos.y <= pos2.y do\r
                                pos.z = pos1.z\r
                                while pos.z <= pos2.z do\r
-                                       local node = env:get_node(pos)\r
-                                       local meta1 = env:get_meta(pos):to_table()\r
-                                       local value = pos[axis]\r
-                                       pos[axis] = value + amount\r
-                                       env:add_node(pos, node)\r
-                                       local meta2 = env:get_meta(pos)\r
-                                       meta2:from_table(meta1)\r
-                                       pos[axis] = value\r
+                                       local node = env:get_node(pos) --obtain current node\r
+                                       local meta = env:get_meta(pos):to_table() --get meta of current node\r
+                                       local value = pos[axis] --store current position\r
+                                       pos[axis] = value + amount --move along axis\r
+                                       env:add_node(pos, node) --copy node to new position\r
+                                       env:get_meta(pos):from_table(meta) --set metadata of new node\r
+                                       pos[axis] = value --restore old position\r
                                        pos.z = pos.z + 1\r
                                end\r
                                pos.y = pos.y + 1\r
@@ -291,14 +290,13 @@ worldedit.copy = function(pos1, pos2, axis, amount)
                        while pos.y >= pos1.y do\r
                                pos.z = pos2.z\r
                                while pos.z >= pos1.z do\r
-                                       local node = minetest.env:get_node(pos)\r
-                                       local meta1 = env:get_meta(pos):to_table()\r
-                                       local value = pos[axis]\r
-                                       pos[axis] = value + amount\r
-                                       minetest.env:add_node(pos, node)\r
-                                       local meta2 = env:get_meta(pos)\r
-                                       meta2:from_table(meta1)\r
-                                       pos[axis] = value\r
+                                       local node = minetest.env:get_node(pos) --obtain current node\r
+                                       local meta = env:get_meta(pos):to_table() --get meta of current node\r
+                                       local value = pos[axis] --store current position\r
+                                       pos[axis] = value + amount --move along axis\r
+                                       minetest.env:add_node(pos, node) --copy node to new position\r
+                                       env:get_meta(pos):from_table(meta) --set metadata of new node\r
+                                       pos[axis] = value --restore old position\r
                                        pos.z = pos.z - 1\r
                                end\r
                                pos.y = pos.y - 1\r
@@ -309,7 +307,7 @@ worldedit.copy = function(pos1, pos2, axis, amount)
        return worldedit.volume(pos1, pos2)\r
 end\r
 \r
---moves positions `pos1` and `pos2` and the region defined by them along the `axis` axis ("x" or "y" or "z") by `amount` nodes, returning the number of nodes moved\r
+--moves the region defined by positions `pos1` and `pos2` along the `axis` axis ("x" or "y" or "z") by `amount` nodes, returning the number of nodes moved\r
 worldedit.move = function(pos1, pos2, axis, amount)\r
        local pos1, pos2 = worldedit.sort_pos(pos1, pos2)\r
        local env = minetest.env\r
@@ -321,15 +319,14 @@ worldedit.move = function(pos1, pos2, axis, amount)
                        while pos.y <= pos2.y do\r
                                pos.z = pos1.z\r
                                while pos.z <= pos2.z do\r
-                                       local node = env:get_node(pos)\r
-                                       local meta1 = env:get_meta(pos):to_table()\r
+                                       local node = env:get_node(pos) --obtain current node\r
+                                       local meta = env:get_meta(pos):to_table() --get metadata of current node\r
                                        env:remove_node(pos)\r
-                                       local value = pos[axis]\r
-                                       pos[axis] = value + amount\r
-                                       env:add_node(pos, node)\r
-                                       local meta2 = env:get_meta(pos)\r
-                                       meta2:from_table(meta1)\r
-                                       pos[axis] = value\r
+                                       local value = pos[axis] --store current position\r
+                                       pos[axis] = value + amount --move along axis\r
+                                       env:add_node(pos, node) --move node to new position\r
+                                       env:get_meta(pos):from_table(meta) --set metadata of new node\r
+                                       pos[axis] = value --restore old position\r
                                        pos.z = pos.z + 1\r
                                end\r
                                pos.y = pos.y + 1\r
@@ -343,15 +340,14 @@ worldedit.move = function(pos1, pos2, axis, amount)
                        while pos.y >= pos1.y do\r
                                pos.z = pos2.z\r
                                while pos.z >= pos1.z do\r
-                                       local node = env:get_node(pos)\r
-                                       local meta1 = env:get_meta(pos):to_table()\r
+                                       local node = env:get_node(pos) --obtain current node\r
+                                       local meta = env:get_meta(pos):to_table() --get metadata of current node\r
                                        env:remove_node(pos)\r
-                                       local value = pos[axis]\r
-                                       pos[axis] = value + amount\r
-                                       env:add_node(pos, node)\r
-                                       local meta2 = env:get_meta(pos)\r
-                                       meta2:from_table(meta1)\r
-                                       pos[axis] = value\r
+                                       local value = pos[axis] --store current position\r
+                                       pos[axis] = value + amount --move along axis\r
+                                       env:add_node(pos, node) --move node to new position\r
+                                       env:get_meta(pos):from_table(meta) --set metadata of new node\r
+                                       pos[axis] = value --restore old position\r
                                        pos.z = pos.z - 1\r
                                end\r
                                pos.y = pos.y - 1\r
@@ -366,12 +362,12 @@ end
 worldedit.stack = function(pos1, pos2, axis, count)\r
        local pos1, pos2 = worldedit.sort_pos(pos1, pos2)\r
        local length = pos2[axis] - pos1[axis] + 1\r
-       local amount = 0\r
-       local copy = worldedit.copy\r
        if count < 0 then\r
                count = -count\r
                length = -length\r
        end\r
+       local amount = 0\r
+       local copy = worldedit.copy\r
        for i = 1, count do\r
                amount = amount + length\r
                copy(pos1, pos2, axis, amount)\r
@@ -393,18 +389,16 @@ worldedit.transpose = function(pos1, pos2, axis1, axis2)
                                local extent1, extent2 = pos[axis1] - pos1[axis1], pos[axis2] - pos1[axis2]\r
                                if extent1 < extent2 then\r
                                        local node1 = env:get_node(pos)\r
-                                       local meta1a = env:get_meta(pos):to_table()\r
+                                       local meta1 = env:get_meta(pos):to_table()\r
                                        local value1, value2 = pos[axis1], pos[axis2]\r
-                                       pos[axis1], pos[axis2] = pos1[axis1] + extent2, pos1[axis2] + extent1\r
+                                       pos[axis1], pos[axis2] = value1 + extent2, value2 + extent1\r
                                        local node2 = env:get_node(pos)\r
-                                       local meta2a = env:get_meta(pos):to_table()\r
+                                       local meta2 = env:get_meta(pos):to_table()\r
                                        env:add_node(pos, node1)\r
-                                       local meta1b = env:get_meta(pos)\r
-                                       meta1b:from_table(meta1a)\r
-                                       pos[axis1], pos[axis2] = pos1[axis1] + extent1, pos1[axis2] + extent2\r
+                                       env:get_meta(pos):from_table(meta1)\r
+                                       pos[axis1], pos[axis2] = value1, value2\r
                                        env:add_node(pos, node2)\r
-                                       local meta2b = env:get_meta(pos)\r
-                                       meta2b:from_table(meta2a)\r
+                                       env:get_meta(pos):from_table(meta2)\r
                                end\r
                                pos.z = pos.z + 1\r
                        end\r
@@ -429,18 +423,16 @@ worldedit.flip = function(pos1, pos2, axis)
                        pos.z = pos1.z\r
                        while pos.z <= pos2.z do\r
                                local node1 = env:get_node(pos)\r
-                               local meta1a = env:get_meta(pos):to_table()\r
+                               local meta1 = env:get_meta(pos):to_table()\r
                                local value = pos[axis]\r
                                pos[axis] = start - value\r
                                local node2 = env:get_node(pos)\r
-                               local meta2a = env:get_meta(pos):to_table()\r
+                               local meta2 = env:get_meta(pos):to_table()\r
                                env:add_node(pos, node1)\r
-                               local meta1b = env:get_meta(pos)\r
-                               meta1b:from_table(meta1a)\r
+                               env:get_meta(pos):from_table(meta1)\r
                                pos[axis] = value\r
                                env:add_node(pos, node2)\r
-                               local meta2b = env:get_meta(pos)\r
-                               meta2b:from_table(meta2a)\r
+                               env:get_meta(pos):from_table(meta2)\r
                                pos.z = pos.z + 1\r
                        end\r
                        pos.y = pos.y + 1\r
@@ -450,35 +442,29 @@ worldedit.flip = function(pos1, pos2, axis)
        return worldedit.volume(pos1, pos2)\r
 end\r
 \r
---rotates a region defined by the positions `pos1` and `pos2` by `angle` degrees clockwise (if you are looking in the negative direction) around the `axis` (supporting 90 degree increments only), returning the number of nodes rotated\r
+--rotates a region defined by the positions `pos1` and `pos2` by `angle` degrees clockwise around axis `axis` (90 degree increment), returning the number of nodes rotated\r
 worldedit.rotate = function(pos1, pos2, axis, angle)\r
        local pos1, pos2 = worldedit.sort_pos(pos1, pos2)\r
 \r
-       if axis == 'x' then\r
-               axes = {'z', 'y'}\r
-       elseif axis == 'y' then\r
-               axes = {'x', 'z'}\r
-       else--if axis == 'z' then\r
-               axes = {'y', 'x'}\r
+       local axis1, axis2\r
+       if axis == "x" then\r
+               axis1, axis2 = "z", "y"\r
+       elseif axis == "y" then\r
+               axis1, axis2 = "x", "z"\r
+       else --axis == "z"\r
+               axis1, axis2 = "y", "x"\r
        end\r
        angle = angle % 360\r
 \r
-       local pos = {x=pos1.x, y=0, z=0}\r
-       local newpos = {x=0, y=0, z=0}\r
-       local offsetx, offsetz\r
-       local env = minetest.env\r
-\r
        if angle == 90 then\r
-               worldedit.transpose(pos1, pos2, axes[1], axes[2])\r
-               worldedit.flip(pos1, pos2, axes[2])\r
+               worldedit.transpose(pos1, pos2, axis1, axis2)\r
+               worldedit.flip(pos1, pos2, axis2)\r
        elseif angle == 180 then\r
-               worldedit.flip(pos1, pos2, axes[1])\r
-               worldedit.flip(pos1, pos2, axes[2])\r
+               worldedit.flip(pos1, pos2, axis1)\r
+               worldedit.flip(pos1, pos2, axis2)\r
        elseif angle == 270 then\r
-               worldedit.transpose(pos1, pos2, axes[1], axes[2])\r
-               worldedit.flip(pos1, pos2, axes[1])\r
-       else\r
-               return 0\r
+               worldedit.transpose(pos1, pos2, axis1, axis2)\r
+               worldedit.flip(pos1, pos2, axis1)\r
        end\r
        return worldedit.volume(pos1, pos2)\r
 end\r
index 1948bcf5c4dfe374135a51eda47245a59d7224e0..32bf8e21840b2c02d0327316faafec795cf17044 100644 (file)
--- a/init.lua
+++ b/init.lua
@@ -324,8 +324,8 @@ minetest.register_chatcommand("/move", {
 \r
                local count = worldedit.move(pos1, pos2, axis, tonumber(amount))\r
 \r
-               worldedit.pos1[name][axis] = worldedit.pos1[name][axis] + amount\r
-               worldedit.pos2[name][axis] = worldedit.pos2[name][axis] + amount\r
+               pos1[axis] = pos1[axis] + amount\r
+               pos2[axis] = pos2[axis] + amount\r
                worldedit.mark_pos1(name)\r
                worldedit.mark_pos2(name)\r
 \r