summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWuzzy <almikes@aol.com>2016-07-03 00:18:54 +0200
committerWuzzy <almikes@aol.com>2016-07-03 00:18:54 +0200
commitfff42e2a4209b751b51e6ee887d553816587e918 (patch)
treea2b30416b51931566af560506c10828c3c7e29a5
parent1916c220b7d2c810e674db2250b7cc4add89cebf (diff)
Allow to change HUD bar images and label later
-rw-r--r--API.md33
-rw-r--r--init.lua29
2 files changed, 53 insertions, 9 deletions
diff --git a/API.md b/API.md
index 8af63b6..39ef683 100644
--- a/API.md
+++ b/API.md
@@ -99,22 +99,39 @@ Always `nil`.
## Modifying a HUD bar
-After a HUD bar has been added, you can change the current and maximum value on a per-player basis.
+After a HUD bar has been added, you can change the current and maximum value and other attributes on a per-player basis.
You use the function `hb.change_hudbar` for this.
-### `hb.change_hudbar(player, identifier, new_value, new_max_value)`
-Changes the values of an initialized HUD bar for a certain player. `new_value` and `new_max_value`
-can be `nil`; if one of them is `nil`, that means the value is unchanged. If both values
-are `nil`, this function is a no-op.
-This function also tries minimize the amount of calls to `hud_change` of the Minetest Lua API, and
-therefore, network traffic. `hud_change` is only called if it is actually needed, i.e. when the
-actual length of the bar or the displayed string changed, so you do not have to worry about it.
+### `hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon, new_bgicon, new_bar, new_label, new_text_color)`
+Changes the values and the appearance of an initialized HUD bar for a certain player. `new_value`
+and `new_max_value` are the most important parameters as they specify the new current and maximum new values, you do not need
+to worry too much about the other parameters.
+
+The following parameters are less important and provided for styling the HUD bar after registration (if
+this is desired). The “styling” parameters parallel the parameters of `hb.register_hudbar`. It is
+recommended to not change the style of a HUD bar too often as this can be distracting or confusing
+for players.
+
+`new_value`, `new_max_value` `new_icon`, `new_bgicon`, `new_bar`, `new_label` and `new_text_color` can be
+`nil`; if one of them is `nil`, that means the value is unchanged. If all those values are `nil`, this
+function is a no-op.
+
+This function tries to minimize the amount of calls to `hud_change` of the Minetest Lua API
+(and thus, network traffic), when you only change the value and/or maximum value. In this case,
+`hud_change` is only called if it is actually needed, e.g. when the actual length of the bar
+or the displayed string changed, so you do not have to worry about it. There is, however, no
+such network optimization for the “styling” parameters, so keep this in mind.
#### Parameters
* `player`: `ObjectRef` of the player to which the HUD bar belongs to
* `identifier`: The identifier of the HUD bar type to change, as specified in `hb.register_hudbar`.
* `new_value`: The new current value of the HUD bar
* `new_max_value`: The new maximum value of the HUD bar
+* `new_icon`: File name of the new icon
+* `new_bgicon`: File name of the new background icon for the modern-style statbar
+* `new_bar`: File name of the new bar segment image
+* `new_label`: A new text label of the HUD bar. Note the format string still applies
+* `new_text_color`: A 3-octet number defining the new color of the text.
#### Return value
Always `nil`.
diff --git a/init.lua b/init.lua
index 3aba7e1..7421156 100644
--- a/init.lua
+++ b/init.lua
@@ -281,7 +281,7 @@ function hb.init_hudbar(player, identifier, start_value, start_max, start_hidden
hb.hudtables[identifier].add_all(player, hudtable, start_value, start_max, start_hidden)
end
-function hb.change_hudbar(player, identifier, new_value, new_max_value)
+function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon, new_bgicon, new_bar, new_label, new_text_color)
if new_value == nil and new_max_value == nil then
return
end
@@ -307,6 +307,33 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value)
new_max_value = hudtable.hudstate[name].max
end
+ if hb.settings.bar_type == "progress_bar" then
+ if new_icon ~= nil and hudtable.hudids[name].icon ~= nil then
+ player:hud_change(hudtable.hudids[name].icon, "text", new_icon)
+ end
+ if new_bgicon ~= nil and hudtable.hudids[name].bgicon ~= nil then
+ player:hud_change(hudtable.hudids[name].bgicon, "text", new_bgicon)
+ end
+ if new_bar ~= nil then
+ player:hud_change(hudtable.hudids[name].bar , "text", new_bar)
+ end
+ if new_label ~= nil then
+ hudtable.label = new_label
+ local new_text = string.format(hudtable.format_string, new_label, hudtable.hudstate[name].value, hudtable.hudstate[name].max)
+ player:hud_change(hudtable.hudids[name].text, "text", new_text)
+ end
+ if new_text_color ~= nil then
+ player:hud_change(hudtable.hudids[name].text, "number", new_text_color)
+ end
+ else
+ if new_icon ~= nil and hudtable.hudids[name].bar ~= nil then
+ player:hud_change(hudtable.hudids[name].bar, "text", new_icon)
+ end
+ if new_bgicon ~= nil and hudtable.hudids[name].bg ~= nil then
+ player:hud_change(hudtable.hudids[name].bg, "text", new_bgicon)
+ end
+ end
+
local main_error_text =
"[hudbars] Bad call to hb.change_hudbar, identifier: “"..tostring(identifier).."”, player name: “"..name.."”. "
if new_max_value < new_value then