Browse Source

Allow for clients quitting graceful

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

+ 14
- 1
scripts/lobby.gd View File

@ -68,6 +68,7 @@ func _ready():
get_node("Singleplayer").connect("pressed", self, "_singleplayer_init") get_node("Singleplayer").connect("pressed", self, "_singleplayer_init")
get_tree().connect("network_peer_connected", self, "_player_connected") get_tree().connect("network_peer_connected", self, "_player_connected")
get_tree().connect("network_peer_disconnected", self, "_player_disconnected")
get_tree().connect("connected_to_server", self, "_connected_ok") get_tree().connect("connected_to_server", self, "_connected_ok")
get_node("HeroSelect").connect("item_selected", self, "select_hero") get_node("HeroSelect").connect("item_selected", self, "select_hero")
@ -101,6 +102,10 @@ func _server_init():
func _player_connected(id): func _player_connected(id):
print("Connect, my friend: " + str(id)) print("Connect, my friend: " + str(id))
func _player_disconnected(id):
if get_tree().is_network_server():
rpc("unregister_player", id)
func _connected_ok(): func _connected_ok():
rpc("register_player", get_tree().get_network_unique_id(), my_info) rpc("register_player", get_tree().get_network_unique_id(), my_info)
if "start_game" in my_info and my_info.start_game: if "start_game" in my_info and my_info.start_game:
@ -140,6 +145,10 @@ remote func register_player(new_peer, info):
if (player_info.size() == MAX_PLAYERS): if (player_info.size() == MAX_PLAYERS):
start_game() start_game()
sync func unregister_player(peer):
player_info.erase(peer)
get_node("/root/Level/Players/%d" % peer).queue_free()
func select_hero(hero): func select_hero(hero):
rpc("set_hero", get_tree().get_network_unique_id(), hero) rpc("set_hero", get_tree().get_network_unique_id(), hero)
@ -182,7 +191,11 @@ remote func done_preconfiguring(who):
sync func pre_configure_game(level): sync func pre_configure_game(level):
var self_peer_id = get_tree().get_network_unique_id() var self_peer_id = get_tree().get_network_unique_id()
get_node("/root/Control").queue_free()
# Remove the interface so as to not fuck with things
# But we still need the lobby (Control) alive to deal with networking!
for element in get_node("/root/Control").get_children():
element.queue_free()
var world = load("res://scenes/levels/%d.tscn" % level).instance() var world = load("res://scenes/levels/%d.tscn" % level).instance()
get_node("/root").add_child(world) get_node("/root").add_child(world)


Loading…
Cancel
Save