37 Commits

Author SHA1 Message Date
b60e24e11a Replace the actual builtin statbars (buggy!) 2016-12-03 00:34:35 +01:00
5c0f165ddf Event-based health bar change 2016-12-02 23:04:54 +01:00
3c182884dc Fix breath and health not being updated anymore 2016-12-02 22:36:10 +01:00
3d74745aec Big statbar icons, introduce new offset config 2016-12-02 21:40:46 +01:00
05f5ec0622 Version 1.6.1 2016-11-22 15:13:00 +01:00
d099ae91e2 Remove stupid testing code 2016-11-22 15:12:09 +01:00
48045ec7f0 Version 1.6.0 2016-11-22 15:03:44 +01:00
92d8c786a9 Version 1.6.0 2016-11-22 15:03:06 +01:00
6c0c617b39 Fix possible crash after player left 2016-11-22 14:59:40 +01:00
893ba4e577 Version 1.5.1 2016-11-12 21:09:24 +01:00
27336cee7d Fix outdated inttlib boilerplate 2016-11-09 01:49:05 +01:00
ac2085d0f0 Use new screenshot with 3:2 aspect ratio 2016-11-03 23:18:22 +01:00
aed5c70c8a Update version to 1.5.0 2016-10-20 16:28:03 +02:00
4931aff43f Merge https://repo.or.cz/minetest_hudbars/brunomine 2016-10-20 16:23:06 +02:00
afad4e847d Add translate into portuguese 2016-08-14 14:22:46 -03:00
008388036c Remove test 2016-08-14 13:53:19 -03:00
43931527c4 locale/pt.txt 2016-08-14 13:45:06 -03:00
9a78ce745f Fix some Luacheck warnings 2016-08-11 17:21:33 +02:00
5348d26a2e Add another string for translation 2016-08-08 03:57:20 +02:00
40b7c35a7d Tweak breath bgicon 2016-08-05 21:38:31 +02:00
6d850edf96 Add breath background icon for statbar_modern 2016-08-05 21:14:42 +02:00
3b57b2cd4a Bugfix: statbar_modern was not correctly hidden 2016-08-05 20:39:28 +02:00
d64dcb83b5 Move text 1px up so it fits better into box 2016-08-05 17:59:41 +02:00
1786ae2cab Add intllib support 2016-08-05 16:54:52 +02:00
f06e3c362f 1.4.1: Fix bug in hb.change_hudbar being a no-op 2016-07-23 11:47:50 +02:00
c26dd7d6a4 Version 1.4.0 2016-07-03 00:22:51 +02:00
9af3f328fc Minor API.md text update 2016-07-03 00:21:09 +02:00
fff42e2a42 Allow to change HUD bar images and label later 2016-07-03 00:18:54 +02:00
1916c220b7 Version 1.3.0 2016-07-02 22:10:27 +02:00
41cdf147fa Add description.txt and screenshot.png 2016-07-02 22:09:02 +02:00
003c6214ed Convert readme file to Markdown format 2016-07-02 21:46:22 +02:00
c25c2d1b6e Fix description of hudbars_tick 2016-07-02 21:26:15 +02:00
5bff4d453c Remove redundant commenRemove redundant comment 2016-07-02 21:14:30 +02:00
21651fcbe8 Fix hudbars_tick = hudbars_vmargin 2016-07-02 21:11:03 +02:00
0d022110eb Add settings to advanced settings menu 2016-07-02 21:09:57 +02:00
185f0f5b2f Add mod.conf 2016-07-02 19:37:30 +02:00
5741b7203c Remove incorrect text in README file 2016-07-02 19:27:31 +02:00
16 changed files with 285 additions and 218 deletions

19
API.md Executable file → Normal file
View File

@ -1,4 +1,4 @@
API documentation for the HUD bars mod 1.4.1
API documentation for the HUD bars mod 1.6.1
============================================
## Introduction
@ -95,8 +95,7 @@ the HUD bar will be initially be shown to the player.
* `start_hidden`: Whether the HUD bar is initially hidden. This is optional, `default_start_hidden` of the registration function will be used as default
#### Return value
Always `nil`.
`true` on success, `false` otherwise.
## Modifying a HUD bar
@ -135,7 +134,7 @@ such network optimization for the “styling” parameters, so keep this in mind
* `new_text_color`: A 3-octet number defining the new color of the text.
#### Return value
Always `nil`.
`true` on success, `false` otherwise.
## Hiding and unhiding a HUD bar
@ -156,7 +155,7 @@ Hides the specified HUD bar from the screen of the specified player.
* `identifier`: The identifier of the HUD bar type to hide, as specified in `hb.register_hudbar`.
#### Return value
Always `nil`.
`true` on success, `false` otherwise.
### `hb.unhide_hudbar(player, identifier)`
@ -167,7 +166,7 @@ Makes a previously hidden HUD bar visible again to a player.
* `identifier`: The identifier of the HUD bar type to unhide, as specified in `hb.register_hudbar`.
#### Return value
Always `nil`.
`true` on success, `false` otherwise.
## Reading HUD bar information
@ -181,12 +180,14 @@ Returns the current state of the active player's HUD bar.
* `identifier`: The identifier of the HUD bar type to hide, as specified in `hb.register_hudbar`.
#### Return value
A table which holds information on the current state of the HUD bar. Note the table is a deep
copy of the internal HUD bar state, it is *not* a reference; the information hold by the table is
only true for the moment you called this function. The fields of this table are:
On success, returns a table which holds information on the current state of the HUD bar. Note
the table is a deep copy of the internal HUD bar state, it is *not* a reference; the information
hold by the table is only true for the moment you called this function. The fields of this table are:
* `value`: Current value of HUD bar.
* `max`: Current maximum value of HUD bar.
* `hidden`: Boolean denoting whether the HUD bar is hidden.
* `barlength`: The length of the HUD bar in pixels. This field 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.

55
README.md Normal file
View File

@ -0,0 +1,55 @@
# HUD bars
## Description
This mod changes the HUD of Minetest. It replaces the default health and breath
symbols by horizontal colored bars with text showing the number.
Furthermore, it enables other mods to add their own custom bars to the HUD,
this mod will place them accordingly.
**Important**: Keep in mind if running a server with this mod, that the custom
position should be displayed correctly on every screen size.
## Current version
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.
## Settings
This mod can be configured quite a bit. You can change HUD bar appearance, offsets, ordering, and more.
Use the advanced settings menu in Minetest for detailed configuration.
## API
The API is used to add your own custom HUD bars.
Documentation for the API of this mod can be found in `API.md`.
## Legal
### License of source code
Author: Wuzzy (2015)
Also: This mod was forked from the “Better HUD” [hud] mod by BlockMen.
Translations:
* German: Wuzzy
* Portuguese: BrunoMine
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 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 (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/)
* [WTFPL](http://sam.zoy.org/wtfpl/COPYING)

View File

@ -1,109 +0,0 @@
Minetest mod: HUD bars
======================
Version: 1.2.1
This software uses semantic versioning, as defined by version 2.0.0 of the SemVer
standard. <http://semver.org/>
License of source code: WTFPL
-----------------------------
Author: Wuzzy (2015)
Forked from the “Better HUD” [hud] mod by BlockMen.
Using the mod:
--------------
This mod changes the HUD of Minetest. It replaces the default health and breath symbols by horizontal colored bars with text showing
the number.
Furthermore, it enables other mods to add their own custom bars to the HUD, this mod will place them accordingly.
You can create a “hudbars.conf” file to customize the positions of the health and breath bars. Take a look at “hudbars.conf.example”
to get more infos. The lines starting with “--” are comments, remove the two dashes to activate a setting. Settings which are not
set will use a default value instead.
IMPORTANT:
Keep in mind if running a server with this mod, that the custom position should be displayed correctly on every screen size!
Settings:
---------
This mod can be configured by editing minetest.conf. Currently, the following setting is recognized:
- hudbars_autohide_breath: A boolean setting, it can be either “true” or “false”. If set to “true”,
the breath bar will be automatically hidden shortly after the breathbar has been filled up. If set
to “false”, the breath bar will always be displayed. The default value is “true”.
- hudbars_sorting: This setting allows you to specify the “slot” positions of the HUD bars manually.
The setting has to be specified as a comma-seperated list of key=value pairs, where a key refers to the
identifier of a HUD bar and the value refers to the slot number of where the HUD bar should be placed.
The slot number must be an integer greater of equal to 0. The slot positions start (slot 0) at the
bottom (nearest to hotbar in default configuration) left side, the following slot 1 is at the right
side, slot `2` is on the right side again, but placed over the first HUD bar (slot 0), and it goes on,
in a zig-zag pattern.
All HUD bars to which no sorting rule has been applied will fill in all slots which have not been occupied
by the HUD bars specified in this setting, the slots will be filled in from the lowest slot number.
Note that the order of those remaining HUD bars is *not* fixed, it basically just boils down on which mod
“came” first. Don't worry, the mod will still work perfectly fine, this setting is entirely optional.
Be careful not to use slot indices twice, or else different HUD bars will be drawn over each other!
If this setting is not set, by default the health and breath bar are displayed at slot positions 0 and 1,
respectively (health bar at left bottom-most positoin, breath bar right from it). All other HUD bars are
placed automatically.
Example value:
breath=0, health=1
This places the breath bar at the left side, and the health bar to the right side.
- hudbars_bar_type: Specifies the style of bars. You can select between the default progress-bar-like bars and the good old statbars
like you know from vanilla Minetest. Note that the classic and modern statbars are still a little bit experimental.
These values are possible:
- progress_bar: A horizontal progress-bar-like bar with a label, showing numerical value (current, maximum), and an icon.
These bars usually convey the most information. This is the default and recommended value..
- statbar_classic: Classic statbar, like in vanilla Minetest. Made out of up to 20 half-symbols. Those bars represent the vague ratio between
the current value and the maximum value. 1 half-symbol stands for approximately 5% of the maximum value.
- statbar_modern: Like the classic statbar, but also supports background images, this kind of statbar may be considered to be more user-friendly
than the classic statbar. This bar type closely resembles the [hud] mod.
- hudbars_vmargin: The vertical distance between two HUD bars in pixels (default: 24)
- hudbars_tick: The number of seconds between two updates of the HUD bars. Increase this number if you have a slow server (default: 0.1)
Position settings:
With these settings you can configure the positions of the HUD bars. All settings must be specified as a number.
The pos settings are specified as a floating-point number between 0 to 1 each, the start_offset settings are
specified as whole numbers, they specify a number of pixels.
The left and right variants are used for the zig-zag mode. In the stack_up and stack_down modes, only the left variant is used for
the base position
- hudbars_pos_left_x, hudbars_pos_left_y: Screen position (x and y) of the left HUD bar in zigzag mode. 0 is left-most/top, 1 is right-most/bottom.
Defaults: 0.5 (x) and 1 (y)
- hudbars_pos_right_x, hudbars_pos_right_y: Same as above, but for the right one.
Defaults: 0.5 and 1.
- hudbars_start_offset_left_x, hudbars_start_offset_left_y: Offset in pixels from the basic screen position specified in hudbars_pos_left_x/hudbars_pos_left_y.
Defaults: -175 and -86
- hudbars_start_offset_right_x, hudbars_start_offset_right_y: Same as above, but for the right one.
Defaults: 15 and -86
API:
----
The API is used to add your own custom HUD bars.
Documentation for the API of this mod can be found in API.md.
License 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 (WTFPL), modified by BlockMen
hudbars_bar_health.png - Wuzzy (WTFPL)
hudbars_bar_breath.png - Wuzzy (WTFPL)
hudbars_bar_background.png - Wuzzy(WTFPL)
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 Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.

9
changelog.txt Executable file → Normal file
View File

@ -81,3 +81,12 @@ as of version 2.0.0 of the standard <http://semver.org/>.
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
depends.txt Executable file → Normal file
View File

@ -1,2 +1 @@
default
intllib?

View File

@ -1,10 +0,0 @@
-- if custom==true, use custom position
-- X 0=left, 1=right
--Y 0,1,2 = down--> up
hb.settings.custom.custom = true
hb.settings.custom.health = { x = 0, y = 0 }
hb.settings.custom.satiation = { x = 0, y = 1 }
hb.settings.custom.sprint = { x = 1, y = 1 }
hb.settings.custom.mana = { x = 1, y = 0 }
hb.settings.custom.armor = { x = 1, y = 2 }
hb.settings.custom.breath = { x = 0, y = 2 }

274
init.lua
View File

@ -1,7 +1,6 @@
local S
if (minetest.get_modpath("intllib")) then
dofile(minetest.get_modpath("intllib").."/intllib.lua")
S = intllib.Getter(minetest.get_current_modname())
S = intllib.Getter()
else
S = function ( s ) return s end
end
@ -62,20 +61,26 @@ 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.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)
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.4)
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.bar_type = hb.load_setting("hudbars_bar_type", "string", "progress_bar", {"progress_bar", "statbar_classic", "statbar_modern"})
hb.settings.autohide_breath = hb.load_setting("hudbars_autohide_breath", "bool", true)
local sorting = minetest.setting_get("hudbars_sorting")
@ -91,8 +96,44 @@ else
hb.settings.sorting_reverse = { [0] = "health", [1] = "breath" }
end
local function player_exists(player)
return player ~= nil and player:is_player()
end
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
return pos, offset
end
-- Table which contains all players with active default HUD bars (only for internal use)
--hb.players = {}
hb.players = {}
function hb.value_to_barlength(value, max)
if max == 0 then
@ -136,33 +177,9 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
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 = S("%s: %d/%d")
end
@ -219,24 +236,32 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
number = bgiconnumber,
alignment = {x=-1,y=-1},
offset = { x = offset.x, y = offset.y },
direction = 0,
size = {x=24, y=24},
})
end
end
local bar_image
local bar_image, bar_size
if hb.settings.bar_type == "progress_bar" then
bar_image = textures.bar
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,
number = barnumber,
alignment = {x=-1,y=-1},
offset = offset,
size = "",
})
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",
@ -287,38 +312,39 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
end
function hb.init_hudbar(player, identifier, start_value, start_max, start_hidden)
if not player_exists(player) then return false end
local hudtable = hb.get_hudtable(identifier)
hb.hudtables[identifier].add_all(player, hudtable, start_value, start_max, start_hidden)
return true
end
function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon, new_bgicon, new_bar, new_label, new_text_color)
if new_value == nil and new_max_value == nil and new_icon == nil and new_bgicon == nil and new_bar == nil and new_label == nil and new_text_color == nil then
return
return true
end
if not player_exists(player) then
return false
end
local name = player:get_player_name()
local hudtable = hb.get_hudtable(identifier)
local value_changed, max_changed = false, false
if new_value ~= nil then
if new_value ~= hudtable.hudstate[name].value then
hudtable.hudstate[name].value = new_value
value_changed = true
end
else
new_value = hudtable.hudstate[name].value
end
if new_max_value ~= nil then
if new_max_value ~= hudtable.hudstate[name].max then
hudtable.hudstate[name].max = new_max_value
max_changed = true
end
else
new_max_value = (hudtable.hudstate[name] or {max = 0}).max
end
if new_value ~= nil and hudtable.hudstate[name] then
if new_value ~= hudtable.hudstate[name].value then
if new_value > new_max_value then
new_value = new_max_value
end
hudtable.hudstate[name].value = new_value
value_changed = true
end
else
new_value = (hudtable.hudstate[name] or {value = 0}).value
new_max_value = hudtable.hudstate[name].max
end
if hb.settings.bar_type == "progress_bar" then
@ -328,7 +354,7 @@ 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
@ -371,7 +397,7 @@ 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
@ -385,11 +411,14 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon
end
end
end
return true
end
function hb.hide_hudbar(player, identifier)
if not player_exists(player) then return false end
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
@ -400,16 +429,20 @@ function hb.hide_hudbar(player, identifier)
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)
if hudtable.hudids[name].bar ~= nil then
player:hud_change(hudtable.hudids[name].bar, "number", 0)
end
hudtable.hudstate[name].hidden = true
end
return true
end
function hb.unhide_hudbar(player, identifier)
if not player_exists(player) then return false end
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 name = player:get_player_name()
local value = hudtable.hudstate[name].value
local max = hudtable.hudstate[name].max
if hb.settings.bar_type == "progress_bar" then
@ -423,12 +456,16 @@ function hb.unhide_hudbar(player, identifier)
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))
if hudtable.hudids[name].bar ~= nil then
player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(value, max))
end
hudtable.hudstate[name].hidden = false
end
return true
end
function hb.get_hudbar_state(player, identifier)
if not player_exists(player) then return nil end
local ref = hb.get_hudtable(identifier).hudstate[player:get_player_name()]
-- Do not forget to update this chunk of code in case the state changes
local copy = {
@ -443,17 +480,59 @@ end
--register built-in HUD bars
if minetest.setting_getbool("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
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.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then
@ -471,47 +550,64 @@ local function custom_hud(player)
end
end
local function update_health(player)
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.setting_getbool("enable_damage") then
if hb.settings.forceload_default_hudbars then
hb.unhide_hudbar(player, "health")
end
--air
local breath = player:get_breath()
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, 10))
end
--health
hb.change_hudbar(player, "health", player:get_hp())
update_health(player)
elseif hb.settings.forceload_default_hudbars then
hb.hide_hudbar(player, "health")
hb.hide_hudbar(player, "breath")
end
end
local function hb_step()
if minetest.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then
for _,player in ipairs(minetest.get_connected_players()) do
-- only proceed if damage is enabled
-- update all hud elements
update_hud(player)
end
end
minetest.after(hb.settings.tick, hb_step)
end
minetest.register_on_player_hpchange(update_health)
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
if not name or name == "" then return end
hide_builtin(player)
custom_hud(player)
minetest.register_on_respawnplayer(function(player)
update_health(player)
hb.hide_hudbar(player, "breath")
end)
minetest.after(0, hb_step)
minetest.register_on_joinplayer(function(player)
custom_hud(player)
hb.players[player:get_player_name()] = player
end)
minetest.register_on_leaveplayer(function(player)
hb.players[player:get_player_name()] = nil
end)
local main_timer = 0
local timer = 0
minetest.register_globalstep(function(dtime)
main_timer = main_timer + dtime
timer = timer + 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.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)
end
end
end
if timer > 4 then timer = 0 end
end)

5
locale/pt.txt Normal file
View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

@ -77,17 +77,38 @@ hudbars_pos_right_y (Right HUD bar screen y position) float 1.0 0.0 1.0
# Precise x offset in pixels from the basic screen x position of the HUD bars.
# For the zig-zag alignment pattern, this is for the left HUD bars.
# This setting is used for the progress bar HUD bar style.
hudbars_start_offset_left_x (Left HUD bar x offset) int -175
# Precise y offset in pixels from the basic screen y position of the HUD bars.
# For the zig-zag alignment pattern, this is for the left HUD bars.
# This setting is used for the progress bar HUD bar style.
hudbars_start_offset_left_y (Left HUD bar y offset) int -86
# Precise x offset in pixels from the basic screen x position of the right HUD bars.
# Only used for the zig-zag alignment pattern.
# This setting is used for the progress bar HUD bar style.
hudbars_start_offset_right_x (Right HUD bar x offset) int 15
# Precise y offset in pixels from the basic screen y position of the right HUD bars.
# Only used for the zig-zag alignment pattern.
# This setting is used for the progress bar HUD bar style.
hudbars_start_offset_right_y (Right HUD bar y offset) int -86
# Precise x offset in pixels from the basic screen x 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_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 -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.
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 -88
# The vertical distance between two HUD bars, in pixels.
hudbars_vmargin (Vertical distance between HUD bars) int 24 0

BIN
textures/hudbars_bar_background.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 B

After

Width:  |  Height:  |  Size: 140 B

0
textures/hudbars_bar_breath.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 80 B

After

Width:  |  Height:  |  Size: 80 B

0
textures/hudbars_bar_health.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 80 B

After

Width:  |  Height:  |  Size: 80 B

BIN
textures/hudbars_bgicon_health.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 B

After

Width:  |  Height:  |  Size: 302 B

BIN
textures/hudbars_icon_breath.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 544 B

After

Width:  |  Height:  |  Size: 818 B

0
textures/hudbars_icon_health.png Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 321 B

After

Width:  |  Height:  |  Size: 321 B