]> git.lizzy.rs Git - worldedit.git/commitdiff
Implement /inset and /shift
authorDaniel Sosa <sosa.daniel23@gmail.com>
Sun, 4 Jan 2015 02:20:27 +0000 (20:20 -0600)
committerDaniel Sosa <sosa.daniel23@gmail.com>
Mon, 4 Jul 2016 02:44:02 +0000 (21:44 -0500)
worldedit_commands/cuboid.lua
worldedit_commands/cuboidapi.lua

index 1af5b3be3855c5543d7acc932d66a87985740c29..2e59f16d051e4d9c3529f0aaeb82325a863c0982 100644 (file)
@@ -37,30 +37,78 @@ minetest.register_chatcommand("/outset", {
   }
 )
 
+minetest.register_chatcommand("/inset", {
+       params = "<amount> [h|v]",
+       description = "inset the selection",
+       privs = {worldedit=true},
+       func = function(name, param)
+               local find, _, amount, dir = param:find("^(%d+)[%s+]?([hv]?)$")
+               
+               if find == nil then
+                       return false, "invalid usage: " .. param
+               end
+               
+               local pos1 = worldedit.pos1[name]
+               local pos2 = worldedit.pos2[name]
+               
+               if pos1 == nil or pos2 == nil then
+                       return false, 
+                               "Undefined region. Region must be defined beforehand."
+               end
+               
+               if dir == "" then
+                       assert(worldedit.cuboid_volumetricexpand(name, -amount))
+               elseif dir == "h" then
+                       assert(worldedit.cuboid_linealexpand(name, 'x', 1, -amount))
+                       assert(worldedit.cuboid_linealexpand(name, 'x', -1, -amount))
+                       assert(worldedit.cuboid_linealexpand(name, 'z', 1, -amount))
+                       assert(worldedit.cuboid_linealexpand(name, 'z', -1, -amount))
+               elseif dir == "v" then
+                       assert(worldedit.cuboid_linealexpand(name, 'y', 1, -amount))
+                       assert(worldedit.cuboid_linealexpand(name, 'y', -1, -amount))
+               else
+                       return false, "Unknown error"
+               end
+               
+               worldedit.marker_update(name)
+               return true, "Region inset by " .. amount .. " blocks"
+      end,
+  }
+)
 
-minetest.register_chatcommand(
-  "/shift",
-  {
-      params = "<amount> [up|down|left|right|front|back]",
-      description = "Moves the selection region. Does not move contents.",
-      privs = {worldedit=true},
-      func = function(name, param)
-       local pos1 = worldedit.pos1[name]
-       local pos2 = worldedit.pos2[name]
-       local find, _, amount, direction = param:find("(%d+)%s*(%l*)")
-
-       if find == nil then
-           worldedit.player_notify(name, "invalid usage: " .. param)
-           return
-       end
-       
-       if pos1 == nil or pos2 == nil then
-           worldedit.player_notify(name, 
-             "Undefined region. Region must be defined beforehand.")
-           return
-       end
 
-       
+minetest.register_chatcommand("/shift", {
+       params = "<amount> [up|down|left|right|front|back]",
+       description = "Moves the selection region. Does not move contents.",
+       privs = {worldedit=true},
+       func = function(name, param)
+               local pos1 = worldedit.pos1[name]
+               local pos2 = worldedit.pos2[name]
+               local find, _, amount, direction = param:find("(%d+)%s*(%l*)")
+               
+               if find == nil then
+                       worldedit.player_notify(name, "invalid usage: " .. param)
+                       return
+               end
+               
+               if pos1 == nil or pos2 == nil then
+                       worldedit.player_notify(name, 
+                       "Undefined region. Region must be defined beforehand.")
+                       return
+               end
+               
+               local axis, dir
+               if direction ~= "" then
+                       axis, dir = worldedit.translate_direction(name, direction)
+               else
+                       axis, dir = worldedit.player_axis(name)
+                       worldedit.player_notify(name, "entered player_axis")
+               end
+               
+               assert(worldedit.cuboid_shift(name, axis, amount * dir))
+               worldedit.marker_update(name)
+               
+               return true, "region shifted by " .. amount .. " blocks"
       end,
   }
 )
index 37194e499523f3f3ec01aa418d8a98d322a6b9a1..d473571decf0f99fe53373b0b3b902d6b30a48e6 100644 (file)
@@ -65,14 +65,14 @@ worldedit.cuboid_shift = function(name, axis, amount)
        end
        
        if axis == 'x' then
-               pos1.x = pos1.x + amount
-               pos2.x = pos2.x + amount
+               worldedit.pos1[name].x = pos1.x + amount
+               worldedit.pos2[name].x = pos2.x + amount
        elseif axis == 'y' then
-               pos1.y = pos1.y + amount
-               pos2.y = pos2.y + amount
+               worldedit.pos1[name].y = pos1.y + amount
+               worldedit.pos2[name].y = pos2.y + amount
        elseif axis == 'z' then
-               pos1.z = pos1.z + amount
-               pos2.z = pos2.z + amount
+               worldedit.pos1[name].z = pos1.z + amount
+               worldedit.pos2[name].z = pos2.z + amount
        else
                return false, "invalid axis"
        end