]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - builtin/game/statbars.lua
Remove nodeupdate and nodeupdate_single
[dragonfireclient.git] / builtin / game / statbars.lua
index 61a8b90770a9b8d5e0512445f14d3e108c65ce24..1b83dd4ac6a66dea3d4af56211da72080dcedd1c 100644 (file)
@@ -1,10 +1,12 @@
+-- cache setting
+local enable_damage = core.settings:get_bool("enable_damage")
 
 local health_bar_definition =
 {
        hud_elem_type = "statbar",
        position = { x=0.5, y=1 },
        text = "heart.png",
-       number = 20,
+       number = core.PLAYER_MAX_HP_DEFAULT,
        direction = 0,
        size = { x=24, y=24 },
        offset = { x=(-10*24)-25, y=-(48+24+16)},
@@ -35,41 +37,45 @@ local function initialize_builtin_statbars(player)
                return
        end
 
-       if (hud_ids[name] == nil) then
+       if not hud_ids[name] then
                hud_ids[name] = {}
                -- flags are not transmitted to client on connect, we need to make sure
                -- our current flags are transmitted by sending them actively
                player:hud_set_flags(player:hud_get_flags())
        end
-
-       if player:hud_get_flags().healthbar and
-                       core.is_yes(core.setting_get("enable_damage")) then
-               if hud_ids[name].id_healthbar == nil then
-                       health_bar_definition.number = player:get_hp()
-                       hud_ids[name].id_healthbar  = player:hud_add(health_bar_definition)
+       local hud = hud_ids[name]
+
+       if player:hud_get_flags().healthbar and enable_damage then
+               if hud.id_healthbar == nil then
+                       local hp = player:get_hp()
+                       local max_display_hp = math.max(core.PLAYER_MAX_HP_DEFAULT,
+                               math.max(player:get_properties().hp_max, hp))
+                       -- Limit width of health bar: Scale to the default maximal HP
+                       health_bar_definition.number =
+                               hp / max_display_hp * core.PLAYER_MAX_HP_DEFAULT
+                       hud.id_healthbar  = player:hud_add(health_bar_definition)
                end
        else
-               if hud_ids[name].id_healthbar ~= nil then
-                       player:hud_remove(hud_ids[name].id_healthbar)
-                       hud_ids[name].id_healthbar = nil
+               if hud.id_healthbar ~= nil then
+                       player:hud_remove(hud.id_healthbar)
+                       hud.id_healthbar = nil
                end
        end
 
-       if (player:get_breath() < 11) then
-               if player:hud_get_flags().breathbar and
-                       core.is_yes(core.setting_get("enable_damage")) then
-                       if hud_ids[name].id_breathbar == nil then
-                               hud_ids[name].id_breathbar = player:hud_add(breath_bar_definition)
+       if player:get_breath() < core.PLAYER_MAX_BREATH then
+               if player:hud_get_flags().breathbar and enable_damage then
+                       if hud.id_breathbar == nil then
+                               hud.id_breathbar = player:hud_add(breath_bar_definition)
                        end
                else
-                       if hud_ids[name].id_breathbar ~= nil then
-                               player:hud_remove(hud_ids[name].id_breathbar)
-                               hud_ids[name].id_breathbar = nil
+                       if hud.id_breathbar ~= nil then
+                               player:hud_remove(hud.id_breathbar)
+                               hud.id_breathbar = nil
                        end
                end
-       elseif hud_ids[name].id_breathbar ~= nil then
-               player:hud_remove(hud_ids[name].id_breathbar)
-               hud_ids[name].id_breathbar = nil
+       elseif hud.id_breathbar ~= nil then
+               player:hud_remove(hud.id_breathbar)
+               hud.id_breathbar = nil
        end
 end
 
@@ -101,7 +107,12 @@ local function player_event_handler(player,eventname)
                initialize_builtin_statbars(player)
 
                if hud_ids[name].id_healthbar ~= nil then
-                       player:hud_change(hud_ids[name].id_healthbar,"number",player:get_hp())
+                       local hp = player:get_hp()
+                       local max_display_hp = math.max(core.PLAYER_MAX_HP_DEFAULT,
+                               math.max(player:get_properties().hp_max, hp))
+                       -- Limit width of health bar: Scale to the default maximal HP
+                       local hp_count = hp / max_display_hp * core.PLAYER_MAX_HP_DEFAULT
+                       player:hud_change(hud_ids[name].id_healthbar, "number", hp_count)
                        return true
                end
        end
@@ -110,7 +121,7 @@ local function player_event_handler(player,eventname)
                initialize_builtin_statbars(player)
 
                if hud_ids[name].id_breathbar ~= nil then
-                       player:hud_change(hud_ids[name].id_breathbar,"number",player:get_breath()*2)
+                       player:hud_change(hud_ids[name].id_breathbar, "number", player:get_breath() * 2)
                        return true
                end
        end