diff --git a/scripts/lobby.gd b/scripts/lobby.gd index fb5f61b..5cc285a 100644 --- a/scripts/lobby.gd +++ b/scripts/lobby.gd @@ -68,6 +68,7 @@ func _ready(): get_node("Singleplayer").connect("pressed", self, "_singleplayer_init") 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_node("HeroSelect").connect("item_selected", self, "select_hero") @@ -101,6 +102,10 @@ func _server_init(): func _player_connected(id): print("Connect, my friend: " + str(id)) +func _player_disconnected(id): + if get_tree().is_network_server(): + rpc("unregister_player", id) + func _connected_ok(): rpc("register_player", get_tree().get_network_unique_id(), my_info) 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): start_game() +sync func unregister_player(peer): + player_info.erase(peer) + get_node("/root/Level/Players/%d" % peer).queue_free() + func select_hero(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): 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() get_node("/root").add_child(world)