Files
lobby-client/scripts/data/game_state.gd
2026-08-23 12:03:58 -05:00

64 lines
1.6 KiB
GDScript

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_or_null("shell/scene")
if not target:
target = get_tree().root.get_node("game_core/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_or_null("shell/scene")
if not target:
target = get_tree().root.get_node("game_core/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
)