class_name Billiards extends Node @onready var server_net: Node = $server_net @onready var client_net: ClientNetworking = $client_net # # # Editor -> Debug > Customize run instance # # -- client host_snooker bobs_game # # -- client join bobs_game # # # CLI # # If going straight to game server: # ./billiards.sh -- server_5001 game snooker # ./billiards.sh -- join_server 127.0.0.1 5001 # # If going through lobby server: # ./billiards.sh -- client host_snooker bobs_game # ./billiards.sh -- client join bobs_game # # func _ready() -> void: add_child(Globals.multiplayer_data.multiplayer_synchronizer) move_child(Globals.multiplayer_data.multiplayer_synchronizer, 0) Globals.game_state.set_game_scene( "res://scenes/screens/start_screen/start.tscn" ) _parse_args() func _parse_args() -> void: for arg in OS.get_cmdline_user_args(): if "server_" in arg: server_(arg) elif "host_" in arg: host_(arg) match arg: "join_server": join_server(arg) "client": client(arg) "game": game(arg) "join": join(arg) _: pass func _set_game_mode(mode: String) -> void: match mode: "8ball": Globals.game_data.game_mode = "8ball" Globals.game_data.SelectedGameMode = \ Globals.game_data.GameModeType.BALL_8 "9ball": Globals.game_data.game_mode = "9ball" Globals.game_data.SelectedGameMode = \ Globals.game_data.GameModeType.BALL_9 "snooker": Globals.game_data.game_mode = "snooker" Globals.game_data.SelectedGameMode = \ Globals.game_data.GameModeType.SNOOKER _: Globals.game_data.game_mode = "snooker" Globals.game_data.SelectedGameMode = \ Globals.game_data.GameModeType.SNOOKER func server_(arg: String) -> void: var server_port = arg.split("_")[1] server_net.start_server("0.0.0.0", int(server_port)) func host_(arg: String) -> void: var game_mode = arg.split("_")[1] var match_name = OS.get_cmdline_user_args()[-1] Globals.multiplayer_data.wait_for_connection() $scene/lobby_screen.find_child(game_mode, true, false).emit_signal("pressed") $scene/lobby_screen.find_child("new_match_name_input", true, false).text = match_name $scene/lobby_screen.find_child("match_create_bttn", true, false).emit_signal("pressed") func join_server(_arg: String) -> void: var server_address = OS.get_cmdline_user_args()[1] var server_port = OS.get_cmdline_user_args()[2] Globals.multiplayer_data.set_multiplayer_active() # NOTE: Need to load lobby in order for signals to get bound # which then game server calls on its load to do handoff Globals.game_state.set_game_scene( "res://scenes/screens/lobby_screen/lobby.tscn" ) client_net.start_client(server_address, int(server_port)) func client(_arg: String) -> void: Globals.game_state.set_game_scene( "res://scenes/screens/lobby_screen/lobby.tscn" ) $scene/lobby_screen.find_child("host_connect_bttn", true, false).emit_signal("pressed") func game(_arg: String) -> void: var game_mode = OS.get_cmdline_user_args()[-1] _set_game_mode(game_mode) Globals.multiplayer_data.set_multiplayer_active() Globals.game_state.set_game_scene( "res://scenes/game.tscn" ) func join(_arg: String) -> void: var _match_id = OS.get_cmdline_user_args()[-1] Globals.multiplayer_data.wait_for_connection() var button = $scene/lobby_screen.find_child("join_bttn", true, false) while not button: await get_tree().process_frame button = $scene/lobby_screen.find_child("join_bttn", true, false) button.emit_signal("pressed")