Browse Source

Fix spectating mode by making it a player_info

master
Luna 7 years ago
parent
commit
054b240c4f
2 changed files with 25 additions and 23 deletions
  1. +18
    -8
      scripts/lobby.gd
  2. +7
    -15
      scripts/networking.gd

+ 18
- 8
scripts/lobby.gd View File

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

+ 7
- 15
scripts/networking.gd View File

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


Loading…
Cancel
Save