From ab6db258aed7ee0ef4d52c4cda9c925c3f7067aa Mon Sep 17 00:00:00 2001 From: Zughy <4279489-marco_a@users.noreply.gitlab.com> Date: Tue, 28 Jul 2020 02:31:58 +0200 Subject: [PATCH] is_shown() utility | Bugfix: sub elements instantly updated if :update() is called when they're displayed --- DOCS.md | 1 + api.lua | 25 ++++++++++++++++++++++++- panel.example | 1 + 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/DOCS.md b/DOCS.md index dbdc4ac..acea9cc 100644 --- a/DOCS.md +++ b/DOCS.md @@ -38,6 +38,7 @@ Install it as any other mod `¯\_(ツ)_/¯` * `new({params})`: creates a new panel * `show()`: makes the panel appear * `hide()`: makes the panel disappear (but it's still assigned to the player) +* `is_shown()`: whether the panel is currently displayed * `remove()`: deletes it * `update(panel_params, txt_elems, img_elems)`: updates only the mentioned parameters. For instance, calling diff --git a/api.lua b/api.lua index 89b600c..a7112df 100644 --- a/api.lua +++ b/api.lua @@ -26,7 +26,9 @@ Panel = { }, sub_img_elems = {}, - sub_txt_elems = {} + sub_txt_elems = {}, + + is_shown = false } @@ -135,6 +137,7 @@ function Panel:show() self.hud_id[name] = player:hud_add(self[name]) end + self.is_shown = true end @@ -149,12 +152,15 @@ function Panel:hide() end end + self.is_shown = false end function Panel:update(def, txt_elems, img_elems) + local player = minetest.get_player_by_name(self.player_name) + if def ~= nil then for k, v in pairs(def) do self[k] = v @@ -166,6 +172,9 @@ function Panel:update(def, txt_elems, img_elems) for elem, _ in pairs(txt_elems) do for k, v in pairs(txt_elems[elem]) do self[elem][k] = v + if self.is_shown then + player:hud_change(self.hud_id[elem], k, v) + end end end @@ -176,6 +185,9 @@ function Panel:update(def, txt_elems, img_elems) for elem, _ in pairs(img_elems) do for k, v in pairs(img_elems[elem]) do self[elem][k] = v + if self.is_shown then + player:hud_change(self.hud_id[elem], k, v) + end end end @@ -192,6 +204,15 @@ end +function Panel:is_shown() + if self.is_shown then return true + else return false end +end + + + + + ---------------------------------------------- -----------------GETTERS---------------------- ---------------------------------------------- @@ -202,6 +223,8 @@ end + + ---------------------------------------------- ---------------FUNZIONI LOCALI---------------- ---------------------------------------------- diff --git a/panel.example b/panel.example index 1f46d4a..fab76c5 100644 --- a/panel.example +++ b/panel.example @@ -1,4 +1,5 @@ { + name = "mymod_mypanel", player = "singleplayer", position = { x = 1, y = 0.5 }, alignment = { x = -1, y = 0 },