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()