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

1 Commits

Author SHA1 Message Date
bb55851b36 Version MFF. 2018-09-07 22:41:38 +02:00
16 changed files with 219 additions and 286 deletions

19
API.md Normal file → Executable file
View File

@ -1,4 +1,4 @@
API documentation for the HUD bars mod 1.6.1 API documentation for the HUD bars mod 1.4.1
============================================ ============================================
## Introduction ## Introduction
@ -95,7 +95,8 @@ 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 * `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 #### Return value
`true` on success, `false` otherwise. Always `nil`.
## Modifying a HUD bar ## Modifying a HUD bar
@ -134,7 +135,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. * `new_text_color`: A 3-octet number defining the new color of the text.
#### Return value #### Return value
`true` on success, `false` otherwise. Always `nil`.
## Hiding and unhiding a HUD bar ## Hiding and unhiding a HUD bar
@ -155,7 +156,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`. * `identifier`: The identifier of the HUD bar type to hide, as specified in `hb.register_hudbar`.
#### Return value #### Return value
`true` on success, `false` otherwise. Always `nil`.
### `hb.unhide_hudbar(player, identifier)` ### `hb.unhide_hudbar(player, identifier)`
@ -166,7 +167,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`. * `identifier`: The identifier of the HUD bar type to unhide, as specified in `hb.register_hudbar`.
#### Return value #### Return value
`true` on success, `false` otherwise. Always `nil`.
## Reading HUD bar information ## Reading HUD bar information
@ -180,14 +181,12 @@ 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`. * `identifier`: The identifier of the HUD bar type to hide, as specified in `hb.register_hudbar`.
#### Return value #### Return value
On success, returns a table which holds information on the current state of the HUD bar. Note A table which holds information on the current state of the HUD bar. Note the table is a deep
the table is a deep copy of the internal HUD bar state, it is *not* a reference; the information copy of the internal HUD bar state, it is *not* a reference; the information hold by the table is
hold by the table is only true for the moment you called this function. The fields of this table are: only true for the moment you called this function. The fields of this table are:
* `value`: Current value of HUD bar. * `value`: Current value of HUD bar.
* `max`: Current maximum value of HUD bar. * `max`: Current maximum value of HUD bar.
* `hidden`: Boolean denoting whether the HUD bar is hidden. * `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. * `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. * `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.

View File

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

109
README.txt Executable file
View File

@ -0,0 +1,109 @@
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 Normal file → Executable file
View File

@ -81,12 +81,3 @@ as of version 2.0.0 of the standard <http://semver.org/>.
1.4.1 1.4.1
----- -----
- Fix bug in hb.change_hudbar being a no-op if new_value and new_max value are nil - 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 Normal file → Executable file
View File

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

10
hudbars.conf Executable file
View File

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

276
init.lua
View File

@ -1,6 +1,7 @@
local S local S
if (minetest.get_modpath("intllib")) then if (minetest.get_modpath("intllib")) then
S = intllib.Getter() dofile(minetest.get_modpath("intllib").."/intllib.lua")
S = intllib.Getter(minetest.get_current_modname())
else else
S = function ( s ) return s end S = function ( s ) return s end
end end
@ -61,26 +62,20 @@ 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_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.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.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"}) hb.settings.start_offset_left.x = hb.load_setting("hudbars_start_offset_left_x", "number", -175)
if hb.settings.bar_type == "progress_bar" then hb.settings.start_offset_left.y = hb.load_setting("hudbars_start_offset_left_y", "number", -86)
hb.settings.start_offset_left.x = hb.load_setting("hudbars_start_offset_left_x", "number", -175) hb.settings.start_offset_right.x = hb.load_setting("hudbars_start_offset_right_x", "number", 15)
hb.settings.start_offset_left.y = hb.load_setting("hudbars_start_offset_left_y", "number", -86) hb.settings.start_offset_right.y = hb.load_setting("hudbars_start_offset_right_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.vmargin = hb.load_setting("hudbars_vmargin", "number", 24)
hb.settings.tick = hb.load_setting("hudbars_tick", "number", 0.1) hb.settings.tick = hb.load_setting("hudbars_tick", "number", 0.4)
-- experimental setting: Changing this setting is not officially supported, do NOT rely on it! -- 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) hb.settings.forceload_default_hudbars = hb.load_setting("hudbars_forceload_default_hudbars", "bool", true)
-- Misc. settings -- Misc. settings
hb.settings.alignment_pattern = hb.load_setting("hudbars_alignment_pattern", "string", "zigzag", {"zigzag", "stack_up", "stack_down"}) 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) hb.settings.autohide_breath = hb.load_setting("hudbars_autohide_breath", "bool", true)
local sorting = minetest.setting_get("hudbars_sorting") local sorting = minetest.setting_get("hudbars_sorting")
@ -96,44 +91,8 @@ else
hb.settings.sorting_reverse = { [0] = "health", [1] = "breath" } hb.settings.sorting_reverse = { [0] = "health", [1] = "breath" }
end 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) -- 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) function hb.value_to_barlength(value, max)
if max == 0 then if max == 0 then
@ -177,9 +136,33 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
local pos, offset local pos, offset
local index = math.floor(hb.get_hudbar_position_index(identifier)) local index = math.floor(hb.get_hudbar_position_index(identifier))
hb.registered_slots[index] = true hb.registered_slots[index] = true
if hb.settings.alignment_pattern == "stack_up" then
pos, offset = barindex_to_pos_and_offset(index) 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
if format_string == nil then if format_string == nil then
format_string = S("%s: %d/%d") format_string = S("%s: %d/%d")
end end
@ -236,32 +219,24 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
number = bgiconnumber, number = bgiconnumber,
alignment = {x=-1,y=-1}, alignment = {x=-1,y=-1},
offset = { x = offset.x, y = offset.y }, offset = { x = offset.x, y = offset.y },
direction = 0,
size = {x=24, y=24},
}) })
end end
end end
local bar_image, bar_size local bar_image
if hb.settings.bar_type == "progress_bar" then if hb.settings.bar_type == "progress_bar" then
bar_image = textures.bar bar_image = textures.bar
bar_size = nil
elseif hb.settings.bar_type == "statbar_classic" or hb.settings.bar_type == "statbar_modern" then elseif hb.settings.bar_type == "statbar_classic" or hb.settings.bar_type == "statbar_modern" then
bar_image = textures.icon bar_image = textures.icon
bar_size = {x=24, y=24}
end end
local bardef = { ids.bar = player:hud_add({
hud_elem_type = "statbar", hud_elem_type = "statbar",
position = pos, position = pos,
text = bar_image, text = bar_image,
number = barnumber, number = barnumber,
alignment = {x=-1,y=-1}, alignment = {x=-1,y=-1},
offset = offset, offset = offset,
direction = 0, size = "",
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 if hb.settings.bar_type == "progress_bar" then
ids.text = player:hud_add({ ids.text = player:hud_add({
hud_elem_type = "text", hud_elem_type = "text",
@ -312,39 +287,38 @@ function hb.register_hudbar(identifier, text_color, label, textures, default_sta
end end
function hb.init_hudbar(player, identifier, start_value, start_max, start_hidden) 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) local hudtable = hb.get_hudtable(identifier)
hb.hudtables[identifier].add_all(player, hudtable, start_value, start_max, start_hidden) hb.hudtables[identifier].add_all(player, hudtable, start_value, start_max, start_hidden)
return true
end end
function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon, new_bgicon, new_bar, new_label, new_text_color) 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 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 true return
end
if not player_exists(player) then
return false
end end
local name = player:get_player_name() local name = player:get_player_name()
local hudtable = hb.get_hudtable(identifier) local hudtable = hb.get_hudtable(identifier)
local value_changed, max_changed = false, false 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 ~= nil then
if new_max_value ~= hudtable.hudstate[name].max then if new_max_value ~= hudtable.hudstate[name].max then
hudtable.hudstate[name].max = new_max_value hudtable.hudstate[name].max = new_max_value
max_changed = true max_changed = true
end end
else else
new_max_value = hudtable.hudstate[name].max 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
end end
if hb.settings.bar_type == "progress_bar" then if hb.settings.bar_type == "progress_bar" then
@ -354,7 +328,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 if new_bgicon ~= nil and hudtable.hudids[name].bgicon ~= nil then
player:hud_change(hudtable.hudids[name].bgicon, "text", new_bgicon) player:hud_change(hudtable.hudids[name].bgicon, "text", new_bgicon)
end end
if new_bar ~= nil and hudtable.hudids[name].bar ~= nil then if new_bar ~= nil then
player:hud_change(hudtable.hudids[name].bar , "text", new_bar) player:hud_change(hudtable.hudids[name].bar , "text", new_bar)
end end
if new_label ~= nil then if new_label ~= nil then
@ -397,7 +371,7 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon
if value_changed or max_changed then if value_changed or max_changed then
local new_barlength = hb.value_to_barlength(new_value, new_max_value) local new_barlength = hb.value_to_barlength(new_value, new_max_value)
if new_barlength ~= hudtable.hudstate[name].barlength and hudtable.hudids[name].bar ~= nil then if new_barlength ~= hudtable.hudstate[name].barlength then
player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(new_value, new_max_value)) player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(new_value, new_max_value))
hudtable.hudstate[name].barlength = new_barlength hudtable.hudstate[name].barlength = new_barlength
end end
@ -411,14 +385,11 @@ function hb.change_hudbar(player, identifier, new_value, new_max_value, new_icon
end end
end end
end end
return true
end end
function hb.hide_hudbar(player, identifier) function hb.hide_hudbar(player, identifier)
if not player_exists(player) then return false end
local name = player:get_player_name() local name = player:get_player_name()
local hudtable = hb.get_hudtable(identifier) local hudtable = hb.get_hudtable(identifier)
if hudtable == nil then return false end
if(hudtable.hudstate[name].hidden == false) then if(hudtable.hudstate[name].hidden == false) then
if hb.settings.bar_type == "progress_bar" then if hb.settings.bar_type == "progress_bar" then
if hudtable.hudids[name].icon ~= nil then if hudtable.hudids[name].icon ~= nil then
@ -429,20 +400,16 @@ function hb.hide_hudbar(player, identifier)
elseif hb.settings.bar_type == "statbar_modern" then elseif hb.settings.bar_type == "statbar_modern" then
player:hud_change(hudtable.hudids[name].bg, "number", 0) player:hud_change(hudtable.hudids[name].bg, "number", 0)
end end
if hudtable.hudids[name].bar ~= nil then player:hud_change(hudtable.hudids[name].bar, "number", 0)
player:hud_change(hudtable.hudids[name].bar, "number", 0)
end
hudtable.hudstate[name].hidden = true hudtable.hudstate[name].hidden = true
end end
return true
end end
function hb.unhide_hudbar(player, identifier) function hb.unhide_hudbar(player, identifier)
if not player_exists(player) then return false end
local name = player:get_player_name() local name = player:get_player_name()
local hudtable = hb.get_hudtable(identifier) local hudtable = hb.get_hudtable(identifier)
if hudtable == nil then return false end
if(hudtable.hudstate[name].hidden) then if(hudtable.hudstate[name].hidden) then
local name = player:get_player_name()
local value = hudtable.hudstate[name].value local value = hudtable.hudstate[name].value
local max = hudtable.hudstate[name].max local max = hudtable.hudstate[name].max
if hb.settings.bar_type == "progress_bar" then if hb.settings.bar_type == "progress_bar" then
@ -456,16 +423,12 @@ function hb.unhide_hudbar(player, identifier)
elseif hb.settings.bar_type == "statbar_modern" then elseif hb.settings.bar_type == "statbar_modern" then
player:hud_change(hudtable.hudids[name].bg, "number", hb.settings.statbar_length) player:hud_change(hudtable.hudids[name].bg, "number", hb.settings.statbar_length)
end end
if hudtable.hudids[name].bar ~= nil then player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(value, max))
player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(value, max))
end
hudtable.hudstate[name].hidden = false hudtable.hudstate[name].hidden = false
end end
return true
end end
function hb.get_hudbar_state(player, identifier) 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()] 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 -- Do not forget to update this chunk of code in case the state changes
local copy = { local copy = {
@ -480,60 +443,18 @@ end
--register built-in HUD bars --register built-in HUD bars
if minetest.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then if minetest.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" } 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)
local breathtextures = { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png", bgicon = "hudbars_bgicon_breath.png" } hb.register_hudbar("breath", 0xFFFFFF, S("Breath"), { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png", bgicon = "hudbars_bgicon_breath.png" }, 10, 10, true)
hb.register_hudbar("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 end
local function hide_builtin(player)
local flags = player:hud_get_flags()
flags.healthbar = false
flags.breathbar = false
player:hud_set_flags(flags)
end
local function custom_hud(player) local function custom_hud(player)
if minetest.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then if minetest.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then
local hide local hide
@ -550,64 +471,47 @@ local function custom_hud(player)
end end
end end
local function update_health(player)
hb.change_hudbar(player, "health", player:get_hp())
end
-- update built-in HUD bars -- update built-in HUD bars
local function update_hud(player) local function update_hud(player)
if not player_exists(player) then return end
if minetest.setting_getbool("enable_damage") then if minetest.setting_getbool("enable_damage") then
if hb.settings.forceload_default_hudbars then if hb.settings.forceload_default_hudbars then
hb.unhide_hudbar(player, "health") hb.unhide_hudbar(player, "health")
end end
--air --air
local breath = player:get_breath() local breath = player:get_breath()
if breath == 11 and hb.settings.autohide_breath == true then if breath == 11 and hb.settings.autohide_breath == true then
hb.hide_hudbar(player, "breath") hb.hide_hudbar(player, "breath")
else else
hb.unhide_hudbar(player, "breath") hb.unhide_hudbar(player, "breath")
hb.change_hudbar(player, "breath", math.min(breath, 10)) hb.change_hudbar(player, "breath", math.min(breath, 10))
end end
--health --health
update_health(player) hb.change_hudbar(player, "health", player:get_hp())
elseif hb.settings.forceload_default_hudbars then elseif hb.settings.forceload_default_hudbars then
hb.hide_hudbar(player, "health") hb.hide_hudbar(player, "health")
hb.hide_hudbar(player, "breath") hb.hide_hudbar(player, "breath")
end end
end end
minetest.register_on_player_hpchange(update_health) local function hb_step()
if minetest.setting_getbool("enable_damage") or hb.settings.forceload_default_hudbars then
minetest.register_on_respawnplayer(function(player) for _,player in ipairs(minetest.get_connected_players()) do
update_health(player) -- only proceed if damage is enabled
hb.hide_hudbar(player, "breath") -- update all hud elements
end) update_hud(player)
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
end end
if timer > 4 then timer = 0 end minetest.after(hb.settings.tick, hb_step)
end
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)
end) end)
minetest.after(0, hb_step)

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -77,38 +77,17 @@ 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. # 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. # 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 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. # 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. # 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 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. # Precise x offset in pixels from the basic screen x position of the right HUD bars.
# Only used for the zig-zag alignment pattern. # 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 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. # Precise y offset in pixels from the basic screen y position of the right HUD bars.
# Only used for the zig-zag alignment pattern. # 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 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. # The vertical distance between two HUD bars, in pixels.
hudbars_vmargin (Vertical distance between HUD bars) int 24 0 hudbars_vmargin (Vertical distance between HUD bars) int 24 0

BIN
textures/hudbars_bar_background.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 B

After

Width:  |  Height:  |  Size: 113 B

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

Before

Width:  |  Height:  |  Size: 80 B

After

Width:  |  Height:  |  Size: 80 B

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

Before

Width:  |  Height:  |  Size: 80 B

After

Width:  |  Height:  |  Size: 80 B

BIN
textures/hudbars_bgicon_health.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 B

After

Width:  |  Height:  |  Size: 247 B

BIN
textures/hudbars_icon_breath.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 818 B

After

Width:  |  Height:  |  Size: 544 B

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

Before

Width:  |  Height:  |  Size: 321 B

After

Width:  |  Height:  |  Size: 321 B