1
0
mirror of https://repo.or.cz/minetest_hudbars.git synced 2025-06-29 23:10:32 +02:00

52 Commits

Author SHA1 Message Date
28dcf8af65 Merge remote-tracking branch 'upstream/master' into nalc-1.2-dev 2020-06-16 22:33:04 +02:00
a250d2a350 Add z-index to HUD elements 2020-04-07 01:06:49 +02:00
7993feac07 Version 2.2.2 2020-03-13 18:11:13 +01:00
b19b5f090a Fix another crash 2020-03-13 18:10:52 +01:00
9a8a3f0f8c Version 2.2.1 2020-03-13 07:55:01 +01:00
2eb2df946b Add nil check in hb.change_hudbar 2020-03-13 07:53:24 +01:00
c4ddef312e Merge remote-tracking branch 'upstream/master' into nalc-1.2-dev 2020-02-16 18:04:10 +01:00
2ffcd94dd6 Version 2.2.0 2020-02-04 22:11:43 +01:00
8d3fa950f8 Update translation credits 2020-02-04 22:10:41 +01:00
332aa18452 Add Spanish translation 2020-02-04 22:07:34 +01:00
7f6ed309b3 Merge branch 'master' of yunohost.local:mtcontrib/minetest_hudbars into nalc-1.2-dev 2019-12-22 13:28:33 +01:00
99ebd71da7 Update credits 2019-09-17 11:21:19 +02:00
699e356609 Add Russian locale by lmk 2019-09-17 11:20:12 +02:00
8c80745ecb Version 2.1.0 2019-09-13 19:57:04 +02:00
1e3def3cfa Set bar_size to nil in progress_bar again
See the lengthy comment to learn why
2019-09-13 19:56:22 +02:00
48d9fd6a12 Allow to specify number format strings explicitly
Also, the default number format string is now "%d"
2019-09-13 19:50:23 +02:00
7cd5940c68 Merge branch 'master' into nalc-1.2 2019-05-09 22:15:22 +02:00
085a2aa901 Version 2.0.0 2019-04-01 12:55:40 +02:00
14a535de0d Update API documentation 2019-04-01 12:38:07 +02:00
afb0242b3b Restructure format_string_config 2019-04-01 12:23:54 +02:00
915fab08e2 Always send update when changing hide state
This fixes a problem in hbarmor not getting the correct hide state initially.
2019-04-01 12:17:21 +02:00
895fcae716 Better support for translatable format string 2019-04-01 11:49:30 +02:00
07b9f766d2 Make format string params changable 2019-03-30 14:57:39 +01:00
a3fede159b Support custom hp_max/breath_max 2019-03-30 13:56:17 +01:00
5710667766 Fix translation of format string 2019-03-20 13:38:31 +01:00
1568d1f418 Add explicit progress bar size 2019-03-20 13:35:36 +01:00
8b577c7424 Move description into mod.conf 2019-03-20 13:31:27 +01:00
8d2d2d6070 Remove old changelog 2019-03-20 13:31:00 +01:00
94b9c545da Move away from intllib in favor of MT 5.0.0 2019-03-20 13:30:28 +01:00
67ca481f7c Ajoute message de chargement du mod dans le journal "action" 2018-12-25 17:43:52 +01:00
ba21f47489 Version 1.11.0 2018-02-05 21:24:53 +01:00
90688e4d45 Add Malay locale by muhdnurhidayat 2018-02-05 21:23:31 +01:00
bec8afed8b Version 1.10.0, update credits 2017-09-18 17:49:48 +02:00
b5e84b2b50 Add Dutch locale by kingoscargames 2017-09-18 16:31:17 +02:00
99cdbddc64 Add Italian locale by Hamlet 2017-09-18 16:31:03 +02:00
ec238287cb No longer set progress bar image size explicitly
This may fix problems with some people having the progress bar displaced.
2017-09-18 16:28:38 +02:00
1e522e2896 Use MIT License 2017-09-18 16:17:42 +02:00
aa5fef1298 Replace deprecated intllib call:
- 'Getter' with 'make_gettext_pair' if available

Thanks, AntumDeluge!
2017-07-06 03:12:07 +02:00
f19a85c537 Version 1.9.0 2017-07-02 18:56:32 +02:00
9145f492e8 Move default settings into new Lua file 2017-07-02 18:50:17 +02:00
5e06b35e79 Add hb.get_hudbar_identifiers() 2017-07-02 18:44:24 +02:00
e09eb8ab4f Use 0.4.16 settings syntax
This breaks compability with Minetest 0.4.15, 0.4.14, 0.4.13 and 0.4.12
2017-06-20 16:38:52 +02:00
bd0641af52 Update credits in README file 2017-05-29 16:20:32 +02:00
f273a9e1f3 Version 1.8.0 2017-05-29 16:18:35 +02:00
e4c8510282 Add Turkish translation 2017-05-29 16:17:31 +02:00
e5989f4c0d Version 1.7.2 2017-05-29 16:15:17 +02:00
cfebd5138d Explicitly set statbar size for progress bars 2017-05-29 16:14:40 +02:00
fa82d2df1c Version 1.7.1 2017-02-25 02:06:02 +01:00
ea58a71e17 Fix crash HP changed before player was registered 2017-02-25 02:04:15 +01:00
e11a52d8fb Version 1.7.0 2016-12-03 19:58:34 +01:00
7cf82b4e2f Move statbars 2 pixels up 2016-12-03 02:24:45 +01:00
d3e51926bc Fix README.md syntax error 2016-12-03 01:23:12 +01:00
19 changed files with 249 additions and 218 deletions

27
API.md
View File

@ -1,5 +1,5 @@
API documentation for the HUD bars mod 1.6.1 API documentation for the HUD bars mod
============================================ ======================================
## Introduction ## Introduction
This API allows you to add, change, hide and unhide custom HUD bars for this mod. This API allows you to add, change, hide and unhide custom HUD bars for this mod.
@ -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`.
@ -170,7 +184,7 @@ Makes a previously hidden HUD bar visible again to a player.
## Reading HUD bar information ## Reading HUD bar information
It is also possible to read information about an active HUD bar. It is also possible to read information about existing HUD bars.
### `hb.get_hudbar_state(player, identifier)` ### `hb.get_hudbar_state(player, identifier)`
Returns the current state of the active player's HUD bar. Returns the current state of the active player's HUD bar.
@ -191,3 +205,6 @@ hold by the table is only true for the moment you called this function. The fiel
* `text`: The text shown on the HUD bar. This fiels is meaningless if the HUD bar is currently hidden. * `text`: The text shown on the HUD bar. This fiels is meaningless if the HUD bar is currently hidden.
If the player does not exist, returns `nil` instead. If the player does not exist, returns `nil` instead.
### `hb.get_hudbar_identifiers()`
Returns a table of all currently registered HUD bar identifiers.

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.6.1. The current version is 2.2.2.
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.
@ -31,25 +31,31 @@ Author: Wuzzy (2015)
Also: This mod was forked from the “Better HUD” [hud] mod by BlockMen. Also: This mod was forked from the “Better HUD” [hud] mod by BlockMen.
Translations: Translations:
* German: Wuzzy * German: Wuzzy
* Portuguese: BrunoMine * Portuguese: BrunoMine
* Turkish: admicos
* Dutch: kingoscargames
* Italian: Hamlet
* Malay: muhdnurhidayat
* Russian: Imk
* Spanish: wuniversales
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
and/or modify it under the terms of the Do What The Fuck You Want and/or modify it under the terms of the MIT License.
To Public License (WTFPL), version 2, as published by Sam Hocevar.
### Licenses of textures ### Licenses of textures
* `hudbars_icon_health.png`—celeron55 (CC BY-SA 3.0), modified by BlockMen * `hudbars_icon_health.png`—celeron55 (CC BY-SA 3.0), modified by BlockMen
* `hudbars_bgicon_health.png`—celeron55 (CC BY-SA 3.0), modified by BlockMen * `hudbars_bgicon_health.png`—celeron55 (CC BY-SA 3.0), modified by BlockMen
* `hudbars_icon_breath.png`—kaeza (WTFPL), modified by BlockMen, modified again by Wuzzy * `hudbars_icon_breath.png`—kaeza (MIT License), modified by BlockMen, modified again by Wuzzy
* `hudbars_bgicon_breath.png`—based on previous image, edited by Wuzzy (WTFPL) * `hudbars_bgicon_breath.png`—based on previous image, edited by Wuzzy (MIT License)
* `hudbars_bar_health.png`—Wuzzy (WTFPL) * `hudbars_bar_health.png`—Wuzzy (MIT License)
* `hudbars_bar_breath.png`—Wuzzy (WTFPL) * `hudbars_bar_breath.png`—Wuzzy (MIT License)
* `hudbars_bar_background.png`—Wuzzy (WTFPL) * `hudbars_bar_background.png`—Wuzzy (MIT License)
### License references ### License references
* [CC-BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/) * [CC-BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/)
* [WTFPL](http://sam.zoy.org/wtfpl/COPYING) * [MIT License](https://opensource.org/licenses/MIT)

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

48
default_settings.lua Normal file
View File

@ -0,0 +1,48 @@
-- (Hardcoded) default settings
hb.settings.max_bar_length = 160
hb.settings.statbar_length = 20
-- Statbar positions
hb.settings.pos_left = {}
hb.settings.pos_right = {}
hb.settings.start_offset_left = {}
hb.settings.start_offset_right= {}
hb.settings.pos_left.x = hb.load_setting("hudbars_pos_left_x", "number", 0.5)
hb.settings.pos_left.y = hb.load_setting("hudbars_pos_left_y", "number", 1)
hb.settings.pos_right.x = hb.load_setting("hudbars_pos_right_x", "number", 0.5)
hb.settings.pos_right.y = hb.load_setting("hudbars_pos_right_y", "number", 1)
hb.settings.bar_type = hb.load_setting("hudbars_bar_type", "string", "progress_bar", {"progress_bar", "statbar_classic", "statbar_modern"})
if hb.settings.bar_type == "progress_bar" then
hb.settings.start_offset_left.x = hb.load_setting("hudbars_start_offset_left_x", "number", -175)
hb.settings.start_offset_left.y = hb.load_setting("hudbars_start_offset_left_y", "number", -86)
hb.settings.start_offset_right.x = hb.load_setting("hudbars_start_offset_right_x", "number", 15)
hb.settings.start_offset_right.y = hb.load_setting("hudbars_start_offset_right_y", "number", -86)
else
hb.settings.start_offset_left.x = hb.load_setting("hudbars_start_statbar_offset_left_x", "number", -265)
hb.settings.start_offset_left.y = hb.load_setting("hudbars_start_statbar_offset_left_y", "number", -90)
hb.settings.start_offset_right.x = hb.load_setting("hudbars_start_statbar_offset_right_x", "number", 25)
hb.settings.start_offset_right.y = hb.load_setting("hudbars_start_statbar_offset_right_y", "number", -90)
end
hb.settings.vmargin = hb.load_setting("hudbars_vmargin", "number", 24)
hb.settings.tick = hb.load_setting("hudbars_tick", "number", 0.1)
-- Experimental setting: Changing this setting is not officially supported, do NOT rely on it!
hb.settings.forceload_default_hudbars = hb.load_setting("hudbars_forceload_default_hudbars", "bool", true)
-- Misc. settings
hb.settings.alignment_pattern = hb.load_setting("hudbars_alignment_pattern", "string", "zigzag", {"zigzag", "stack_up", "stack_down"})
hb.settings.autohide_breath = hb.load_setting("hudbars_autohide_breath", "bool", true)
local sorting = minetest.settings:get("hudbars_sorting")
if sorting ~= nil then
hb.settings.sorting = {}
hb.settings.sorting_reverse = {}
for k,v in string.gmatch(sorting, "(%w+)=(%w+)") do
hb.settings.sorting[k] = tonumber(v)
hb.settings.sorting_reverse[tonumber(v)] = k
end
else
hb.settings.sorting = { ["health"] = 0, ["breath"] = 1 }
hb.settings.sorting_reverse = { [0] = "health", [1] = "breath" }
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.

220
init.lua
View File

@ -1,9 +1,5 @@
local S local S = minetest.get_translator("hudbars")
if (minetest.get_modpath("intllib")) then local N = function(s) return s end
S = intllib.Getter()
else
S = function ( s ) return s end
end
hb = {} hb = {}
@ -20,11 +16,11 @@ hb.settings = {}
function hb.load_setting(sname, stype, defaultval, valid_values) function hb.load_setting(sname, stype, defaultval, valid_values)
local sval local sval
if stype == "string" then if stype == "string" then
sval = minetest.setting_get(sname) sval = minetest.settings:get(sname)
elseif stype == "bool" then elseif stype == "bool" then
sval = minetest.setting_getbool(sname) sval = minetest.settings:get_bool(sname)
elseif stype == "number" then elseif stype == "number" then
sval = tonumber(minetest.setting_get(sname)) sval = tonumber(minetest.settings:get(sname))
end end
if sval ~= nil then if sval ~= nil then
if valid_values ~= nil then if valid_values ~= nil then
@ -48,58 +44,42 @@ function hb.load_setting(sname, stype, defaultval, valid_values)
end end
end end
-- (hardcoded) default settings -- Load default settings
hb.settings.max_bar_length = 160 dofile(minetest.get_modpath("hudbars").."/default_settings.lua")
hb.settings.statbar_length = 20
-- statbar positions
hb.settings.pos_left = {}
hb.settings.pos_right = {}
hb.settings.start_offset_left = {}
hb.settings.start_offset_right= {}
hb.settings.pos_left.x = hb.load_setting("hudbars_pos_left_x", "number", 0.5)
hb.settings.pos_left.y = hb.load_setting("hudbars_pos_left_y", "number", 1)
hb.settings.pos_right.x = hb.load_setting("hudbars_pos_right_x", "number", 0.5)
hb.settings.pos_right.y = hb.load_setting("hudbars_pos_right_y", "number", 1)
hb.settings.bar_type = hb.load_setting("hudbars_bar_type", "string", "progress_bar", {"progress_bar", "statbar_classic", "statbar_modern"})
if hb.settings.bar_type == "progress_bar" then
hb.settings.start_offset_left.x = hb.load_setting("hudbars_start_offset_left_x", "number", -175)
hb.settings.start_offset_left.y = hb.load_setting("hudbars_start_offset_left_y", "number", -86)
hb.settings.start_offset_right.x = hb.load_setting("hudbars_start_offset_right_x", "number", 15)
hb.settings.start_offset_right.y = hb.load_setting("hudbars_start_offset_right_y", "number", -86)
else
hb.settings.start_offset_left.x = hb.load_setting("hudbars_start_statbar_offset_left_x", "number", -265)
hb.settings.start_offset_left.y = hb.load_setting("hudbars_start_statbar_offset_left_y", "number", -88)
hb.settings.start_offset_right.x = hb.load_setting("hudbars_start_statbar_offset_right_x", "number", 25)
hb.settings.start_offset_right.y = hb.load_setting("hudbars_start_statbar_offset_right_y", "number", -88)
end
hb.settings.vmargin = hb.load_setting("hudbars_vmargin", "number", 24)
hb.settings.tick = hb.load_setting("hudbars_tick", "number", 0.1)
-- experimental setting: Changing this setting is not officially supported, do NOT rely on it!
hb.settings.forceload_default_hudbars = hb.load_setting("hudbars_forceload_default_hudbars", "bool", true)
-- Misc. settings
hb.settings.alignment_pattern = hb.load_setting("hudbars_alignment_pattern", "string", "zigzag", {"zigzag", "stack_up", "stack_down"})
hb.settings.autohide_breath = hb.load_setting("hudbars_autohide_breath", "bool", true)
local sorting = minetest.setting_get("hudbars_sorting")
if sorting ~= nil then
hb.settings.sorting = {}
hb.settings.sorting_reverse = {}
for k,v in string.gmatch(sorting, "(%w+)=(%w+)") do
hb.settings.sorting[k] = tonumber(v)
hb.settings.sorting_reverse[tonumber(v)] = k
end
else
hb.settings.sorting = { ["health"] = 0, ["breath"] = 1 }
hb.settings.sorting_reverse = { [0] = "health", [1] = "breath" }
end
local function player_exists(player) 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 = {}
@ -139,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
@ -173,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)
@ -198,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({
@ -208,6 +200,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
text = "hudbars_bar_background.png", text = "hudbars_bar_background.png",
alignment = {x=1,y=1}, alignment = {x=1,y=1},
offset = { x = offset.x - 1, y = offset.y - 1 }, offset = { x = offset.x - 1, y = offset.y - 1 },
z_index = 0,
}) })
if textures.icon ~= nil then if textures.icon ~= nil then
ids.icon = player:hud_add({ ids.icon = player:hud_add({
@ -217,6 +210,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
text = textures.icon, text = textures.icon,
alignment = {x=-1,y=1}, alignment = {x=-1,y=1},
offset = { x = offset.x - 3, y = offset.y }, offset = { x = offset.x - 3, y = offset.y },
z_index = 1,
}) })
end end
elseif hb.settings.bar_type == "statbar_modern" then elseif hb.settings.bar_type == "statbar_modern" then
@ -230,12 +224,19 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
offset = { x = offset.x, y = offset.y }, offset = { x = offset.x, y = offset.y },
direction = 0, direction = 0,
size = {x=24, y=24}, size = {x=24, y=24},
z_index = 0,
}) })
end end
end end
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
@ -250,6 +251,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
offset = offset, offset = offset,
direction = 0, direction = 0,
size = bar_size, size = bar_size,
z_index = 1,
}) })
if hb.settings.bar_type == "progress_bar" then if hb.settings.bar_type == "progress_bar" then
ids.text = player:hud_add({ ids.text = player:hud_add({
@ -260,6 +262,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
number = text_color, number = text_color,
direction = 0, direction = 0,
offset = { x = offset.x + 2, y = offset.y - 1}, offset = { x = offset.x + 2, y = offset.y - 1},
z_index = 2,
}) })
end end
-- Do not forget to update hb.get_hudbar_state if you add new fields to the state table -- Do not forget to update hb.get_hudbar_state if you add new fields to the state table
@ -288,6 +291,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 = {}
@ -317,6 +321,9 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon
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 not hudtable.hudstate[name] then
return false
end
local value_changed, max_changed = false, false local value_changed, max_changed = false, false
if new_value ~= nil then if new_value ~= nil then
@ -348,7 +355,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
@ -392,7 +399,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
@ -408,19 +415,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
@ -429,23 +434,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
@ -463,8 +466,16 @@ function hb.get_hudbar_state(player, identifier)
return copy return copy
end end
function hb.get_hudbar_identifiers()
local ids = {}
for id, _ in pairs(hb.hudtables) do
table.insert(ids, id)
end
return ids
end
--register built-in HUD bars --register built-in HUD bars
if minetest.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then
hb.register_hudbar("health", 0xFFFFFF, S("Health"), { bar = "hudbars_bar_health.png", icon = "hudbars_icon_health.png", bgicon = "hudbars_bgicon_health.png" }, 20, 20, false) hb.register_hudbar("health", 0xFFFFFF, S("Health"), { bar = "hudbars_bar_health.png", icon = "hudbars_icon_health.png", bgicon = "hudbars_bgicon_health.png" }, 20, 20, false)
hb.register_hudbar("breath", 0xFFFFFF, S("Breath"), { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png", bgicon = "hudbars_bgicon_breath.png" }, 10, 10, true) hb.register_hudbar("breath", 0xFFFFFF, S("Breath"), { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png", bgicon = "hudbars_bgicon_breath.png" }, 10, 10, true)
end end
@ -478,40 +489,45 @@ end
local function custom_hud(player) local function custom_hud(player)
if minetest.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then
local hide local hide
if minetest.setting_getbool("enable_damage") then if minetest.settings:get_bool("enable_damage") then
hide = false hide = false
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
local function update_hud(player) local function update_hud(player)
if not player_exists(player) then return end if not player_exists(player) then return end
if minetest.setting_getbool("enable_damage") then if minetest.settings:get_bool("enable_damage") then
if hb.settings.forceload_default_hudbars then if hb.settings.forceload_default_hudbars then
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)
@ -521,7 +537,11 @@ local function update_hud(player)
end end
end end
minetest.register_on_player_hpchange(update_health) minetest.register_on_player_hpchange(function(player)
if hb.players[player:get_player_name()] ~= nil then
update_health(player)
end
end)
minetest.register_on_respawnplayer(function(player) minetest.register_on_respawnplayer(function(player)
update_health(player) update_health(player)
@ -546,7 +566,7 @@ minetest.register_globalstep(function(dtime)
if main_timer > hb.settings.tick or timer > 4 then if main_timer > hb.settings.tick or timer > 4 then
if main_timer > hb.settings.tick then main_timer = 0 end if main_timer > hb.settings.tick then main_timer = 0 end
-- only proceed if damage is enabled -- only proceed if damage is enabled
if minetest.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then
for _, player in pairs(hb.players) do for _, player in pairs(hb.players) do
-- update all hud elements -- update all hud elements
update_hud(player) update_hud(player)
@ -555,3 +575,5 @@ minetest.register_globalstep(function(dtime)
end end
if timer > 4 then timer = 0 end if timer > 4 then timer = 0 end
end) end)
minetest.log("action", "[hudbars] loaded.")

View File

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

4
locale/hudbars.de.tr Normal file
View File

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

4
locale/hudbars.es.tr Normal file
View File

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

6
locale/hudbars.it.tr Normal file
View File

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

4
locale/hudbars.ms.tr Normal file
View File

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

6
locale/hudbars.nl.tr Normal file
View File

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

View File

@ -1,5 +1,6 @@
Health = Saude # textdomain: hudbars
Breath = Folego 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

4
locale/hudbars.ru.tr Normal file
View File

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

4
locale/hudbars.tr.tr Normal file
View File

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

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 +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

@ -99,7 +99,7 @@ hudbars_start_statbar_offset_left_x (Left HUD statbar x offset) int -265
# Precise y offset in pixels from the basic screen y position of the HUD statbars. # Precise y offset in pixels from the basic screen y position of the HUD statbars.
# For the zig-zag alignment pattern, this is for the left HUD statbars. # For the zig-zag alignment pattern, this is for the left HUD statbars.
# This setting is used for the classic and modern statbar styles. # This setting is used for the classic and modern statbar styles.
hudbars_start_statbar_offset_left_y (Left HUD statbar y offset) int -88 hudbars_start_statbar_offset_left_y (Left HUD statbar y offset) int -90
# Precise x offset in pixels from the basic screen x position of the right HUD statbars. # Precise x offset in pixels from the basic screen x position of the right HUD statbars.
# Only used for the zig-zag alignment pattern. # Only used for the zig-zag alignment pattern.
# This setting is used for the classic and modern statbar styles. # This setting is used for the classic and modern statbar styles.
@ -107,7 +107,7 @@ hudbars_start_statbar_offset_right_x (Right HUD statbar x offset) int 25
# Precise y offset in pixels from the basic screen y position of the right HUD statbars. # Precise y offset in pixels from the basic screen y position of the right HUD statbars.
# Only used for the zig-zag alignment pattern. # Only used for the zig-zag alignment pattern.
# This setting is used for the classic and modern statbar styles. # This setting is used for the classic and modern statbar styles.
hudbars_start_statbar_offset_right_y (Right HUD statbar y offset) int -88 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 24 0 hudbars_vmargin (Vertical distance between HUD bars) int 24 0