mcl_multi_map/multi_map_core/hud.lua

91 lines
2.2 KiB
Lua

local saved_huds = {}
multi_map.hud = {}
multi_map.hud.enabled = true
multi_map.hud.update_time = 0.25
multi_map.hud.alignment = { x = -1, y = -1 }
multi_map.hud.position = {x = 0.98, y = 0.98}
multi_map.hud.color = 0xFFFFFF
multi_map.hud.display_coordinates = true
multi_map.hud.display_layer = true
multi_map.hud.display_layer_name = true
multi_map.hud.layer_label = "Zone"
minetest.register_on_joinplayer(function(player)
if multi_map.hud.enabled then
multi_map.update_hud(player)
end
end)
minetest.register_on_leaveplayer(function(player)
if multi_map.hud.enabled and saved_huds[player:get_player_name()] then
saved_huds[player:get_player_name()] = nil
end
end)
function multi_map.update_hud(player)
if not multi_map.hud.enabled then
return
end
local player_name = player:get_player_name()
local layer = multi_map.get_layer(player:get_pos().y + 0.5)
local offset_y = multi_map.get_offset_y(player:get_pos().y, layer) + 0.5
local hud_text = ""
if layer and (multi_map.hud.display_layer or multi_map.hud.display_layer_name) then
hud_text = hud_text..multi_map.hud.layer_label
if multi_map.hud.display_layer then
hud_text = hud_text.." "..layer
end
local layer_name = multi_map.get_layer_name(layer)
if multi_map.hud.display_layer_name and layer_name then
hud_text = hud_text..": "..layer_name
end
hud_text = hud_text.."; "
end
if multi_map.hud.display_coordinates then
hud_text = hud_text..string.format("%i, %i, %i", math.floor(player:get_pos().x),
math.floor(offset_y), math.floor(player:get_pos().z))
end
local ids = saved_huds[player_name]
if ids then
player:hud_change(ids["multi_map_hud"], "text", hud_text)
else
ids = {}
saved_huds[player_name] = ids
ids["multi_map_hud"] = player:hud_add({
hud_elem_type = "text",
text = hud_text,
position = multi_map.hud.position,
alignment = multi_map.hud.alignment,
number = multi_map.hud.color,
})
end
end
local timer = 0
minetest.register_globalstep(function(dtime)
if multi_map.hud.enabled then
timer = timer + dtime;
if timer >= multi_map.hud.update_time then
for _,player in ipairs(minetest.get_connected_players()) do
multi_map.update_hud(player)
end
timer = 0
end
end
end)