Add hud.swap_statbar(), fixes BlockMen/hunger#2
parent
b9b784af04
commit
ec9f4b2875
9
API.txt
9
API.txt
|
@ -1,13 +1,18 @@
|
||||||
function hud.register(name, def)
|
hud.register(name, def)
|
||||||
-- name: statbar name (health, air, hunger, armor already used by default)
|
-- name: statbar name (health, air, hunger, armor already used by default)
|
||||||
-- def: <HUD item definition> (see below)
|
-- def: <HUD item definition> (see below)
|
||||||
|
|
||||||
hud.change_item(player, name, def)
|
hud.change_item(player, name, def)
|
||||||
-- player: player object
|
-- player: player object
|
||||||
-- name: statbar name (health, air, hunger, armor already used by default)
|
-- name: statbar name
|
||||||
-- def: table containing new values
|
-- def: table containing new values
|
||||||
-- currently supported: number, text and offset
|
-- currently supported: number, text and offset
|
||||||
|
|
||||||
|
hud.swap_statbar(player, name1, name2) -- swaps position and offset of statbar with name1 with statbar with name2
|
||||||
|
-- player: player object
|
||||||
|
-- name1: statbar name
|
||||||
|
-- name2: statbar name
|
||||||
|
|
||||||
hud.remove_item(player, name)
|
hud.remove_item(player, name)
|
||||||
|
|
||||||
HUD item definition
|
HUD item definition
|
||||||
|
|
76
api.lua
76
api.lua
|
@ -66,6 +66,55 @@ function hud.register(name, def)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- swaps stabar positions
|
||||||
|
function hud.swap_statbar(player, item1, item2)
|
||||||
|
if not player or not item1 or not item2 then
|
||||||
|
throw_error("Not enough parameters given to swap statbars")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local def1 = items[item1] or nil
|
||||||
|
local def2 = items[item2] or nil
|
||||||
|
|
||||||
|
if not def1 or not def2 then
|
||||||
|
throw_error("Can't swap statbars. Given statbars are not correct")
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
local pos_swap = false
|
||||||
|
local p_name = player:get_player_name()
|
||||||
|
local elem1 = hud_id[p_name.."_"..item1]
|
||||||
|
local elem2 = hud_id[p_name.."_"..item2]
|
||||||
|
|
||||||
|
player:hud_change(elem2.id, "offset", def1.offset)
|
||||||
|
player:hud_change(elem1.id, "offset", def2.offset)
|
||||||
|
|
||||||
|
if def1.position.x ~= def2.position.x or def1.position.y ~= def2.position.y then
|
||||||
|
player:hud_change(elem2.id, "position", def1.position)
|
||||||
|
player:hud_change(elem1.id, "position", def2.position)
|
||||||
|
pos_swap = true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- do the items have backgrounds? if so, swap them aswell
|
||||||
|
local bg1 = hud_id[p_name.."_"..item1.."_bg"] or nil
|
||||||
|
local bg2 = hud_id[p_name.."_"..item2.."_bg"] or nil
|
||||||
|
if bg1 ~= nil and bg1.id then
|
||||||
|
player:hud_change(bg1.id, "offset", def2.offset)
|
||||||
|
if pos_swap == true then
|
||||||
|
player:hud_change(bg1.id, "position", def2.position)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if bg2 ~= nil and bg2.id then
|
||||||
|
player:hud_change(bg2.id, "offset", def1.offset)
|
||||||
|
if pos_swap == true then
|
||||||
|
player:hud_change(bg2.id, "position", def1.position)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
function hud.change_item(player, name, def)
|
function hud.change_item(player, name, def)
|
||||||
if not player or not player:is_player() or not name or not def then
|
if not player or not player:is_player() or not name or not def then
|
||||||
throw_error("Not enough parameters given to change HUD item")
|
throw_error("Not enough parameters given to change HUD item")
|
||||||
|
@ -106,6 +155,7 @@ function hud.change_item(player, name, def)
|
||||||
if bg and bg.max and bg.max < 1 and def.max and def.max > bg.max then
|
if bg and bg.max and bg.max < 1 and def.max and def.max > bg.max then
|
||||||
player:hud_change(bg.id, "number", def.max)
|
player:hud_change(bg.id, "number", def.max)
|
||||||
bg.max = def.max
|
bg.max = def.max
|
||||||
|
bg.number = def.max
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -119,27 +169,9 @@ function hud.change_item(player, name, def)
|
||||||
|
|
||||||
if def.offset and elem.offset then
|
if def.offset and elem.offset then
|
||||||
if def.item_name and def.offset == "item" then
|
if def.item_name and def.offset == "item" then
|
||||||
local i_name2 = player:get_player_name().."_"..def.item_name
|
-- for legacy reasons
|
||||||
local elem2 = hud_id[i_name2]
|
if def.item_name then
|
||||||
if elem2 then
|
hud.swap_statbar(player, name, def.item_name)
|
||||||
local p2 = elem2.offset
|
|
||||||
local p1 = elem.offset
|
|
||||||
player:hud_change(elem2.id, "offset", p1)
|
|
||||||
player:hud_change(elem.id, "offset", p2)
|
|
||||||
elem2.offset = p1
|
|
||||||
elem.offset = p2
|
|
||||||
if elem.background then
|
|
||||||
local elem3 = hud_id[i_name.."_bg"]
|
|
||||||
if elem3 and elem3.offset then
|
|
||||||
player:hud_change(elem3.id, "offset", p2)
|
|
||||||
elem3.offset = p2
|
|
||||||
local elem4 = hud_id[i_name2.."_bg"]
|
|
||||||
if elem4 and elem4.offset then
|
|
||||||
player:hud_change(elem4.id, "offset", p1)
|
|
||||||
elem4.offset = p1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
player:hud_change(elem.id, "offset", def.offset)
|
player:hud_change(elem.id, "offset", def.offset)
|
||||||
|
@ -190,7 +222,7 @@ minetest.register_on_joinplayer(function(player)
|
||||||
hud_flags.breathbar = false
|
hud_flags.breathbar = false
|
||||||
player:hud_set_flags(hud_flags)
|
player:hud_set_flags(hud_flags)
|
||||||
|
|
||||||
-- now add the backgrounds (e.g. for statbars)
|
-- now add the backgrounds for statbars
|
||||||
for _,item in pairs(sb_bg) do
|
for _,item in pairs(sb_bg) do
|
||||||
add_hud_item(player, _.."_bg", item)
|
add_hud_item(player, _.."_bg", item)
|
||||||
end
|
end
|
||||||
|
|
108
builtin.lua
108
builtin.lua
|
@ -44,70 +44,70 @@ end
|
||||||
|
|
||||||
if damage_enabled then
|
if damage_enabled then
|
||||||
hud.register("health", {
|
hud.register("health", {
|
||||||
hud_elem_type = "statbar",
|
hud_elem_type = "statbar",
|
||||||
position = HUD_HEALTH_POS,
|
position = HUD_HEALTH_POS,
|
||||||
size = HUD_SB_SIZE,
|
size = HUD_SB_SIZE,
|
||||||
text = "hud_heart_fg.png",
|
text = "hud_heart_fg.png",
|
||||||
number = 20,
|
number = 20,
|
||||||
alignment = {x = -1, y = -1},
|
alignment = {x = -1, y = -1},
|
||||||
offset = HUD_HEALTH_OFFSET,
|
offset = HUD_HEALTH_OFFSET,
|
||||||
background = "hud_heart_bg.png",
|
background = "hud_heart_bg.png",
|
||||||
events = {
|
events = {
|
||||||
{
|
{
|
||||||
type = "damage",
|
type = "damage",
|
||||||
func = function(player)
|
func = function(player)
|
||||||
hud.change_item(player, "health", {number = player:get_hp()})
|
hud.change_item(player, "health", {number = player:get_hp()})
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
hud.register("air", {
|
hud.register("air", {
|
||||||
hud_elem_type = "statbar",
|
hud_elem_type = "statbar",
|
||||||
position = HUD_AIR_POS,
|
position = HUD_AIR_POS,
|
||||||
size = HUD_SB_SIZE,
|
size = HUD_SB_SIZE,
|
||||||
text = "hud_air_fg.png",
|
text = "hud_air_fg.png",
|
||||||
number = 0,
|
number = 0,
|
||||||
alignment = {x = -1, y = -1},
|
alignment = {x = -1, y = -1},
|
||||||
offset = HUD_AIR_OFFSET,
|
offset = HUD_AIR_OFFSET,
|
||||||
background = nil,
|
background = nil,
|
||||||
events = {
|
events = {
|
||||||
{
|
{
|
||||||
type = "breath",
|
type = "breath",
|
||||||
func = function(player)
|
func = function(player)
|
||||||
local air = player:get_breath()
|
local air = player:get_breath()
|
||||||
if air > 10 then
|
if air > 10 then
|
||||||
air = 0
|
air = 0
|
||||||
|
end
|
||||||
|
hud.change_item(player, "air", {number = air * 2})
|
||||||
end
|
end
|
||||||
hud.change_item(player, "air", {number = air * 2})
|
}
|
||||||
end
|
},
|
||||||
}
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
hud.register("armor", {
|
hud.register("armor", {
|
||||||
hud_elem_type = "statbar",
|
hud_elem_type = "statbar",
|
||||||
position = HUD_ARMOR_POS,
|
position = HUD_ARMOR_POS,
|
||||||
size = HUD_SB_SIZE,
|
size = HUD_SB_SIZE,
|
||||||
text = "hud_armor_fg.png",
|
text = "hud_armor_fg.png",
|
||||||
number = 0,
|
number = 0,
|
||||||
alignment = {x = -1, y = -1},
|
alignment = {x = -1, y = -1},
|
||||||
offset = HUD_ARMOR_OFFSET,
|
offset = HUD_ARMOR_OFFSET,
|
||||||
background = "hud_armor_bg.png",
|
background = "hud_armor_bg.png",
|
||||||
autohide_bg = true,
|
autohide_bg = true,
|
||||||
max = 20,
|
max = 20,
|
||||||
})
|
})
|
||||||
|
|
||||||
hud.register("hunger", {
|
hud.register("hunger", {
|
||||||
hud_elem_type = "statbar",
|
hud_elem_type = "statbar",
|
||||||
position = HUD_HUNGER_POS,
|
position = HUD_HUNGER_POS,
|
||||||
size = HUD_SB_SIZE,
|
size = HUD_SB_SIZE,
|
||||||
text = "hud_hunger_fg.png",
|
text = "hud_hunger_fg.png",
|
||||||
number = 0,
|
number = 0,
|
||||||
alignment = {x = -1, y = -1},
|
alignment = {x = -1, y = -1},
|
||||||
offset = HUD_HUNGER_OFFSET,
|
offset = HUD_HUNGER_OFFSET,
|
||||||
background = "hud_hunger_bg.png",
|
background = "hud_hunger_bg.png",
|
||||||
max = 0,
|
max = 0,
|
||||||
})
|
})
|
||||||
else
|
else
|
||||||
hud.show_armor = false
|
hud.show_armor = false
|
||||||
|
|
Loading…
Reference in New Issue