Skip to content

Commit e7372d6

Browse files
committed
Added Byte arrays support to SyncVar.
1 parent c51dc5a commit e7372d6

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

MLAPI/Data/FieldType.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ internal enum FieldType
1717
String,
1818
Vector3,
1919
Vector2,
20-
Quaternion
20+
Quaternion,
21+
ByteArray
2122
}
2223
}

MLAPI/MonoBehaviours/Core/NetworkedBehaviour.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,12 @@ internal void SyncVarInit()
238238
syncedFieldValues.Add(sortedFields[i].GetValue(this));
239239
syncedFieldTypes.Add(FieldType.Quaternion);
240240
}
241+
else if(sortedFields[i].FieldType == typeof(byte[]))
242+
{
243+
syncedFields.Add(sortedFields[i]);
244+
syncedFieldValues.Add(sortedFields[i].GetValue(this));
245+
syncedFieldTypes.Add(FieldType.ByteArray);
246+
}
241247
else
242248
{
243249
Debug.LogError("MLAPI: The type " + sortedFields[i].FieldType.ToString() + " can not be used as a syncvar");
@@ -331,6 +337,10 @@ internal void FlushToClient(int clientId)
331337
writer.Write(euler.y);
332338
writer.Write(euler.z);
333339
break;
340+
case FieldType.ByteArray:
341+
writer.Write((ushort)((byte[])syncedFields[i].GetValue(this)).Length);
342+
writer.Write((byte[])syncedFields[i].GetValue(this));
343+
break;
334344
}
335345
}
336346
}
@@ -420,6 +430,10 @@ internal void SyncVarUpdate()
420430
writer.Write(euler.y);
421431
writer.Write(euler.z);
422432
break;
433+
case FieldType.ByteArray:
434+
writer.Write((ushort)((byte[])syncedFields[i].GetValue(this)).Length);
435+
writer.Write((byte[])syncedFields[i].GetValue(this));
436+
break;
423437

424438
}
425439
syncedFieldValues[i] = syncedFields[i].GetValue(this);
@@ -537,6 +551,12 @@ private void SetDirtyness()
537551
else
538552
dirtyFields[i] = false; //Up to date
539553
break;
554+
case FieldType.ByteArray:
555+
if(((byte[])syncedFields[i].GetValue(this)).SequenceEqual(((byte[])syncedFieldValues[i])))
556+
dirtyFields[i] = true; //This fields value is out of sync!
557+
else
558+
dirtyFields[i] = false; //Up to date
559+
break;
540560
}
541561
}
542562
}

0 commit comments

Comments
 (0)