Skip to content

Commit 0e02dc7

Browse files
feat: NetworkManager Preparation [MTT-5441] (#2475)
Co-authored-by: Fatih Mar <mfatihmar@gmail.com>
1 parent b9f9ceb commit 0e02dc7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+2570
-2028
lines changed

com.unity.netcode.gameobjects/Runtime/Configuration/NetworkPrefab.cs

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ public enum NetworkPrefabOverride
1212
/// No oeverride is present
1313
/// </summary>
1414
None,
15+
1516
/// <summary>
1617
/// Override the prefab when the given SourcePrefabToOverride is requested
1718
/// </summary>
1819
Prefab,
20+
1921
/// <summary>
2022
/// Override the prefab when the given SourceHashToOverride is requested
2123
/// Used in situations where the server assets do not exist in client builds
@@ -71,19 +73,23 @@ public uint SourcePrefabGlobalObjectIdHash
7173
switch (Override)
7274
{
7375
case NetworkPrefabOverride.None:
74-
if (Prefab != null && Prefab.TryGetComponent(out NetworkObject no))
7576
{
76-
return no.GlobalObjectIdHash;
77-
}
77+
if (Prefab != null && Prefab.TryGetComponent(out NetworkObject networkObject))
78+
{
79+
return networkObject.GlobalObjectIdHash;
80+
}
7881

79-
throw new InvalidOperationException("Prefab field isn't set or isn't a Network Object");
82+
throw new InvalidOperationException($"Prefab field is not set or is not a {nameof(NetworkObject)}");
83+
}
8084
case NetworkPrefabOverride.Prefab:
81-
if (SourcePrefabToOverride != null && SourcePrefabToOverride.TryGetComponent(out no))
8285
{
83-
return no.GlobalObjectIdHash;
84-
}
86+
if (SourcePrefabToOverride != null && SourcePrefabToOverride.TryGetComponent(out NetworkObject networkObject))
87+
{
88+
return networkObject.GlobalObjectIdHash;
89+
}
8590

86-
throw new InvalidOperationException("Source Prefab field isn't set or isn't a Network Object");
91+
throw new InvalidOperationException($"Source Prefab field is not set or is not a {nameof(NetworkObject)}");
92+
}
8793
case NetworkPrefabOverride.Hash:
8894
return SourceHashToOverride;
8995
default:
@@ -102,12 +108,14 @@ public uint TargetPrefabGlobalObjectIdHash
102108
return 0;
103109
case NetworkPrefabOverride.Prefab:
104110
case NetworkPrefabOverride.Hash:
105-
if (OverridingTargetPrefab != null && OverridingTargetPrefab.TryGetComponent(out NetworkObject no))
106111
{
107-
return no.GlobalObjectIdHash;
108-
}
112+
if (OverridingTargetPrefab != null && OverridingTargetPrefab.TryGetComponent(out NetworkObject networkObject))
113+
{
114+
return networkObject.GlobalObjectIdHash;
115+
}
109116

110-
throw new InvalidOperationException("Target Prefab field isn't set or isn't a Network Object");
117+
throw new InvalidOperationException($"Target Prefab field is not set or is not a {nameof(NetworkObject)}");
118+
}
111119
default:
112120
throw new ArgumentOutOfRangeException();
113121
}
@@ -130,9 +138,9 @@ public bool Validate(int index = -1)
130138
{
131139
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
132140
{
133-
NetworkLog.LogWarning($"{NetworkManager.PrefabDebugHelper(this)} is missing " +
134-
$"a {nameof(NetworkObject)} component (entry will be ignored).");
141+
NetworkLog.LogWarning($"{NetworkPrefabHandler.PrefabDebugHelper(this)} is missing a {nameof(NetworkObject)} component (entry will be ignored).");
135142
}
143+
136144
return false;
137145
}
138146

@@ -148,9 +156,9 @@ public bool Validate(int index = -1)
148156
{
149157
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
150158
{
151-
NetworkLog.LogWarning($"{nameof(NetworkPrefab)} {nameof(SourceHashToOverride)} is zero " +
152-
"(entry will be ignored).");
159+
NetworkLog.LogWarning($"{nameof(NetworkPrefab)} {nameof(SourceHashToOverride)} is zero (entry will be ignored).");
153160
}
161+
154162
return false;
155163
}
156164

@@ -178,9 +186,9 @@ public bool Validate(int index = -1)
178186
{
179187
if (NetworkLog.CurrentLogLevel <= LogLevel.Error)
180188
{
181-
NetworkLog.LogWarning($"{nameof(NetworkPrefab)} ({SourcePrefabToOverride.name}) " +
182-
$"is missing a {nameof(NetworkObject)} component (entry will be ignored).");
189+
NetworkLog.LogWarning($"{nameof(NetworkPrefab)} ({SourcePrefabToOverride.name}) is missing a {nameof(NetworkObject)} component (entry will be ignored).");
183190
}
191+
184192
return false;
185193
}
186194

@@ -195,6 +203,7 @@ public bool Validate(int index = -1)
195203
{
196204
NetworkLog.LogWarning($"{nameof(NetworkPrefab)} {nameof(OverridingTargetPrefab)} is null!");
197205
}
206+
198207
switch (Override)
199208
{
200209
case NetworkPrefabOverride.Hash:
@@ -208,8 +217,10 @@ public bool Validate(int index = -1)
208217
break;
209218
}
210219
}
220+
211221
return false;
212222
}
223+
213224
return true;
214225
}
215226

com.unity.netcode.gameobjects/Runtime/Connection/NetworkClient.cs

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,74 @@ namespace Unity.Netcode
77
/// </summary>
88
public class NetworkClient
99
{
10+
/// <summary>
11+
/// Returns true if the session instance is considered a server
12+
/// </summary>
13+
internal bool IsServer { get; set; }
14+
15+
/// <summary>
16+
/// Returns true if the session instance is considered a client
17+
/// </summary>
18+
internal bool IsClient { get; set; }
19+
20+
/// <summary>
21+
/// Returns true if the session instance is considered a host
22+
/// </summary>
23+
internal bool IsHost => IsClient && IsServer;
24+
25+
/// <summary>
26+
/// When true, the client is connected, approved, and synchronized with
27+
/// the server.
28+
/// </summary>
29+
internal bool IsConnected { get; set; }
30+
31+
/// <summary>
32+
/// Is true when the client has been approved.
33+
/// </summary>
34+
internal bool IsApproved { get; set; }
35+
1036
/// <summary>
1137
/// The ClientId of the NetworkClient
1238
/// </summary>
39+
// TODO-2023-Q2: Determine if we want to make this property a public get and internal/private set
40+
// There is no reason for a user to want to set this, but this will fail the package-validation-suite
1341
public ulong ClientId;
1442

1543
/// <summary>
1644
/// The PlayerObject of the Client
1745
/// </summary>
46+
// TODO-2023-Q2: Determine if we want to make this property a public get and internal/private set
47+
// There is no reason for a user to want to set this, but this will fail the package-validation-suite
1848
public NetworkObject PlayerObject;
1949

2050
/// <summary>
21-
/// The NetworkObject's owned by this Client
51+
/// The list of NetworkObject's owned by this client instance
2252
/// </summary>
23-
public List<NetworkObject> OwnedObjects
53+
public List<NetworkObject> OwnedObjects => IsConnected ? SpawnManager.GetClientOwnedObjects(ClientId) : new List<NetworkObject>();
54+
55+
internal NetworkSpawnManager SpawnManager { get; private set; }
56+
57+
internal void SetRole(bool isServer, bool isClient, NetworkManager networkManager = null)
2458
{
25-
get
59+
IsServer = isServer;
60+
IsClient = isClient;
61+
if (!IsServer && !isClient)
2662
{
27-
if (PlayerObject != null && PlayerObject.NetworkManager != null && PlayerObject.NetworkManager.IsListening)
28-
{
29-
return PlayerObject.NetworkManager.SpawnManager.GetClientOwnedObjects(ClientId);
30-
}
63+
PlayerObject = null;
64+
ClientId = 0;
65+
IsConnected = false;
66+
IsApproved = false;
67+
}
3168

32-
return new List<NetworkObject>();
69+
if (networkManager != null)
70+
{
71+
SpawnManager = networkManager.SpawnManager;
3372
}
3473
}
74+
75+
internal void AssignPlayerObject(ref NetworkObject networkObject)
76+
{
77+
PlayerObject = networkObject;
78+
}
3579
}
3680
}

0 commit comments

Comments
 (0)