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 | 
