Added Sync to new players functionality to syncvars

This commit is contained in:
Albin Corén 2018-03-07 21:52:55 +01:00
parent c1e6e6cbf9
commit 7b9d2d14a7
3 changed files with 80 additions and 0 deletions

View File

@ -240,6 +240,72 @@ namespace MLAPI
syncedFields[fieldIndex].SetValue(this, value);
}
internal void FlushToClient(int clientId)
{
//This NetworkedBehaviour has no SyncVars
if (dirtyFields.Length == 0)
return;
using (MemoryStream stream = new MemoryStream())
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
//Write all indexes
writer.Write(dirtyFields.Length);
for (byte i = 0; i < dirtyFields.Length; i++)
{
writer.Write(networkId);
writer.Write(networkedObject.GetOrderIndex(this));
writer.Write(networkedBehaviourId);
writer.Write(i); //Index
switch (syncedFieldTypes[i])
{
case FieldType.Bool:
writer.Write((bool)syncedFields[i].GetValue(this));
break;
case FieldType.Byte:
writer.Write((byte)syncedFields[i].GetValue(this));
break;
case FieldType.Char:
writer.Write((char)syncedFields[i].GetValue(this));
break;
case FieldType.Double:
writer.Write((double)syncedFields[i].GetValue(this));
break;
case FieldType.Single:
writer.Write((float)syncedFields[i].GetValue(this));
break;
case FieldType.Int:
writer.Write((int)syncedFields[i].GetValue(this));
break;
case FieldType.Long:
writer.Write((long)syncedFields[i].GetValue(this));
break;
case FieldType.SByte:
writer.Write((sbyte)syncedFields[i].GetValue(this));
break;
case FieldType.Short:
writer.Write((short)syncedFields[i].GetValue(this));
break;
case FieldType.UInt:
writer.Write((uint)syncedFields[i].GetValue(this));
break;
case FieldType.ULong:
writer.Write((ulong)syncedFields[i].GetValue(this));
break;
case FieldType.UShort:
writer.Write((ushort)syncedFields[i].GetValue(this));
break;
case FieldType.String:
writer.Write((string)syncedFields[i].GetValue(this));
break;
}
}
NetworkingManager.singleton.Send(clientId, "MLAPI_SYNC_VAR_UPDATE", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", stream.ToArray());
}
}
}
private float lastSyncTime = 0f;
internal void SyncVarUpdate()
{

View File

@ -112,6 +112,15 @@ namespace MLAPI
}
}
//Flushes all syncVars to client
internal void FlushToClient(int clientId)
{
for (int i = 0; i < NetworkedBehaviours.Count; i++)
{
NetworkedBehaviours[i].FlushToClient(clientId);
}
}
internal ushort GetOrderIndex(NetworkedBehaviour instance)
{
NetworkedBehaviour[] behaviours = GetComponentsInChildren<NetworkedBehaviour>();

View File

@ -1136,6 +1136,11 @@ namespace MLAPI
}
Send("MLAPI_ADD_OBJECT", "MLAPI_RELIABLE_FRAGMENTED_SEQUENCED", stream.GetBuffer(), clientId);
}
//Flush syncvars:
foreach (KeyValuePair<uint, NetworkedObject> networkedObject in SpawnManager.spawnedObjects)
{
networkedObject.Value.FlushToClient(clientId);
}
}
else
{