Browse Source

Merge branch 'feature-live-join' into feature-central-server

master
Luna 7 years ago
parent
commit
1c27bc51f0
2 changed files with 24 additions and 8 deletions
  1. +17
    -7
      scripts/lobby.gd
  2. +7
    -1
      scripts/placement.gd

+ 17
- 7
scripts/lobby.gd View File

@ -152,14 +152,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("CustomGame/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)
@ -206,9 +208,8 @@ func render_player_list():
get_node("JoinedGameLobby/PlayerList").set_text(list)
sync func start_game():
begun = true
var level = get_node("CustomGame/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):
@ -226,6 +227,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
@ -243,8 +247,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)

+ 7
- 1
scripts/placement.gd View File

@ -21,8 +21,14 @@ func _init(parent, scene_path):
player.add_child(self)
# Set the network master to the player's network master, which happens to be its name
# This allows it to use master, slave keywords appropriately
set_network_master(int(player.get_name()))
var net_id = int(player.get_name())
set_network_master(net_id)
scene = load(scene_path)
rpc("request_placed", net_id)
master func request_placed(from):
for node in placed:
rpc_id(from, "slave_place", node)
func place_input(radius=-1):


Loading…
Cancel
Save