Skip to content

Commit e4d628e

Browse files
authored
refactor: FindObjectsByType instead of FindObjectsOfType for 2023.1+ (#2478)
1 parent bf8929c commit e4d628e

File tree

1 file changed

+41
-16
lines changed

1 file changed

+41
-16
lines changed

com.unity.netcode.gameobjects/TestHelpers/Runtime/NetcodeIntegrationTest.cs

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public abstract class NetcodeIntegrationTest
2424
/// determine how clients will load scenes
2525
/// </summary>
2626
internal static bool IsRunning { get; private set; }
27+
2728
protected static TimeoutHelper s_GlobalTimeoutHelper = new TimeoutHelper(8.0f);
2829
protected static WaitForSecondsRealtime s_DefaultWaitForTick = new WaitForSecondsRealtime(1.0f / k_DefaultTickRate);
2930

@@ -46,6 +47,7 @@ public static void RegisterNetworkObject(NetworkObject networkObject)
4647
{
4748
s_GlobalNetworkObjects.Add(networkObject.NetworkManager.LocalClientId, new Dictionary<ulong, NetworkObject>());
4849
}
50+
4951
if (s_GlobalNetworkObjects[networkObject.NetworkManager.LocalClientId].ContainsKey(networkObject.NetworkObjectId))
5052
{
5153
if (s_GlobalNetworkObjects[networkObject.NetworkManager.LocalClientId] == null)
@@ -102,9 +104,9 @@ public static void DeregisterNetworkObject(ulong localClientId, ulong networkObj
102104

103105
public enum NetworkManagerInstatiationMode
104106
{
105-
PerTest, // This will create and destroy new NetworkManagers for each test within a child derived class
106-
AllTests, // This will create one set of NetworkManagers used for all tests within a child derived class (destroyed once all tests are finished)
107-
DoNotCreate // This will not create any NetworkManagers, it is up to the derived class to manage.
107+
PerTest, // This will create and destroy new NetworkManagers for each test within a child derived class
108+
AllTests, // This will create one set of NetworkManagers used for all tests within a child derived class (destroyed once all tests are finished)
109+
DoNotCreate // This will not create any NetworkManagers, it is up to the derived class to manage.
108110
}
109111

110112
public enum HostOrServer
@@ -286,6 +288,7 @@ protected virtual IEnumerator OnSetup()
286288
{
287289
yield return null;
288290
}
291+
289292
/// <summary>
290293
/// Called before creating and starting the server and clients
291294
/// Note: For <see cref="NetworkManagerInstatiationMode.AllTests"/> and
@@ -333,6 +336,7 @@ public IEnumerator SetUp()
333336
yield return StartServerAndClients();
334337
}
335338
}
339+
336340
VerboseDebug($"Exiting {nameof(SetUp)}");
337341
}
338342

@@ -397,6 +401,7 @@ private void AddRemoveNetworkManager(NetworkManager networkManager, bool addNetw
397401
{
398402
clientNetworkManagersList.Remove(networkManager);
399403
}
404+
400405
m_ClientNetworkManagers = clientNetworkManagersList.ToArray();
401406
m_NumberOfClients = clientNetworkManagersList.Count;
402407
}
@@ -407,7 +412,6 @@ private void AddRemoveNetworkManager(NetworkManager networkManager, bool addNetw
407412
/// </summary>
408413
protected virtual void OnNewClientCreated(NetworkManager networkManager)
409414
{
410-
411415
}
412416

413417
/// <summary>
@@ -425,7 +429,6 @@ protected virtual void OnNewClientStarted(NetworkManager networkManager)
425429
/// </summary>
426430
protected virtual void OnNewClientStartedAndConnected(NetworkManager networkManager)
427431
{
428-
429432
}
430433

431434
/// <summary>
@@ -461,6 +464,7 @@ protected IEnumerator CreateAndStartNewClient()
461464
AddRemoveNetworkManager(networkManager, false);
462465
Object.DestroyImmediate(networkManager.gameObject);
463466
}
467+
464468
AssertOnTimeout($"{nameof(CreateAndStartNewClient)} timed out waiting for the new client to be connected!");
465469
ClientNetworkManagerPostStart(networkManager);
466470
VerboseDebug($"[{networkManager.name}] Created and connected!");
@@ -499,6 +503,7 @@ protected void CreateAndStartNewClientWithTimeTravel()
499503
AddRemoveNetworkManager(networkManager, false);
500504
Object.DestroyImmediate(networkManager.gameObject);
501505
}
506+
502507
Assert.IsTrue(connected, $"{nameof(CreateAndStartNewClient)} timed out waiting for the new client to be connected!");
503508
ClientNetworkManagerPostStart(networkManager);
504509
VerboseDebug($"[{networkManager.name}] Created and connected!");
@@ -638,6 +643,7 @@ private void ClientNetworkManagerPostStart(NetworkManager networkManager)
638643
{
639644
m_PlayerNetworkObjects.Add(playerNetworkObject.NetworkManager.LocalClientId, new Dictionary<ulong, NetworkObject>());
640645
}
646+
641647
if (!m_PlayerNetworkObjects[playerNetworkObject.NetworkManager.LocalClientId].ContainsKey(networkManager.LocalClientId))
642648
{
643649
m_PlayerNetworkObjects[playerNetworkObject.NetworkManager.LocalClientId].Add(networkManager.LocalClientId, playerNetworkObject);
@@ -667,6 +673,7 @@ protected void ClientNetworkManagerPostStartInit()
667673
{
668674
ClientNetworkManagerPostStart(networkManager);
669675
}
676+
670677
if (m_UseHost)
671678
{
672679
#if UNITY_2023_1_OR_NEWER
@@ -681,6 +688,7 @@ protected void ClientNetworkManagerPostStartInit()
681688
{
682689
m_PlayerNetworkObjects.Add(playerNetworkObject.NetworkManager.LocalClientId, new Dictionary<ulong, NetworkObject>());
683690
}
691+
684692
if (!m_PlayerNetworkObjects[playerNetworkObject.NetworkManager.LocalClientId].ContainsKey(m_ServerNetworkManager.LocalClientId))
685693
{
686694
m_PlayerNetworkObjects[playerNetworkObject.NetworkManager.LocalClientId].Add(m_ServerNetworkManager.LocalClientId, playerNetworkObject);
@@ -742,6 +750,7 @@ protected IEnumerator StartServerAndClients()
742750
{
743751
m_PlayerNetworkObjects.Add(playerNetworkObject.NetworkManager.LocalClientId, new Dictionary<ulong, NetworkObject>());
744752
}
753+
745754
m_PlayerNetworkObjects[playerNetworkObject.NetworkManager.LocalClientId].Add(m_ServerNetworkManager.LocalClientId, playerNetworkObject);
746755
}
747756
}
@@ -808,6 +817,7 @@ protected void StartServerAndClientsWithTimeTravel()
808817
{
809818
m_PlayerNetworkObjects.Add(playerNetworkObject.NetworkManager.LocalClientId, new Dictionary<ulong, NetworkObject>());
810819
}
820+
811821
m_PlayerNetworkObjects[playerNetworkObject.NetworkManager.LocalClientId].Add(m_ServerNetworkManager.LocalClientId, playerNetworkObject);
812822
}
813823
}
@@ -898,7 +908,10 @@ protected void ShutdownAndCleanUp()
898908
m_PlayerNetworkObjects.Clear();
899909
s_GlobalNetworkObjects.Clear();
900910
}
901-
catch (Exception e) { throw e; }
911+
catch (Exception e)
912+
{
913+
throw e;
914+
}
902915
finally
903916
{
904917
if (m_PlayerPrefab != null)
@@ -1028,6 +1041,7 @@ protected void DestroySceneNetworkObjects()
10281041
{
10291042
continue;
10301043
}
1044+
10311045
if (CanDestroyNetworkObject(networkObject))
10321046
{
10331047
networkObject.NetworkManagerOwner = m_ServerNetworkManager;
@@ -1086,6 +1100,7 @@ public static IEnumerator WaitForConditionOrTimeOut(Func<bool> checkForCondition
10861100
// Otherwise wait for 1 tick interval
10871101
yield return s_DefaultWaitForTick;
10881102
}
1103+
10891104
// Stop checking for a timeout
10901105
timeOutHelper.Stop();
10911106
}
@@ -1124,6 +1139,7 @@ public bool WaitForConditionOrTimeOutWithTimeTravel(Func<bool> checkForCondition
11241139
return true;
11251140
}
11261141
}
1142+
11271143
return false;
11281144
}
11291145

@@ -1200,7 +1216,7 @@ protected bool WaitForClientsConnectedOrTimeOutWithTimeTravel(NetworkManager[] c
12001216
var serverClientCount = m_ServerNetworkManager.IsHost ? remoteClientCount + 1 : remoteClientCount;
12011217

12021218
return WaitForConditionOrTimeOutWithTimeTravel(() => clientsToCheck.Where((c) => c.IsConnectedClient).Count() == remoteClientCount &&
1203-
m_ServerNetworkManager.ConnectedClients.Count == serverClientCount);
1219+
m_ServerNetworkManager.ConnectedClients.Count == serverClientCount);
12041220
}
12051221

12061222
/// <summary>
@@ -1232,6 +1248,7 @@ internal IEnumerator WaitForMessageReceived<T>(List<NetworkManager> wiatForRecei
12321248
messageHook.AssignMessageType<T>();
12331249
messageHookEntriesForSpawn.Add(messageHook);
12341250
}
1251+
12351252
// Used to determine if all clients received the CreateObjectMessage
12361253
var hooks = new MessageHooksConditional(messageHookEntriesForSpawn);
12371254
yield return WaitForConditionOrTimeOut(hooks);
@@ -1251,6 +1268,7 @@ internal IEnumerator WaitForMessagesReceived(List<Type> messagesInOrder, List<Ne
12511268
messageHookEntriesForSpawn.Add(messageHook);
12521269
}
12531270
}
1271+
12541272
// Used to determine if all clients received the CreateObjectMessage
12551273
var hooks = new MessageHooksConditional(messageHookEntriesForSpawn);
12561274
yield return WaitForConditionOrTimeOut(hooks);
@@ -1268,6 +1286,7 @@ internal void WaitForMessageReceivedWithTimeTravel<T>(List<NetworkManager> waitF
12681286
messageHook.AssignMessageType<T>();
12691287
messageHookEntriesForSpawn.Add(messageHook);
12701288
}
1289+
12711290
// Used to determine if all clients received the CreateObjectMessage
12721291
var hooks = new MessageHooksConditional(messageHookEntriesForSpawn);
12731292
Assert.True(WaitForConditionOrTimeOutWithTimeTravel(hooks));
@@ -1286,6 +1305,7 @@ internal void WaitForMessagesReceivedWithTimeTravel(List<Type> messagesInOrder,
12861305
messageHookEntriesForSpawn.Add(messageHook);
12871306
}
12881307
}
1308+
12891309
// Used to determine if all clients received the CreateObjectMessage
12901310
var hooks = new MessageHooksConditional(messageHookEntriesForSpawn);
12911311
Assert.True(WaitForConditionOrTimeOutWithTimeTravel(hooks));
@@ -1301,7 +1321,7 @@ internal void WaitForMessagesReceivedWithTimeTravel(List<Type> messagesInOrder,
13011321
protected GameObject CreateNetworkObjectPrefab(string baseName)
13021322
{
13031323
var prefabCreateAssertError = $"You can only invoke this method during {nameof(OnServerAndClientsCreated)} " +
1304-
$"but before {nameof(OnStartedServerAndClients)}!";
1324+
$"but before {nameof(OnStartedServerAndClients)}!";
13051325
Assert.IsNotNull(m_ServerNetworkManager, prefabCreateAssertError);
13061326
Assert.IsFalse(m_ServerNetworkManager.IsListening, prefabCreateAssertError);
13071327

@@ -1375,6 +1395,7 @@ private List<GameObject> SpawnObjects(NetworkObject prefabNetworkObject, Network
13751395
{
13761396
gameObjectsSpawned.Add(SpawnObject(prefabNetworkObject, owner, destroyWithScene));
13771397
}
1398+
13781399
return gameObjectsSpawned;
13791400
}
13801401

@@ -1383,7 +1404,6 @@ private List<GameObject> SpawnObjects(NetworkObject prefabNetworkObject, Network
13831404
/// </summary>
13841405
public NetcodeIntegrationTest()
13851406
{
1386-
13871407
}
13881408

13891409
/// <summary>
@@ -1429,6 +1449,7 @@ private void UnloadRemainingScenes()
14291449
{
14301450
continue;
14311451
}
1452+
14321453
VerboseDebug($"Unloading scene {scene.name}-{scene.handle}");
14331454
var asyncOperation = SceneManager.UnloadSceneAsync(scene);
14341455
}
@@ -1468,6 +1489,7 @@ private IEnumerator WaitForTickAndFrames(NetworkManager networkManager, int tick
14681489
}
14691490
}
14701491
}
1492+
14711493
m_WaitForLog.Append($"[NetworkManager-{networkManager.LocalClientId}][WaitForTicks-End] Waited for ({networkManager.NetworkTickSystem.LocalTime.Tick - tickStart}) network ticks and ({frameCount}) frames to pass.\n");
14721494
yield break;
14731495
}
@@ -1534,31 +1556,34 @@ public static void SimulateOneFrame()
15341556
foreach (NetworkUpdateStage stage in Enum.GetValues(typeof(NetworkUpdateStage)))
15351557
{
15361558
NetworkUpdateLoop.RunNetworkUpdateStage(stage);
1537-
var methodName = "";
1559+
string methodName = string.Empty;
15381560
switch (stage)
15391561
{
15401562
case NetworkUpdateStage.FixedUpdate:
1541-
methodName = "FixedUpdate";
1563+
methodName = "FixedUpdate"; // mapping NetworkUpdateStage.FixedUpdate to MonoBehaviour.FixedUpdate
15421564
break;
15431565
case NetworkUpdateStage.Update:
1544-
methodName = "Update";
1566+
methodName = "Update"; // mapping NetworkUpdateStage.Update to MonoBehaviour.Update
15451567
break;
15461568
case NetworkUpdateStage.PreLateUpdate:
1547-
methodName = "LateUpdate";
1569+
methodName = "LateUpdate"; // mapping NetworkUpdateStage.PreLateUpdate to MonoBehaviour.LateUpdate
15481570
break;
1549-
15501571
}
15511572

1552-
1553-
if (methodName != "")
1573+
if (!string.IsNullOrEmpty(methodName))
15541574
{
1575+
#if UNITY_2023_1_OR_NEWER
1576+
foreach (var behaviour in Object.FindObjectsByType<NetworkBehaviour>(FindObjectsSortMode.InstanceID))
1577+
#else
15551578
foreach (var behaviour in Object.FindObjectsOfType<NetworkBehaviour>())
1579+
#endif
15561580
{
15571581
var method = behaviour.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
15581582
if (method == null)
15591583
{
15601584
method = behaviour.GetType().GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance);
15611585
}
1586+
15621587
method?.Invoke(behaviour, new object[] { });
15631588
}
15641589
}

0 commit comments

Comments
 (0)