class_name MultiplayerLevelSetup extends Node var players_ready : Dictionary[int, bool] = {} var pawns_expected : int = 1 var cameras_expected : int = 1 signal all_pawns_spawned() signal all_cameras_spawned() signal all_players_ready() @rpc("authority", "reliable") func set_pawns_expected(num : int) -> void: all_pawns_spawned.connect(_on_all_pawns_spawned, CONNECT_ONE_SHOT) print("(Instance %s) Expecting %d Pawns" % [Game.cmd_args.instance_id, num]) pawns_expected = num func set_players_unready(list : Array) -> void: players_ready = {} for id in list: players_ready[id] = false players_ready[1] = true func check_all_ready() -> bool: for id in players_ready: if !players_ready[id]: return false return true func _on_all_pawns_spawned() -> void: player_ready.rpc_id(1,Multiplayer.id) func _on_all_cameras_spawned() -> void: player_ready.rpc_id(1,Multiplayer.id) @rpc("any_peer", "reliable") func player_ready(id : int) -> void: print("(Instance %s) Player %d notified ready" % [Game.cmd_args.instance_id, id]) players_ready[id] = true if(check_all_ready()): print("(Instance %s) ALL PLAYERS READY!!" % [Game.cmd_args.instance_id]) all_players_ready.emit() @rpc("authority", "reliable") func set_cameras_expected(num : int) -> void: all_cameras_spawned.connect(_on_all_cameras_spawned, CONNECT_ONE_SHOT) cameras_expected = num func _on_pawn_spawner_spawned(node: Node) -> void: print("(Instance %s) Spawned %d Pawn" % [Game.cmd_args.instance_id, node.id]) pawns_expected -= 1 if pawns_expected == 0: print("(Instance %s) ALL PAWNS SPAWNED!" % [Game.cmd_args.instance_id]) all_pawns_spawned.emit() func _on_camera_spawner_spawned(node: Node) -> void: cameras_expected -= 1 if cameras_expected == 0: all_cameras_spawned.emit()