class_name GameState extends Node @warning_ignore_start("unused_signal") signal update_cue_cam_position signal balls_stopped_moving signal white_ball_sunk signal white_ball_needs_hard_reset signal reload_scene signal process_ball signal reap_ball @warning_ignore_restore("unused_signal") func _init() -> void: Globals.game_state = self func load_game_scene(scene_str: String) -> void: var scene = load(scene_str).instantiate() var target = get_tree().root.get_node("billiards/scene") target.add_child(scene) func set_game_scene(scene_str: String) -> void: var scene = load(scene_str).instantiate() var target = get_tree().root.get_node("billiards/scene") if "game" in scene_str: scene.name = "game" elif "lobby" in scene_str: scene.name = "lobby_screen" elif "start" in scene_str: scene.name = "start_screen" clear_game_scene(target) target.add_child(scene) func clear_game_scene(container: Node) -> void: for child in container.get_children(): child.queue_free() await get_tree().process_frame func switch_active_player() -> void: # TODO: Move away from using client ID or mask it with a map ID if Globals.multiplayer_data.current_turn_player_id == Globals.game_data.client1: Globals.multiplayer_data.rpc( "set_active_player_id", Globals.game_data.client2 ) elif Globals.multiplayer_data.current_turn_player_id == Globals.game_data.client2: Globals.multiplayer_data.rpc( "set_active_player_id", Globals.game_data.client1 )