Client/scripts/ui/search_match.gd

158 lines
3.6 KiB
GDScript3
Raw Normal View History

2025-03-04 15:25:27 +01:00
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