generated from krampus/template-godot4
110 lines
2.3 KiB
GDScript
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()
|