rps-demo/src/title_screen/title_screen.gd

110 lines
2.3 KiB
GDScript3
Raw Normal View History

2025-01-13 15:57:57 -07:00
extends Control
2025-01-13 18:21:28 -07:00
const MAX_CLIENTS = 1
2025-01-13 16:44:10 -07:00
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",
]
2025-01-13 15:57:57 -07:00
@export var game_scene: PackedScene
@onready var main_menu: VBoxContainer = %MainMenu
@onready var host_menu: VBoxContainer = %HostMenu
@onready var join_menu: VBoxContainer = %JoinMenu
2025-01-13 16:44:10 -07:00
@onready var name_input: LineEdit = %NameInput
2025-01-13 15:57:57 -07:00
@onready var host_port_input: SpinBox = %HostPortInput
@onready var hostname_input: LineEdit = %HostnameInput
@onready var join_port_input: SpinBox = %JoinPortInput
2025-01-13 18:56:12 -07:00
@onready var err_already_in_use: ColorRect = %ErrAlreadyInUse
@onready var err_cant_create: ColorRect = %ErrCantCreate
2025-01-13 15:57:57 -07:00
2025-01-13 16:44:10 -07:00
func _ready() -> void:
name_input.text = RANDOM_NAMES.pick_random()
host_port_input.value = DEFAULT_PORT
join_port_input.value = DEFAULT_PORT
2025-01-13 15:57:57 -07:00
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()
2025-01-13 16:44:10 -07:00
func _build_game() -> Game:
2025-01-13 15:57:57 -07:00
var game: Game = game_scene.instantiate()
2025-01-13 16:44:10 -07:00
game.player_name = name_input.text
return game
2025-01-13 18:56:12 -07:00
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
2025-01-13 16:44:10 -07:00
func start_host_lobby() -> void:
2025-01-13 15:57:57 -07:00
var peer := ENetMultiplayerPeer.new()
2025-01-13 18:56:12 -07:00
if not _peer_ok(peer.create_server(int(host_port_input.value), MAX_CLIENTS)):
return
var game: Game = _build_game()
2025-01-13 15:57:57 -07:00
add_sibling(game)
game.multiplayer.multiplayer_peer = peer
queue_free()
func join_lobby() -> void:
var peer := ENetMultiplayerPeer.new()
2025-01-13 18:56:12 -07:00
if not _peer_ok(peer.create_client(hostname_input.text, int(join_port_input.value))):
return
var game: Game = _build_game()
2025-01-13 15:57:57 -07:00
add_sibling(game)
game.multiplayer.multiplayer_peer = peer
queue_free()