extends Control const REFRESH_SERVER_DELAY = 5.0 export var scale = 4 setget set_scale export var upThreshold = 1.0/59.0 export var downThreshold = 1.0/30.0 export var delay = 1.0 export var refresh_server_remaining = REFRESH_SERVER_DELAY onready var viewport = $Viewport onready var background = $Background onready var netgame = $"/root/Multiplayer" onready var server_list = $Popup/MarginContainer/VBoxContainer/ItemList var servers = [] func _ready() -> void: set_scale(scale) $"/root/Music/BGM".play() netgame.connect("ms_updated", self, "_ms_update") request_servers() func _process(delta: float) -> void: refresh_server_remaining -= delta if refresh_server_remaining <= 0: request_servers() refresh_server_remaining = REFRESH_SERVER_DELAY # Give the system time to adjust if delay > 0: delay -= delta return if delta > downThreshold: print("GPU is taking too much (", delta, "s < ", downThreshold, "s), adjusting shader scale") set_scale(scale+1) elif delta < upThreshold and scale > 2: print("GPU is taking it easy (", delta, "s < ", upThreshold, "s), adjusting shader scale") set_scale(scale-1) func request_servers(): netgame.ms_get_entries() func _ms_update(action, result): if action == "list_games": # Reset server list server_list.clear() servers = result for server in servers: server_list.add_item(server.data.name + " (" + server.address + ") - " + str(server.data.players) + "/" + str(server.data.max_players) + " players") func set_scale(val) -> void: scale = val if viewport: viewport.size = rect_size / scale background.update() func _on_resized() -> void: if viewport: viewport.size = rect_size / scale background.update() func _host_pressed() -> void: $"/root/Music/BGM".stop() $"/root/Multiplayer".host() func _join_pressed() -> void: $Popup.popup_centered_ratio() func join_server(server) -> void: $"/root/Music/BGM".stop() netgame.join(server) func _server_addr_changed(new_text: String) -> void: $Popup/MarginContainer/VBoxContainer/HBoxContainer/Button.disabled = new_text.length() < 1 func _manual_join_pressed(): join_server({ "address": $Popup/MarginContainer/VBoxContainer/HBoxContainer/LineEdit.text }) func _server_item_clicked(index): $"/root/Music/BGM".stop() join_server(servers[index])