Skip to content

Commit 7b9d2d1

Browse files
committed
Added Sync to new players functionality to syncvars
1 parent c1e6e6c commit 7b9d2d1

File tree

3 files changed

+80
-0
lines changed

3 files changed

+80
-0
lines changed

MLAPI/MonoBehaviours/Core/NetworkedBehaviour.cs

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,72 @@ internal void OnSyncVarUpdate(object value, byte fieldIndex)
240240
syncedFields[fieldIndex].SetValue(this, value);
241241
}
242242

243+
internal void FlushToClient(int clientId)
244+
{
245+
//This NetworkedBehaviour has no SyncVars
246+
if (dirtyFields.Length == 0)
247+
return;
248+
249+
using (MemoryStream stream = new MemoryStream())
250+
{
251+
using (BinaryWriter writer = new BinaryWriter(stream))
252+
{
253+
//Write all indexes
254+
writer.Write(dirtyFields.Length);
255+
for (byte i = 0; i < dirtyFields.Length; i++)
256+
{
257+
writer.Write(networkId);
258+
writer.Write(networkedObject.GetOrderIndex(this));
259+
writer.Write(networkedBehaviourId);
260+
writer.Write(i); //Index
261+
switch (syncedFieldTypes[i])
262+
{
263+
case FieldType.Bool:
264+
writer.Write((bool)syncedFields[i].GetValue(this));
265+
break;
266+
case FieldType.Byte:
267+
writer.Write((byte)syncedFields[i].GetValue(this));
268+
break;
269+
case FieldType.Char:
270+
writer.Write((char)syncedFields[i].GetValue(this));
271+
break;
272+
case FieldType.Double:
273+
writer.Write((double)syncedFields[i].GetValue(this));
274+
break;
275+
case FieldType.Single:
276+
writer.Write((float)syncedFields[i].GetValue(this));
277+
break;
278+
case FieldType.Int:
279+
writer.Write((int)syncedFields[i].GetValue(this));
280+
break;
281+
case FieldType.Long:
282+
writer.Write((long)syncedFields[i].GetValue(this));
283+
break;
284+
case FieldType.SByte:
285+
writer.Write((sbyte)syncedFields[i].GetValue(this));
286+
break;
287+
case FieldType.Short:
288+
writer.Write((short)syncedFields[i].GetValue(this));
289+
break;
290+
case FieldType.UInt:
291+
writer.Write((uint)syncedFields[i].GetValue(this));
292+
break;
293+
case FieldType.ULong:
294+
writer.Write((ulong)syncedFields[i].GetValue(this));
295+
break;
296+
case FieldType.UShort:
297+
writer.Write((ushort)syncedFields[i].GetValue(this));
298+
break;
299+
case FieldType.String:
300+
writer.Write((string)syncedFields[i].GetValue(this));
301+
break;
302+
}
303+
}
304+
NetworkingManager.singleton.Send(clientId, "MLAPI_SYNC_VAR_UPDATE", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", stream.ToArray());
305+
}
306+
}
307+
}
308+
243309
private float lastSyncTime = 0f;
244310
internal void SyncVarUpdate()
245311
{

MLAPI/MonoBehaviours/Core/NetworkedObject.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,15 @@ internal static void InvokeSyncvarUpdate()
112112
}
113113
}
114114

115+
//Flushes all syncVars to client
116+
internal void FlushToClient(int clientId)
117+
{
118+
for (int i = 0; i < NetworkedBehaviours.Count; i++)
119+
{
120+
NetworkedBehaviours[i].FlushToClient(clientId);
121+
}
122+
}
123+
115124
internal ushort GetOrderIndex(NetworkedBehaviour instance)
116125
{
117126
NetworkedBehaviour[] behaviours = GetComponentsInChildren<NetworkedBehaviour>();

MLAPI/MonoBehaviours/Core/NetworkingManager.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1136,6 +1136,11 @@ private void HandleApproval(int clientId, bool approved)
11361136
}
11371137
Send("MLAPI_ADD_OBJECT", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", stream.GetBuffer(), clientId);
11381138
}
1139+
//Flush syncvars:
1140+
foreach (KeyValuePair<uint, NetworkedObject> networkedObject in SpawnManager.spawnedObjects)
1141+
{
1142+
networkedObject.Value.FlushToClient(clientId);
1143+
}
11391144
}
11401145
else
11411146
{

0 commit comments

Comments
 (0)