diff --git a/scripts/lobby.gd b/scripts/lobby.gd index b443e86..cc606bf 100644 --- a/scripts/lobby.gd +++ b/scripts/lobby.gd @@ -12,7 +12,7 @@ func _ready(): var spectating = util.args.get_value("-silent") get_node("Spectating").pressed = spectating - get_node("Spectating").connect("toggled", networking, "set_spectating") + get_node("Spectating").connect("toggled", self, "_set_spectating") if get_tree().is_network_server(): # We put level in our players dict because it's automatically broadcast to other players @@ -47,6 +47,9 @@ func _connected(): func _set_level(level): networking.set_info("level", level) +func _set_spectating(is_spectating): + networking.set_info("spectating", is_spectating) + sync func set_hero(peer, hero): networking.players[peer].hero = hero render_player_list() @@ -59,12 +62,19 @@ func render_player_list(): var list = "" var hero_names = hero_select.hero_names for p in networking.players: - list += "%-15s" % networking.players[p].username - list += "%-20s" % hero_names[networking.players[p].hero] - if networking.players[p].is_right_team: - list += "Right Team" - else: - list += "Left Team" - list += "\n" + var player = networking.players[p] + var spectating = player.has("spectating") and player.spectating + # A spectating server is just a dedicated server, ignore it + if not (spectating and p == 1): + list += "%-15s " % player.username + list += "%-20s " % hero_names[player.hero] + var team_format = "%-14s" + if player.is_right_team: + list += team_format % "Right Team" + else: + list += team_format % "Left Team" + if spectating: + list += "Spectating" + list += "\n" get_node("PlayerList").set_text(list) diff --git a/scripts/networking.gd b/scripts/networking.gd index 878bb35..a37779a 100644 --- a/scripts/networking.gd +++ b/scripts/networking.gd @@ -52,10 +52,9 @@ func start_server(port=0): get_tree().set_network_peer(peer) # As soon as we're listening, let the matchmaker know _connect_to_matchmaker(port) - if not util.args.get_value("-silent"): - register_player(get_tree().get_network_unique_id()) - if util.args.get_value("-start-game"): - start_game() + register_player(get_tree().get_network_unique_id()) + if util.args.get_value("-silent"): + set_info("spectating", true) master func _start_game(): var level = players[1].level # TODO: Can we guarantee this will have level? @@ -103,15 +102,6 @@ sync func unregister_player(peer): get_node("/root/Level/Players/%d" % peer).queue_free() emit_signal("info_updated") -func set_spectating(spectating): - var id = get_tree().get_network_unique_id() - if spectating: - if players[id]: - rpc("unregister_player", id) - else: - if not players[id]: - rpc("register_player", id) - sync func _set_info(key, value, peer=0): if not peer: peer = get_tree().get_rpc_sender_id() @@ -151,7 +141,8 @@ sync func _pre_configure_game(level): # Load all players (including self) for p in players: players[p].level = level - _spawn_player(p) + if not (players[p].has("spectating") and players[p].spectating): + _spawn_player(p) rpc_id(1, "_done_preconfiguring", self_peer_id) @@ -164,7 +155,8 @@ sync func _done_preconfiguring(who): sync func _post_configure_game(): # Begin all players (including self) for p in players: - _begin_player_deferred(p) + if not (players[p].has("spectating") and players[p].spectating): + _begin_player_deferred(p) func _begin_player(peer): get_node("/root/Level/Players/%d" % peer).begin()