mirror of
https://github.com/moparisthebest/minetest
synced 2024-12-23 16:08:51 -05:00
d3ee617f37
Add DPI support for statbar Move heart+bubble bar to Lua HUD Add statbar size (based upon an idea by blue42u) Add support for customizing breath and statbar
161 lines
3.4 KiB
Lua
161 lines
3.4 KiB
Lua
|
|
local health_bar_definition =
|
|
{
|
|
hud_elem_type = "statbar",
|
|
position = { x=0.5, y=1 },
|
|
text = "heart.png",
|
|
number = 20,
|
|
direction = 0,
|
|
size = { x=24, y=24 },
|
|
offset = { x=(-10*24)-25, y=-(48+24+10)},
|
|
}
|
|
|
|
local breath_bar_definition =
|
|
{
|
|
hud_elem_type = "statbar",
|
|
position = { x=0.5, y=1 },
|
|
text = "bubble.png",
|
|
number = 20,
|
|
direction = 0,
|
|
size = { x=24, y=24 },
|
|
offset = {x=25,y=-(48+24+10)},
|
|
}
|
|
|
|
local hud_ids = {}
|
|
|
|
local function initialize_builtin_statbars(player)
|
|
|
|
if not player:is_player() then
|
|
return
|
|
end
|
|
|
|
local name = player:get_player_name()
|
|
|
|
if name == "" then
|
|
return
|
|
end
|
|
|
|
if (hud_ids[name] == nil) then
|
|
hud_ids[name] = {}
|
|
end
|
|
|
|
if player:hud_get_flags().healthbar 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)
|
|
end
|
|
else
|
|
if hud_ids[name].id_healthbar ~= nil then
|
|
player:hud_remove(hud_ids[name].id_healthbar)
|
|
hud_ids[name].id_healthbar = nil
|
|
end
|
|
end
|
|
|
|
if (player:get_breath() < 11) then
|
|
if player:hud_get_flags().breathbar then
|
|
if hud_ids[name].id_breathbar == nil then
|
|
hud_ids[name].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
|
|
end
|
|
end
|
|
elseif hud_ids[name].id_breathbar ~= nil then
|
|
player:hud_remove(hud_ids[name].id_breathbar)
|
|
hud_ids[name].id_breathbar = nil
|
|
end
|
|
end
|
|
|
|
local function cleanup_builtin_statbars(player)
|
|
|
|
if not player:is_player() then
|
|
return
|
|
end
|
|
|
|
local name = player:get_player_name()
|
|
|
|
if name == "" then
|
|
return
|
|
end
|
|
|
|
hud_ids[name] = nil
|
|
end
|
|
|
|
local function player_event_handler(player,eventname)
|
|
assert(player:is_player())
|
|
|
|
local name = player:get_player_name()
|
|
|
|
if name == "" then
|
|
return
|
|
end
|
|
|
|
if eventname == "health_changed" then
|
|
initialize_builtin_statbars(player)
|
|
|
|
if hud_ids[name].id_healthbar ~= nil then
|
|
player:hud_change(hud_ids[name].id_healthbar,"number",player:get_hp())
|
|
return true
|
|
end
|
|
end
|
|
|
|
if eventname == "breath_changed" then
|
|
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)
|
|
return true
|
|
end
|
|
end
|
|
|
|
if eventname == "hud_changed" then
|
|
initialize_builtin_statbars(player)
|
|
return true
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
function minetest.hud_replace_builtin(name, definition)
|
|
|
|
if definition == nil or
|
|
type(definition) ~= "table" or
|
|
definition.hud_elem_type ~= "statbar" then
|
|
return false
|
|
end
|
|
|
|
if name == "health" then
|
|
health_bar_definition = definition
|
|
|
|
for name,ids in pairs(hud_ids) do
|
|
local player = minetest.get_player_by_name(name)
|
|
if player and hud_ids[name].id_healthbar then
|
|
player:hud_remove(hud_ids[name].id_healthbar)
|
|
initialize_builtin_statbars(player)
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
if name == "breath" then
|
|
breath_bar_definition = definition
|
|
|
|
for name,ids in pairs(hud_ids) do
|
|
local player = minetest.get_player_by_name(name)
|
|
if player and hud_ids[name].id_breathbar then
|
|
player:hud_remove(hud_ids[name].id_breathbar)
|
|
initialize_builtin_statbars(player)
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
minetest.register_on_joinplayer(initialize_builtin_statbars)
|
|
minetest.register_on_leaveplayer(cleanup_builtin_statbars)
|
|
minetest.register_playerevent(player_event_handler)
|