goblin/Scripts/Menu/lobby_menu.gd

170 lines
4.8 KiB
GDScript3
Raw Normal View History

2025-07-21 20:38:11 -06:00
class_name LobbyMenu
extends Node
#region Onready Variables
@onready var lobby_container : Container = $LobbyContainer
@onready var username : LineEdit = $VBoxContainer/Name
@onready var lobby_label : Label = $VBoxContainer/HBoxContainer/LobbyLabel
@onready var steam_lobby_id_button : Button = $VBoxContainer/HBoxContainer/SteamLobbyIdButton
@onready var disconnect_button : Button = $VBoxContainer/HBoxContainer/Disconnect
@onready var tab_container : TabContainer = $VBoxContainer/TabContainer
@onready var steam_tab : Control = $VBoxContainer/TabContainer/Steam
@onready var steam_address_entry : LineEdit = $VBoxContainer/TabContainer/Steam/PanelContainer/MarginContainer/VBoxContainer/Address
@onready var steam_host_button : Button = $VBoxContainer/TabContainer/Steam/PanelContainer/MarginContainer/VBoxContainer/Host
@onready var steam_join_button : Button = $VBoxContainer/TabContainer/Steam/PanelContainer/MarginContainer/VBoxContainer/Join
@onready var enet_address_entry : LineEdit = $VBoxContainer/TabContainer/ENet/PanelContainer/MarginContainer/VBoxContainer/Address
@onready var enet_host_toggle : CheckButton = $VBoxContainer/TabContainer/ENet/PanelContainer/MarginContainer/VBoxContainer/HostToggleContainer/Host
@onready var enet_join_button : Button = $VBoxContainer/TabContainer/ENet/PanelContainer/MarginContainer/VBoxContainer/Join
#endregion
#region Variables
var steam_lobby_id : String = ""
#endregion
#region Signals
signal disconnect_button_pressed()
signal steam_host_pressed(new_username : String)
signal steam_join_pressed(new_username : String)
signal enet_host_toggled_on(new_username : String)
signal enet_host_toggled_off()
signal enet_join_pressed(new_username : String)
#endregion
#region Godot Functions
func _ready() -> void:
#set username to steam username
username.text = "username"
disconnect_button.pressed.connect(_on_disconnet_button_pressed)
#steam
if Global.steam_connected == true:
username.text = Steam.getPersonaName()
steam_lobby_id_button.pressed.connect(_on_steam_lobby_id_button_pressed)
steam_host_button.pressed.connect(_on_steam_host_pressed)
steam_join_button.pressed.connect(_on_steam_join_pressed)
#enet
enet_host_toggle.toggled.connect(_on_enet_host_toggled)
enet_join_button.pressed.connect(_on_enet_join_pressed)
if Global.steam_connected == false:
tab_container.remove_child(steam_tab)
#endregion
#region Public Functions
func reset_visible() -> void:
steam_lobby_id_button.hide()
disconnect_button.hide()
clear_lobby_text()
username.show()
#steam
steam_join_button.show()
steam_address_entry.show()
steam_host_button.show()
#enet
tab_container.tabs_visible = true
tab_container.show()
enet_address_entry.show()
enet_join_button.show()
func request_lobby_list() -> void:
for child in lobby_container.get_children():
child.queue_free()
Steam.requestLobbyList()
func set_lobby_text(new_names : Array[String]) -> void:
clear_lobby_text()
for new_name in new_names:
var name_label : Label = Label.new()
name_label.text = new_name
lobby_container.add_child(name_label)
func clear_lobby_text() -> void:
var lobby_container_children = lobby_container.get_children()
for child in lobby_container_children:
child.free()
func update_steam_lobby_id_button():
steam_lobby_id_button.show()
steam_lobby_id = Global.steam_lobby_id
#endregion
#region Signal Functions
func _on_disconnet_button_pressed() -> void:
disconnect_button_pressed.emit()
func _on_steam_host_pressed() -> void:
steam_host_pressed.emit(username.text)
steam_join_button.hide()
tab_container.tabs_visible = false
steam_address_entry.hide()
steam_host_button.hide()
username.hide()
func _on_steam_join_pressed() -> void:
Global.steam_lobby_id = steam_address_entry.text
steam_join_pressed.emit(username.text)
steam_join_button.hide()
tab_container.tabs_visible = false
steam_address_entry.hide()
steam_host_button.hide()
username.hide()
disconnect_button.show()
func _on_enet_host_toggled(toggled_on : bool) -> void:
if toggled_on:
enet_address_entry.hide()
enet_join_button.hide()
username.hide()
enet_host_toggled_on.emit(username.text)
tab_container.tabs_visible = false
return
tab_container.tabs_visible = true
enet_host_toggled_off.emit()
enet_address_entry.show()
enet_join_button.show()
username.show()
func _on_enet_join_pressed() -> void:
if enet_address_entry.text.is_empty() == false:
Global.enet_address = enet_address_entry.text
tab_container.tabs_visible = false
enet_join_pressed.emit(username.text)
enet_join_button.hide()
tab_container.hide()
username.hide()
disconnect_button.show()
func _on_steam_lobby_id_button_pressed():
DisplayServer.clipboard_set(steam_lobby_id)
#endregion