Skip to content

Commit 9f5f39b

Browse files
authored
refactor!: SpawnManager is no longer static (#696)
BREAKING CHANGE: SpawnManager is no longer static. Access it with NetworkManager.Singleton.SpawnManager
1 parent 2976167 commit 9f5f39b

File tree

8 files changed

+165
-145
lines changed

8 files changed

+165
-145
lines changed

com.unity.multiplayer.mlapi/Runtime/Core/NetworkBehaviour.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,7 @@ internal static void NetworkBehaviourUpdate()
508508
for (int i = 0; i < NetworkManager.Singleton.ConnectedClientsList.Count; i++)
509509
{
510510
var client = NetworkManager.Singleton.ConnectedClientsList[i];
511-
var spawnedObjs = NetworkSpawnManager.SpawnedObjectsList;
511+
var spawnedObjs = NetworkManager.Singleton.SpawnManager.SpawnedObjectsList;
512512
s_Touched.UnionWith(spawnedObjs);
513513
foreach (var sobj in spawnedObjs)
514514
{
@@ -532,7 +532,7 @@ internal static void NetworkBehaviourUpdate()
532532
else
533533
{
534534
// when client updates the sever, it tells it about all its objects
535-
foreach (var sobj in NetworkSpawnManager.SpawnedObjectsList)
535+
foreach (var sobj in NetworkManager.Singleton.SpawnManager.SpawnedObjectsList)
536536
{
537537
for (int k = 0; k < sobj.ChildNetworkBehaviours.Count; k++)
538538
{
@@ -541,7 +541,7 @@ internal static void NetworkBehaviourUpdate()
541541
}
542542

543543
// Now, reset all the no-longer-dirty variables
544-
foreach (var sobj in NetworkSpawnManager.SpawnedObjectsList)
544+
foreach (var sobj in NetworkManager.Singleton.SpawnManager.SpawnedObjectsList)
545545
{
546546
for (int k = 0; k < sobj.ChildNetworkBehaviours.Count; k++)
547547
{
@@ -1006,6 +1006,6 @@ internal static void SetNetworkVariableData(List<INetworkVariable> networkVariab
10061006
/// </summary>
10071007
/// <param name="networkId"></param>
10081008
/// <returns></returns>
1009-
protected NetworkObject GetNetworkObject(ulong networkId) => NetworkSpawnManager.SpawnedObjects.ContainsKey(networkId) ? NetworkSpawnManager.SpawnedObjects[networkId] : null;
1009+
protected NetworkObject GetNetworkObject(ulong networkId) => NetworkManager.Singleton.SpawnManager.SpawnedObjects.ContainsKey(networkId) ? NetworkManager.Singleton.SpawnManager.SpawnedObjects[networkId] : null;
10101010
}
10111011
}

com.unity.multiplayer.mlapi/Runtime/Core/NetworkManager.cs

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,11 @@ public class NetworkManager : MonoBehaviour, INetworkUpdateSystem, IProfilableTr
8989
/// </summary>
9090
public static NetworkManager Singleton { get; private set; }
9191

92+
/// <summary>
93+
/// Gets the SpawnManager for this NetworkManager
94+
/// </summary>
95+
public NetworkSpawnManager SpawnManager { get; private set; }
96+
9297
/// <summary>
9398
/// Gets the networkId of the server
9499
/// </summary>
@@ -313,10 +318,9 @@ private void Init(bool server)
313318
ConnectedClients.Clear();
314319
ConnectedClientsList.Clear();
315320

316-
NetworkSpawnManager.SpawnedObjects.Clear();
317-
NetworkSpawnManager.SpawnedObjectsList.Clear();
318-
NetworkSpawnManager.ReleasedNetworkObjectIds.Clear();
319-
NetworkSpawnManager.PendingSoftSyncObjects.Clear();
321+
// Create spawn manager instance
322+
SpawnManager = new NetworkSpawnManager(this);
323+
320324
NetworkSceneManager.RegisteredSceneNames.Clear();
321325
NetworkSceneManager.SceneIndexToString.Clear();
322326
NetworkSceneManager.SceneNameToIndex.Clear();
@@ -441,7 +445,7 @@ public SocketTasks StartServer()
441445
IsClient = false;
442446
IsListening = true;
443447

444-
NetworkSpawnManager.ServerSpawnSceneObjectsOnStartSweep();
448+
SpawnManager.ServerSpawnSceneObjectsOnStartSweep();
445449

446450
OnServerStarted?.Invoke();
447451

@@ -617,7 +621,7 @@ public SocketTasks StartHost()
617621
HandleApproval(ServerClientId, NetworkConfig.CreatePlayerPrefab, null, true, null, null);
618622
}
619623

620-
NetworkSpawnManager.ServerSpawnSceneObjectsOnStartSweep();
624+
SpawnManager.ServerSpawnSceneObjectsOnStartSweep();
621625

622626
OnServerStarted?.Invoke();
623627

@@ -691,8 +695,14 @@ public void Shutdown()
691695
IsServer = false;
692696
IsClient = false;
693697
NetworkConfig.NetworkTransport.OnTransportEvent -= HandleRawTransportPoll;
694-
NetworkSpawnManager.DestroyNonSceneObjects();
695-
NetworkSpawnManager.ServerResetShudownStateForSceneObjects();
698+
699+
if (SpawnManager != null)
700+
{
701+
SpawnManager.DestroyNonSceneObjects();
702+
SpawnManager.ServerResetShudownStateForSceneObjects();
703+
704+
SpawnManager = null;
705+
}
696706

697707
//The Transport is set during Init time, thus it is possible for the Transport to be null
698708
NetworkConfig?.NetworkTransport?.Shutdown();
@@ -1213,7 +1223,7 @@ private static void ReceiveCallback(NetworkBuffer messageBuffer, RpcQueueContain
12131223
/// </summary>
12141224
/// <param name="queueItem">frame queue item to invoke</param>
12151225
#pragma warning disable 618
1216-
internal static void InvokeRpc(RpcFrameQueueItem queueItem)
1226+
internal void InvokeRpc(RpcFrameQueueItem queueItem)
12171227
{
12181228
#if DEVELOPMENT_BUILD || UNITY_EDITOR
12191229
s_InvokeRpc.Begin();
@@ -1225,12 +1235,12 @@ internal static void InvokeRpc(RpcFrameQueueItem queueItem)
12251235

12261236
if (__ntable.ContainsKey(networkMethodId))
12271237
{
1228-
if (!NetworkSpawnManager.SpawnedObjects.ContainsKey(networkObjectId))
1238+
if (!SpawnManager.SpawnedObjects.ContainsKey(networkObjectId))
12291239
{
12301240
return;
12311241
}
12321242

1233-
var networkObject = NetworkSpawnManager.SpawnedObjects[networkObjectId];
1243+
var networkObject = SpawnManager.SpawnedObjects[networkObjectId];
12341244

12351245
var networkBehaviour = networkObject.GetNetworkBehaviourAtOrderIndex(networkBehaviourId);
12361246
if (networkBehaviour == null)
@@ -1344,10 +1354,10 @@ internal void OnClientDisconnectFromServer(ulong clientId)
13441354
{
13451355
if (ConnectedClients[clientId].PlayerObject != null)
13461356
{
1347-
if (NetworkSpawnManager.CustomDestroyHandlers.ContainsKey(ConnectedClients[clientId].PlayerObject.PrefabHash))
1357+
if (SpawnManager.CustomDestroyHandlers.ContainsKey(ConnectedClients[clientId].PlayerObject.PrefabHash))
13481358
{
1349-
NetworkSpawnManager.CustomDestroyHandlers[ConnectedClients[clientId].PlayerObject.PrefabHash](ConnectedClients[clientId].PlayerObject);
1350-
NetworkSpawnManager.OnDestroyObject(ConnectedClients[clientId].PlayerObject.NetworkObjectId, false);
1359+
SpawnManager.CustomDestroyHandlers[ConnectedClients[clientId].PlayerObject.PrefabHash](ConnectedClients[clientId].PlayerObject);
1360+
SpawnManager.OnDestroyObject(ConnectedClients[clientId].PlayerObject.NetworkObjectId, false);
13511361
}
13521362
else
13531363
{
@@ -1361,10 +1371,10 @@ internal void OnClientDisconnectFromServer(ulong clientId)
13611371
{
13621372
if (!ConnectedClients[clientId].OwnedObjects[i].DontDestroyWithOwner)
13631373
{
1364-
if (NetworkSpawnManager.CustomDestroyHandlers.ContainsKey(ConnectedClients[clientId].OwnedObjects[i].PrefabHash))
1374+
if (SpawnManager.CustomDestroyHandlers.ContainsKey(ConnectedClients[clientId].OwnedObjects[i].PrefabHash))
13651375
{
1366-
NetworkSpawnManager.CustomDestroyHandlers[ConnectedClients[clientId].OwnedObjects[i].PrefabHash](ConnectedClients[clientId].OwnedObjects[i]);
1367-
NetworkSpawnManager.OnDestroyObject(ConnectedClients[clientId].OwnedObjects[i].NetworkObjectId, false);
1376+
SpawnManager.CustomDestroyHandlers[ConnectedClients[clientId].OwnedObjects[i].PrefabHash](ConnectedClients[clientId].OwnedObjects[i]);
1377+
SpawnManager.OnDestroyObject(ConnectedClients[clientId].OwnedObjects[i].NetworkObjectId, false);
13681378
}
13691379
else
13701380
{
@@ -1380,7 +1390,7 @@ internal void OnClientDisconnectFromServer(ulong clientId)
13801390

13811391
// TODO: Could(should?) be replaced with more memory per client, by storing the visiblity
13821392

1383-
foreach (var sobj in NetworkSpawnManager.SpawnedObjectsList)
1393+
foreach (var sobj in SpawnManager.SpawnedObjectsList)
13841394
{
13851395
sobj.Observers.Remove(clientId);
13861396
}
@@ -1446,15 +1456,15 @@ internal void HandleApproval(ulong ownerClientId, bool createPlayerObject, ulong
14461456

14471457
if (createPlayerObject)
14481458
{
1449-
var networkObject = NetworkSpawnManager.CreateLocalNetworkObject(false, 0, playerPrefabHash ?? NetworkConfig.PlayerPrefabHash.Value, ownerClientId, null, position, rotation);
1450-
NetworkSpawnManager.SpawnNetworkObjectLocally(networkObject, NetworkSpawnManager.GetNetworkObjectId(), false, true, ownerClientId, null, false, 0, false, false);
1459+
var networkObject = SpawnManager.CreateLocalNetworkObject(false, 0, playerPrefabHash ?? NetworkConfig.PlayerPrefabHash.Value, ownerClientId, null, position, rotation);
1460+
SpawnManager.SpawnNetworkObjectLocally(networkObject, SpawnManager.GetNetworkObjectId(), false, true, ownerClientId, null, false, 0, false, false);
14511461

14521462
ConnectedClients[ownerClientId].PlayerObject = networkObject;
14531463
}
14541464

14551465
m_ObservedObjects.Clear();
14561466

1457-
foreach (var sobj in NetworkSpawnManager.SpawnedObjectsList)
1467+
foreach (var sobj in SpawnManager.SpawnedObjectsList)
14581468
{
14591469
if (ownerClientId == ServerClientId || sobj.CheckObjectVisibility == null || sobj.CheckObjectVisibility(ownerClientId))
14601470
{

com.unity.multiplayer.mlapi/Runtime/Core/NetworkObject.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ public void NetworkShow(ulong clientId, Stream payload = null)
225225
// Send spawn call
226226
Observers.Add(clientId);
227227

228-
NetworkSpawnManager.SendSpawnCallForObject(clientId, this, payload);
228+
NetworkManager.Singleton.SpawnManager.SendSpawnCallForObject(clientId, this, payload);
229229
}
230230

231231
/// <summary>
@@ -265,7 +265,7 @@ public static void NetworkShow(List<NetworkObject> networkObjects, ulong clientI
265265
// Send spawn call
266266
networkObjects[i].Observers.Add(clientId);
267267

268-
NetworkSpawnManager.WriteSpawnCallForObject(buffer, clientId, networkObjects[i], payload);
268+
NetworkManager.Singleton.SpawnManager.WriteSpawnCallForObject(buffer, clientId, networkObjects[i], payload);
269269
}
270270

271271
InternalMessageSender.Send(clientId, NetworkConstants.ADD_OBJECTS, NetworkChannel.Internal, buffer);
@@ -361,9 +361,9 @@ public static void NetworkHide(List<NetworkObject> networkObjects, ulong clientI
361361

362362
private void OnDestroy()
363363
{
364-
if (NetworkManager.Singleton != null && NetworkSpawnManager.SpawnedObjects.ContainsKey(NetworkObjectId))
364+
if (NetworkManager.Singleton != null && NetworkManager.Singleton.SpawnManager.SpawnedObjects.ContainsKey(NetworkObjectId))
365365
{
366-
NetworkSpawnManager.OnDestroyObject(NetworkObjectId, false);
366+
NetworkManager.Singleton.SpawnManager.OnDestroyObject(NetworkObjectId, false);
367367
}
368368
}
369369

@@ -385,13 +385,13 @@ private void SpawnInternal(Stream spawnPayload, bool destroyWithScene, ulong? ow
385385
spawnPayload.Position = 0;
386386
}
387387

388-
NetworkSpawnManager.SpawnNetworkObjectLocally(this, NetworkSpawnManager.GetNetworkObjectId(), false, playerObject, ownerClientId, spawnPayload, spawnPayload != null, spawnPayload == null ? 0 : (int)spawnPayload.Length, false, destroyWithScene);
388+
NetworkManager.Singleton.SpawnManager.SpawnNetworkObjectLocally(this, NetworkManager.Singleton.SpawnManager.GetNetworkObjectId(), false, playerObject, ownerClientId, spawnPayload, spawnPayload != null, spawnPayload == null ? 0 : (int)spawnPayload.Length, false, destroyWithScene);
389389

390390
for (int i = 0; i < NetworkManager.Singleton.ConnectedClientsList.Count; i++)
391391
{
392392
if (Observers.Contains(NetworkManager.Singleton.ConnectedClientsList[i].ClientId))
393393
{
394-
NetworkSpawnManager.SendSpawnCallForObject(NetworkManager.Singleton.ConnectedClientsList[i].ClientId, this, spawnPayload);
394+
NetworkManager.Singleton.SpawnManager.SendSpawnCallForObject(NetworkManager.Singleton.ConnectedClientsList[i].ClientId, this, spawnPayload);
395395
}
396396
}
397397
}
@@ -433,7 +433,7 @@ public void SpawnAsPlayerObject(ulong clientId, Stream spawnPayload = null, bool
433433
/// </summary>
434434
public void Despawn(bool destroy = false)
435435
{
436-
NetworkSpawnManager.DespawnObject(this, destroy);
436+
NetworkManager.Singleton.SpawnManager.DespawnObject(this, destroy);
437437
}
438438

439439

@@ -442,7 +442,7 @@ public void Despawn(bool destroy = false)
442442
/// </summary>
443443
public void RemoveOwnership()
444444
{
445-
NetworkSpawnManager.RemoveOwnership(this);
445+
NetworkManager.Singleton.SpawnManager.RemoveOwnership(this);
446446
}
447447

448448
/// <summary>
@@ -451,7 +451,7 @@ public void RemoveOwnership()
451451
/// <param name="newOwnerClientId">The new owner clientId</param>
452452
public void ChangeOwnership(ulong newOwnerClientId)
453453
{
454-
NetworkSpawnManager.ChangeOwnership(this, newOwnerClientId);
454+
NetworkManager.Singleton.SpawnManager.ChangeOwnership(this, newOwnerClientId);
455455
}
456456

457457
internal void InvokeBehaviourOnLostOwnership()

0 commit comments

Comments
 (0)