mirror of
https://github.com/Uberi/Minetest-WorldEdit.git
synced 2025-07-15 06:10:27 +02:00
Compare commits
2 Commits
1.3
...
7f87f1658e
Author | SHA1 | Date | |
---|---|---|---|
7f87f1658e | |||
4378750498 |
@ -640,10 +640,34 @@ function worldedit.clear_objects(pos1, pos2)
|
|||||||
|
|
||||||
worldedit.keep_loaded(pos1, pos2)
|
worldedit.keep_loaded(pos1, pos2)
|
||||||
|
|
||||||
|
local function should_delete(obj)
|
||||||
|
-- Avoid players and WorldEdit entities
|
||||||
|
if obj:is_player() then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
local entity = obj:get_luaentity()
|
||||||
|
return not entity or not entity.name:find("^worldedit:")
|
||||||
|
end
|
||||||
|
|
||||||
-- Offset positions to include full nodes (positions are in the center of nodes)
|
-- Offset positions to include full nodes (positions are in the center of nodes)
|
||||||
local pos1x, pos1y, pos1z = pos1.x - 0.5, pos1.y - 0.5, pos1.z - 0.5
|
local pos1x, pos1y, pos1z = pos1.x - 0.5, pos1.y - 0.5, pos1.z - 0.5
|
||||||
local pos2x, pos2y, pos2z = pos2.x + 0.5, pos2.y + 0.5, pos2.z + 0.5
|
local pos2x, pos2y, pos2z = pos2.x + 0.5, pos2.y + 0.5, pos2.z + 0.5
|
||||||
|
|
||||||
|
local count = 0
|
||||||
|
if minetest.get_objects_in_area then
|
||||||
|
local objects = minetest.get_objects_in_area({x=pos1x, y=pos1y, z=pos1z},
|
||||||
|
{x=pos2x, y=pos2y, z=pos2z})
|
||||||
|
|
||||||
|
for _, obj in pairs(objects) do
|
||||||
|
if should_delete(obj) then
|
||||||
|
obj:remove()
|
||||||
|
count = count + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return count
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Fallback implementation via get_objects_inside_radius
|
||||||
-- Center of region
|
-- Center of region
|
||||||
local center = {
|
local center = {
|
||||||
x = pos1x + ((pos2x - pos1x) / 2),
|
x = pos1x + ((pos2x - pos1x) / 2),
|
||||||
@ -655,12 +679,8 @@ function worldedit.clear_objects(pos1, pos2)
|
|||||||
(center.x - pos1x) ^ 2 +
|
(center.x - pos1x) ^ 2 +
|
||||||
(center.y - pos1y) ^ 2 +
|
(center.y - pos1y) ^ 2 +
|
||||||
(center.z - pos1z) ^ 2)
|
(center.z - pos1z) ^ 2)
|
||||||
local count = 0
|
|
||||||
for _, obj in pairs(minetest.get_objects_inside_radius(center, radius)) do
|
for _, obj in pairs(minetest.get_objects_inside_radius(center, radius)) do
|
||||||
local entity = obj:get_luaentity()
|
if should_delete(obj) then
|
||||||
-- Avoid players and WorldEdit entities
|
|
||||||
if not obj:is_player() and (not entity or
|
|
||||||
not entity.name:find("^worldedit:")) then
|
|
||||||
local pos = obj:get_pos()
|
local pos = obj:get_pos()
|
||||||
if pos.x >= pos1x and pos.x <= pos2x and
|
if pos.x >= pos1x and pos.x <= pos2x and
|
||||||
pos.y >= pos1y and pos.y <= pos2y and
|
pos.y >= pos1y and pos.y <= pos2y and
|
||||||
|
@ -11,6 +11,7 @@ local gui_count2 = {} --mapping of player names to a quantity (arbitrary strings
|
|||||||
local gui_count3 = {} --mapping of player names to a quantity (arbitrary strings may also appear as values)
|
local gui_count3 = {} --mapping of player names to a quantity (arbitrary strings may also appear as values)
|
||||||
local gui_angle = {} --mapping of player names to an angle (one of 90, 180, 270, representing the angle in degrees clockwise)
|
local gui_angle = {} --mapping of player names to an angle (one of 90, 180, 270, representing the angle in degrees clockwise)
|
||||||
local gui_filename = {} --mapping of player names to file names
|
local gui_filename = {} --mapping of player names to file names
|
||||||
|
local gui_param2 = {} --mapping of player names to param2 values
|
||||||
|
|
||||||
--set default values
|
--set default values
|
||||||
setmetatable(gui_nodename1, {__index = function() return "Cobblestone" end})
|
setmetatable(gui_nodename1, {__index = function() return "Cobblestone" end})
|
||||||
@ -25,6 +26,7 @@ setmetatable(gui_count2, {__index = function() return "6" end})
|
|||||||
setmetatable(gui_count3, {__index = function() return "4" end})
|
setmetatable(gui_count3, {__index = function() return "4" end})
|
||||||
setmetatable(gui_angle, {__index = function() return 90 end})
|
setmetatable(gui_angle, {__index = function() return 90 end})
|
||||||
setmetatable(gui_filename, {__index = function() return "building" end})
|
setmetatable(gui_filename, {__index = function() return "building" end})
|
||||||
|
setmetatable(gui_param2, {__index = function() return "0" end})
|
||||||
|
|
||||||
local axis_indices = {["X axis"]=1, ["Y axis"]=2, ["Z axis"]=3, ["Look direction"]=4}
|
local axis_indices = {["X axis"]=1, ["Y axis"]=2, ["Z axis"]=3, ["Look direction"]=4}
|
||||||
local axis_values = {"x", "y", "z", "?"}
|
local axis_values = {"x", "y", "z", "?"}
|
||||||
@ -904,3 +906,31 @@ worldedit.register_gui_function("worldedit_gui_clearobjects", {
|
|||||||
execute_worldedit_command("clearobjects", name, "")
|
execute_worldedit_command("clearobjects", name, "")
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
worldedit.register_gui_function("worldedit_gui_param2", {
|
||||||
|
name = "Set Param2",
|
||||||
|
privs = we_privs("param2"),
|
||||||
|
get_formspec = function(name)
|
||||||
|
local value = gui_param2[name] or "0"
|
||||||
|
return "size[6.5,3]" .. worldedit.get_formspec_header("worldedit_gui_param2") ..
|
||||||
|
"textarea[0.5,1;5,2;;;Some values may break the node!]"..
|
||||||
|
string.format("field[0.5,2.5;2,0.8;worldedit_gui_param2_value;New Param2;%s]", minetest.formspec_escape(value)) ..
|
||||||
|
"field_close_on_enter[worldedit_gui_param2_value;false]" ..
|
||||||
|
"button_exit[3.5,2.5;3,0.8;worldedit_gui_param2_submit;Set Param2]"
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
worldedit.register_gui_handler("worldedit_gui_param2", function(name, fields)
|
||||||
|
local cg = {
|
||||||
|
worldedit_gui_param2_value = gui_param2,
|
||||||
|
}
|
||||||
|
local ret = handle_changes(name, "worldedit_gui_param2", fields, cg)
|
||||||
|
if fields.worldedit_gui_param2_submit then
|
||||||
|
copy_changes(name, fields, cg)
|
||||||
|
worldedit.show_page(name, "worldedit_gui_param2")
|
||||||
|
|
||||||
|
execute_worldedit_command("param2", name, gui_param2[name])
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end)
|
||||||
|
Reference in New Issue
Block a user