Update hudbars mod to 2.1.0

This commit is contained in:
Wuzzy 2020-02-04 22:06:31 +01:00
parent 15481cb24d
commit 3836f1b7e9
21 changed files with 145 additions and 170 deletions

View file

@ -45,7 +45,7 @@ a vertical gradient.
### Icon ### Icon
A 16×16 image shown left of the HUD bar. This is optional. A 16×16 image shown left of the HUD bar. This is optional.
### `hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string)` ### `hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config)`
This function registers a new custom HUD bar definition to the HUD bars mod, so it can be later used to be displayed, changed, hidden This function registers a new custom HUD bar definition to the HUD bars mod, so it can be later used to be displayed, changed, hidden
and unhidden on a per-player basis. and unhidden on a per-player basis.
Note this does not yet display the HUD bar. Note this does not yet display the HUD bar.
@ -66,7 +66,21 @@ for more information.
* `default_start_value`: If this HUD bar is added to a player, and no initial value is specified, this value will be used as initial current value * `default_start_value`: If this HUD bar is added to a player, and no initial value is specified, this value will be used as initial current value
* `default_max_value`: If this HUD bar is added to a player, and no initial maximum value is specified, this value will be used as initial maximum value * `default_max_value`: If this HUD bar is added to a player, and no initial maximum value is specified, this value will be used as initial maximum value
* `default_start_hidden`: The HUD bar will be initially start hidden by default when added to a player. Use `hb.unhide_hudbar` to unhide it. * `default_start_hidden`: The HUD bar will be initially start hidden by default when added to a player. Use `hb.unhide_hudbar` to unhide it.
* `format_string`: This is optional; You can specify an alternative format string display the final text on the HUD bar. The default format string is “`%s: %d/%d`” (in this order: Label, current value, maximum value). See also the Lua documentation of `string.format`. * `format_string`: Optional; You can specify an alternative format string to use for the final text on the HUD bar. The default format string is “`@1: @2/@3`” (The “@” numbers are placeholders that have a meaning in this order: @1 = Label, @2 = current value, @3 = maximum value). Do *not* use minetest.translator on this string, the string will be translated by `hudbars`, but you still must put this string into the translation catalogue file.
* `format_string_config`: Required if `format_string` is set. This allows to change which parameters to use in the format string. It's a table with these fields:
* `textdomain`: Text domain of the format string, used by `minetest.translate`
* `order`: Table that contains the order of the placeholders. It's also possible to remove placeholders. Default order: `{ "label", "value", "max_value" }`
* `format_value`: Format string to apply when displaying `value`. Syntax is same as in `string.format`. Default: `"%d"`
* `format_max_value`: Same as `format_value` but is applied to `max_value`
#### Example
Example (mostly) from `hbarmor` mod:
```
hb.register_hudbar("armor", 0xFFFFFF, minetest.translator("hbarmor", "Armor"), { icon = "hbarmor_icon.png", bgicon = "hbarmor_bgicon.png", bar = "hbarmor_bar.png" }, 0, 100, hbarmor.autohide, N("@1: @2%"), { order = { "label", "value" }, textdomain = "hbarmor" } )
```
Displays an armor HUD bar with a label of the form „Armor: 53%“. (`N` is a dummy function that returns its argument, used to make the string visible for translator scripts.)
#### Return value #### Return value
Always `nil`. Always `nil`.

View file

@ -11,7 +11,7 @@ this mod will place them accordingly.
position should be displayed correctly on every screen size. position should be displayed correctly on every screen size.
## Current version ## Current version
The current version is 1.10.0. The current version is 2.1.0.
This software uses [semantic versioning](http://semver.org), as defined by version 2.0.0 of the SemVer This software uses [semantic versioning](http://semver.org), as defined by version 2.0.0 of the SemVer
standard. standard.
@ -37,6 +37,8 @@ Translations:
* Turkish: admicos * Turkish: admicos
* Dutch: kingoscargames * Dutch: kingoscargames
* Italian: Hamlet * Italian: Hamlet
* Malay: muhdnurhidayat
* Russian: Imk
This program is free software. It comes without any warranty, to This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it the extent permitted by applicable law. You can redistribute it

View file

@ -1,92 +0,0 @@
Note: This software uses semantic versioning,
as of version 2.0.0 of the standard <http://semver.org/>.
0.1.0
-----
- Initial release, forked from mod “Better HUD” [hud].
0.2.0
-----
- Add API documentation
0.3.0
-----
- Rename main table from “hud” to “hb” (affects function names!)
- Arguments 3-4 of hb.change_hudbar can be nil for values which should not change
- Add proper function hb.init_hudbar, replaces odd call to hud.hudtables[identifier].add_all
- Update API documentation and fix mistakes
- Use “hudbars.conf” instead of “hud.conf”
0.4.0
-----
- New function: hb.get_hudbar_state to get information about the state of an active HUD bar, such as values, whether it is hidden, etc.
- hb.change_hudbar has been optimized to call hud_change fewer times, which is hopefully good for networking
- Rename hb.register_hudbar parameter “start_hide” to “start_hidden”
- start_hidden parameter now finally works
- Do not affect other HUD flags (crosshair, wielditem, etc.) when starting mod
- Show error message when trying to call hb.init_hudbar or hb.change_hudbar with bad values
- Update documentation
- Lots of refactoring
- Health and breath bar now use API
1.0.0
-----
- Add new parameter start_hidden to hb.init_hudbar, specified whether HUD bar is hidden on start
- Copy-editing of API.md and README.txt
- Internal: Fix add_all weirdness
1.0.1
-----
- Fix race condition causing crash at start of server
1.0.2
-----
- Fix other HUD elements disappearing for rejoining players
- Remove pointless delays for initializing the HUD for new or rejoining players
1.0.3
-----
- Adjust default HUD bars position for Minetest 0.4.12
1.1.0
-----
- Add boolean minetest.conf setting support (hudbars_autohide_breathbar) to control whether the breath bar is automatically hidden when full (default: yes)
1.2.0
-----
- New setting: hudbars_sorting. You can now manually sort all the HUD bars. Useful if you don't like automatic order
- New setting: hudbars_bar_type. You now can change the appearance of the HUD bars.
- New HUD bar types, slightly experimental: Classic statbars and modern [hud]-style statbars
- New experimental/unfinished setting: hudbars_alignment_pattern: You can now make the HUD bars stack vertically instead of the current zig-zag pattern. Note you probably need to change source code to productively use this feature
- Various position-related HUD bar settings (see README.txt)
- Remove hudbars.conf support and hudbars.conf.example (was never officially supported anyways)
1.2.1
-----
- Fix crash when enable_damage is changed in mid-game
1.3.0
-----
- Make all settings avaialbe in Minetest's advanced settings menu
- Fix HUD bars overlap when both hudbars_tick and hudbars_vmargin were set
- Use Markdown syntax in readme file
- Fix some factual mistakes in readme file
- Add metadata: mod.conf, description.txt, screenshot.png
1.4.0
-----
- Allow to change HUD bar images and label after it has been registered
- Minor API.md correction
1.4.1
-----
- Fix bug in hb.change_hudbar being a no-op if new_value and new_max value are nil
1.5.0
-----
- Portuguese translation by BrunoMine
1.5.1
-----
- Fix critical bug: Mod does not work with both intllib and mod security enabled
- Update screenshot to use new 3:2 aspect ratio

View file

@ -1,5 +1,4 @@
-- (Hardcoded) default settings -- (Hardcoded) default settings
-- Some of these settings have been modified for MCL2.
hb.settings.max_bar_length = 160 hb.settings.max_bar_length = 160
hb.settings.statbar_length = 20 hb.settings.statbar_length = 20
@ -53,4 +52,3 @@ else
hb.settings.sorting_reverse[tonumber(v)] = k hb.settings.sorting_reverse[tonumber(v)] = k
end end
end end

View file

@ -1 +0,0 @@
intllib?

View file

@ -1 +0,0 @@
Replaces the health and breath symbols in the HUD by “progress bars” and shows exact values. Other mods can add more progress bars for custom player stats.

View file

@ -1,13 +1,5 @@
local S local S = minetest.get_translator("hudbars")
if minetest.global_exists("intllib") then local N = function(s) return s end
if intllib.make_gettext_pair then
S = intllib.make_gettext_pair()
else
S = intllib.Getter()
end
else
S = function ( s ) return s end
end
hb = {} hb = {}
@ -59,6 +51,35 @@ local function player_exists(player)
return player ~= nil and player:is_player() return player ~= nil and player:is_player()
end end
local function make_label(format_string, format_string_config, label, start_value, max_value)
local params = {}
local order = format_string_config.order
for o=1, #order do
if order[o] == "label" then
table.insert(params, label)
elseif order[o] == "value" then
if format_string_config.format_value then
table.insert(params, string.format(format_string_config.format_value, start_value))
else
table.insert(params, start_value)
end
elseif order[o] == "max_value" then
if format_string_config.format_max_value then
table.insert(params, string.format(format_string_config.format_max_value, max_value))
else
table.insert(params, max_value)
end
end
end
local ret
if format_string_config.textdomain then
ret = minetest.translate(format_string_config.textdomain, format_string, unpack(params))
else
ret = S(format_string, unpack(params))
end
return ret
end
-- Table which contains all players with active default HUD bars (only for internal use) -- Table which contains all players with active default HUD bars (only for internal use)
hb.players = {} hb.players = {}
@ -98,7 +119,7 @@ function hb.get_hudbar_position_index(identifier)
end end
end end
function hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string) function hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config)
minetest.log("action", "hb.register_hudbar: "..tostring(identifier)) minetest.log("action", "hb.register_hudbar: "..tostring(identifier))
local hudtable = {} local hudtable = {}
local pos, offset local pos, offset
@ -132,7 +153,19 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
end end
end end
if format_string == nil then if format_string == nil then
format_string = S("%s: %d/%d") format_string = N("@1: @2/@3")
end
if format_string_config == nil then
format_string_config = {}
end
if format_string_config.order == nil then
format_string_config.order = { "label", "value", "max_value" }
end
if format_string_config.format_value == nil then
format_string_config.format_value = "%d"
end
if format_string_config.format_max_value == nil then
format_string_config.format_max_value = "%d"
end end
hudtable.add_all = function(player, hudtable, start_value, start_max, start_hidden) hudtable.add_all = function(player, hudtable, start_value, start_max, start_hidden)
@ -157,7 +190,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
iconscale = { x=1, y=1 } iconscale = { x=1, y=1 }
barnumber = hb.value_to_barlength(start_value, start_max) barnumber = hb.value_to_barlength(start_value, start_max)
bgiconnumber = hb.settings.statbar_length bgiconnumber = hb.settings.statbar_length
text = string.format(format_string, label, start_value, start_max) text = make_label(format_string, format_string_config, label, start_value, start_max)
end end
if hb.settings.bar_type == "progress_bar" then if hb.settings.bar_type == "progress_bar" then
ids.bg = player:hud_add({ ids.bg = player:hud_add({
@ -195,6 +228,12 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
local bar_image, bar_size local bar_image, bar_size
if hb.settings.bar_type == "progress_bar" then if hb.settings.bar_type == "progress_bar" then
bar_image = textures.bar bar_image = textures.bar
-- NOTE: Intentionally set to nil. For some reason, on some systems,
-- the progress bar is displaced when the bar_size is set explicitly here.
-- On the other hand, setting this to nil is deprecated in MT 5.0.0 due to
-- a debug log warning, but nothing is explained in lua_api.txt.
-- This section is a potential bug magnet, please watch with care!
-- The size of the bar image is expected to be exactly 2×16 pixels.
bar_size = nil bar_size = nil
elseif hb.settings.bar_type == "statbar_classic" or hb.settings.bar_type == "statbar_modern" then elseif hb.settings.bar_type == "statbar_classic" or hb.settings.bar_type == "statbar_modern" then
bar_image = textures.icon bar_image = textures.icon
@ -247,6 +286,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
hudtable.identifier = identifier hudtable.identifier = identifier
hudtable.format_string = format_string hudtable.format_string = format_string
hudtable.format_string_config = format_string_config
hudtable.label = label hudtable.label = label
hudtable.hudids = {} hudtable.hudids = {}
hudtable.hudstate = {} hudtable.hudstate = {}
@ -307,7 +347,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon
end end
if new_label ~= nil then if new_label ~= nil then
hudtable.label = new_label hudtable.label = new_label
local new_text = string.format(hudtable.format_string, new_label, hudtable.hudstate[name].value, hudtable.hudstate[name].max) local new_text = make_label(hudtable.format_string, hudtable.format_string_config, new_label, hudtable.hudstate[name].value, hudtable.hudstate[name].max)
player:hud_change(hudtable.hudids[name].text, "text", new_text) player:hud_change(hudtable.hudids[name].text, "text", new_text)
end end
if new_text_color ~= nil then if new_text_color ~= nil then
@ -351,7 +391,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon
end end
if hb.settings.bar_type == "progress_bar" then if hb.settings.bar_type == "progress_bar" then
local new_text = string.format(hudtable.format_string, hudtable.label, new_value, new_max_value) local new_text = make_label(hudtable.format_string, hudtable.format_string_config, hudtable.label, new_value, new_max_value)
if new_text ~= hudtable.hudstate[name].text then if new_text ~= hudtable.hudstate[name].text then
player:hud_change(hudtable.hudids[name].text, "text", new_text) player:hud_change(hudtable.hudids[name].text, "text", new_text)
hudtable.hudstate[name].text = new_text hudtable.hudstate[name].text = new_text
@ -367,19 +407,17 @@ function hb.hide_hudbar(player, identifier)
local name = player:get_player_name() local name = player:get_player_name()
local hudtable = hb.get_hudtable(identifier) local hudtable = hb.get_hudtable(identifier)
if hudtable == nil then return false end if hudtable == nil then return false end
if(hudtable.hudstate[name].hidden == false) then if hb.settings.bar_type == "progress_bar" then
if hb.settings.bar_type == "progress_bar" then if hudtable.hudids[name].icon ~= nil then
if hudtable.hudids[name].icon ~= nil then player:hud_change(hudtable.hudids[name].icon, "scale", {x=0,y=0})
player:hud_change(hudtable.hudids[name].icon, "scale", {x=0,y=0})
end
player:hud_change(hudtable.hudids[name].bg, "scale", {x=0,y=0})
player:hud_change(hudtable.hudids[name].text, "text", "")
elseif hb.settings.bar_type == "statbar_modern" then
player:hud_change(hudtable.hudids[name].bg, "number", 0)
end end
player:hud_change(hudtable.hudids[name].bar, "number", 0) player:hud_change(hudtable.hudids[name].bg, "scale", {x=0,y=0})
hudtable.hudstate[name].hidden = true player:hud_change(hudtable.hudids[name].text, "text", "")
elseif hb.settings.bar_type == "statbar_modern" then
player:hud_change(hudtable.hudids[name].bg, "number", 0)
end end
player:hud_change(hudtable.hudids[name].bar, "number", 0)
hudtable.hudstate[name].hidden = true
return true return true
end end
@ -388,23 +426,21 @@ function hb.unhide_hudbar(player, identifier)
local name = player:get_player_name() local name = player:get_player_name()
local hudtable = hb.get_hudtable(identifier) local hudtable = hb.get_hudtable(identifier)
if hudtable == nil then return false end if hudtable == nil then return false end
if(hudtable.hudstate[name].hidden) then local value = hudtable.hudstate[name].value
local value = hudtable.hudstate[name].value local max = hudtable.hudstate[name].max
local max = hudtable.hudstate[name].max if hb.settings.bar_type == "progress_bar" then
if hb.settings.bar_type == "progress_bar" then if hudtable.hudids[name].icon ~= nil then
if hudtable.hudids[name].icon ~= nil then player:hud_change(hudtable.hudids[name].icon, "scale", {x=1,y=1})
player:hud_change(hudtable.hudids[name].icon, "scale", {x=1,y=1})
end
if hudtable.hudstate[name].max ~= 0 then
player:hud_change(hudtable.hudids[name].bg, "scale", {x=1,y=1})
end
player:hud_change(hudtable.hudids[name].text, "text", tostring(string.format(hudtable.format_string, hudtable.label, value, max)))
elseif hb.settings.bar_type == "statbar_modern" then
player:hud_change(hudtable.hudids[name].bg, "number", hb.settings.statbar_length)
end end
player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(value, max)) if hudtable.hudstate[name].max ~= 0 then
hudtable.hudstate[name].hidden = false player:hud_change(hudtable.hudids[name].bg, "scale", {x=1,y=1})
end
player:hud_change(hudtable.hudids[name].text, "text", make_label(hudtable.format_string, hudtable.format_string_config, hudtable.label, value, max))
elseif hb.settings.bar_type == "statbar_modern" then
player:hud_change(hudtable.hudids[name].bg, "number", hb.settings.statbar_length)
end end
player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(value, max))
hudtable.hudstate[name].hidden = false
return true return true
end end
@ -452,16 +488,20 @@ local function custom_hud(player)
else else
hide = true hide = true
end end
hb.init_hudbar(player, "health", player:get_hp(), nil, hide) local hp = player:get_hp()
local hp_max = player:get_properties().hp_max
hb.init_hudbar(player, "health", math.min(hp, hp_max), hp_max, hide)
local breath = player:get_breath() local breath = player:get_breath()
local breath_max = player:get_properties().breath_max
local hide_breath local hide_breath
if breath == 11 and hb.settings.autohide_breath == true then hide_breath = true else hide_breath = false end if breath >= breath_max and hb.settings.autohide_breath == true then hide_breath = true else hide_breath = false end
hb.init_hudbar(player, "breath", math.min(breath, 10), nil, hide_breath or hide) hb.init_hudbar(player, "breath", math.min(breath, breath_max-1), breath_max-1, hide_breath or hide)
end end
end end
local function update_health(player) local function update_health(player)
hb.change_hudbar(player, "health", player:get_hp()) local hp_max = player:get_properties().hp_max
hb.change_hudbar(player, "health", player:get_hp(), hp_max)
end end
-- update built-in HUD bars -- update built-in HUD bars
@ -472,13 +512,14 @@ local function update_hud(player)
hb.unhide_hudbar(player, "health") hb.unhide_hudbar(player, "health")
end end
--air --air
local breath_max = player:get_properties().breath_max
local breath = player:get_breath() local breath = player:get_breath()
if breath == 11 and hb.settings.autohide_breath == true then if breath >= breath_max and hb.settings.autohide_breath == true then
hb.hide_hudbar(player, "breath") hb.hide_hudbar(player, "breath")
else else
hb.unhide_hudbar(player, "breath") hb.unhide_hudbar(player, "breath")
hb.change_hudbar(player, "breath", math.min(breath, 10)) hb.change_hudbar(player, "breath", math.min(breath, breath_max-1), breath_max-1)
end end
--health --health
update_health(player) update_health(player)

View file

@ -1,3 +0,0 @@
Health = Leben
Breath = Atem
%s: %d/%d = %s: %d/%d

View file

@ -0,0 +1,4 @@
# textdomain: hudbars
Health=Leben
Breath=Atem
@1: @2/@3=@1: @2/@3

View file

@ -0,0 +1,4 @@
# textdomain: hudbars
Health=Salud
Breath=Aliento
@1: @2/@3=@1: @2/@3

View file

@ -1,5 +1,6 @@
Health = Salute # textdomain: hudbars
Breath = Ossigeno Health=Salute
Breath=Ossigeno
# Default format string for progress bar-style HUD bars, e.g. “Health 5/20” # Default format string for progress bar-style HUD bars, e.g. “Health 5/20”
%s: %d/%d @1: @2/@3=@1: @2/@3

View file

@ -0,0 +1,4 @@
# textdomain: hudbars
Health=Kesihatan
Breath=Nafas
@1: @2/@3=@1: @2/@3

View file

@ -1,5 +1,6 @@
Health = Gezondheid # textdomain: hudbars
Breath = Adem Health=Gezondheid
Breath=Adem
# Default format string for progress bar-style HUD bars, e.g. “Health 5/20” # Default format string for progress bar-style HUD bars, e.g. “Health 5/20”
%s: %d/%d @1: @2/@3=@1: @2/@3

View file

@ -1,5 +1,6 @@
Health = Salud # textdomain: hudbars
Breath = Aliento Health=Saude
Breath=Folego
# Formato de string padrão para progresso bar-style de barras do HUD, por exemplo “Saude 5/20” # Formato de string padrão para progresso bar-style de barras do HUD, por exemplo “Saude 5/20”
%s: %d/%d @1: @2/@3=@1: @2/@3

View file

@ -0,0 +1,4 @@
# textdomain: hudbars
Health=HP
Breath=дыхание
@1: @2/@3=@1: @2/@3

View file

@ -0,0 +1,4 @@
# textdomain: hudbars
Health=Can
Breath=Nefes
@1: @2/@3=@1: @2/@3

View file

@ -1,5 +0,0 @@
Health = Saude
Breath = Folego
# Formato de string padrão para progresso bar-style de barras do HUD, por exemplo “Saude 5/20”
%s: %d/%d

View file

@ -1,5 +1,6 @@
Health # textdomain: hudbars
Breath Health=
Breath=
# Default format string for progress bar-style HUD bars, e.g. “Health 5/20” # Default format string for progress bar-style HUD bars, e.g. “Health 5/20”
%s: %d/%d @1: @2/@3=

View file

@ -1,3 +0,0 @@
Health = Can
Breath = Nefes
%s: %d/%d = %s: %d/%d

View file

@ -1 +1,2 @@
name = hudbars name = hudbars
description = Replaces the health and breath symbols in the HUD by “progress bars” and shows exact values. Other mods can add more progress bars for custom player stats.

View file

@ -110,7 +110,7 @@ hudbars_start_statbar_offset_right_x (Right HUD statbar x offset) int 25
hudbars_start_statbar_offset_right_y (Right HUD statbar y offset) int -90 hudbars_start_statbar_offset_right_y (Right HUD statbar y offset) int -90
# The vertical distance between two HUD bars, in pixels. # The vertical distance between two HUD bars, in pixels.
hudbars_vmargin (Vertical distance between HUD bars) int 28 0 hudbars_vmargin (Vertical distance between HUD bars) int 24 0
[Performance] [Performance]
# The of seconds which need to pass before the server updates the default HUD bars # The of seconds which need to pass before the server updates the default HUD bars