Skip to content

Commit edf36fb

Browse files
committed
Rewrote Spawn and Scene managment
1 parent 7d5f888 commit edf36fb

13 files changed

+754
-848
lines changed

MLAPI-Editor/NetworkedObjectEditor.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ public override void OnInspectorGUI()
3939
}
4040
else if (networkedObject.IsSpawned)
4141
{
42-
EditorGUILayout.LabelField("PrefabName: ", networkedObject.NetworkedPrefabName, EditorStyles.label);
43-
EditorGUILayout.LabelField("PrefabHash: ", networkedObject.NetworkedPrefabHash.ToString(), EditorStyles.label);
42+
EditorGUILayout.LabelField("PrefabName: ", networkedObject.PrefabHashGenerator, EditorStyles.label);
43+
EditorGUILayout.LabelField("PrefabHash: ", networkedObject.PrefabHash.ToString(), EditorStyles.label);
44+
EditorGUILayout.LabelField("InstanceId: ", networkedObject.PrefabInstanceId.ToString(), EditorStyles.label);
4445
EditorGUILayout.LabelField("NetworkId: ", networkedObject.NetworkId.ToString(), EditorStyles.label);
4546
EditorGUILayout.LabelField("OwnerId: ", networkedObject.OwnerClientId.ToString(), EditorStyles.label);
4647
EditorGUILayout.LabelField("IsSpawned: ", networkedObject.IsSpawned.ToString(), EditorStyles.label);

MLAPI-Editor/NetworkingManagerEditor.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,11 +130,9 @@ public override void OnInspectorGUI()
130130
EditorGUILayout.Space();
131131
channelsList.DoLayoutList();
132132
EditorGUILayout.Space();
133-
if (networkingManager.NetworkConfig.EnableSceneSwitching)
134-
{
135-
registeredScenesList.DoLayoutList();
136-
EditorGUILayout.Space();
137-
}
133+
134+
registeredScenesList.DoLayoutList();
135+
EditorGUILayout.Space();
138136

139137
serializedObject.ApplyModifiedProperties();
140138
base.OnInspectorGUI();

MLAPI/Data/NetworkConfig.cs

Lines changed: 11 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public class NetworkConfig
6060
/// </summary>
6161
[SerializeField]
6262
[HideInInspector]
63-
internal string PlayerPrefabName;
63+
internal ulong PlayerPrefabHash;
6464
/// <summary>
6565
/// The size of the receive message buffer. This is the max message size including any MLAPI overheads.
6666
/// </summary>
@@ -111,10 +111,6 @@ public class NetworkConfig
111111
/// </summary>
112112
public int SecondsHistory = 5;
113113
/// <summary>
114-
/// Wheter or not to enable scene switching
115-
/// </summary>
116-
public bool EnableSceneSwitching = true;
117-
/// <summary>
118114
/// If your logic uses the NetworkedTime, this should probably be turned off. If however it's needed to maximize accuracy, this is recommended to be turned on
119115
/// </summary>
120116
public bool EnableTimeResync = false;
@@ -123,6 +119,11 @@ public class NetworkConfig
123119
/// If you dynamically add prefabs at runtime, turn this OFF
124120
/// </summary>
125121
public bool ForceSamePrefabs = true;
122+
123+
// TODO: XML
124+
// If true, replace on spawn
125+
// Else, cross find
126+
public bool UsePrefabSync = false;
126127
/// <summary>
127128
/// Decides how many bytes to use for Rpc messaging. Leave this to 2 bytes unless you are facing hash collisions
128129
/// </summary>
@@ -213,13 +214,6 @@ public string ToBase64()
213214
writer.WriteString(config.RegisteredScenes[i]);
214215
}
215216

216-
writer.WriteUInt16Packed((ushort)config.NetworkedPrefabs.Count);
217-
for (int i = 0; i < config.NetworkedPrefabs.Count; i++)
218-
{
219-
writer.WriteBool(config.NetworkedPrefabs[i].playerPrefab);
220-
writer.WriteString(config.NetworkedPrefabs[i].name);
221-
}
222-
223217
writer.WriteInt32Packed(config.MessageBufferSize);
224218
writer.WriteInt32Packed(config.ReceiveTickrate);
225219
writer.WriteInt32Packed(config.MaxReceiveEventsPerTickRate);
@@ -233,7 +227,6 @@ public string ToBase64()
233227
writer.WriteInt32Packed(config.SecondsHistory);
234228
writer.WriteBool(config.EnableEncryption);
235229
writer.WriteBool(config.SignKeyExchange);
236-
writer.WriteBool(config.EnableSceneSwitching);
237230
writer.WriteInt32Packed(config.LoadSceneTimeOut);
238231
writer.WriteBool(config.EnableTimeResync);
239232
writer.WriteBits((byte)config.RpcHashSize, 3);
@@ -248,8 +241,7 @@ public string ToBase64()
248241
/// Sets the NetworkConfig data with that from a base64 encoded version
249242
/// </summary>
250243
/// <param name="base64">The base64 encoded version</param>
251-
/// <param name="createDummyObject">Wheter or not to create dummy objects for NetworkedPrefabs</param>
252-
public void FromBase64(string base64, bool createDummyObject = false)
244+
public void FromBase64(string base64)
253245
{
254246
NetworkConfig config = this;
255247
byte[] binary = Convert.FromBase64String(base64);
@@ -280,27 +272,6 @@ public void FromBase64(string base64, bool createDummyObject = false)
280272
config.RegisteredScenes.Add(reader.ReadString().ToString());
281273
}
282274

283-
ushort networkedPrefabsCount = reader.ReadUInt16Packed();
284-
config.NetworkedPrefabs.Clear();
285-
GameObject root = createDummyObject ? new GameObject("MLAPI: Dummy prefabs") : null;
286-
for (int i = 0; i < networkedPrefabsCount; i++)
287-
{
288-
bool playerPrefab = reader.ReadBool();
289-
string prefabName = reader.ReadString().ToString();
290-
GameObject dummyPrefab = createDummyObject ? new GameObject("REPLACEME: " + prefabName + "(Dummy prefab)", typeof(NetworkedObject)) : null;
291-
if (dummyPrefab != null)
292-
{
293-
dummyPrefab.GetComponent<NetworkedObject>().NetworkedPrefabName = prefabName;
294-
dummyPrefab.transform.SetParent(root.transform); //This is just here to not ruin your hierarchy
295-
}
296-
NetworkedPrefab networkedPrefab = new NetworkedPrefab()
297-
{
298-
playerPrefab = playerPrefab,
299-
prefab = dummyPrefab
300-
};
301-
config.NetworkedPrefabs.Add(networkedPrefab);
302-
}
303-
304275
config.MessageBufferSize = reader.ReadInt32Packed();
305276
config.ReceiveTickrate = reader.ReadInt32Packed();
306277
config.MaxReceiveEventsPerTickRate = reader.ReadInt32Packed();
@@ -314,7 +285,6 @@ public void FromBase64(string base64, bool createDummyObject = false)
314285
config.SecondsHistory = reader.ReadInt32Packed();
315286
config.EnableEncryption = reader.ReadBool();
316287
config.SignKeyExchange = reader.ReadBool();
317-
config.EnableSceneSwitching = reader.ReadBool();
318288
config.LoadSceneTimeOut = reader.ReadInt32Packed();
319289
config.EnableTimeResync = reader.ReadBool();
320290
config.RpcHashSize = (HashSize)reader.ReadBits(3);
@@ -349,26 +319,22 @@ public ulong GetConfig(bool cache = true)
349319
writer.WriteByte((byte)Channels[i].Type);
350320
}
351321

352-
if (EnableSceneSwitching)
322+
for (int i = 0; i < RegisteredScenes.Count; i++)
353323
{
354-
for (int i = 0; i < RegisteredScenes.Count; i++)
355-
{
356-
writer.WriteString(RegisteredScenes[i]);
357-
}
324+
writer.WriteString(RegisteredScenes[i]);
358325
}
359326

360327
if (ForceSamePrefabs)
361328
{
362-
List<NetworkedPrefab> sortedPrefabList = NetworkedPrefabs.OrderBy(x => x.hash).ToList();
329+
List<NetworkedPrefab> sortedPrefabList = NetworkedPrefabs.OrderBy(x => x.Hash).ToList();
363330
for (int i = 0; i < sortedPrefabList.Count; i++)
364331
{
365-
writer.WriteUInt64Packed(sortedPrefabList[i].hash);
332+
writer.WriteUInt64Packed(sortedPrefabList[i].Hash);
366333
}
367334
}
368335

369336
writer.WriteBool(ForceSamePrefabs);
370337
writer.WriteBool(EnableEncryption);
371-
writer.WriteBool(EnableSceneSwitching);
372338
writer.WriteBool(SignKeyExchange);
373339
writer.WriteBits((byte)RpcHashSize, 3);
374340
writer.WriteBits((byte)PrefabHashSize, 3);

MLAPI/Data/NetworkedPrefab.cs

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,48 +10,30 @@ namespace MLAPI.Data
1010
[Serializable]
1111
public class NetworkedPrefab
1212
{
13-
internal string name
13+
internal ulong Hash
1414
{
1515
get
1616
{
17-
if (prefab == null)
18-
{
19-
if (LogHelper.CurrentLogLevel <= LogLevel.Normal) LogHelper.LogWarning("NetworkedPrefab is not assigned");
20-
return string.Empty;
21-
}
22-
else if (prefab.GetComponent<NetworkedObject>() == null)
23-
{
24-
if (LogHelper.CurrentLogLevel <= LogLevel.Normal) LogHelper.LogWarning("The NetworkedPrefab " + prefab.name + " does not have a NetworkedObject");
25-
return prefab.name;
26-
}
27-
else return prefab.GetComponent<NetworkedObject>().NetworkedPrefabName;
28-
}
29-
}
30-
31-
internal ulong hash
32-
{
33-
get
34-
{
35-
if (prefab == null)
17+
if (Prefab == null)
3618
{
3719
if (LogHelper.CurrentLogLevel <= LogLevel.Normal) LogHelper.LogWarning("NetworkedPrefab is not assigned");
3820
return 0;
3921
}
40-
else if (prefab.GetComponent<NetworkedObject>() == null)
22+
else if (Prefab.GetComponent<NetworkedObject>() == null)
4123
{
42-
if (LogHelper.CurrentLogLevel <= LogLevel.Normal) LogHelper.LogWarning("The NetworkedPrefab " + prefab.name + " does not have a NetworkedObject");
24+
if (LogHelper.CurrentLogLevel <= LogLevel.Normal) LogHelper.LogWarning("The NetworkedPrefab " + Prefab.name + " does not have a NetworkedObject");
4325
return 0;
4426
}
45-
else return prefab.GetComponent<NetworkedObject>().NetworkedPrefabHash;
27+
else return Prefab.GetComponent<NetworkedObject>().PrefabHash;
4628
}
4729
}
4830
/// <summary>
4931
/// The gameobject of the prefab
5032
/// </summary>
51-
public GameObject prefab;
33+
public GameObject Prefab;
5234
/// <summary>
5335
/// Wheter or not this is a playerPrefab
5436
/// </summary>
55-
public bool playerPrefab;
37+
public bool PlayerPrefab;
5638
}
5739
}

MLAPI/Data/SceneSwitchProgress.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using MLAPI.Data;
34
using UnityEngine;
45

56
namespace MLAPI.Components
@@ -41,7 +42,7 @@ public class SceneSwitchProgress
4142
/// The callback invoked when a client is done loading the scene.
4243
/// </summary>
4344
public event OnClientLoadedSceneDelegate OnClientLoadedScene;
44-
45+
4546
internal Guid guid { get; } = Guid.NewGuid();
4647

4748
private Coroutine timeOutCoroutine;

MLAPI/MonoBehaviours/Core/NetworkedBehaviour.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,11 @@ public NetworkedObject NetworkedObject
7979

8080
private NetworkedObject _networkedObject = null;
8181
[Obsolete("Use NetworkId instead", false)]
82-
public uint networkId => NetworkId;
82+
public ulong networkId => NetworkId;
8383
/// <summary>
8484
/// Gets the NetworkId of the NetworkedObject that owns the NetworkedBehaviour instance
8585
/// </summary>
86-
public uint NetworkId => NetworkedObject.NetworkId;
86+
public ulong NetworkId => NetworkedObject.NetworkId;
8787
/// <summary>
8888
/// Gets the clientId that owns the NetworkedObject
8989
/// </summary>
@@ -356,7 +356,7 @@ internal void NetworkedVarUpdate()
356356
{
357357
using (PooledBitWriter writer = PooledBitWriter.Get(stream))
358358
{
359-
writer.WriteUInt32Packed(NetworkId);
359+
writer.WriteUInt64Packed(NetworkId);
360360
writer.WriteUInt16Packed(NetworkedObject.GetOrderIndex(this));
361361

362362
uint clientId = NetworkingManager.Singleton.ConnectedClientsList[i].ClientId;
@@ -866,7 +866,7 @@ internal void SendServerRPCPerformance(ulong hash, Stream messageStream, string
866866
{
867867
using (PooledBitWriter writer = PooledBitWriter.Get(stream))
868868
{
869-
writer.WriteUInt32Packed(NetworkId);
869+
writer.WriteUInt64Packed(NetworkId);
870870
writer.WriteUInt16Packed(NetworkedObject.GetOrderIndex(this));
871871
writer.WriteUInt64Packed(hash);
872872

@@ -900,7 +900,7 @@ internal RpcResponse<T> SendServerRPCPerformanceResponse<T>(ulong hash, Stream m
900900
{
901901
using (PooledBitWriter writer = PooledBitWriter.Get(stream))
902902
{
903-
writer.WriteUInt32Packed(NetworkId);
903+
writer.WriteUInt64Packed(NetworkId);
904904
writer.WriteUInt16Packed(NetworkedObject.GetOrderIndex(this));
905905
writer.WriteUInt64Packed(hash);
906906

@@ -957,7 +957,7 @@ internal void SendClientRPCPerformance(ulong hash, List<uint> clientIds, Stream
957957
{
958958
using (PooledBitWriter writer = PooledBitWriter.Get(stream))
959959
{
960-
writer.WriteUInt32Packed(NetworkId);
960+
writer.WriteUInt64Packed(NetworkId);
961961
writer.WriteUInt16Packed(NetworkedObject.GetOrderIndex(this));
962962
writer.WriteUInt64Packed(hash);
963963

@@ -1022,7 +1022,7 @@ internal void SendClientRPCPerformance(ulong hash, Stream messageStream, uint cl
10221022
{
10231023
using (PooledBitWriter writer = PooledBitWriter.Get(stream))
10241024
{
1025-
writer.WriteUInt32Packed(NetworkId);
1025+
writer.WriteUInt64Packed(NetworkId);
10261026
writer.WriteUInt16Packed(NetworkedObject.GetOrderIndex(this));
10271027
writer.WriteUInt64Packed(hash);
10281028

@@ -1074,7 +1074,7 @@ internal void SendClientRPCPerformance(ulong hash, uint clientId, Stream message
10741074
{
10751075
using (PooledBitWriter writer = PooledBitWriter.Get(stream))
10761076
{
1077-
writer.WriteUInt32Packed(NetworkId);
1077+
writer.WriteUInt64Packed(NetworkId);
10781078
writer.WriteUInt16Packed(NetworkedObject.GetOrderIndex(this));
10791079
writer.WriteUInt64Packed(hash);
10801080

@@ -1114,7 +1114,7 @@ internal RpcResponse<T> SendClientRPCPerformanceResponse<T>(ulong hash, uint cli
11141114
{
11151115
using (PooledBitWriter writer = PooledBitWriter.Get(stream))
11161116
{
1117-
writer.WriteUInt32Packed(NetworkId);
1117+
writer.WriteUInt64Packed(NetworkId);
11181118
writer.WriteUInt16Packed(NetworkedObject.GetOrderIndex(this));
11191119
writer.WriteUInt64Packed(hash);
11201120

@@ -1164,7 +1164,7 @@ internal RpcResponse<T> SendClientRPCPerformanceResponse<T>(ulong hash, uint cli
11641164
/// </summary>
11651165
/// <param name="networkId"></param>
11661166
/// <returns></returns>
1167-
protected NetworkedObject GetNetworkedObject(uint networkId)
1167+
protected NetworkedObject GetNetworkedObject(ulong networkId)
11681168
{
11691169
if(SpawnManager.SpawnedObjects.ContainsKey(networkId))
11701170
return SpawnManager.SpawnedObjects[networkId];

0 commit comments

Comments
 (0)