From 8e2a7c9f0e68752368260ceaa91e99ac84359ca3 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Mon, 1 Mar 2021 09:19:38 +0100 Subject: [PATCH] Redesign UI and add some kind of API --- init.lua | 63 ++++++++++++++++++----------- textures/playerlist_background.png | Bin 0 -> 565 bytes 2 files changed, 40 insertions(+), 23 deletions(-) create mode 100644 textures/playerlist_background.png 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 0000000000000000000000000000000000000000..18e9c3d548f25a1ad0eb309cb3e36e6ee698e312 GIT binary patch literal 565 zcmV-50?Pe~P)EX>4Tx04R}tkv&MmP!xqvQzar52Rn#31gTCIL`5963Pq?8YK2xEOkVm2O$fqw6tAnc`2>yV$xj8AiNQw6)g%&Yhc)XAE?m4`7A0X5#Ot(A60Nrq` zbTT1jb1RbgiZDVDF$7UzwmB=yDFoKnJ@r!E#d%h6-=Ec^)CP&_~QAN-!JU6>g6lOhSA^Tl;Ph5>OGXw+Qy``C3GCqVcaxH4M)jXE&>NqViN z#g2g9ZQ$a%rKx+sDZ}{00006VoOIv0RI600RN!9r;`8x010qNS#tmY zE+YT{E+YYWr9XB6000McNliruxFw02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{000e1L_t&t*JJSZ_MQm<13>|M5Stgw00000NkvXXu0mjf D(h=sc literal 0 HcmV?d00001