diff options
author | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-03-01 09:19:38 +0100 |
---|---|---|
committer | Elias Fleckenstein <eliasfleckenstein@web.de> | 2021-03-01 09:19:38 +0100 |
commit | 8e2a7c9f0e68752368260ceaa91e99ac84359ca3 (patch) | |
tree | fbc91d745a5f14a6f048e9fd60666fea3b747b20 /init.lua | |
parent | 04c955993ffe83ebe0d357f0d18cc8bfcbf7ec0e (diff) | |
download | playerlist-8e2a7c9f0e68752368260ceaa91e99ac84359ca3.tar.xz |
Redesign UI and add some kind of API
Diffstat (limited to 'init.lua')
-rw-r--r-- | init.lua | 63 |
1 files changed, 40 insertions, 23 deletions
@@ -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) |