forked from Mirrorlandia_minetest/minetest
Fix precision not working in hud_change (#10186)
This commit is contained in:
parent
cd0e213a36
commit
1c38027c3a
@ -112,6 +112,62 @@ minetest.register_chatcommand("detach", {
|
|||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Use this to test waypoint capabilities
|
||||||
|
minetest.register_chatcommand("test_waypoints", {
|
||||||
|
params = "[change_immediate]",
|
||||||
|
description = "tests waypoint capabilities",
|
||||||
|
func = function(name, params)
|
||||||
|
local player = minetest.get_player_by_name(name)
|
||||||
|
local regular = player:hud_add {
|
||||||
|
hud_elem_type = "waypoint",
|
||||||
|
name = "regular waypoint",
|
||||||
|
text = "m",
|
||||||
|
number = 0xFF0000,
|
||||||
|
world_pos = vector.add(player:get_pos(), {x = 0, y = 1.5, z = 0})
|
||||||
|
}
|
||||||
|
local reduced_precision = player:hud_add {
|
||||||
|
hud_elem_type = "waypoint",
|
||||||
|
name = "better waypoint",
|
||||||
|
text = "m (0.5 steps, precision = 2)",
|
||||||
|
precision = 10,
|
||||||
|
number = 0xFFFF00,
|
||||||
|
world_pos = vector.add(player:get_pos(), {x = 0, y = 1, z = 0})
|
||||||
|
}
|
||||||
|
local function change()
|
||||||
|
if regular then
|
||||||
|
player:hud_change(regular, "world_pos", vector.add(player:get_pos(), {x = 0, y = 3, z = 0}))
|
||||||
|
end
|
||||||
|
if reduced_precision then
|
||||||
|
player:hud_change(reduced_precision, "precision", 2)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if params ~= "" then
|
||||||
|
-- change immediate
|
||||||
|
change()
|
||||||
|
else
|
||||||
|
minetest.after(0.5, change)
|
||||||
|
end
|
||||||
|
regular = regular or "error"
|
||||||
|
reduced_precision = reduced_precision or "error"
|
||||||
|
local hidden_distance = player:hud_add {
|
||||||
|
hud_elem_type = "waypoint",
|
||||||
|
name = "waypoint with hidden distance",
|
||||||
|
text = "this text is hidden as well (precision = 0)",
|
||||||
|
precision = 0,
|
||||||
|
number = 0x0000FF,
|
||||||
|
world_pos = vector.add(player:get_pos(), {x = 0, y = 0.5, z = 0})
|
||||||
|
} or "error"
|
||||||
|
local image_waypoint = player:hud_add {
|
||||||
|
hud_elem_type = "image_waypoint",
|
||||||
|
text = "wieldhand.png",
|
||||||
|
world_pos = player:get_pos(),
|
||||||
|
scale = {x = 10, y = 10},
|
||||||
|
offset = {x = 0, y = -32}
|
||||||
|
} or "error"
|
||||||
|
minetest.chat_send_player(name, "Waypoint IDs: regular: " .. regular .. ", reduced precision: " .. reduced_precision ..
|
||||||
|
", hidden distance: " .. hidden_distance .. ", image waypoint: " .. image_waypoint)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
-- Unlimited node placement
|
-- Unlimited node placement
|
||||||
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
|
minetest.register_on_placenode(function(pos, newnode, placer, oldnode, itemstack)
|
||||||
|
@ -40,6 +40,7 @@ const struct EnumString es_HudElementStat[] =
|
|||||||
{HUD_STAT_TEXT, "text"},
|
{HUD_STAT_TEXT, "text"},
|
||||||
{HUD_STAT_NUMBER, "number"},
|
{HUD_STAT_NUMBER, "number"},
|
||||||
{HUD_STAT_ITEM, "item"},
|
{HUD_STAT_ITEM, "item"},
|
||||||
|
{HUD_STAT_ITEM, "precision"},
|
||||||
{HUD_STAT_DIR, "direction"},
|
{HUD_STAT_DIR, "direction"},
|
||||||
{HUD_STAT_ALIGN, "alignment"},
|
{HUD_STAT_ALIGN, "alignment"},
|
||||||
{HUD_STAT_OFFSET, "offset"},
|
{HUD_STAT_OFFSET, "offset"},
|
||||||
|
@ -1959,9 +1959,10 @@ void push_hud_element(lua_State *L, HudElement *elem)
|
|||||||
HudElementStat read_hud_change(lua_State *L, HudElement *elem, void **value)
|
HudElementStat read_hud_change(lua_State *L, HudElement *elem, void **value)
|
||||||
{
|
{
|
||||||
HudElementStat stat = HUD_STAT_NUMBER;
|
HudElementStat stat = HUD_STAT_NUMBER;
|
||||||
|
std::string statstr;
|
||||||
if (lua_isstring(L, 3)) {
|
if (lua_isstring(L, 3)) {
|
||||||
int statint;
|
int statint;
|
||||||
std::string statstr = lua_tostring(L, 3);
|
statstr = lua_tostring(L, 3);
|
||||||
stat = string_to_enum(es_HudElementStat, statint, statstr) ?
|
stat = string_to_enum(es_HudElementStat, statint, statstr) ?
|
||||||
(HudElementStat)statint : stat;
|
(HudElementStat)statint : stat;
|
||||||
}
|
}
|
||||||
@ -1989,6 +1990,8 @@ HudElementStat read_hud_change(lua_State *L, HudElement *elem, void **value)
|
|||||||
break;
|
break;
|
||||||
case HUD_STAT_ITEM:
|
case HUD_STAT_ITEM:
|
||||||
elem->item = luaL_checknumber(L, 4);
|
elem->item = luaL_checknumber(L, 4);
|
||||||
|
if (elem->type == HUD_ELEM_WAYPOINT && statstr == "precision")
|
||||||
|
elem->item++;
|
||||||
*value = &elem->item;
|
*value = &elem->item;
|
||||||
break;
|
break;
|
||||||
case HUD_STAT_DIR:
|
case HUD_STAT_DIR:
|
||||||
|
Loading…
Reference in New Issue
Block a user