mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-10-31 21:33:02 +00:00
//metaball: address a number of stability issues
This commit is contained in:
parent
5baa72cf6f
commit
95a82add86
2 changed files with 25 additions and 11 deletions
|
@ -55,6 +55,9 @@ end
|
||||||
local function list_pretty(player_name)
|
local function list_pretty(player_name)
|
||||||
local success, metaball_list = list(player_name)
|
local success, metaball_list = list(player_name)
|
||||||
if not success then return success, metaball_list end
|
if not success then return success, metaball_list end
|
||||||
|
if not metaball_list or type(metaball_list) ~= "table" then
|
||||||
|
return false, "Invalid metaball list returned"
|
||||||
|
end
|
||||||
|
|
||||||
local rows = { { "Index", "Position", "Radius" } }
|
local rows = { { "Index", "Position", "Radius" } }
|
||||||
for i,metaball in ipairs(metaball_list) do
|
for i,metaball in ipairs(metaball_list) do
|
||||||
|
@ -75,6 +78,9 @@ end
|
||||||
local function remove(player_name, index)
|
local function remove(player_name, index)
|
||||||
local success, metaball_list = list(player_name)
|
local success, metaball_list = list(player_name)
|
||||||
if not success then return success, metaball_list end
|
if not success then return success, metaball_list end
|
||||||
|
if not metaball_list or type(metaball_list) ~= "table" then
|
||||||
|
return false, "Invalid metaball list returned"
|
||||||
|
end
|
||||||
|
|
||||||
if index > #metaball_list then
|
if index > #metaball_list then
|
||||||
return false, "Error: Requested the removal of metaball "..tostring(index)..", but there are "..tostring(#metaball_list).." metaballs defined."
|
return false, "Error: Requested the removal of metaball "..tostring(index)..", but there are "..tostring(#metaball_list).." metaballs defined."
|
||||||
|
@ -82,7 +88,7 @@ local function remove(player_name, index)
|
||||||
|
|
||||||
table.remove(metaball_list, index)
|
table.remove(metaball_list, index)
|
||||||
|
|
||||||
return #metaball_list
|
return true, #metaball_list
|
||||||
end
|
end
|
||||||
|
|
||||||
--- Removes all the currently defined metaballs for the given player.
|
--- Removes all the currently defined metaballs for the given player.
|
||||||
|
@ -104,8 +110,11 @@ local function volume(player_name)
|
||||||
local success, metaball_list = list(player_name)
|
local success, metaball_list = list(player_name)
|
||||||
if not success then return success, metaball_list end
|
if not success then return success, metaball_list end
|
||||||
|
|
||||||
|
if not metaball_list or not metaball_list[1] or type(metaball_list) ~= "table" then return false, "Error: Invalid metaball list returned" end
|
||||||
|
|
||||||
if #metaball_list == 0 then return 0 end
|
if #metaball_list == 0 then return 0 end
|
||||||
|
|
||||||
|
|
||||||
local pos1 = metaball_list[1].pos
|
local pos1 = metaball_list[1].pos
|
||||||
local pos2 = pos1
|
local pos2 = pos1
|
||||||
|
|
||||||
|
@ -114,7 +123,7 @@ local function volume(player_name)
|
||||||
pos2 = Vector3.max(pos2, metaball.pos + metaball.radius)
|
pos2 = Vector3.max(pos2, metaball.pos + metaball.radius)
|
||||||
end
|
end
|
||||||
|
|
||||||
return (pos2 - pos1):area()
|
return true, (pos2 - pos1):area()
|
||||||
end
|
end
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|
|
@ -18,7 +18,7 @@ worldeditadditions_core.register_command("metaball", {
|
||||||
local parts = wea_c.split_shell(params_text)
|
local parts = wea_c.split_shell(params_text)
|
||||||
|
|
||||||
if #parts < 1 then
|
if #parts < 1 then
|
||||||
return false, "Error: Not enough arguments (see /help /dome for usage information)."
|
return false, "Error: Not enough arguments (see /help /metaball for usage information)."
|
||||||
end
|
end
|
||||||
|
|
||||||
local subcommand = parts[1]
|
local subcommand = parts[1]
|
||||||
|
@ -83,7 +83,14 @@ worldeditadditions_core.register_command("metaball", {
|
||||||
end,
|
end,
|
||||||
nodes_needed = function(name, subcommand)
|
nodes_needed = function(name, subcommand)
|
||||||
if subcommand == "render" then
|
if subcommand == "render" then
|
||||||
return wea.metaballs.volume(name)
|
local success, value = wea.metaballs.volume(name)
|
||||||
|
|
||||||
|
if not success then
|
||||||
|
worldedit.player_notify(name, value)
|
||||||
|
return -1
|
||||||
|
end
|
||||||
|
|
||||||
|
return value
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
@ -103,21 +110,19 @@ worldeditadditions_core.register_command("metaball", {
|
||||||
local success2, volume = wea.metaballs.volume(name)
|
local success2, volume = wea.metaballs.volume(name)
|
||||||
if not success2 then return success2, volume end
|
if not success2 then return success2, volume end
|
||||||
|
|
||||||
message = #metaballs_list.." will take up to "..tostring(volume).." nodes of space"
|
message = #metaballs_list.." metaballs will take up to "..tostring(volume).." nodes of space"
|
||||||
elseif subcommand == "clear" then
|
elseif subcommand == "clear" then
|
||||||
local success, metaballs_cleared = wea.metaballs.clear(name)
|
local metaballs_cleared = wea.metaballs.clear(name)
|
||||||
if not success then return success, metaballs_cleared end
|
message = tostring(metaballs_cleared).." metaball cleared"
|
||||||
|
|
||||||
message = tostring(metaballs_cleared).." cleared"
|
|
||||||
elseif subcommand == "remove" then
|
elseif subcommand == "remove" then
|
||||||
local index = subargs[1]
|
local index = subargs[1]
|
||||||
|
|
||||||
local success, metaballs_count = wea.metaballs.remove(name, index)
|
local success, metaballs_count = wea.metaballs.remove(name, index)
|
||||||
if not success then return success, metaballs_count end
|
if not success then return success, metaballs_count end
|
||||||
|
|
||||||
message = "metaball at index "..tostring(index).." removed - "..metaballs_count.." metaballs remain"
|
message = "metaball at index "..tostring(index).." removed - "..tostring(metaballs_count).." metaballs remain"
|
||||||
elseif subcommand == "add" then
|
elseif subcommand == "add" then
|
||||||
local pos = Vector3.clone(worldedit.pos1[name])
|
local pos = Vector3.clone(worldedit.pos1[name]):round()
|
||||||
local radius = subargs[1]
|
local radius = subargs[1]
|
||||||
|
|
||||||
local success, metaballs_count = wea.metaballs.add(name, pos, radius)
|
local success, metaballs_count = wea.metaballs.add(name, pos, radius)
|
||||||
|
|
Loading…
Reference in a new issue