1 次程式碼提交

作者 SHA1 備註 日期
Wuzzy
b60e24e11a Replace the actual builtin statbars (buggy!) 2016-12-03 00:34:35 +01:00
共有 17 個檔案被更改,包括 313 行新增245 行删除

25
API.md
查看文件

@@ -1,5 +1,5 @@
API documentation for the HUD bars mod
======================================
API documentation for the HUD bars mod 1.6.1
============================================
## Introduction
This API allows you to add, change, hide and unhide custom HUD bars for this mod.
@@ -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, format_string_config)`
### `hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string)`
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,19 +66,7 @@ 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`: 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.)
* `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`.
#### Return value
Always `nil`.
@@ -182,7 +170,7 @@ Makes a previously hidden HUD bar visible again to a player.
## Reading HUD bar information
It is also possible to read information about existing HUD bars.
It is also possible to read information about an active HUD bar.
### `hb.get_hudbar_state(player, identifier)`
Returns the current state of the active player's HUD bar.
@@ -203,6 +191,3 @@ 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.
If the player does not exist, returns `nil` instead.
### `hb.get_hudbar_identifiers()`
Returns a table of all currently registered HUD bar identifiers.

查看文件

@@ -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 2.0.0.
The current version is 1.6.1.
This software uses [semantic versioning](http://semver.org), as defined by version 2.0.0 of the SemVer
standard.
@@ -31,29 +31,25 @@ Author: Wuzzy (2015)
Also: This mod was forked from the “Better HUD” [hud] mod by BlockMen.
Translations:
* German: Wuzzy
* Portuguese: BrunoMine
* Turkish: admicos
* Dutch: kingoscargames
* Italian: Hamlet
* Malay: muhdnurhidayat
This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it
and/or modify it under the terms of the MIT License.
and/or modify it under the terms of the Do What The Fuck You Want
To Public License (WTFPL), version 2, as published by Sam Hocevar.
### Licenses of textures
* `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_icon_breath.png`—kaeza (MIT License), modified by BlockMen, modified again by Wuzzy
* `hudbars_bgicon_breath.png`—based on previous image, edited by Wuzzy (MIT License)
* `hudbars_bar_health.png`—Wuzzy (MIT License)
* `hudbars_bar_breath.png`—Wuzzy (MIT License)
* `hudbars_bar_background.png`—Wuzzy (MIT License)
* `hudbars_icon_breath.png`—kaeza (WTFPL), modified by BlockMen, modified again by Wuzzy
* `hudbars_bgicon_breath.png`—based on previous image, edited by Wuzzy (WTFPL)
* `hudbars_bar_health.png`—Wuzzy (WTFPL)
* `hudbars_bar_breath.png`—Wuzzy (WTFPL)
* `hudbars_bar_background.png`—Wuzzy (WTFPL)
### License references
* [CC-BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/)
* [MIT License](https://opensource.org/licenses/MIT)
* [WTFPL](http://sam.zoy.org/wtfpl/COPYING)

92
changelog.txt 一般檔案
查看文件

@@ -0,0 +1,92 @@
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

查看文件

@@ -1,48 +0,0 @@
-- (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

1
depends.txt 一般檔案
查看文件

@@ -0,0 +1 @@
intllib?

1
description.txt 一般檔案
查看文件

@@ -0,0 +1 @@
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.

323
init.lua
查看文件

@@ -1,5 +1,9 @@
local S = minetest.get_translator("hudbars")
local N = function(s) return s end
local S
if (minetest.get_modpath("intllib")) then
S = intllib.Getter()
else
S = function ( s ) return s end
end
hb = {}
@@ -16,11 +20,11 @@ hb.settings = {}
function hb.load_setting(sname, stype, defaultval, valid_values)
local sval
if stype == "string" then
sval = minetest.settings:get(sname)
sval = minetest.setting_get(sname)
elseif stype == "bool" then
sval = minetest.settings:get_bool(sname)
sval = minetest.setting_getbool(sname)
elseif stype == "number" then
sval = tonumber(minetest.settings:get(sname))
sval = tonumber(minetest.setting_get(sname))
end
if sval ~= nil then
if valid_values ~= nil then
@@ -44,32 +48,88 @@ function hb.load_setting(sname, stype, defaultval, valid_values)
end
end
-- Load default settings
dofile(minetest.get_modpath("hudbars").."/default_settings.lua")
-- (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", -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)
return player ~= nil and player:is_player()
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
table.insert(params, start_value)
elseif order[o] == "max_value" then
table.insert(params, max_value)
local function barindex_to_pos_and_offset(index)
local pos, offset
if hb.settings.alignment_pattern == "stack_up" then
pos = hb.settings.pos_left
offset = {
x = hb.settings.start_offset_left.x,
y = hb.settings.start_offset_left.y - hb.settings.vmargin * index
}
elseif hb.settings.alignment_pattern == "stack_down" then
pos = hb.settings.pos_left
offset = {
x = hb.settings.start_offset_left.x,
y = hb.settings.start_offset_left.y + hb.settings.vmargin * index
}
else
if index % 2 == 0 then
pos = hb.settings.pos_left
offset = {
x = hb.settings.start_offset_left.x,
y = hb.settings.start_offset_left.y - hb.settings.vmargin * (index/2)
}
else
pos = hb.settings.pos_right
offset = {
x = hb.settings.start_offset_right.x,
y = hb.settings.start_offset_right.y - hb.settings.vmargin * ((index-1)/2)
}
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
return pos, offset
end
-- Table which contains all players with active default HUD bars (only for internal use)
@@ -111,44 +171,17 @@ 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)
minetest.log("action", "hb.register_hudbar: "..tostring(identifier))
local hudtable = {}
local pos, offset
local index = math.floor(hb.get_hudbar_position_index(identifier))
hb.registered_slots[index] = true
if hb.settings.alignment_pattern == "stack_up" then
pos = hb.settings.pos_left
offset = {
x = hb.settings.start_offset_left.x,
y = hb.settings.start_offset_left.y - hb.settings.vmargin * index
}
elseif hb.settings.alignment_pattern == "stack_down" then
pos = hb.settings.pos_left
offset = {
x = hb.settings.start_offset_left.x,
y = hb.settings.start_offset_left.y + hb.settings.vmargin * index
}
else
if index % 2 == 0 then
pos = hb.settings.pos_left
offset = {
x = hb.settings.start_offset_left.x,
y = hb.settings.start_offset_left.y - hb.settings.vmargin * (index/2)
}
else
pos = hb.settings.pos_right
offset = {
x = hb.settings.start_offset_right.x,
y = hb.settings.start_offset_right.y - hb.settings.vmargin * ((index-1)/2)
}
end
end
pos, offset = barindex_to_pos_and_offset(index)
if format_string == nil then
format_string = N("@1: @2/@3")
end
if format_string_config == nil then
format_string_config = { order = { "label", "value", "max_value" } }
format_string = S("%s: %d/%d")
end
hudtable.add_all = function(player, hudtable, start_value, start_max, start_hidden)
@@ -173,7 +206,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 = string.format(format_string, label, start_value, start_max)
end
if hb.settings.bar_type == "progress_bar" then
ids.bg = player:hud_add({
@@ -211,12 +244,12 @@ 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 = {x=2, y=16}
bar_size = nil
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}
end
ids.bar = player:hud_add({
local bardef = {
hud_elem_type = "statbar",
position = pos,
text = bar_image,
@@ -225,7 +258,10 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
offset = offset,
direction = 0,
size = bar_size,
})
}
if hudtable.identifier ~= "health" and hudtable.identifier ~= "breath" then
ids.bar = player:hud_add(bardef)
end
if hb.settings.bar_type == "progress_bar" then
ids.text = player:hud_add({
hud_elem_type = "text",
@@ -263,7 +299,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.label = label
hudtable.hudids = {}
hudtable.hudstate = {}
@@ -272,7 +307,7 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
hudtable.default_start_max = default_start_max
hb.hudbars_count= hb.hudbars_count + 1
hb.hudtables[identifier] = hudtable
end
@@ -319,12 +354,12 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon
if new_bgicon ~= nil and hudtable.hudids[name].bgicon ~= nil then
player:hud_change(hudtable.hudids[name].bgicon, "text", new_bgicon)
end
if new_bar ~= nil then
if new_bar ~= nil and hudtable.hudids[name].bar ~= nil then
player:hud_change(hudtable.hudids[name].bar , "text", new_bar)
end
if new_label ~= nil then
hudtable.label = new_label
local new_text = make_label(hudtable.format_string, hudtable.format_string_config, new_label, hudtable.hudstate[name].value, hudtable.hudstate[name].max)
local new_text = string.format(hudtable.format_string, new_label, hudtable.hudstate[name].value, hudtable.hudstate[name].max)
player:hud_change(hudtable.hudids[name].text, "text", new_text)
end
if new_text_color ~= nil then
@@ -362,13 +397,13 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon
if value_changed or max_changed then
local new_barlength = hb.value_to_barlength(new_value, new_max_value)
if new_barlength ~= hudtable.hudstate[name].barlength then
if new_barlength ~= hudtable.hudstate[name].barlength and hudtable.hudids[name].bar ~= nil then
player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(new_value, new_max_value))
hudtable.hudstate[name].barlength = new_barlength
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 = string.format(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
@@ -384,17 +419,21 @@ 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 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})
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)
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 hudtable.hudids[name].bar ~= nil then
player:hud_change(hudtable.hudids[name].bar, "number", 0)
end
hudtable.hudstate[name].hidden = true
end
player:hud_change(hudtable.hudids[name].bar, "number", 0)
hudtable.hudstate[name].hidden = true
return true
end
@@ -403,21 +442,25 @@ 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
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})
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", 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
if hudtable.hudstate[name].max ~= 0 then
player:hud_change(hudtable.hudids[name].bg, "scale", {x=1,y=1})
if hudtable.hudids[name].bar ~= nil then
player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(value, max))
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)
hudtable.hudstate[name].hidden = false
end
player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(value, max))
hudtable.hudstate[name].hidden = false
return true
end
@@ -435,68 +478,97 @@ function hb.get_hudbar_state(player, identifier)
return copy
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
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("breath", 0xFFFFFF, S("Breath"), { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png", bgicon = "hudbars_bgicon_breath.png" }, 10, 10, true)
end
if minetest.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then
local healthtextures = { bar = "hudbars_bar_health.png", icon = "hudbars_icon_health.png", bgicon = "hudbars_bgicon_health.png" }
local breathtextures = { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png", bgicon = "hudbars_bgicon_breath.png" }
local function hide_builtin(player)
local flags = player:hud_get_flags()
flags.healthbar = false
flags.breathbar = false
player:hud_set_flags(flags)
end
hb.register_hudbar("health", 0xFFFFFF, S("Health"), healthtextures, 20, 20, false)
hb.register_hudbar("breath", 0xFFFFFF, S("Breath"), breathtextures, 10, 10, true)
-- Overwrite the builtin statbars for the best client prediction
-- FIXME: Health icons are drawn behind the modern statbar background
-- FIXME: Breath bar is drawn above text
local bar_health, bar_breath, size_health, size_breath
if hb.settings.bar_type == "progress_bar" then
bar_health = healthtextures.bar
bar_breath = breathtextures.bar
size_health = {x=hb.value_to_barlength(1,20)*2, y=16}
size_breath = {x=hb.value_to_barlength(1,20)*2, y=16}
elseif hb.settings.bar_type == "statbar_classic" or hb.settings.bar_type == "statbar_modern" then
bar_health = healthtextures.icon
bar_breath = breathtextures.icon
size_health = {x=24, y=24}
size_breath = {x=24, y=24}
end
local hudtable = hb.get_hudtable("health")
local pos, offset = barindex_to_pos_and_offset(hb.get_hudbar_position_index("health"))
local bardef = {
hud_elem_type = "statbar",
position = pos,
text = bar_health,
number = 20,
alignment = {x=-1,y=-1},
offset = offset,
direction = 0,
size = size_health,
}
minetest.hud_replace_builtin("health", bardef)
pos, offset = barindex_to_pos_and_offset(hb.get_hudbar_position_index("breath"))
hudtable = hb.get_hudtable("breath")
bardef = {
hud_elem_type = "statbar",
position = pos,
text = bar_breath,
number = 20,
alignment = {x=-1,y=-1},
offset = offset,
direction = 0,
size = size_breath,
}
minetest.hud_replace_builtin("breath", bardef)
end
local function custom_hud(player)
if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then
if minetest.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then
local hide
if minetest.settings:get_bool("enable_damage") then
if minetest.setting_getbool("enable_damage") then
hide = false
else
hide = true
end
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)
hb.init_hudbar(player, "health", player:get_hp(), nil, hide)
local breath = player:get_breath()
local breath_max = player:get_properties().breath_max
local hide_breath
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)
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)
end
end
local function update_health(player)
local hp_max = player:get_properties().hp_max
hb.change_hudbar(player, "health", player:get_hp(), hp_max)
hb.change_hudbar(player, "health", player:get_hp())
end
-- update built-in HUD bars
local function update_hud(player)
if not player_exists(player) then return end
if minetest.settings:get_bool("enable_damage") then
if minetest.setting_getbool("enable_damage") then
if hb.settings.forceload_default_hudbars then
hb.unhide_hudbar(player, "health")
end
--air
local breath_max = player:get_properties().breath_max
local breath = player:get_breath()
if breath >= breath_max and hb.settings.autohide_breath == true then
if breath == 11 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, breath_max-1), breath_max-1)
hb.change_hudbar(player, "breath", math.min(breath, 10))
end
--health
update_health(player)
@@ -506,11 +578,7 @@ local function update_hud(player)
end
end
minetest.register_on_player_hpchange(function(player)
if hb.players[player:get_player_name()] ~= nil then
update_health(player)
end
end)
minetest.register_on_player_hpchange(update_health)
minetest.register_on_respawnplayer(function(player)
update_health(player)
@@ -518,7 +586,6 @@ minetest.register_on_respawnplayer(function(player)
end)
minetest.register_on_joinplayer(function(player)
hide_builtin(player)
custom_hud(player)
hb.players[player:get_player_name()] = player
end)
@@ -535,7 +602,7 @@ minetest.register_globalstep(function(dtime)
if main_timer > hb.settings.tick or timer > 4 then
if main_timer > hb.settings.tick then main_timer = 0 end
-- only proceed if damage is enabled
if minetest.settings:get_bool("enable_damage") or hb.settings.forceload_default_hudbars then
if minetest.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then
for _, player in pairs(hb.players) do
-- update all hud elements
update_hud(player)
@@ -544,5 +611,3 @@ minetest.register_globalstep(function(dtime)
end
if timer > 4 then timer = 0 end
end)
minetest.log("action", "[hudbars] loaded.")

3
locale/de.txt 一般檔案
查看文件

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

查看文件

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

查看文件

@@ -1,6 +0,0 @@
# 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

查看文件

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

查看文件

@@ -1,6 +0,0 @@
# 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

查看文件

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

查看文件

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

查看文件

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

查看文件

@@ -1,2 +1 @@
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.

查看文件

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