aboutsummaryrefslogtreecommitdiff
path: root/client/menu/play.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/menu/play.gd')
-rw-r--r--client/menu/play.gd31
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