mirror of
https://github.com/sys4-fr/server-nalc.git
synced 2025-06-28 06:11:47 +02:00
Added all hudbars by @Wuzzy2
- Removed hud (incompatible) - Copied all hunger.lua's values in new hunger.lua (hbhunger) - Added hbhunger, hbarmor - Updated sprint mod
This commit is contained in:
173
mods/hudbars/API.md
Executable file
173
mods/hudbars/API.md
Executable file
@ -0,0 +1,173 @@
|
||||
API documentation for the HUD bars mod 1.0.2
|
||||
============================================
|
||||
|
||||
## Introduction
|
||||
This API allows you to add, change, hide and unhide custom HUD bars for this mod.
|
||||
|
||||
## Overview
|
||||
To give you a *very* brief overview over this API, here is the basic workflow on how to add your own custom HUD bar:
|
||||
|
||||
* Create images for your HUD bar
|
||||
* Call `hb.register_hudbar` to make the definition of the HUD bar known to this mod
|
||||
* Call `hb.init_hudbar` for each player for which you want to use previously defined HUD bar
|
||||
* Use `hb.change_hudbar` whenever you need to change the values of a HUD bar of a certain player
|
||||
* If you need it: Use `hb.hide_hudbar` and `hb.unhide_hudbar` to hide or unhide HUD bars of a certain player
|
||||
|
||||
## The basic rules
|
||||
In order to use this API, you should be aware of a few basic rules in order to understand it:
|
||||
|
||||
* A HUD bar is an approximate graphical representation of the ratio of a current value and a maximum value, i.e. current health of 15 and maximum health of 20. A full HUD bar represents 100%, an empty HUD bar represents 0%.
|
||||
* The current value must always be equal to or smaller then the maximum
|
||||
* Both current value and maximum must not be smaller than 0
|
||||
* Both current value and maximum must be real numbers. So no NaN, infinity, etc.
|
||||
* The HUD bar will be hidden if the maximum equals 0. This is intentional.
|
||||
* The health and breath HUD bars are hardcoded.
|
||||
|
||||
These are soft rules, the HUD bars mod will not enforce all of these.
|
||||
But this mod has been programmed under the assumption that these rules are followed, for integrity.
|
||||
|
||||
## Adding a HUD bar
|
||||
To make a new HUD bar known to this mod, you need …
|
||||
|
||||
* … an image of size 2×16 for the bar
|
||||
* … an icon of size 16×16 (optional)
|
||||
* … to register it with `hb.register_hudbar`
|
||||
|
||||
### Bar image
|
||||
The image for the bar will be repeated horizontally to denote the “value” of the HUD bar.
|
||||
It **must** be of size 2×16.
|
||||
If neccessary, the image will be split vertically in half, and only the left half of the image
|
||||
is displayed. So the final HUD bar will always be displayed on a per-pixel basis.
|
||||
|
||||
The default bar images are single-colored, but you can use other styles as well, for instance,
|
||||
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)`
|
||||
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.
|
||||
|
||||
The HUD bars will be displayed in a “first come, first serve” order. This mod does not allow fow a custom order or a way to set it
|
||||
manually in a reliable way.
|
||||
|
||||
|
||||
#### Parameters
|
||||
* `identifier`: A globally unique internal name for the HUD bar, will be used later to refer to it. Please only rely on alphanumeric characters for now. The identifiers “`health`” and “`breath`” are used internally for the built-in health and breath bar, respectively. Please do not use these names.
|
||||
* `text_color`: A 3-octet number defining the color of the text. The octets denote, in this order red, green and blue and range from `0x00` (complete lack of this component) to `0xFF` (full intensity of this component). Example: `0xFFFFFF` for white.
|
||||
* `label`: A string which is displayed on the HUD bar itself to describe the HUD bar. Try to keep this string short.
|
||||
* `textures`: A table with the following fields:
|
||||
* `bar`: The file name of the bar image (as string).
|
||||
* `icon`: The file name of the icon, as string. This field can be `nil`, in which case no icon will be used.
|
||||
* `default_start_value`: If this HUD bar is added to a player, and no initial value is specified, this value will be used as initial current value
|
||||
* `default_max_value`: If this HUD bar is added to a player, and no initial maximum value is specified, this value will be used as initial maximum value
|
||||
* `default_start_hidden`: The HUD bar will be initially start hidden by default when added to a player. Use `hb.unhide_hudbar` to unhide it.
|
||||
* `format_string`: This is optional; You can specify an alternative format string display the final text on the HUD bar. The default format string is “`%s: %d/%d`” (in this order: Label, current value, maximum value). See also the Lua documentation of `string.format`.
|
||||
|
||||
#### Return value
|
||||
Always `nil`.
|
||||
|
||||
|
||||
## Displaying a HUD bar
|
||||
After a HUD bar has been registered, they are not yet displayed yet for any player. HUD bars must be
|
||||
explicitly initialized on a per-player basis.
|
||||
|
||||
You probably want to do this in the `minetest.register_on_joinplayer`.
|
||||
|
||||
### `hb.init_hudbar(player, identifier, start_value, start_max, start_hidden)`
|
||||
This function initialzes and activates a previously registered HUD bar and assigns it to a
|
||||
certain client/player. This has only to be done once per player and after that, you can change
|
||||
the values using `hb.change_hudbar`.
|
||||
|
||||
However, if `start_hidden` was set to `true` for the HUD bar (in `hb.register_hudbar`), the HUD bar
|
||||
will initially be hidden, but the HUD elements are still sent to the client. Otherwise,
|
||||
the HUD bar will be initially be shown to the player.
|
||||
|
||||
#### Parameters
|
||||
* `player`: `ObjectRef` of the player to which the new HUD bar should be displayed to.
|
||||
* `identifier`: The identifier of the HUD bar type, as specified in `hb.register_hudbar`.
|
||||
* `start_value`: The initial current value of the HUD bar. This is optional, `default_start_value` of the registration function will be used, if this is `nil`.
|
||||
* `start_max`: The initial maximum value of the HUD bar. This is optional, `default_start_max` of the registration function will be used, if this is `nil`
|
||||
* `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`.
|
||||
|
||||
|
||||
|
||||
## Modifying a HUD bar
|
||||
After a HUD bar has been added, you can change the current and maximum value on a per-player basis.
|
||||
You use the function `hb.change_hudbar` for this.
|
||||
|
||||
### `hb.change_hudbar(player, identifier, new_value, new_max_value)`
|
||||
Changes the values of an initialized HUD bar for a certain player. `new_value` and `new_max_value`
|
||||
can be `nil`; if one of them is `nil`, that means the value is unchanged. If both values
|
||||
are `nil`, this function is a no-op.
|
||||
This function also tries minimize the amount of calls to `hud_change` of the Minetest Lua API, and
|
||||
therefore, network traffic. `hud_change` is only called if it is actually needed, i.e. when the
|
||||
actual length of the bar or the displayed string changed, so you do not have to worry about it.
|
||||
|
||||
#### Parameters
|
||||
* `player`: `ObjectRef` of the player to which the HUD bar belongs to
|
||||
* `identifier`: The identifier of the HUD bar type to change, as specified in `hb.register_hudbar`.
|
||||
* `new_value`: The new current value of the HUD bar
|
||||
* `new_max_value`: The new maximum value of the HUD bar
|
||||
|
||||
#### Return value
|
||||
Always `nil`.
|
||||
|
||||
|
||||
## Hiding and unhiding a HUD bar
|
||||
You can also hide custom HUD bars, meaning they will not be displayed for a certain player. You can still
|
||||
use `hb.change_hudbar` on a hidden HUD bar, the new values will be correctly displayed after the HUD bar
|
||||
has been unhidden. Both functions will only call `hud_change` if there has been an actual change to avoid
|
||||
unneccessary traffic.
|
||||
|
||||
Note that the hidden state of a HUD bar will *not* be saved by this mod on server shutdown, so you may need
|
||||
to write your own routines for this or by setting the correct value for `start_hidden` when calling
|
||||
`hb.init_hudbar`.
|
||||
|
||||
### `hb.hide_hudbar(player, identifier)`
|
||||
Hides the specified HUD bar from the screen of the specified player.
|
||||
|
||||
#### Parameters
|
||||
* `player`: `ObjectRef` of the player to which the HUD bar belongs to
|
||||
* `identifier`: The identifier of the HUD bar type to hide, as specified in `hb.register_hudbar`.
|
||||
|
||||
#### Return value
|
||||
Always `nil`.
|
||||
|
||||
|
||||
### `hb.unhide_hudbar(player, identifier)`
|
||||
Makes a previously hidden HUD bar visible again to a player.
|
||||
|
||||
#### Parameters
|
||||
* `player`: `ObjectRef` of the player to which the HUD bar belongs to
|
||||
* `identifier`: The identifier of the HUD bar type to unhide, as specified in `hb.register_hudbar`.
|
||||
|
||||
#### Return value
|
||||
Always `nil`.
|
||||
|
||||
|
||||
## Reading HUD bar information
|
||||
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.
|
||||
|
||||
#### Parameters
|
||||
* `player`: `ObjectRef` of the player to which the HUD bar belongs to
|
||||
* `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:
|
||||
|
||||
* `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.
|
48
mods/hudbars/README.txt
Executable file
48
mods/hudbars/README.txt
Executable file
@ -0,0 +1,48 @@
|
||||
Minetest mod: HUD bars
|
||||
======================
|
||||
Version: 1.0.2
|
||||
|
||||
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!
|
||||
|
||||
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_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.
|
45
mods/hudbars/changelog.txt
Executable file
45
mods/hudbars/changelog.txt
Executable file
@ -0,0 +1,45 @@
|
||||
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
|
0
mods/hudbars/depends.txt
Executable file
0
mods/hudbars/depends.txt
Executable file
24
mods/hudbars/hudbars.conf.example
Executable file
24
mods/hudbars/hudbars.conf.example
Executable file
@ -0,0 +1,24 @@
|
||||
-- HUD bars example config file
|
||||
-------------------------------
|
||||
-- Currently you can customize the starting position of the first bottom two HUD bars
|
||||
-- and the vertical margin. That's all.
|
||||
-- Remove the two dashes to activate a setting. Lua syntax is used.
|
||||
-- The examples are all equal to the mod defaults
|
||||
-------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
-- Vertical space between two HUD bars
|
||||
-- hb.settings.vmargin = 24
|
||||
|
||||
-- Pos of the first HUD bar the the left (“pos”, as in hud definition of hud_add of Minetest Lua API)
|
||||
-- hb.settings.pos_left = { x=0.5, y=1 }
|
||||
|
||||
-- Pos of the first HUD bar the the right
|
||||
-- hb.settings.pos_right= { x = 0.5, y = 1 }
|
||||
|
||||
-- Offset of the first HUD bar to the left (“offset”, as in HUD definition)
|
||||
-- hb.settings.start_offset_left = { x = -175, y = -70 }
|
||||
|
||||
-- Offset of the first HUD bar to the right
|
||||
-- hb.settings_start_offset_right = { x = 15, y = -70 }
|
||||
|
342
mods/hudbars/init.lua
Executable file
342
mods/hudbars/init.lua
Executable file
@ -0,0 +1,342 @@
|
||||
hb = {}
|
||||
|
||||
hb.hudtables = {}
|
||||
|
||||
-- number of registered HUD bars
|
||||
hb.hudbars_count = 0
|
||||
|
||||
hb.settings = {}
|
||||
|
||||
-- default settings
|
||||
hb.settings.max_bar_length = 160
|
||||
|
||||
-- statbar positions
|
||||
hb.settings.pos_left = { x=0.5, y=1 }
|
||||
hb.settings.pos_right= { x = 0.5, y = 1 }
|
||||
hb.settings.start_offset_left = { x = -175, y = -70 }
|
||||
hb.settings.start_offset_right = { x = 15, y = -70 }
|
||||
|
||||
hb.settings.vmargin = 24
|
||||
hb.settings.tick = 0.1
|
||||
|
||||
-- Table which contains all players with active default HUD bars (only for internal use)
|
||||
hb.players = {}
|
||||
|
||||
function hb.value_to_barlength(value, max)
|
||||
if max == 0 then
|
||||
return 0
|
||||
else
|
||||
return math.ceil((value/max) * hb.settings.max_bar_length)
|
||||
end
|
||||
end
|
||||
|
||||
function hb.get_hudtable(identifier)
|
||||
return hb.hudtables[identifier]
|
||||
end
|
||||
|
||||
function hb.register_hudbar(identifier, text_color, label, textures, default_start_value, default_start_max, default_start_hidden, format_string)
|
||||
local hudtable = {}
|
||||
local pos, offset
|
||||
if hb.hudbars_count % 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 * math.floor(hb.hudbars_count/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 * math.floor((hb.hudbars_count-1)/2)
|
||||
}
|
||||
end
|
||||
if format_string == nil then
|
||||
format_string = "%s: %d/%d"
|
||||
end
|
||||
|
||||
hudtable.add_all = function(player, hudtable, start_value, start_max, start_hidden)
|
||||
if start_value == nil then start_value = hudtable.default_start_value end
|
||||
if start_max == nil then start_max = hudtable.default_start_max end
|
||||
if start_hidden == nil then start_hidden = hudtable.default_start_hidden end
|
||||
local ids = {}
|
||||
local state = {}
|
||||
local name = player:get_player_name()
|
||||
local bgscale, iconscale, text, barnumber
|
||||
if start_max == 0 or start_hidden then
|
||||
bgscale = { x=0, y=0 }
|
||||
else
|
||||
bgscale = { x=1, y=1 }
|
||||
end
|
||||
if start_hidden then
|
||||
iconscale = { x=0, y=0 }
|
||||
barnumber = 0
|
||||
text = ""
|
||||
else
|
||||
iconscale = { x=1, y=1 }
|
||||
barnumber = hb.value_to_barlength(start_value, start_max)
|
||||
text = string.format(format_string, label, start_value, start_max)
|
||||
end
|
||||
ids.bg = player:hud_add({
|
||||
hud_elem_type = "image",
|
||||
position = pos,
|
||||
scale = bgscale,
|
||||
text = "hudbars_bar_background.png",
|
||||
alignment = {x=1,y=1},
|
||||
offset = { x = offset.x - 1, y = offset.y - 1 },
|
||||
})
|
||||
if textures.icon ~= nil then
|
||||
ids.icon = player:hud_add({
|
||||
hud_elem_type = "image",
|
||||
position = pos,
|
||||
scale = iconscale,
|
||||
text = textures.icon,
|
||||
alignment = {x=-1,y=1},
|
||||
offset = { x = offset.x - 3, y = offset.y },
|
||||
})
|
||||
end
|
||||
ids.bar = player:hud_add({
|
||||
hud_elem_type = "statbar",
|
||||
position = pos,
|
||||
text = textures.bar,
|
||||
number = barnumber,
|
||||
alignment = {x=-1,y=-1},
|
||||
offset = offset,
|
||||
})
|
||||
ids.text = player:hud_add({
|
||||
hud_elem_type = "text",
|
||||
position = pos,
|
||||
text = text,
|
||||
alignment = {x=1,y=1},
|
||||
number = text_color,
|
||||
direction = 0,
|
||||
offset = { x = offset.x + 2, y = offset.y },
|
||||
})
|
||||
-- Do not forget to update hb.get_hudbar_state if you add new fields to the state table
|
||||
state.hidden = start_hidden
|
||||
state.value = start_value
|
||||
state.max = start_max
|
||||
state.text = text
|
||||
state.barlength = hb.value_to_barlength(start_value, start_max)
|
||||
|
||||
local main_error_text =
|
||||
"[hudbars] Bad initial values of HUD bar identifier “"..tostring(identifier).."” for player "..name..". "
|
||||
|
||||
if start_max < start_value then
|
||||
minetest.log("error", main_error_text.."start_max ("..start_max..") is smaller than start_value ("..start_value..")!")
|
||||
end
|
||||
if start_max < 0 then
|
||||
minetest.log("error", main_error_text.."start_max ("..start_max..") is smaller than 0!")
|
||||
end
|
||||
if start_value < 0 then
|
||||
minetest.log("error", main_error_text.."start_value ("..start_value..") is smaller than 0!")
|
||||
end
|
||||
|
||||
hb.hudtables[identifier].hudids[name] = ids
|
||||
hb.hudtables[identifier].hudstate[name] = state
|
||||
end
|
||||
|
||||
hudtable.identifier = identifier
|
||||
hudtable.format_string = format_string
|
||||
hudtable.label = label
|
||||
hudtable.hudids = {}
|
||||
hudtable.hudstate = {}
|
||||
hudtable.default_start_hidden = default_start_hidden
|
||||
hudtable.default_start_value = default_start_value
|
||||
hudtable.default_start_max = default_start_max
|
||||
|
||||
hb.hudbars_count= hb.hudbars_count + 1
|
||||
|
||||
hb.hudtables[identifier] = hudtable
|
||||
end
|
||||
|
||||
function hb.init_hudbar(player, identifier, start_value, start_max, start_hidden)
|
||||
local hudtable = hb.get_hudtable(identifier)
|
||||
hb.hudtables[identifier].add_all(player, hudtable, start_value, start_max, start_hidden)
|
||||
end
|
||||
|
||||
function hb.change_hudbar(player, identifier, new_value, new_max_value)
|
||||
if new_value == nil and new_max_value == nil then
|
||||
return
|
||||
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].max
|
||||
end
|
||||
|
||||
local main_error_text =
|
||||
"[hudbars] Bad call to hb.change_hudbar, identifier: “"..tostring(identifier).."”, player name: “"..name.."”. "
|
||||
if new_max_value < new_value then
|
||||
minetest.log("error", main_error_text.."new_max_value ("..new_max_value..") is smaller than new_value ("..new_value..")!")
|
||||
end
|
||||
if new_max_value < 0 then
|
||||
minetest.log("error", main_error_text.."new_max_value ("..new_max_value..") is smaller than 0!")
|
||||
end
|
||||
if new_value < 0 then
|
||||
minetest.log("error", main_error_text.."new_value ("..new_value..") is smaller than 0!")
|
||||
end
|
||||
|
||||
if hudtable.hudstate[name].hidden == false then
|
||||
if max_changed then
|
||||
if hudtable.hudstate[name].max == 0 then
|
||||
player:hud_change(hudtable.hudids[name].bg, "scale", {x=0,y=0})
|
||||
else
|
||||
player:hud_change(hudtable.hudids[name].bg, "scale", {x=1,y=1})
|
||||
end
|
||||
end
|
||||
|
||||
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
|
||||
player:hud_change(hudtable.hudids[name].bar, "number", hb.value_to_barlength(new_value, new_max_value))
|
||||
hudtable.hudstate[name].barlength = new_barlength
|
||||
end
|
||||
|
||||
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
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function hb.hide_hudbar(player, identifier)
|
||||
local name = player:get_player_name()
|
||||
local hudtable = hb.get_hudtable(identifier)
|
||||
if(hudtable.hudstate[name].hidden == false) 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].bar, "number", 0)
|
||||
player:hud_change(hudtable.hudids[name].text, "text", "")
|
||||
hudtable.hudstate[name].hidden = true
|
||||
end
|
||||
end
|
||||
|
||||
function hb.unhide_hudbar(player, identifier)
|
||||
local name = player:get_player_name()
|
||||
local hudtable = hb.get_hudtable(identifier)
|
||||
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 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].bar, "number", hb.value_to_barlength(value, max))
|
||||
player:hud_change(hudtable.hudids[name].text, "text", tostring(string.format(hudtable.format_string, hudtable.label, value, max)))
|
||||
hudtable.hudstate[name].hidden = false
|
||||
end
|
||||
end
|
||||
|
||||
function hb.get_hudbar_state(player, identifier)
|
||||
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 = {
|
||||
hidden = ref.hidden,
|
||||
value = ref.value,
|
||||
max = ref.max,
|
||||
text = ref.text,
|
||||
barlength = ref.barlength,
|
||||
}
|
||||
return copy
|
||||
end
|
||||
|
||||
--register built-in HUD bars
|
||||
if minetest.setting_getbool("enable_damage") then
|
||||
hb.register_hudbar("health", 0xFFFFFF, "Health", { bar = "hudbars_bar_health.png", icon = "hudbars_icon_health.png" }, 20, 20, false)
|
||||
hb.register_hudbar("breath", 0xFFFFFF, "Breath", { bar = "hudbars_bar_breath.png", icon = "hudbars_icon_breath.png" }, 10, 10, true)
|
||||
end
|
||||
|
||||
--load custom settings
|
||||
local set = io.open(minetest.get_modpath("hudbars").."/hudbars.conf", "r")
|
||||
if set then
|
||||
dofile(minetest.get_modpath("hudbars").."/hudbars.conf")
|
||||
set:close()
|
||||
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)
|
||||
if minetest.setting_getbool("enable_damage") then
|
||||
hb.init_hudbar(player, "health", player:get_hp())
|
||||
local breath = player:get_breath()
|
||||
local hide_breath
|
||||
if breath == 11 then hide_breath = true else hide_breath = false end
|
||||
hb.init_hudbar(player, "breath", math.min(breath, 10), nil, hide_breath)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- update built-in HUD bars
|
||||
local function update_hud(player)
|
||||
if minetest.setting_getbool("enable_damage") then
|
||||
--air
|
||||
local breath = player:get_breath()
|
||||
|
||||
if breath == 11 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())
|
||||
end
|
||||
end
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
hide_builtin(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
|
||||
for playername, player in pairs(hb.players) do
|
||||
-- only proceed if damage is enabled
|
||||
if minetest.setting_getbool("enable_damage") then
|
||||
-- update all hud elements
|
||||
update_hud(player)
|
||||
end
|
||||
end
|
||||
end
|
||||
if timer > 4 then timer = 0 end
|
||||
end)
|
BIN
mods/hudbars/textures/hudbars_bar_background.png
Executable file
BIN
mods/hudbars/textures/hudbars_bar_background.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 140 B |
BIN
mods/hudbars/textures/hudbars_bar_breath.png
Executable file
BIN
mods/hudbars/textures/hudbars_bar_breath.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 80 B |
BIN
mods/hudbars/textures/hudbars_bar_health.png
Executable file
BIN
mods/hudbars/textures/hudbars_bar_health.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 80 B |
BIN
mods/hudbars/textures/hudbars_bgicon_health.png
Executable file
BIN
mods/hudbars/textures/hudbars_bgicon_health.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 302 B |
BIN
mods/hudbars/textures/hudbars_icon_breath.png
Executable file
BIN
mods/hudbars/textures/hudbars_icon_breath.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 544 B |
BIN
mods/hudbars/textures/hudbars_icon_health.png
Executable file
BIN
mods/hudbars/textures/hudbars_icon_health.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 321 B |
Reference in New Issue
Block a user