extends Control @export var popup: PanelContainer @export var search_button: Button @export var abort_button: Button @export var accept_button: Button @export var decline_button: Button @export var time_bar: ProgressBar @export var login: Login var searching: bool = false var sent_accept_message: bool = false var match_id: String = "" func _ready() -> void: if !export_valid(): return login.connect("login_successful", on_login) # Websockets ( ConnectionChannel . connect( "on_channel_token_received", on_channel_token_received, ) ) ( MatchmakingChannel . connect( "on_match_set_search_state", on_match_set_search_state, ) ) MatchmakingChannel.connect("on_match_found", on_match_found) MatchmakingChannel.connect("on_match_aborted", on_match_aborted) MatchmakingChannel.connect("on_match_established", on_match_established) # UI search_button.connect("pressed", on_search_pressed) abort_button.connect("pressed", on_abort_pressed) accept_button.connect("pressed", on_accept_pressed) decline_button.connect("pressed", on_decline_pressed) popup.visible = false # gdlint:ignore = max-public-methods func export_valid() -> bool: if not popup: push_error("Popup not Set") return false if not search_button: push_error("Search Button not Set") return false if not abort_button: push_error("Abort Button not Set") return false if not accept_button: push_error("Accept Button not Set") return false if not decline_button: push_error("Decline Button not Set") return false if not time_bar: push_error("Time Bar not Set") return false if not login: push_error("No login configured") return false return true func on_login(_session: PlayerLoginSession) -> void: ConnectionChannel.request_channel_token(Message.Channels.MATCHMAKING) ############################## # Websocket Interactions # ############################## func on_channel_token_received(msg: ProvidedConnectionTokenMessage) -> void: if msg.channel != Message.Channels.MATCHMAKING: return MatchmakingChannel.connect_socket(msg.token) func on_match_set_search_state(msg: MatchSetSearchStateMessage) -> void: set_searching_ui(msg.searching) func on_match_found(msg: MatchFoundMessage) -> void: set_match_accptance_ui(true) set_accaptence_buttons_enabled(true) match_id = msg.matchId # TODO: Show and Reset Timer bar func on_match_aborted() -> void: set_match_accptance_ui(false) set_searching_ui(false) match_id = "" func on_match_established(msg: MatchEstablishedMessage) -> void: print(msg.opponentName) #TODO: Implement ############################# # UI Interactions # ############################# func on_search_pressed() -> void: if searching: return set_searching_ui(true) MatchmakingChannel.send_search_state(true) func on_abort_pressed() -> void: if not searching: return set_searching_ui(false) MatchmakingChannel.send_search_state(false) func on_accept_pressed() -> void: set_accaptence_buttons_enabled(false) MatchmakingChannel.send_match_accepted(true, match_id) func on_decline_pressed() -> void: set_accaptence_buttons_enabled(false) MatchmakingChannel.send_match_accepted(false, match_id) ############################# # UI Management # ############################# func set_searching_ui(new_searching: bool) -> void: searching = new_searching search_button.visible = !new_searching abort_button.visible = new_searching func set_accaptence_buttons_enabled(enabled: bool) -> void: accept_button.disabled = !enabled decline_button.disabled = !enabled func set_match_accptance_ui(vissible: bool) -> void: popup.visible = vissible