Add and remove sub elements at runtime

master
Zughy 2020-11-28 13:33:59 +01:00
parent 17a810ed79
commit c5e2afa621
2 changed files with 64 additions and 24 deletions

86
api.lua
View File

@ -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

View File

@ -1,5 +1,5 @@
panel_lib = {}
local version = "2.0.0-dev"
local version = "2.1.0-dev"
dofile(minetest.get_modpath("panel_lib") .. "/api.lua")