63 lines
1.7 KiB
GDScript
63 lines
1.7 KiB
GDScript
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()
|