From 94b9c545da09707764387aec479b9a196cc090ea Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 20 Mar 2019 13:30:28 +0100 Subject: [PATCH 01/12] Move away from intllib in favor of MT 5.0.0 --- depends.txt | 1 - init.lua | 11 +---------- locale/de.txt | 3 --- locale/hudbars.de.tr | 4 ++++ locale/{nl.txt => hudbars.it.tr} | 5 +++-- locale/hudbars.ms.tr | 4 ++++ locale/{it.txt => hudbars.nl.tr} | 5 +++-- locale/{pt.txt => hudbars.pt.tr} | 5 +++-- locale/hudbars.tr.tr | 4 ++++ locale/ms.txt | 3 --- locale/template.txt | 7 ++++--- locale/tr.txt | 3 --- 12 files changed, 26 insertions(+), 29 deletions(-) delete mode 100644 depends.txt delete mode 100644 locale/de.txt create mode 100644 locale/hudbars.de.tr rename locale/{nl.txt => hudbars.it.tr} (63%) create mode 100644 locale/hudbars.ms.tr rename locale/{it.txt => hudbars.nl.tr} (63%) rename locale/{pt.txt => hudbars.pt.tr} (69%) create mode 100644 locale/hudbars.tr.tr delete mode 100644 locale/ms.txt delete mode 100644 locale/tr.txt diff --git a/depends.txt b/depends.txt deleted file mode 100644 index 77e8d97..0000000 --- a/depends.txt +++ /dev/null @@ -1 +0,0 @@ -intllib? diff --git a/init.lua b/init.lua index fc43f85..d06455c 100644 --- a/init.lua +++ b/init.lua @@ -1,13 +1,4 @@ -local S -if minetest.global_exists("intllib") then - if intllib.make_gettext_pair then - S = intllib.make_gettext_pair() - else - S = intllib.Getter() - end -else - S = function ( s ) return s end -end +local S = minetest.get_translator("hudbars") hb = {} diff --git a/locale/de.txt b/locale/de.txt deleted file mode 100644 index 578764e..0000000 --- a/locale/de.txt +++ /dev/null @@ -1,3 +0,0 @@ -Health = Leben -Breath = Atem -%s: %d/%d = %s: %d/%d diff --git a/locale/hudbars.de.tr b/locale/hudbars.de.tr new file mode 100644 index 0000000..5188992 --- /dev/null +++ b/locale/hudbars.de.tr @@ -0,0 +1,4 @@ +# textdomain: hudbars +Health=Leben +Breath=Atem +%s: %d/%d=%s: %d/%d diff --git a/locale/nl.txt b/locale/hudbars.it.tr similarity index 63% rename from locale/nl.txt rename to locale/hudbars.it.tr index 33e161e..01b1c48 100644 --- a/locale/nl.txt +++ b/locale/hudbars.it.tr @@ -1,5 +1,6 @@ -Health = Gezondheid -Breath = Adem +# textdomain: hudbars +Health=Salute +Breath=Ossigeno # Default format string for progress bar-style HUD bars, e.g. “Health 5/20” %s: %d/%d diff --git a/locale/hudbars.ms.tr b/locale/hudbars.ms.tr new file mode 100644 index 0000000..0ab24fb --- /dev/null +++ b/locale/hudbars.ms.tr @@ -0,0 +1,4 @@ +# textdomain: hudbars +Health=Kesihatan +Breath=Nafas +%s: %d/%d=%s: %d/%d diff --git a/locale/it.txt b/locale/hudbars.nl.tr similarity index 63% rename from locale/it.txt rename to locale/hudbars.nl.tr index 40558ac..e795d67 100644 --- a/locale/it.txt +++ b/locale/hudbars.nl.tr @@ -1,5 +1,6 @@ -Health = Salute -Breath = Ossigeno +# textdomain: hudbars +Health=Gezondheid +Breath=Adem # Default format string for progress bar-style HUD bars, e.g. “Health 5/20” %s: %d/%d diff --git a/locale/pt.txt b/locale/hudbars.pt.tr similarity index 69% rename from locale/pt.txt rename to locale/hudbars.pt.tr index 2de6265..8d3fbee 100644 --- a/locale/pt.txt +++ b/locale/hudbars.pt.tr @@ -1,5 +1,6 @@ -Health = Saude -Breath = Folego +# textdomain: hudbars +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 diff --git a/locale/hudbars.tr.tr b/locale/hudbars.tr.tr new file mode 100644 index 0000000..233f1be --- /dev/null +++ b/locale/hudbars.tr.tr @@ -0,0 +1,4 @@ +# textdomain: hudbars +Health=Can +Breath=Nefes +%s: %d/%d=%s: %d/%d diff --git a/locale/ms.txt b/locale/ms.txt deleted file mode 100644 index 35b4cc0..0000000 --- a/locale/ms.txt +++ /dev/null @@ -1,3 +0,0 @@ -Health = Kesihatan -Breath = Nafas -%s: %d/%d = %s: %d/%d diff --git a/locale/template.txt b/locale/template.txt index 0a26b8f..67398f0 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -1,5 +1,6 @@ -Health -Breath +# textdomain: hudbars +Health= +Breath= # Default format string for progress bar-style HUD bars, e.g. “Health 5/20” -%s: %d/%d +%s: %d/%d= diff --git a/locale/tr.txt b/locale/tr.txt deleted file mode 100644 index b49c7a0..0000000 --- a/locale/tr.txt +++ /dev/null @@ -1,3 +0,0 @@ -Health = Can -Breath = Nefes -%s: %d/%d = %s: %d/%d From 8d2d2d6070b8e00ecfce5a9ec15e23ed67831316 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 20 Mar 2019 13:31:00 +0100 Subject: [PATCH 02/12] Remove old changelog --- changelog.txt | 92 --------------------------------------------------- 1 file changed, 92 deletions(-) delete mode 100644 changelog.txt diff --git a/changelog.txt b/changelog.txt deleted file mode 100644 index e2e6b56..0000000 --- a/changelog.txt +++ /dev/null @@ -1,92 +0,0 @@ -Note: This software uses semantic versioning, -as of version 2.0.0 of the standard . - -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 From 8b577c742425cdba799bd7e37f66e7e5a0f2fb85 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 20 Mar 2019 13:31:27 +0100 Subject: [PATCH 03/12] Move description into mod.conf --- description.txt | 1 - mod.conf | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 description.txt diff --git a/description.txt b/description.txt deleted file mode 100644 index 9e10e89..0000000 --- a/description.txt +++ /dev/null @@ -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. diff --git a/mod.conf b/mod.conf index add28e6..5fa238a 100644 --- a/mod.conf +++ b/mod.conf @@ -1 +1,2 @@ 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. From 1568d1f41841c9f0fe53a3589e647d6aca32d23f Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 20 Mar 2019 13:35:36 +0100 Subject: [PATCH 04/12] Add explicit progress bar size --- init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init.lua b/init.lua index d06455c..f521eec 100644 --- a/init.lua +++ b/init.lua @@ -186,7 +186,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta local bar_image, bar_size if hb.settings.bar_type == "progress_bar" then bar_image = textures.bar - bar_size = nil + bar_size = {x=2, y=16} elseif hb.settings.bar_type == "statbar_classic" or hb.settings.bar_type == "statbar_modern" then bar_image = textures.icon bar_size = {x=24, y=24} From 5710667766b2ef3abcb95a7c88963c8f0c9ef865 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Wed, 20 Mar 2019 13:38:31 +0100 Subject: [PATCH 05/12] Fix translation of format string --- init.lua | 11 ++++++----- locale/hudbars.de.tr | 2 +- locale/hudbars.it.tr | 2 +- locale/hudbars.ms.tr | 2 +- locale/hudbars.nl.tr | 2 +- locale/hudbars.pt.tr | 2 +- locale/hudbars.tr.tr | 2 +- locale/template.txt | 2 +- 8 files changed, 13 insertions(+), 12 deletions(-) diff --git a/init.lua b/init.lua index f521eec..eba3747 100644 --- a/init.lua +++ b/init.lua @@ -1,4 +1,5 @@ local S = minetest.get_translator("hudbars") +local N = function(s) return s end hb = {} @@ -123,7 +124,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta end end if format_string == nil then - format_string = S("%s: %d/%d") + format_string = N("@1: @2/@3") end hudtable.add_all = function(player, hudtable, start_value, start_max, start_hidden) @@ -148,7 +149,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta iconscale = { x=1, y=1 } barnumber = hb.value_to_barlength(start_value, start_max) bgiconnumber = hb.settings.statbar_length - text = string.format(format_string, label, start_value, start_max) + text = S(format_string, label, start_value, start_max) end if hb.settings.bar_type == "progress_bar" then ids.bg = player:hud_add({ @@ -298,7 +299,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon 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) + local new_text = S(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 @@ -342,7 +343,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon end 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 = S(hudtable.format_string, hudtable.label, new_value, new_max_value) if new_text ~= hudtable.hudstate[name].text then player:hud_change(hudtable.hudids[name].text, "text", new_text) hudtable.hudstate[name].text = new_text @@ -389,7 +390,7 @@ function hb.unhide_hudbar(player, identifier) 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))) + player:hud_change(hudtable.hudids[name].text, "text", tostring(S(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 diff --git a/locale/hudbars.de.tr b/locale/hudbars.de.tr index 5188992..3d1e697 100644 --- a/locale/hudbars.de.tr +++ b/locale/hudbars.de.tr @@ -1,4 +1,4 @@ # textdomain: hudbars Health=Leben Breath=Atem -%s: %d/%d=%s: %d/%d +@1: @2/@3=@1: @2/@3 diff --git a/locale/hudbars.it.tr b/locale/hudbars.it.tr index 01b1c48..3ada5b6 100644 --- a/locale/hudbars.it.tr +++ b/locale/hudbars.it.tr @@ -3,4 +3,4 @@ Health=Salute Breath=Ossigeno # Default format string for progress bar-style HUD bars, e.g. “Health 5/20” -%s: %d/%d +@1: @2/@3=@1: @2/@3 diff --git a/locale/hudbars.ms.tr b/locale/hudbars.ms.tr index 0ab24fb..eb811ab 100644 --- a/locale/hudbars.ms.tr +++ b/locale/hudbars.ms.tr @@ -1,4 +1,4 @@ # textdomain: hudbars Health=Kesihatan Breath=Nafas -%s: %d/%d=%s: %d/%d +@1: @2/@3=@1: @2/@3 diff --git a/locale/hudbars.nl.tr b/locale/hudbars.nl.tr index e795d67..b9c4a41 100644 --- a/locale/hudbars.nl.tr +++ b/locale/hudbars.nl.tr @@ -3,4 +3,4 @@ Health=Gezondheid Breath=Adem # Default format string for progress bar-style HUD bars, e.g. “Health 5/20” -%s: %d/%d +@1: @2/@3=@1: @2/@3 diff --git a/locale/hudbars.pt.tr b/locale/hudbars.pt.tr index 8d3fbee..a818f09 100644 --- a/locale/hudbars.pt.tr +++ b/locale/hudbars.pt.tr @@ -3,4 +3,4 @@ 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 +@1: @2/@3=@1: @2/@3 diff --git a/locale/hudbars.tr.tr b/locale/hudbars.tr.tr index 233f1be..6a2ce0b 100644 --- a/locale/hudbars.tr.tr +++ b/locale/hudbars.tr.tr @@ -1,4 +1,4 @@ # textdomain: hudbars Health=Can Breath=Nefes -%s: %d/%d=%s: %d/%d +@1: @2/@3=@1: @2/@3 diff --git a/locale/template.txt b/locale/template.txt index 67398f0..37b0559 100644 --- a/locale/template.txt +++ b/locale/template.txt @@ -3,4 +3,4 @@ Health= Breath= # Default format string for progress bar-style HUD bars, e.g. “Health 5/20” -%s: %d/%d= +@1: @2/@3= From a3fede159bc48de59dd07b06d3a4e8bcca0d5740 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sat, 30 Mar 2019 13:44:48 +0100 Subject: [PATCH 06/12] Support custom hp_max/breath_max --- init.lua | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/init.lua b/init.lua index eba3747..bf96da6 100644 --- a/init.lua +++ b/init.lua @@ -444,16 +444,20 @@ local function custom_hud(player) else hide = true 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_max = player:get_properties().breath_max local hide_breath - if breath == 11 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) + 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, breath_max-1), breath_max-1, hide_breath or hide) end end 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 -- update built-in HUD bars @@ -464,13 +468,14 @@ local function update_hud(player) hb.unhide_hudbar(player, "health") end --air + local breath_max = player:get_properties().breath_max 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") else 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 --health update_health(player) From 07b9f766d29067ea408c896d16a2633fc28cfd53 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sat, 30 Mar 2019 14:56:36 +0100 Subject: [PATCH 07/12] Make format string params changable --- init.lua | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/init.lua b/init.lua index bf96da6..c0b70f6 100644 --- a/init.lua +++ b/init.lua @@ -51,6 +51,20 @@ local function player_exists(player) return player ~= nil and player:is_player() end +local function make_label(format_string, format_string_config, label, start_value, max_value) + local params = {} + for c=1, #format_string_config do + if format_string_config[c] == "label" then + table.insert(params, label) + elseif format_string_config[c] == "value" then + table.insert(params, start_value) + elseif format_string_config[c] == "max_value" then + table.insert(params, max_value) + end + end + return S(format_string, unpack(params)) +end + -- Table which contains all players with active default HUD bars (only for internal use) hb.players = {} @@ -90,7 +104,7 @@ function hb.get_hudbar_position_index(identifier) 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)) local hudtable = {} local pos, offset @@ -126,6 +140,9 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta if format_string == nil then format_string = N("@1: @2/@3") end + if format_string_config == nil then + format_string_config = { "label", "value", "max_value" } + end hudtable.add_all = function(player, hudtable, start_value, start_max, start_hidden) if start_value == nil then start_value = hudtable.default_start_value end @@ -149,7 +166,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta iconscale = { x=1, y=1 } barnumber = hb.value_to_barlength(start_value, start_max) bgiconnumber = hb.settings.statbar_length - text = S(format_string, label, start_value, start_max) + text = make_label(format_string, format_string_config, label, start_value, start_max) end if hb.settings.bar_type == "progress_bar" then ids.bg = player:hud_add({ @@ -239,6 +256,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta hudtable.identifier = identifier hudtable.format_string = format_string + hudtable.format_string_config = format_string_config hudtable.label = label hudtable.hudids = {} hudtable.hudstate = {} @@ -299,7 +317,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon end if new_label ~= nil then hudtable.label = new_label - local new_text = S(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) end if new_text_color ~= nil then @@ -343,7 +361,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon end if hb.settings.bar_type == "progress_bar" then - local new_text = S(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 player:hud_change(hudtable.hudids[name].text, "text", new_text) hudtable.hudstate[name].text = new_text @@ -390,7 +408,7 @@ function hb.unhide_hudbar(player, identifier) 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(S(hudtable.format_string, hudtable.label, value, max))) + 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 From 895fcae716923be1d34e1f03c4e69a35910c8bfd Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 1 Apr 2019 11:49:30 +0200 Subject: [PATCH 08/12] Better support for translatable format string --- init.lua | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/init.lua b/init.lua index c0b70f6..0ba0cd7 100644 --- a/init.lua +++ b/init.lua @@ -51,7 +51,7 @@ local function player_exists(player) return player ~= nil and player:is_player() end -local function make_label(format_string, format_string_config, label, start_value, max_value) +local function make_label(format_string, format_string_config, format_string_textdomain, label, start_value, max_value) local params = {} for c=1, #format_string_config do if format_string_config[c] == "label" then @@ -62,7 +62,13 @@ local function make_label(format_string, format_string_config, label, start_valu table.insert(params, max_value) end end - return S(format_string, unpack(params)) + local ret + if format_string_textdomain then + ret = minetest.translate(format_string_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) @@ -104,7 +110,7 @@ function hb.get_hudbar_position_index(identifier) end end -function hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config) +function hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config, format_string_textdomain) minetest.log("action", "hb.register_hudbar: "..tostring(identifier)) local hudtable = {} local pos, offset @@ -166,7 +172,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta iconscale = { x=1, y=1 } barnumber = hb.value_to_barlength(start_value, start_max) bgiconnumber = hb.settings.statbar_length - text = make_label(format_string, format_string_config, label, start_value, start_max) + text = make_label(format_string, format_string_config, format_string_textdomain, label, start_value, start_max) end if hb.settings.bar_type == "progress_bar" then ids.bg = player:hud_add({ @@ -257,6 +263,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta hudtable.identifier = identifier hudtable.format_string = format_string hudtable.format_string_config = format_string_config + hudtable.format_string_textdomain = format_string_textdomain hudtable.label = label hudtable.hudids = {} hudtable.hudstate = {} @@ -317,7 +324,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon end if new_label ~= nil then hudtable.label = new_label - local new_text = make_label(hudtable.format_string, hudtable.format_string_config, new_label, hudtable.hudstate[name].value, hudtable.hudstate[name].max) + local new_text = make_label(hudtable.format_string, hudtable.format_string_config, hudtable.format_string_textdomain, 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 @@ -361,7 +368,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon end if hb.settings.bar_type == "progress_bar" then - local new_text = make_label(hudtable.format_string, hudtable.format_string_config, hudtable.label, new_value, new_max_value) + local new_text = make_label(hudtable.format_string, hudtable.format_string_config, hudtable.format_string_textdomain, hudtable.label, new_value, new_max_value) if new_text ~= hudtable.hudstate[name].text then player:hud_change(hudtable.hudids[name].text, "text", new_text) hudtable.hudstate[name].text = new_text @@ -408,7 +415,7 @@ function hb.unhide_hudbar(player, identifier) 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", make_label(hudtable.format_string, hudtable.format_string_config, hudtable.label, value, max)) + player:hud_change(hudtable.hudids[name].text, "text", make_label(hudtable.format_string, hudtable.format_string_config, hudtable.format_string_textdomain, 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 From 915fab08e2bfd65619bddf429caa78ffe1d0949f Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 1 Apr 2019 12:16:36 +0200 Subject: [PATCH 09/12] Always send update when changing hide state This fixes a problem in hbarmor not getting the correct hide state initially. --- init.lua | 48 ++++++++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/init.lua b/init.lua index 0ba0cd7..6bd47c2 100644 --- a/init.lua +++ b/init.lua @@ -384,19 +384,17 @@ function hb.hide_hudbar(player, identifier) local name = player:get_player_name() local hudtable = hb.get_hudtable(identifier) if hudtable == nil then return false end - if(hudtable.hudstate[name].hidden == false) then - if hb.settings.bar_type == "progress_bar" then - if hudtable.hudids[name].icon ~= nil then - 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) + if hb.settings.bar_type == "progress_bar" then + if hudtable.hudids[name].icon ~= nil then + player:hud_change(hudtable.hudids[name].icon, "scale", {x=0,y=0}) end - player:hud_change(hudtable.hudids[name].bar, "number", 0) - hudtable.hudstate[name].hidden = true + 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 + player:hud_change(hudtable.hudids[name].bar, "number", 0) + hudtable.hudstate[name].hidden = true return true end @@ -405,23 +403,21 @@ function hb.unhide_hudbar(player, identifier) local name = player:get_player_name() local hudtable = hb.get_hudtable(identifier) if hudtable == nil then return false end - if(hudtable.hudstate[name].hidden) then - local value = hudtable.hudstate[name].value - local max = hudtable.hudstate[name].max - if hb.settings.bar_type == "progress_bar" then - if hudtable.hudids[name].icon ~= nil then - 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", make_label(hudtable.format_string, hudtable.format_string_config, hudtable.format_string_textdomain, hudtable.label, value, max)) - elseif hb.settings.bar_type == "statbar_modern" then - player:hud_change(hudtable.hudids[name].bg, "number", hb.settings.statbar_length) + local value = hudtable.hudstate[name].value + local max = hudtable.hudstate[name].max + if hb.settings.bar_type == "progress_bar" then + if hudtable.hudids[name].icon ~= nil then + player:hud_change(hudtable.hudids[name].icon, "scale", {x=1,y=1}) end - player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(value, max)) - hudtable.hudstate[name].hidden = false + 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", make_label(hudtable.format_string, hudtable.format_string_config, hudtable.format_string_textdomain, 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 + player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(value, max)) + hudtable.hudstate[name].hidden = false return true end From afb0242b3bc2e60333adca1ca0c633869d228a5d Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 1 Apr 2019 12:23:54 +0200 Subject: [PATCH 10/12] Restructure format_string_config --- init.lua | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/init.lua b/init.lua index 6bd47c2..227be16 100644 --- a/init.lua +++ b/init.lua @@ -51,20 +51,21 @@ local function player_exists(player) return player ~= nil and player:is_player() end -local function make_label(format_string, format_string_config, format_string_textdomain, label, start_value, max_value) +local function make_label(format_string, format_string_config, label, start_value, max_value) local params = {} - for c=1, #format_string_config do - if format_string_config[c] == "label" then + local order = format_string_config.order + for o=1, #order do + if order[o] == "label" then table.insert(params, label) - elseif format_string_config[c] == "value" then + elseif order[o] == "value" then table.insert(params, start_value) - elseif format_string_config[c] == "max_value" then + elseif order[o] == "max_value" then table.insert(params, max_value) end end local ret - if format_string_textdomain then - ret = minetest.translate(format_string_textdomain, format_string, unpack(params)) + 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 @@ -110,7 +111,7 @@ function hb.get_hudbar_position_index(identifier) end end -function hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string, format_string_config, format_string_textdomain) +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)) local hudtable = {} local pos, offset @@ -147,7 +148,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta format_string = N("@1: @2/@3") end if format_string_config == nil then - format_string_config = { "label", "value", "max_value" } + format_string_config = { order = { "label", "value", "max_value" } } end hudtable.add_all = function(player, hudtable, start_value, start_max, start_hidden) @@ -172,7 +173,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta iconscale = { x=1, y=1 } barnumber = hb.value_to_barlength(start_value, start_max) bgiconnumber = hb.settings.statbar_length - text = make_label(format_string, format_string_config, format_string_textdomain, label, start_value, start_max) + text = make_label(format_string, format_string_config, label, start_value, start_max) end if hb.settings.bar_type == "progress_bar" then ids.bg = player:hud_add({ @@ -263,7 +264,6 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta hudtable.identifier = identifier hudtable.format_string = format_string hudtable.format_string_config = format_string_config - hudtable.format_string_textdomain = format_string_textdomain hudtable.label = label hudtable.hudids = {} hudtable.hudstate = {} @@ -324,7 +324,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon end if new_label ~= nil then hudtable.label = new_label - local new_text = make_label(hudtable.format_string, hudtable.format_string_config, hudtable.format_string_textdomain, 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) end if new_text_color ~= nil then @@ -368,7 +368,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon end if hb.settings.bar_type == "progress_bar" then - local new_text = make_label(hudtable.format_string, hudtable.format_string_config, hudtable.format_string_textdomain, 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 player:hud_change(hudtable.hudids[name].text, "text", new_text) hudtable.hudstate[name].text = new_text @@ -412,7 +412,7 @@ function hb.unhide_hudbar(player, identifier) 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", make_label(hudtable.format_string, hudtable.format_string_config, hudtable.format_string_textdomain, hudtable.label, value, max)) + 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 From 14a535de0d2bc44d5dac65ebe6998332427f8d86 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 1 Apr 2019 12:38:07 +0200 Subject: [PATCH 11/12] Update API documentation --- API.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/API.md b/API.md index a53344c..ec746a3 100644 --- a/API.md +++ b/API.md @@ -45,7 +45,7 @@ a vertical gradient. ### Icon 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 and unhidden on a per-player basis. Note this does not yet display the HUD bar. @@ -66,7 +66,19 @@ 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_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. -* `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" }` + +#### 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 Always `nil`. From 085a2aa901a8d3fabafbfefbe9a0655d0b872164 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Mon, 1 Apr 2019 12:55:40 +0200 Subject: [PATCH 12/12] Version 2.0.0 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 74a6938..43f3899 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ this mod will place them accordingly. position should be displayed correctly on every screen size. ## Current version -The current version is 1.11.0. +The current version is 2.0.0. This software uses [semantic versioning](http://semver.org), as defined by version 2.0.0 of the SemVer standard.