From f00ee03b0492d0e19cac72b468b189a933102192 Mon Sep 17 00:00:00 2001 From: Luna Date: Sun, 25 Feb 2018 02:14:11 -0500 Subject: [PATCH] Allow players to join server while game running --- scripts/lobby.gd | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/scripts/lobby.gd b/scripts/lobby.gd index 090e073..23d3a7f 100644 --- a/scripts/lobby.gd +++ b/scripts/lobby.gd @@ -144,14 +144,16 @@ remote func register_player(new_peer, info): if old_peer != 1: # Send old player, new player's info (not us, no infinite loop) rpc_id(old_peer, "register_player", new_peer, info) + if begun: + rpc_id(old_peer, "spawn_player", new_peer) + rpc_id(old_peer, "begin_player_deferred", new_peer) # Spawning is deferred var assign_right_team = right_team_count * 2 < player_info.size() rpc("assign_team", new_peer, assign_right_team) if not begun and player_info.size() == MAX_PLAYERS: start_game() if begun: - var level = get_node("ServerStart/LevelSelect").get_selected_id() - rpc_id(new_peer, "pre_configure_game", level) - rpc("spawn_player", new_peer) + rpc_id(new_peer, "pre_configure_game", my_info.level) + rpc_id(new_peer, "post_configure_game") sync func unregister_player(peer): player_info.erase(peer) @@ -197,9 +199,8 @@ func render_player_list(): get_node("PlayerList").set_text(list) sync func start_game(): - begun = true - var level = get_node("ServerStart/LevelSelect").get_selected_id() - rpc("pre_configure_game", level) + my_info.level = get_node("CustomGame/LevelSelect").get_selected_id() + rpc("pre_configure_game", my_info.level) var players_done = [] sync func done_preconfiguring(who): @@ -217,6 +218,9 @@ sync func spawn_player(p): get_node("/root/Level/Players").call_deferred("add_child", player) sync func pre_configure_game(level): + begun = true + my_info.level = level # Remember the level for future player registration + var self_peer_id = get_tree().get_network_unique_id() # Remove the interface so as to not fuck with things @@ -234,8 +238,14 @@ sync func pre_configure_game(level): rpc_id(1, "done_preconfiguring", self_peer_id) +func begin_player(peer): + get_node("/root/Level/Players/%d" % peer).begin() + +remote func begin_player_deferred(peer): + call_deferred("begin_player", peer) + sync func post_configure_game(): # Begin all players (including self) for p in player_info: - get_node("/root/Level/Players/%d" % p).begin() + begin_player_deferred(p)