rps-demo/src/title_screen/title_screen.gd
Rob Kelly 563d222456
Some checks failed
linting & formatting / build (push) Failing after 5s
Error handling on peer creation
2025-01-13 18:56:12 -07:00

110 lines
2.3 KiB
GDScript

extends Control
const MAX_CLIENTS = 1
const DEFAULT_PORT = 8383
const RANDOM_NAMES = [
"Guy Likely",
"Roy G. Biv",
"Narbacular Strunk",
"Eco Sourcepower",
"Monty Carlo",
"Banana Joe",
"Chunk Busko",
"Flip Moran",
"Motrin Onesie",
"Kobe Sparrow",
"Jambo Wallende",
"Corbyn Kingston",
"Andrej Wojnicz",
"Ouija Kinkade",
"Angel Gullhammer",
"Skeleton Collector",
"Bosko Stanislav",
"Lieutenant Nudisco",
"Trace Slamvector",
"Barrison Hegemon",
"Bux Amillion",
]
@export var game_scene: PackedScene
@onready var main_menu: VBoxContainer = %MainMenu
@onready var host_menu: VBoxContainer = %HostMenu
@onready var join_menu: VBoxContainer = %JoinMenu
@onready var name_input: LineEdit = %NameInput
@onready var host_port_input: SpinBox = %HostPortInput
@onready var hostname_input: LineEdit = %HostnameInput
@onready var join_port_input: SpinBox = %JoinPortInput
@onready var err_already_in_use: ColorRect = %ErrAlreadyInUse
@onready var err_cant_create: ColorRect = %ErrCantCreate
func _ready() -> void:
name_input.text = RANDOM_NAMES.pick_random()
host_port_input.value = DEFAULT_PORT
join_port_input.value = DEFAULT_PORT
func quit() -> void:
get_tree().quit()
func show_host_menu() -> void:
main_menu.hide()
join_menu.hide()
host_menu.show()
func show_join_menu() -> void:
main_menu.hide()
host_menu.hide()
join_menu.show()
func show_main_menu() -> void:
host_menu.hide()
join_menu.hide()
main_menu.show()
func _build_game() -> Game:
var game: Game = game_scene.instantiate()
game.player_name = name_input.text
return game
func _peer_ok(err: Error) -> bool:
match err:
ERR_ALREADY_IN_USE:
err_already_in_use.show()
return false
ERR_CANT_CREATE:
err_cant_create.show()
return false
return true
func start_host_lobby() -> void:
var peer := ENetMultiplayerPeer.new()
if not _peer_ok(peer.create_server(int(host_port_input.value), MAX_CLIENTS)):
return
var game: Game = _build_game()
add_sibling(game)
game.multiplayer.multiplayer_peer = peer
queue_free()
func join_lobby() -> void:
var peer := ENetMultiplayerPeer.new()
if not _peer_ok(peer.create_client(hostname_input.text, int(join_port_input.value))):
return
var game: Game = _build_game()
add_sibling(game)
game.multiplayer.multiplayer_peer = peer
queue_free()