diff --git a/init.lua b/init.lua index 8f27de8..bab47da 100644 --- a/init.lua +++ b/init.lua @@ -1,40 +1,57 @@ -local playerlist = {} +local playerlist = { + huds = {} +} -controls.register_on_press(function(player, key) +function playerlist.iterator() + return ipairs(minetest.get_connected_players()) +end + +function playerlist.count() + return #minetest.get_connected_players() +end + +controls.register_on_press(function(user, key) if key == "sneak" then - local name = player:get_player_name() - local list = {} - local players = minetest.get_connected_players() - for i, p in pairs(players) do - local n = p:get_player_name() - local ping = math.max(1, math.ceil(4 - minetest.get_player_information(n).avg_rtt * 4)) - list[#list + 1] = player:hud_add({ + local user_name = user:get_player_name() + local huds = {user:hud_add({ + hud_elem_type = "image", + position = {x = 0.5, y = 0}, + offset = {x = 0, y = 20}, + text = "playerlist_background.png", + alignment = {x = 0, y = 1}, + scale = {x = 400, y = playerlist.count() * 18 + 8}, + number = 0xFFFFFF, + })} + for i, player, color, text in playerlist.iterator() do + local name = player:get_player_name() + local ping = math.max(1, math.ceil(4 - minetest.get_player_information(name).avg_rtt * 50)) + table.insert(huds, user:hud_add({ hud_elem_type = "text", position = {x = 0.5, y = 0}, - offset = {x = 20, y = 53 + (i - 1) * 18}, - text = n, - alignment = {x = 1, y = 1}, + offset = {x = 0, y = 23 + (i - 1) * 18}, + text = text or name, + alignment = {x = 0, y = 1}, scale = {x = 100, y = 100}, - number = 0xFFFFFF, - }) - list[#list + 1] = player:hud_add({ + number = color or 0xFFFFFF, + })) + table.insert(huds, user:hud_add({ hud_elem_type = "image", position = {x = 0.5, y = 0}, - offset = {x = 0, y = 50 + (i - 1) * 18}, + offset = {x = -195, y = 20 + (i - 1) * 18}, text = "server_ping_" .. ping .. ".png", - alignment = {x = -1, y = 1}, + alignment = {x = 1, y = 1}, scale = {x = 1.5, y = 1.5}, number = 0xFFFFFF, - }) + })) end - playerlist[name] = list + playerlist.huds[user_name] = huds end end) -controls.register_on_release(function(player, key) - if key == "sneak" and player then - for _, id in pairs(playerlist[player:get_player_name()]) do - player:hud_remove(id) +controls.register_on_release(function(user, key) + if key == "sneak" and user then + for _, id in pairs(playerlist.huds[user:get_player_name()]) do + user:hud_remove(id) end end end) diff --git a/textures/playerlist_background.png b/textures/playerlist_background.png new file mode 100644 index 0000000..18e9c3d Binary files /dev/null and b/textures/playerlist_background.png differ