summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlockMen <nmuelll@web.de>2015-07-15 01:16:52 +0200
committerBlockMen <nmuelll@web.de>2015-07-15 01:16:52 +0200
commitec9f4b2875ebd025e212559522a98a59f6796e85 (patch)
treef11a007cedd199d250cf479d0e1fb67116f607ab
parentb9b784af040eb537b49edfdb38d440c851cecda1 (diff)
Add hud.swap_statbar(), fixes BlockMen/hunger#2
-rw-r--r--API.txt9
-rw-r--r--api.lua76
-rw-r--r--builtin.lua108
3 files changed, 115 insertions, 78 deletions
diff --git a/API.txt b/API.txt
index caeaf90..371cdfd 100644
--- a/API.txt
+++ b/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)
-- def: <HUD item definition> (see below)
hud.change_item(player, name, def)
-- player: player object
- -- name: statbar name (health, air, hunger, armor already used by default)
+ -- name: statbar name
-- def: table containing new values
-- 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 item definition
diff --git a/api.lua b/api.lua
index c40d857..c4a7ba4 100644
--- a/api.lua
+++ b/api.lua
@@ -66,6 +66,55 @@ function hud.register(name, def)
return true
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)
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")
@@ -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
player:hud_change(bg.id, "number", def.max)
bg.max = def.max
+ bg.number = def.max
end
end
end
@@ -119,27 +169,9 @@ function hud.change_item(player, name, def)
if def.offset and elem.offset then
if def.item_name and def.offset == "item" then
- local i_name2 = player:get_player_name().."_"..def.item_name
- local elem2 = hud_id[i_name2]
- if elem2 then
- 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
+ -- for legacy reasons
+ if def.item_name then
+ hud.swap_statbar(player, name, def.item_name)
end
else
player:hud_change(elem.id, "offset", def.offset)
@@ -190,7 +222,7 @@ minetest.register_on_joinplayer(function(player)
hud_flags.breathbar = false
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
add_hud_item(player, _.."_bg", item)
end
diff --git a/builtin.lua b/builtin.lua
index 057189c..dfdb707 100644
--- a/builtin.lua
+++ b/builtin.lua
@@ -44,70 +44,70 @@ end
if damage_enabled then
hud.register("health", {
- hud_elem_type = "statbar",
- position = HUD_HEALTH_POS,
- size = HUD_SB_SIZE,
- text = "hud_heart_fg.png",
- number = 20,
- alignment = {x = -1, y = -1},
- offset = HUD_HEALTH_OFFSET,
- background = "hud_heart_bg.png",
- events = {
- {
- type = "damage",
- func = function(player)
- hud.change_item(player, "health", {number = player:get_hp()})
- end
- }
- },
+ hud_elem_type = "statbar",
+ position = HUD_HEALTH_POS,
+ size = HUD_SB_SIZE,
+ text = "hud_heart_fg.png",
+ number = 20,
+ alignment = {x = -1, y = -1},
+ offset = HUD_HEALTH_OFFSET,
+ background = "hud_heart_bg.png",
+ events = {
+ {
+ type = "damage",
+ func = function(player)
+ hud.change_item(player, "health", {number = player:get_hp()})
+ end
+ }
+ },
})
hud.register("air", {
- hud_elem_type = "statbar",
- position = HUD_AIR_POS,
- size = HUD_SB_SIZE,
- text = "hud_air_fg.png",
- number = 0,
- alignment = {x = -1, y = -1},
- offset = HUD_AIR_OFFSET,
- background = nil,
- events = {
- {
- type = "breath",
- func = function(player)
- local air = player:get_breath()
- if air > 10 then
- air = 0
+ hud_elem_type = "statbar",
+ position = HUD_AIR_POS,
+ size = HUD_SB_SIZE,
+ text = "hud_air_fg.png",
+ number = 0,
+ alignment = {x = -1, y = -1},
+ offset = HUD_AIR_OFFSET,
+ background = nil,
+ events = {
+ {
+ type = "breath",
+ func = function(player)
+ local air = player:get_breath()
+ if air > 10 then
+ air = 0
+ end
+ hud.change_item(player, "air", {number = air * 2})
end
- hud.change_item(player, "air", {number = air * 2})
- end
- }
- },
+ }
+ },
})
hud.register("armor", {
- hud_elem_type = "statbar",
- position = HUD_ARMOR_POS,
- size = HUD_SB_SIZE,
- text = "hud_armor_fg.png",
- number = 0,
- alignment = {x = -1, y = -1},
- offset = HUD_ARMOR_OFFSET,
- background = "hud_armor_bg.png",
- autohide_bg = true,
- max = 20,
+ hud_elem_type = "statbar",
+ position = HUD_ARMOR_POS,
+ size = HUD_SB_SIZE,
+ text = "hud_armor_fg.png",
+ number = 0,
+ alignment = {x = -1, y = -1},
+ offset = HUD_ARMOR_OFFSET,
+ background = "hud_armor_bg.png",
+ autohide_bg = true,
+ max = 20,
})
hud.register("hunger", {
- hud_elem_type = "statbar",
- position = HUD_HUNGER_POS,
- size = HUD_SB_SIZE,
- text = "hud_hunger_fg.png",
- number = 0,
- alignment = {x = -1, y = -1},
- offset = HUD_HUNGER_OFFSET,
- background = "hud_hunger_bg.png",
- max = 0,
+ hud_elem_type = "statbar",
+ position = HUD_HUNGER_POS,
+ size = HUD_SB_SIZE,
+ text = "hud_hunger_fg.png",
+ number = 0,
+ alignment = {x = -1, y = -1},
+ offset = HUD_HUNGER_OFFSET,
+ background = "hud_hunger_bg.png",
+ max = 0,
})
else
hud.show_armor = false