From c5e2afa6218b517826b7203c60e6895e5f5873f4 Mon Sep 17 00:00:00 2001 From: Zughy <4279489-marco_a@users.noreply.gitlab.com> Date: Sat, 28 Nov 2020 13:33:59 +0100 Subject: [PATCH] Add and remove sub elements at runtime --- api.lua | 86 +++++++++++++++++++++++++++++++++++++++++--------------- init.lua | 2 +- 2 files changed, 64 insertions(+), 24 deletions(-) diff --git a/api.lua b/api.lua index 2e95873..d5b8cdf 100644 --- a/api.lua +++ b/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 diff --git a/init.lua b/init.lua index 68570ee..47b19b5 100644 --- a/init.lua +++ b/init.lua @@ -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")