mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 01:53:45 +01:00
Add function to get all HUD elements (#14042)
This commit is contained in:
parent
ed7d4037b2
commit
92c55c27cf
@ -779,6 +779,10 @@ Methods:
|
|||||||
* See [`HUD definition`](#hud-definition-hud_add-hud_get)
|
* See [`HUD definition`](#hud-definition-hud_add-hud_get)
|
||||||
* `hud_get(id)`
|
* `hud_get(id)`
|
||||||
* returns the [`definition`](#hud-definition-hud_add-hud_get) of the HUD with that ID number or `nil`, if non-existent.
|
* returns the [`definition`](#hud-definition-hud_add-hud_get) of the HUD with that ID number or `nil`, if non-existent.
|
||||||
|
* `hud_get_all()`:
|
||||||
|
* Returns a table in the form `{ [id] = HUD definition, [id] = ... }`.
|
||||||
|
* A mod should keep track of its introduced IDs and only use this to access foreign elements.
|
||||||
|
* It is discouraged to change foreign HUD elements.
|
||||||
* `hud_remove(id)`
|
* `hud_remove(id)`
|
||||||
* remove the HUD element of the specified id, returns `true` on success
|
* remove the HUD element of the specified id, returns `true` on success
|
||||||
* `hud_change(id, stat, value)`
|
* `hud_change(id, stat, value)`
|
||||||
|
@ -7803,6 +7803,10 @@ child will follow movement and rotation of that bone.
|
|||||||
* `stat` supports the same keys as in the hud definition table except for
|
* `stat` supports the same keys as in the hud definition table except for
|
||||||
`"type"` (or the deprecated `"hud_elem_type"`).
|
`"type"` (or the deprecated `"hud_elem_type"`).
|
||||||
* `hud_get(id)`: gets the HUD element definition structure of the specified ID
|
* `hud_get(id)`: gets the HUD element definition structure of the specified ID
|
||||||
|
* `hud_get_all()`:
|
||||||
|
* Returns a table in the form `{ [id] = HUD definition, [id] = ... }`.
|
||||||
|
* A mod should keep track of its introduced IDs and only use this to access foreign elements.
|
||||||
|
* It is discouraged to change foreign HUD elements.
|
||||||
* `hud_set_flags(flags)`: sets specified HUD flags of player.
|
* `hud_set_flags(flags)`: sets specified HUD flags of player.
|
||||||
* `flags`: A table with the following fields set to boolean values
|
* `flags`: A table with the following fields set to boolean values
|
||||||
* `hotbar`
|
* `hotbar`
|
||||||
|
@ -210,3 +210,23 @@ minetest.register_on_leaveplayer(function(player)
|
|||||||
player_font_huds[player:get_player_name()] = nil
|
player_font_huds[player:get_player_name()] = nil
|
||||||
player_waypoints[player:get_player_name()] = nil
|
player_waypoints[player:get_player_name()] = nil
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
minetest.register_chatcommand("hudprint", {
|
||||||
|
description = "Writes all used Lua HUD elements into chat.",
|
||||||
|
func = function(name, params)
|
||||||
|
local player = minetest.get_player_by_name(name)
|
||||||
|
if not player then
|
||||||
|
return false, "No player."
|
||||||
|
end
|
||||||
|
|
||||||
|
local s = "HUD elements:"
|
||||||
|
for k, elem in pairs(player:hud_get_all()) do
|
||||||
|
local ename = dump(elem.name)
|
||||||
|
local etype = dump(elem.type)
|
||||||
|
local epos = "{x="..elem.position.x..", y="..elem.position.y.."}"
|
||||||
|
s = s.."\n["..k.."] type = "..etype.." | name = "..ename.." | pos = ".. epos
|
||||||
|
end
|
||||||
|
|
||||||
|
return true, s
|
||||||
|
end
|
||||||
|
})
|
||||||
|
@ -139,6 +139,12 @@ HudElement* Player::getHud(u32 id)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Player::hudApply(std::function<void(const std::vector<HudElement*>&)> f)
|
||||||
|
{
|
||||||
|
MutexAutoLock lock(m_mutex);
|
||||||
|
f(hud);
|
||||||
|
}
|
||||||
|
|
||||||
HudElement* Player::removeHud(u32 id)
|
HudElement* Player::removeHud(u32 id)
|
||||||
{
|
{
|
||||||
MutexAutoLock lock(m_mutex);
|
MutexAutoLock lock(m_mutex);
|
||||||
|
@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
#include "util/basic_macros.h"
|
#include "util/basic_macros.h"
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
#define PLAYERNAME_SIZE 20
|
#define PLAYERNAME_SIZE 20
|
||||||
|
|
||||||
@ -225,6 +226,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
HudElement* getHud(u32 id);
|
HudElement* getHud(u32 id);
|
||||||
|
void hudApply(std::function<void(const std::vector<HudElement*>&)> f);
|
||||||
u32 addHud(HudElement* hud);
|
u32 addHud(HudElement* hud);
|
||||||
HudElement* removeHud(u32 id);
|
HudElement* removeHud(u32 id);
|
||||||
void clearHud();
|
void clearHud();
|
||||||
|
@ -422,6 +422,26 @@ int LuaLocalPlayer::l_hud_get(lua_State *L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// hud_get_all(self)
|
||||||
|
int LuaLocalPlayer::l_hud_get_all(lua_State *L)
|
||||||
|
{
|
||||||
|
LocalPlayer *player = getobject(L, 1);
|
||||||
|
if (player == nullptr)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
player->hudApply([&](const std::vector<HudElement*>& hud) {
|
||||||
|
for (std::size_t id = 0; id < hud.size(); ++id) {
|
||||||
|
HudElement *elem = hud[id];
|
||||||
|
if (elem != nullptr) {
|
||||||
|
push_hud_element(L, elem);
|
||||||
|
lua_rawseti(L, -2, id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
LocalPlayer *LuaLocalPlayer::getobject(LuaLocalPlayer *ref)
|
LocalPlayer *LuaLocalPlayer::getobject(LuaLocalPlayer *ref)
|
||||||
{
|
{
|
||||||
return ref->m_localplayer;
|
return ref->m_localplayer;
|
||||||
@ -483,6 +503,7 @@ const luaL_Reg LuaLocalPlayer::methods[] = {
|
|||||||
luamethod(LuaLocalPlayer, hud_remove),
|
luamethod(LuaLocalPlayer, hud_remove),
|
||||||
luamethod(LuaLocalPlayer, hud_change),
|
luamethod(LuaLocalPlayer, hud_change),
|
||||||
luamethod(LuaLocalPlayer, hud_get),
|
luamethod(LuaLocalPlayer, hud_get),
|
||||||
|
luamethod(LuaLocalPlayer, hud_get_all),
|
||||||
|
|
||||||
luamethod(LuaLocalPlayer, get_move_resistance),
|
luamethod(LuaLocalPlayer, get_move_resistance),
|
||||||
|
|
||||||
|
@ -93,6 +93,8 @@ private:
|
|||||||
static int l_hud_change(lua_State *L);
|
static int l_hud_change(lua_State *L);
|
||||||
// hud_get(self, id)
|
// hud_get(self, id)
|
||||||
static int l_hud_get(lua_State *L);
|
static int l_hud_get(lua_State *L);
|
||||||
|
// hud_get_all(self)
|
||||||
|
static int l_hud_get_all(lua_State *L);
|
||||||
|
|
||||||
static int l_get_move_resistance(lua_State *L);
|
static int l_get_move_resistance(lua_State *L);
|
||||||
|
|
||||||
|
@ -1743,6 +1743,28 @@ int ObjectRef::l_hud_get(lua_State *L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// hud_get_all(self)
|
||||||
|
int ObjectRef::l_hud_get_all(lua_State *L)
|
||||||
|
{
|
||||||
|
NO_MAP_LOCK_REQUIRED;
|
||||||
|
ObjectRef *ref = checkObject<ObjectRef>(L, 1);
|
||||||
|
RemotePlayer *player = getplayer(ref);
|
||||||
|
if (player == nullptr)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
lua_newtable(L);
|
||||||
|
player->hudApply([&](const std::vector<HudElement*>& hud) {
|
||||||
|
for (std::size_t id = 0; id < hud.size(); ++id) {
|
||||||
|
HudElement *elem = hud[id];
|
||||||
|
if (elem != nullptr) {
|
||||||
|
push_hud_element(L, elem);
|
||||||
|
lua_rawseti(L, -2, id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
// hud_set_flags(self, flags)
|
// hud_set_flags(self, flags)
|
||||||
int ObjectRef::l_hud_set_flags(lua_State *L)
|
int ObjectRef::l_hud_set_flags(lua_State *L)
|
||||||
{
|
{
|
||||||
@ -2691,6 +2713,7 @@ luaL_Reg ObjectRef::methods[] = {
|
|||||||
luamethod(ObjectRef, hud_remove),
|
luamethod(ObjectRef, hud_remove),
|
||||||
luamethod(ObjectRef, hud_change),
|
luamethod(ObjectRef, hud_change),
|
||||||
luamethod(ObjectRef, hud_get),
|
luamethod(ObjectRef, hud_get),
|
||||||
|
luamethod(ObjectRef, hud_get_all),
|
||||||
luamethod(ObjectRef, hud_set_flags),
|
luamethod(ObjectRef, hud_set_flags),
|
||||||
luamethod(ObjectRef, hud_get_flags),
|
luamethod(ObjectRef, hud_get_flags),
|
||||||
luamethod(ObjectRef, hud_set_hotbar_itemcount),
|
luamethod(ObjectRef, hud_set_hotbar_itemcount),
|
||||||
|
@ -300,6 +300,9 @@ private:
|
|||||||
// hud_get(self, id)
|
// hud_get(self, id)
|
||||||
static int l_hud_get(lua_State *L);
|
static int l_hud_get(lua_State *L);
|
||||||
|
|
||||||
|
// hud_get_all(self)
|
||||||
|
static int l_hud_get_all(lua_State *L);
|
||||||
|
|
||||||
// hud_set_flags(self, flags)
|
// hud_set_flags(self, flags)
|
||||||
static int l_hud_set_flags(lua_State *L);
|
static int l_hud_set_flags(lua_State *L);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user