Skip to content

Commit 33d39b4

Browse files
committed
refactor!: SpawnManager is no longer static
BREAKING CHANGE: SpawnManager is no longer static. Access it with NetworkManager.Singleton.SpawnManager
1 parent 2571b8c commit 33d39b4

File tree

8 files changed

+162
-145
lines changed

8 files changed

+162
-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: 28 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,11 @@ public void Shutdown()
691695
IsServer = false;
692696
IsClient = false;
693697
NetworkConfig.NetworkTransport.OnTransportEvent -= HandleRawTransportPoll;
694-
NetworkSpawnManager.DestroyNonSceneObjects();
695-
NetworkSpawnManager.ServerResetShudownStateForSceneObjects();
698+
699+
SpawnManager.DestroyNonSceneObjects();
700+
SpawnManager.ServerResetShudownStateForSceneObjects();
701+
702+
SpawnManager = null;
696703

697704
//The Transport is set during Init time, thus it is possible for the Transport to be null
698705
NetworkConfig?.NetworkTransport?.Shutdown();
@@ -1213,7 +1220,7 @@ private static void ReceiveCallback(NetworkBuffer messageBuffer, RpcQueueContain
12131220
/// </summary>
12141221
/// <param name="queueItem">frame queue item to invoke</param>
12151222
#pragma warning disable 618
1216-
internal static void InvokeRpc(RpcFrameQueueItem queueItem)
1223+
internal void InvokeRpc(RpcFrameQueueItem queueItem)
12171224
{
12181225
#if DEVELOPMENT_BUILD || UNITY_EDITOR
12191226
s_InvokeRpc.Begin();
@@ -1225,12 +1232,12 @@ internal static void InvokeRpc(RpcFrameQueueItem queueItem)
12251232

12261233
if (__ntable.ContainsKey(networkMethodId))
12271234
{
1228-
if (!NetworkSpawnManager.SpawnedObjects.ContainsKey(networkObjectId))
1235+
if (!SpawnManager.SpawnedObjects.ContainsKey(networkObjectId))
12291236
{
12301237
return;
12311238
}
12321239

1233-
var networkObject = NetworkSpawnManager.SpawnedObjects[networkObjectId];
1240+
var networkObject = SpawnManager.SpawnedObjects[networkObjectId];
12341241

12351242
var networkBehaviour = networkObject.GetNetworkBehaviourAtOrderIndex(networkBehaviourId);
12361243
if (networkBehaviour == null)
@@ -1344,10 +1351,10 @@ internal void OnClientDisconnectFromServer(ulong clientId)
13441351
{
13451352
if (ConnectedClients[clientId].PlayerObject != null)
13461353
{
1347-
if (NetworkSpawnManager.CustomDestroyHandlers.ContainsKey(ConnectedClients[clientId].PlayerObject.PrefabHash))
1354+
if (SpawnManager.CustomDestroyHandlers.ContainsKey(ConnectedClients[clientId].PlayerObject.PrefabHash))
13481355
{
1349-
NetworkSpawnManager.CustomDestroyHandlers[ConnectedClients[clientId].PlayerObject.PrefabHash](ConnectedClients[clientId].PlayerObject);
1350-
NetworkSpawnManager.OnDestroyObject(ConnectedClients[clientId].PlayerObject.NetworkObjectId, false);
1356+
SpawnManager.CustomDestroyHandlers[ConnectedClients[clientId].PlayerObject.PrefabHash](ConnectedClients[clientId].PlayerObject);
1357+
SpawnManager.OnDestroyObject(ConnectedClients[clientId].PlayerObject.NetworkObjectId, false);
13511358
}
13521359
else
13531360
{
@@ -1361,10 +1368,10 @@ internal void OnClientDisconnectFromServer(ulong clientId)
13611368
{
13621369
if (!ConnectedClients[clientId].OwnedObjects[i].DontDestroyWithOwner)
13631370
{
1364-
if (NetworkSpawnManager.CustomDestroyHandlers.ContainsKey(ConnectedClients[clientId].OwnedObjects[i].PrefabHash))
1371+
if (SpawnManager.CustomDestroyHandlers.ContainsKey(ConnectedClients[clientId].OwnedObjects[i].PrefabHash))
13651372
{
1366-
NetworkSpawnManager.CustomDestroyHandlers[ConnectedClients[clientId].OwnedObjects[i].PrefabHash](ConnectedClients[clientId].OwnedObjects[i]);
1367-
NetworkSpawnManager.OnDestroyObject(ConnectedClients[clientId].OwnedObjects[i].NetworkObjectId, false);
1373+
SpawnManager.CustomDestroyHandlers[ConnectedClients[clientId].OwnedObjects[i].PrefabHash](ConnectedClients[clientId].OwnedObjects[i]);
1374+
SpawnManager.OnDestroyObject(ConnectedClients[clientId].OwnedObjects[i].NetworkObjectId, false);
13681375
}
13691376
else
13701377
{
@@ -1380,7 +1387,7 @@ internal void OnClientDisconnectFromServer(ulong clientId)
13801387

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

1383-
foreach (var sobj in NetworkSpawnManager.SpawnedObjectsList)
1390+
foreach (var sobj in SpawnManager.SpawnedObjectsList)
13841391
{
13851392
sobj.Observers.Remove(clientId);
13861393
}
@@ -1446,15 +1453,15 @@ internal void HandleApproval(ulong ownerClientId, bool createPlayerObject, ulong
14461453

14471454
if (createPlayerObject)
14481455
{
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);
1456+
var networkObject = SpawnManager.CreateLocalNetworkObject(false, 0, playerPrefabHash ?? NetworkConfig.PlayerPrefabHash.Value, ownerClientId, null, position, rotation);
1457+
SpawnManager.SpawnNetworkObjectLocally(networkObject, SpawnManager.GetNetworkObjectId(), false, true, ownerClientId, null, false, 0, false, false);
14511458

14521459
ConnectedClients[ownerClientId].PlayerObject = networkObject;
14531460
}
14541461

14551462
m_ObservedObjects.Clear();
14561463

1457-
foreach (var sobj in NetworkSpawnManager.SpawnedObjectsList)
1464+
foreach (var sobj in SpawnManager.SpawnedObjectsList)
14581465
{
14591466
if (ownerClientId == ServerClientId || sobj.CheckObjectVisibility == null || sobj.CheckObjectVisibility(ownerClientId))
14601467
{

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)