is_shown() utility | Bugfix: sub elements instantly updated if :update() is called when they're displayed

master
Zughy 2020-07-28 02:31:58 +02:00
parent 9e8ea201ca
commit ab6db258ae
3 changed files with 26 additions and 1 deletions

View File

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

25
api.lua
View File

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

View File

@ -1,4 +1,5 @@
{
name = "mymod_mypanel",
player = "singleplayer",
position = { x = 1, y = 0.5 },
alignment = { x = -1, y = 0 },