Skip to content

Commit

Permalink
Cleanup and fixed SessionPlayerSpawner issue where connection is not …
Browse files Browse the repository at this point in the history
…added for reconnected player.
  • Loading branch information
ooonush committed Nov 8, 2024
1 parent c81903e commit ee3cf77
Showing 1 changed file with 17 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,6 @@ public class SessionPlayerSpawner : MonoBehaviour
#endregion

private readonly Dictionary<SessionPlayer, NetworkSessionObject> _playerObjects = new Dictionary<SessionPlayer, NetworkSessionObject>();
/// <summary>
/// Spawned Players.
/// </summary>
public IReadOnlyDictionary<SessionPlayer, NetworkSessionObject> SpawnedPlayers => _playerObjects;

private ServerSessionManager _serverSessionManager;

Expand All @@ -87,7 +83,7 @@ private void InitializeOnce()
_networkManager = InstanceFinder.NetworkManager;
if (_networkManager == null)
{
Debug.LogWarning($"PlayerSpawner on {gameObject.name} cannot work as NetworkManager wasn't found on this object or within parent objects.");
NetworkManagerExtensions.LogWarning($"PlayerSpawner on {gameObject.name} cannot work as NetworkManager wasn't found on this object or within parent objects.");
return;
}

Expand All @@ -106,14 +102,28 @@ private void SceneManager_OnClientLoadedStartScenes(NetworkConnection conn, bool
SessionPlayer player = conn.GetSessionPlayer();

// A player object can be created for a player if the player has previously connected and loaded the start scenes.
if (_playerObjects.ContainsKey(player))
if (_playerObjects.TryGetValue(player, out NetworkSessionObject spawnedPlayer))
{
if (!spawnedPlayer)
{
NetworkManagerExtensions.LogWarning($@"Session Player {player} is reconnected, but Player object that was created with SessionPlayerSpawner was destroyed.");
return;
}
if (spawnedPlayer.IsOffline)
{
NetworkManagerExtensions.LogWarning($@"Session Player {player} is reconnected, but Player object that was created with SessionPlayerSpawner was despawned.");
return;
}
if (_addToDefaultScene)
{
_networkManager.SceneManager.AddOwnerToDefaultScene(spawnedPlayer.NetworkObject);
}
return;
}

if (_playerPrefab == null)
{
Debug.LogWarning($"Player prefab is empty and cannot be spawned for connection {conn.ClientId}.");
NetworkManagerExtensions.LogWarning($"Player prefab is empty and cannot be spawned for connection {conn.ClientId}.");
return;
}

Expand Down

0 comments on commit ee3cf77

Please sign in to comment.