Make health bars show rough percentage of max hp (#9)

This commit is contained in:
LoneWolfHT 2021-10-18 09:22:03 -07:00 committed by GitHub
parent 622e31394e
commit 8e4faffe8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 5 deletions

View File

@ -21,6 +21,11 @@ stds.minetest = {
"copy", "copy",
}, },
}, },
math = {
fields = {
"round",
},
}
} }
} }

View File

@ -11,8 +11,10 @@ end
-- Localize this functions for better performance, -- Localize this functions for better performance,
-- as it's called on every step -- as it's called on every step
local vector_distance = vector.distance local vector_distance = vector.distance
local min = math.min local max = {
local max_breath = minetest.PLAYER_MAX_BREATH_DEFAULT or 11 breath = 11,
hp = 20,
}
local mt_5 = minetest.features.object_independent_selectionbox local mt_5 = minetest.features.object_independent_selectionbox
@ -29,6 +31,14 @@ local function add_gauge(player)
end end
end end
-- credit: https://github.com/minetest/minetest/blob/6de8d77e17017cd5cc7b065d42566b6b1cd076cc/builtin/game/statbars.lua#L30-L37
local function scaleToDefault(player, field)
-- Scale "hp" or "breath" to supported amount
local current = player["get_" .. field](player)
local max_display = math.max(player:get_properties()[field .. "_max"], current)
return math.round(current / max_display * max[field])
end
minetest.register_entity("gauges:hp_bar", { minetest.register_entity("gauges:hp_bar", {
visual = "sprite", visual = "sprite",
visual_size = {x=1, y=1/16, z=1}, visual_size = {x=1, y=1/16, z=1},
@ -50,8 +60,8 @@ minetest.register_entity("gauges:hp_bar", {
return return
end end
local hp = min(player:get_hp(), 20) local hp = scaleToDefault(player, "hp")
local breath = min(player:get_breath(), max_breath) local breath = scaleToDefault(player, "breath")
if self.hp ~= hp or self.breath ~= breath then if self.hp ~= hp or self.breath ~= breath then
local health_t = "health_"..hp..".png" local health_t = "health_"..hp..".png"
@ -61,7 +71,7 @@ minetest.register_entity("gauges:hp_bar", {
health_t = "blank.png" health_t = "blank.png"
end end
if breath == max_breath then if breath == max.breath then
breath_t = "blank.png" breath_t = "blank.png"
end end