Files
net-gunner/scripts/multiplayer_level_setup.gd

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()