diff options
Diffstat (limited to 'client/menu/play.gd')
-rw-r--r-- | client/menu/play.gd | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/client/menu/play.gd b/client/menu/play.gd index ee35975e..0bd13669 100644 --- a/client/menu/play.gd +++ b/client/menu/play.gd @@ -19,6 +19,9 @@ extends Menu var url_regex: RegEx = RegEx.new() +@onready var req: HTTPRequest = $HTTPRequest +@onready var server_list: VBoxContainer = $side/margin/options/second/ScrollContainerCustom/ServerList +@onready var server_list_loading: Label = $side/margin/options/second/Loading @onready var connect_uri = $side/margin/options/second/connect/uri @onready var server = $side/margin/options/second/server @onready var server_control = $side/margin/options/second/server/control @@ -31,6 +34,34 @@ func _ready(): server.hide() connect_uri.text = Global.get_profile("last_server_url") Sound.play_music("MainMenu") + update_server_list() + +func update_server_list(): + server_list_loading.visible = true + req.request_completed.connect(_on_request_completed) + req.request("https://hurrycurry-registry.metamuffin.org/v1/list", [ + "Accept: application/json", + "User-Agent: Hurry Curry! %s" % Global.VERSION + ]) + +func _on_request_completed(result: int, _response_code: int, _headers: PackedStringArray, body: PackedByteArray): + server_list_loading.visible = false + if result != 0: + push_warning("Fetching server list failed with code %d" % result) + return + var json = JSON.parse_string(body.get_string_from_utf8()) + if json == null: + push_error("Server list response invalid") + return + for c in server_list.get_children(): + c.queue_free() + for i in json: + var b := Button.new() + b.text_overrun_behavior = TextServer.OVERRUN_TRIM_WORD_ELLIPSIS + b.text = "%s (%d players)" % [i.name, i.players_online] + # TODO: Implement fallback address correctly + b.pressed.connect(connect_to.bind(i.address[0])) + server_list.add_child(b) func _menu_cover(state): $side.visible = not state |