58 lines
1.5 KiB
GDScript
58 lines
1.5 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("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
|
|
)
|