|
1 | | -using System.Collections.Generic; |
| 1 | +using System; |
| 2 | +using System.Collections.Generic; |
2 | 3 | using System.IO; |
3 | | -using JetBrains.Annotations; |
4 | | -using MLAPI.Configuration; |
5 | 4 | using MLAPI.Data; |
| 5 | +using MLAPI.Exceptions; |
6 | 6 | using MLAPI.Internal; |
7 | 7 | using MLAPI.Logging; |
8 | | -using MLAPI.NetworkedVar; |
9 | 8 | using MLAPI.Serialization; |
10 | 9 | using UnityEngine; |
11 | | -using UnityEngine.SceneManagement; |
12 | 10 |
|
13 | 11 | namespace MLAPI.Components |
14 | 12 | { |
@@ -165,55 +163,64 @@ public static NetworkedObject GetPlayerObject(ulong clientId) |
165 | 163 | return NetworkingManager.Singleton.ConnectedClients[clientId].PlayerObject; |
166 | 164 | } |
167 | 165 |
|
168 | | - internal static void RemoveOwnership(ulong networkId) |
| 166 | + internal static void RemoveOwnership(NetworkedObject netObject) |
169 | 167 | { |
170 | 168 | if (!NetworkingManager.Singleton.IsServer) |
171 | 169 | { |
172 | | - if (LogHelper.CurrentLogLevel <= LogLevel.Normal) LogHelper.LogWarning("You can only remove ownership from Server"); |
173 | | - return; |
| 170 | + throw new NotServerException("Only the server can change ownership"); |
| 171 | + } |
| 172 | + |
| 173 | + if (!netObject.IsSpawned) |
| 174 | + { |
| 175 | + throw new SpawnStateException("Object is not spawned"); |
174 | 176 | } |
175 | 177 |
|
176 | | - NetworkedObject netObject = SpawnManager.SpawnedObjects[networkId]; |
177 | 178 | for (int i = NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects.Count - 1; i > -1; i--) |
178 | 179 | { |
179 | | - if (NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects[i].NetworkId == networkId) |
| 180 | + if (NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects[i] == netObject) |
180 | 181 | NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects.RemoveAt(i); |
181 | 182 | } |
| 183 | + |
182 | 184 | netObject._ownerClientId = null; |
183 | 185 |
|
184 | 186 | using (PooledBitStream stream = PooledBitStream.Get()) |
185 | 187 | { |
186 | 188 | using (PooledBitWriter writer = PooledBitWriter.Get(stream)) |
187 | 189 | { |
188 | | - writer.WriteUInt64Packed(networkId); |
| 190 | + writer.WriteUInt64Packed(netObject.NetworkId); |
189 | 191 | writer.WriteUInt64Packed(netObject.OwnerClientId); |
190 | 192 |
|
191 | 193 | InternalMessageHandler.Send(MLAPIConstants.MLAPI_CHANGE_OWNER, "MLAPI_INTERNAL", stream, SecuritySendFlags.None, netObject); |
192 | 194 | } |
193 | 195 | } |
194 | 196 | } |
195 | 197 |
|
196 | | - internal static void ChangeOwnership(ulong networkId, ulong clientId) |
| 198 | + internal static void ChangeOwnership(NetworkedObject netObject, ulong clientId) |
197 | 199 | { |
198 | 200 | if (!NetworkingManager.Singleton.IsServer) |
199 | 201 | { |
200 | | - if (LogHelper.CurrentLogLevel <= LogLevel.Normal) LogHelper.LogWarning("You can only change ownership from Server"); |
201 | | - return; |
| 202 | + throw new NotServerException("Only the server can change ownership"); |
202 | 203 | } |
203 | | - NetworkedObject netObject = SpawnManager.SpawnedObjects[networkId]; |
| 204 | + |
| 205 | + if (!netObject.IsSpawned) |
| 206 | + { |
| 207 | + throw new SpawnStateException("Object is not spawned"); |
| 208 | + } |
| 209 | + |
204 | 210 | for (int i = NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects.Count - 1; i > -1; i--) |
205 | 211 | { |
206 | | - if (NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects[i].NetworkId == networkId) |
| 212 | + if (NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects[i] == netObject) |
207 | 213 | NetworkingManager.Singleton.ConnectedClients[netObject.OwnerClientId].OwnedObjects.RemoveAt(i); |
208 | 214 | } |
| 215 | + |
209 | 216 | NetworkingManager.Singleton.ConnectedClients[clientId].OwnedObjects.Add(netObject); |
210 | 217 | netObject.OwnerClientId = clientId; |
211 | 218 |
|
212 | 219 | using (PooledBitStream stream = PooledBitStream.Get()) |
213 | 220 | { |
214 | 221 | using (PooledBitWriter writer = PooledBitWriter.Get(stream)) |
215 | 222 | { |
216 | | - writer.WriteUInt64Packed(networkId); |
| 223 | + writer.WriteUInt64Packed(netObject.NetworkId); |
217 | 224 | writer.WriteUInt64Packed(clientId); |
218 | 225 |
|
219 | 226 | InternalMessageHandler.Send(MLAPIConstants.MLAPI_CHANGE_OWNER, "MLAPI_INTERNAL", stream, SecuritySendFlags.None, netObject); |
@@ -259,14 +266,12 @@ internal static void SpawnNetworkedObjectLocally(NetworkedObject netObject, ulon |
259 | 266 | { |
260 | 267 | if (netObject == null) |
261 | 268 | { |
262 | | - if (LogHelper.CurrentLogLevel <= LogLevel.Error) LogHelper.LogError("Cannot spawn null object"); |
263 | | - return; |
| 269 | + throw new ArgumentNullException(nameof(netObject), "Cannot spawn null object"); |
264 | 270 | } |
265 | 271 |
|
266 | 272 | if (netObject.IsSpawned) |
267 | 273 | { |
268 | | - if (LogHelper.CurrentLogLevel <= LogLevel.Error) LogHelper.LogError("Cannot spawn already spawned object"); |
269 | | - return; |
| 274 | + throw new SpawnStateException("Object is already spawned"); |
270 | 275 | } |
271 | 276 |
|
272 | 277 |
|
@@ -393,13 +398,12 @@ internal static void UnSpawnObject(NetworkedObject netObject) |
393 | 398 | { |
394 | 399 | if (!netObject.IsSpawned) |
395 | 400 | { |
396 | | - if (LogHelper.CurrentLogLevel <= LogLevel.Normal) LogHelper.LogWarning("Cannot unspawn objects that are not spawned"); |
397 | | - return; |
| 401 | + throw new SpawnStateException("Object is not spawned"); |
398 | 402 | } |
399 | | - else if (!NetworkingManager.Singleton.IsServer) |
| 403 | + |
| 404 | + if (!NetworkingManager.Singleton.IsServer) |
400 | 405 | { |
401 | | - if (LogHelper.CurrentLogLevel <= LogLevel.Normal) LogHelper.LogWarning("Only server can unspawn objects"); |
402 | | - return; |
| 406 | + throw new NotServerException("Only server unspawn objects"); |
403 | 407 | } |
404 | 408 |
|
405 | 409 | OnDestroyObject(netObject.NetworkId, false); |
|
0 commit comments