mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-12-24 04:25:01 +00:00
53 lines
2 KiB
Lua
53 lines
2 KiB
Lua
local wea_c = worldeditadditions_core
|
|
local Vector3 = wea_c.Vector3
|
|
|
|
--- Holds the per-user selection stacks.
|
|
-- @namespace
|
|
worldeditadditions.sstack = {}
|
|
|
|
local sstack_max = 100
|
|
|
|
--- Calculates the height of the selection stack for the defined user.
|
|
-- If the defined user doesn't yet have a stack, a value of 0 is returned.
|
|
-- @param user string The name of the user to count the size of the selection stack for.
|
|
-- @return number The number of items on the stack for the given user.
|
|
function worldeditadditions.scount(name)
|
|
if not worldeditadditions.sstack[name] then
|
|
return 0
|
|
end
|
|
return #worldeditadditions.sstack[name]
|
|
end
|
|
|
|
--- Inserts a selection region onto the stack for the user with the given name.
|
|
-- Stacks are per-user.
|
|
-- @param name string The name of the user to insert onto.
|
|
-- @param pos1 Vector3 Position 1
|
|
-- @param pos2 Vector3 Position 2
|
|
function worldeditadditions.spush(name, pos1, pos2)
|
|
pos1 = Vector3.clone(pos1)
|
|
pos2 = Vector3.clone(pos2)
|
|
if not worldeditadditions.sstack[name] then
|
|
worldeditadditions.sstack[name] = {}
|
|
end
|
|
-- Checck the stack height
|
|
if #worldeditadditions.sstack[name] > sstack_max then
|
|
return false, "Error: Selection stack height of "..sstack_max.." would be exceeded by pushing a new selection onto the stack now."
|
|
end
|
|
|
|
table.insert(worldeditadditions.sstack[name], { pos1, pos2 })
|
|
|
|
return true
|
|
end
|
|
|
|
--- Pops a selection region off the stack for the given user.
|
|
-- Stacks are per-user.
|
|
-- @param name string The name of the user to remove a selection region off the stack for.
|
|
-- @return bool,Vector|string, Vector A bool true/false indicating success, followed by either a error message as a string if false or a pair of Vectors for the pos1 and pos2 from the item popped from the stack respectively.
|
|
function worldeditadditions.spop(name)
|
|
if not worldeditadditions.sstack[name] or #worldeditadditions.sstack[name] == 0 then
|
|
return false, "Error: The stack for user "..name.." is empty, so can't remove anything from it."
|
|
end
|
|
|
|
local item = table.remove(worldeditadditions.sstack[name])
|
|
return true, item[1], item[2]
|
|
end
|