Attempt removing player upon disconnect
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
extends Node
|
||||
|
||||
var players: Array[int] = []
|
||||
var players: Dictionary[int, Player] = {}
|
||||
|
||||
var player_spawner: MultiplayerSpawner
|
||||
var player_spawner: LobbyPlayerSpawner
|
||||
|
||||
@onready var debug_ui: PackedScene = preload("res://ui/multiplayer-debug-ui/multiplayer-debug-ui.tscn")
|
||||
var debug_ui_instance
|
||||
@@ -29,3 +29,8 @@ func request_server_to_spawn_player(peer_id: int, player_name: String) -> void:
|
||||
data["player_name"] = player_name
|
||||
|
||||
player_spawner.spawn(data)
|
||||
|
||||
|
||||
@rpc("any_peer", "call_local", "reliable")
|
||||
func request_server_to_delete_player(peer_id: int) -> void:
|
||||
player_spawner.delete_player(peer_id)
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
class_name LobbyPlayerSpawner
|
||||
extends MultiplayerSpawner
|
||||
|
||||
@onready var player_scene: PackedScene = load("res://player/Player.tscn")
|
||||
|
||||
var players_dict: Dictionary[int, Player] = {}
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
spawn_function = spawn_player
|
||||
@@ -17,6 +20,12 @@ func spawn_player(data: Dictionary) -> Player:
|
||||
new_player.set_player_name(peer_id, player_name)
|
||||
new_player.position = Vector3.UP
|
||||
|
||||
GameManager.players.append(int(peer_id))
|
||||
GameManager.players[int(peer_id)] = new_player
|
||||
|
||||
return new_player
|
||||
|
||||
|
||||
func delete_player(id: int) -> void:
|
||||
var player_to_delete = GameManager.players[id]
|
||||
GameManager.players.erase(id)
|
||||
player_to_delete.queue_free()
|
||||
|
||||
@@ -31,6 +31,7 @@ func _ready() -> void:
|
||||
multiplayer.peer_connected.connect(_on_peer_connected)
|
||||
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
|
||||
multiplayer.connected_to_server.connect(_on_connected_to_server)
|
||||
multiplayer.server_disconnected.connect(_on_disconnected_from_server)
|
||||
multiplayer.connection_failed.connect(_on_connection_failed)
|
||||
|
||||
check_command_line()
|
||||
@@ -96,6 +97,10 @@ func _on_connected_to_server():
|
||||
GameManager.request_server_to_spawn_player.rpc_id(1, multiplayer.get_unique_id(), steam_username)
|
||||
|
||||
|
||||
func _on_disconnected_from_server():
|
||||
GameManager.request_server_to_delete_player.rpc_id(1, multiplayer.get_unique_id())
|
||||
|
||||
|
||||
func _on_p2p_session_request(steam_id_remote: int) -> void:
|
||||
print("[P2P] ==> Session request from: %s. Accepting." % steam_id_remote)
|
||||
Steam.acceptP2PSessionWithUser(steam_id_remote)
|
||||
@@ -135,8 +140,8 @@ func _on_peer_connected(id: int):
|
||||
func _on_peer_disconnected(id: int):
|
||||
print("[INFO] Peer %s has disconnected." % id)
|
||||
if players.has(id):
|
||||
#players[id].queue_free()
|
||||
players.erase(id)
|
||||
|
||||
|
||||
|
||||
func _on_connection_failed() -> void:
|
||||
|
||||
@@ -20,6 +20,10 @@ config/icon="res://icon.svg"
|
||||
SteamManager="*res://networking/steam-manager.gd"
|
||||
GameManager="*res://game-logic/game_manager.gd"
|
||||
|
||||
[display]
|
||||
|
||||
window/vsync/vsync_mode=0
|
||||
|
||||
[editor_plugins]
|
||||
|
||||
enabled=PackedStringArray("res://addons/freecam_3D/plugin.cfg")
|
||||
|
||||
Reference in New Issue
Block a user