Add and remove sub elements at runtime
parent
17a810ed79
commit
c5e2afa621
86
api.lua
86
api.lua
|
@ -1,6 +1,8 @@
|
|||
panel_lib.panels = {} -- KEY: p_name; VALUE: {{"panel name" = panel}, {"panel name 2" = panel2}, ...}
|
||||
|
||||
local function clone_table() end
|
||||
local function add_sub_elem() end
|
||||
local function remove_sub_elem() end
|
||||
|
||||
Panel = {
|
||||
name = "",
|
||||
|
@ -94,33 +96,16 @@ function Panel:new(def)
|
|||
-- controllo sottoelementi
|
||||
if def.sub_img_elems then
|
||||
local i = 1
|
||||
for name, elem in pairs(def.sub_img_elems) do
|
||||
panel.sub_img_elems[i] = name
|
||||
panel[name] = clone_table(panel.background_def)
|
||||
|
||||
for param, v in pairs(elem) do
|
||||
panel[name][param] = v
|
||||
end
|
||||
|
||||
-- mantengo la stessa posizione del corpo del panel, costringendo
|
||||
-- l'utente a modificare gli offset se vuole spostare gli elementi
|
||||
panel[name].position = def.position
|
||||
for name, HUD_elem in pairs(def.sub_img_elems) do
|
||||
add_sub_elem(panel, "image", name, HUD_elem)
|
||||
i = i +1
|
||||
end
|
||||
end
|
||||
|
||||
if def.sub_txt_elems then
|
||||
local i = 1
|
||||
for name, elem in pairs(def.sub_txt_elems) do
|
||||
panel.sub_txt_elems[i] = name
|
||||
panel[name] = clone_table(panel.title_def)
|
||||
|
||||
for param, v in pairs(elem) do
|
||||
panel[name][param] = v
|
||||
end
|
||||
|
||||
-- idem come sopra
|
||||
panel[name].position = def.position
|
||||
for name, HUD_elem in pairs(def.sub_txt_elems) do
|
||||
add_sub_elem(panel, "text", name, HUD_elem)
|
||||
i = i +1
|
||||
end
|
||||
end
|
||||
|
@ -218,8 +203,30 @@ end
|
|||
|
||||
|
||||
function Panel:is_shown()
|
||||
if self.is_shown then return true
|
||||
else return false end
|
||||
return self.is_shown
|
||||
end
|
||||
|
||||
|
||||
|
||||
function Panel:add_sub_elem(type, name, HUD_elem)
|
||||
add_sub_elem(self, type, name, HUD_elem)
|
||||
|
||||
-- aggiorno se visibile
|
||||
if self.is_shown then
|
||||
self:hide()
|
||||
self:show()
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
function Panel:remove_sub_elem(name)
|
||||
self.sub_txt_elems[name] = nil
|
||||
self.sub_img_elems[name] = nil
|
||||
self[name] = nil
|
||||
if self.is_shown then
|
||||
minetest.get_player_by_name(self.player_name):hud_remove(self.hud_id[name])
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
@ -257,3 +264,36 @@ function clone_table(orig)
|
|||
end
|
||||
return copy
|
||||
end
|
||||
|
||||
|
||||
|
||||
function add_sub_elem(panel, type, name, HUD_elem)
|
||||
|
||||
local sub_elems
|
||||
local mould
|
||||
|
||||
if type == "text" then
|
||||
sub_elems = panel.sub_txt_elems
|
||||
mould = panel.title_def
|
||||
elseif type == "image" then
|
||||
sub_elems = panel.sub_img_elems
|
||||
mould = panel.background_def
|
||||
else
|
||||
error("[PANEL_LIB] type must be either 'text' or 'image'!")
|
||||
end
|
||||
|
||||
if panel[name] then
|
||||
minetest.log("error", "[PANEL_LIB] Attempt to create a sub element with the same name of another. Aborting")
|
||||
return end
|
||||
|
||||
sub_elems[#sub_elems +1] = name
|
||||
panel[name] = clone_table(mould)
|
||||
|
||||
for k, v in pairs(HUD_elem) do
|
||||
panel[name][k] = v
|
||||
end
|
||||
|
||||
-- mantengo la stessa posizione del corpo del panel, costringendo
|
||||
-- l'utente a modificare gli offset se vuole spostare gli elementi
|
||||
panel[name].position = mould.position
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue