//wbox added

This commit is contained in:
VorTechnix 2021-07-20 12:52:19 -07:00
parent 7b17c3675a
commit d7d96ae263
3 changed files with 92 additions and 1 deletions

@ -0,0 +1,55 @@
-- ██ ██ ██ ██████ ███████ ██████ ██████ ██ ██
-- ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
-- ██ █ ██ ██ ██████ █████ ██████ ██ ██ ███
-- ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
-- ███ ███ ██ ██ ██ ███████ ██████ ██████ ██ ██
--- Fills the edges of the selection box with nodes.
-- @param {Position} pos1 The 1st position defining the WorldEdit selection
-- @param {Position} pos2 The 2nd positioon defining the WorldEdit selection
-- @param {string} node Name of the node to place
local v3 = worldeditadditions.Vector3
function worldeditadditions.wire_box(pos1,pos2,node)
local node_id_replace = minetest.get_content_id(node)
local ps1, ps2 = v3.sort(pos1,pos2)
-- Fetch the nodes in the specified area
local manip, area = worldedit.manip_helpers.init(pos1, pos2)
local data = manip:get_data()
-- Using three loops to reduce the number of nodes processed
local counts = { replaced = 0 }
for z = ps1.z,ps2.z do
for k,y in pairs({pos1.y,pos2.y}) do
for k,x in pairs({pos1.x,pos2.x}) do
data[area:index(x, y, z)] = node_id_replace
counts.replaced = counts.replaced + 1
end
end
end
if math.abs(ps2.y-ps1.y) > 1 then
for k,z in pairs({pos1.z,pos2.z}) do
for y = pos1.y+1,pos2.y-1 do
for k,x in pairs({pos1.x,pos2.x}) do
data[area:index(x, y, z)] = node_id_replace
counts.replaced = counts.replaced + 1
end
end
end
end
if math.abs(ps2.x-ps1.x) > 1 then
for k,z in pairs({pos1.z,pos2.z}) do
for k,y in pairs({pos1.y,pos2.y}) do
for x = pos1.x+1,pos2.x-1 do
data[area:index(x, y, z)] = node_id_replace
counts.replaced = counts.replaced + 1
end
end
end
end
-- Save the modified nodes back to disk & return
worldedit.manip_helpers.finish(manip, data)
return true, counts.replaced
end

@ -8,6 +8,6 @@
local we_cm = worldeditadditions_commands.modpath .. "/commands/wireframe/" local we_cm = worldeditadditions_commands.modpath .. "/commands/wireframe/"
-- dofile(we_cm.."wbox.lua") dofile(we_cm.."wbox.lua")
-- dofile(we_cm.."wcompass.lua") -- dofile(we_cm.."wcompass.lua")
dofile(we_cm.."wcorner.lua") dofile(we_cm.."wcorner.lua")

@ -0,0 +1,36 @@
-- ██ ██ ██████ ██████ ██ ██
-- ██ ██ ██ ██ ██ ██ ██ ██
-- ██ █ ██ ██████ ██ ██ ███
-- ██ ███ ██ ██ ██ ██ ██ ██ ██
-- ███ ███ ██████ ██████ ██ ██
local wea = worldeditadditions
local v3 = worldeditadditions.Vector3
worldedit.register_command("wbox", {
params = "<node>",
description = "Set the corners of the current selection to <node>",
privs = {worldedit=true},
require_pos = 2,
parse = function(param)
local node = worldedit.normalize_nodename(param)
if not node then
return false, "invalid node name: " .. param
end
return true, node
end,
nodes_needed = function(name)
local delta = v3.subtract(worldedit.pos2[name], worldedit.pos1[name]):abs():add(1)
local total, mult, axes = 1, 4, {"x","y","z"}
for k,v in pairs(axes) do
if worldedit.pos1[name] ~= worldedit.pos2[name] then total = total*2
else mult = mult/2 end
end
for k,v in pairs(axes) do
if delta[v] > 2 then total = total + (delta[v] - 2)*mult end
end
return total
end,
func = function(name, node)
local _, count = wea.wire_box(worldedit.pos1[name], worldedit.pos2[name], node)
return _, count .. " nodes set"
end,
})