Browse Source

Allow players to join server while game running

master
Luna 7 years ago
parent
commit
f00ee03b04
1 changed files with 17 additions and 7 deletions
  1. +17
    -7
      scripts/lobby.gd

+ 17
- 7
scripts/lobby.gd View File

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

Loading…
Cancel
Save