aboutsummaryrefslogtreecommitdiff
path: root/init.lua
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2021-03-01 09:19:38 +0100
committerElias Fleckenstein <eliasfleckenstein@web.de>2021-03-01 09:19:38 +0100
commit8e2a7c9f0e68752368260ceaa91e99ac84359ca3 (patch)
treefbc91d745a5f14a6f048e9fd60666fea3b747b20 /init.lua
parent04c955993ffe83ebe0d357f0d18cc8bfcbf7ec0e (diff)
downloadplayerlist-8e2a7c9f0e68752368260ceaa91e99ac84359ca3.tar.xz
Redesign UI and add some kind of API
Diffstat (limited to 'init.lua')
-rw-r--r--init.lua63
1 files changed, 40 insertions, 23 deletions
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)