diff --git a/worldeditadditions/lib/wireframe/corner_set.lua b/worldeditadditions/lib/wireframe/corner_set.lua new file mode 100644 index 0000000..822c7e1 --- /dev/null +++ b/worldeditadditions/lib/wireframe/corner_set.lua @@ -0,0 +1,32 @@ +-- ██████ ██████ ██████ ███ ██ ███████ ██████ ███████ ███████ ████████ +-- ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ ██ ██ +-- ██ ██ ██ ██████ ██ ██ ██ █████ ██████ ███████ █████ ██ +-- ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ +-- ██████ ██████ ██ ██ ██ ████ ███████ ██ ██ ███████ ███████ ██ + +--- Puts a node at each corner of selection box. +-- @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 +function worldeditadditions.corner_set(pos1,pos2,node) + local node_id_replace = minetest.get_content_id(node) + + -- Fetch the nodes in the specified area + local manip, area = worldedit.manip_helpers.init(pos1, pos2) + local data = manip:get_data() + + -- z y x is the preferred loop order (because CPU cache I'd guess, since then we're iterating linearly through the data array) + local counts = { replaced = 0 } + for k,z in pairs({pos1.z,pos2.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 + -- Save the modified nodes back to disk & return + worldedit.manip_helpers.finish(manip, data) + + return true, counts.replaced +end diff --git a/worldeditadditions_commands/commands/wireframe/wcorner.lua b/worldeditadditions_commands/commands/wireframe/wcorner.lua index e69de29..fb66d60 100644 --- a/worldeditadditions_commands/commands/wireframe/wcorner.lua +++ b/worldeditadditions_commands/commands/wireframe/wcorner.lua @@ -0,0 +1,30 @@ +-- ██ ██ ██████ ██████ ██████ ███ ██ ███████ ██████ +-- ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ +-- ██ █ ██ ██ ██ ██ ██████ ██ ██ ██ █████ ██████ +-- ██ ███ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ +-- ███ ███ ██████ ██████ ██ ██ ██ ████ ███████ ██ ██ +local wea = worldeditadditions +worldedit.register_command("wcorner", { + params = "", + description = "Set the corners of the current selection to ", + 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 p1, p2, total = worldedit.pos1[name], worldedit.pos2[name], 1 + for k,v in pairs({"x","y","z"}) do + if p1[v] ~= p2[v] then total = total*2 end + end + return total + end, + func = function(name, node) + local _, count = wea.corner_set(worldedit.pos1[name], worldedit.pos2[name], node) + return _, count .. " nodes set" + end, +})