extends Control func _ready() -> void: # Called every time the node is added to the scene. gamestate.connection_failed.connect(_on_connection_failed) gamestate.connection_succeeded.connect(_on_connection_success) gamestate.player_list_changed.connect(refresh_lobby) gamestate.game_ended.connect(_on_game_ended) gamestate.game_error.connect(_on_game_error) # Set the player name according to the system username. Fallback to the path. if OS.has_environment("USERNAME"): $Connect/Name.text = OS.get_environment("USERNAME") else: var desktop_path := OS.get_system_dir(OS.SYSTEM_DIR_DESKTOP).replace("\\", "/").split("/") $Connect/Name.text = desktop_path[desktop_path.size() - 2] func _on_host_pressed() -> void: if $Connect/Name.text == "": $Connect/ErrorLabel.text = "Invalid name!" return $Connect.hide() $Players.show() $Connect/ErrorLabel.text = "" var player_name: String = $Connect/Name.text gamestate.host_game(player_name) get_window().title = ProjectSettings.get_setting("application/config/name") + ": Server (%s)" % $Connect/Name.text refresh_lobby() func _on_join_pressed() -> void: if $Connect/Name.text == "": $Connect/ErrorLabel.text = "Invalid name!" return var ip: String = $Connect/IPAddress.text if not ip.is_valid_ip_address(): $Connect/ErrorLabel.text = "Invalid IP address!" return $Connect/ErrorLabel.text = "" $Connect/Host.disabled = true $Connect/Join.disabled = true var player_name: String = $Connect/Name.text gamestate.join_game(ip, player_name) get_window().title = ProjectSettings.get_setting("application/config/name") + ": Client (%s)" % $Connect/Name.text func _on_connection_success() -> void: $Connect.hide() $Players.show() func _on_connection_failed() -> void: $Connect/Host.disabled = false $Connect/Join.disabled = false $Connect/ErrorLabel.set_text("Connection failed.") func _on_game_ended() -> void: show() $Connect.show() $Players.hide() $Connect/Host.disabled = false $Connect/Join.disabled = false func _on_game_error(errtxt: String) -> void: $ErrorDialog.dialog_text = errtxt $ErrorDialog.popup_centered() $Connect/Host.disabled = false $Connect/Join.disabled = false func refresh_lobby() -> void: var players := gamestate.get_player_list() players.sort() $Players/List.clear() $Players/List.add_item(gamestate.player_name + " (you)") for p: String in players: $Players/List.add_item(p) $Players/Start.disabled = not multiplayer.is_server() func _on_start_pressed() -> void: gamestate.begin_game() func _on_find_public_ip_pressed() -> void: OS.shell_open("https://icanhazip.com/")