From e7372d6cc31cbb3c5111404499952bc311cc2fc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Albin=20Cor=C3=A9n?= <2108U9@gmail.com> Date: Sat, 10 Mar 2018 01:48:08 +0100 Subject: [PATCH] Added Byte arrays support to SyncVar. --- MLAPI/Data/FieldType.cs | 3 ++- .../MonoBehaviours/Core/NetworkedBehaviour.cs | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/MLAPI/Data/FieldType.cs b/MLAPI/Data/FieldType.cs index 986f200..2c935e7 100644 --- a/MLAPI/Data/FieldType.cs +++ b/MLAPI/Data/FieldType.cs @@ -17,6 +17,7 @@ String, Vector3, Vector2, - Quaternion + Quaternion, + ByteArray } } diff --git a/MLAPI/MonoBehaviours/Core/NetworkedBehaviour.cs b/MLAPI/MonoBehaviours/Core/NetworkedBehaviour.cs index 4fa4f6e..0ef3a0b 100644 --- a/MLAPI/MonoBehaviours/Core/NetworkedBehaviour.cs +++ b/MLAPI/MonoBehaviours/Core/NetworkedBehaviour.cs @@ -238,6 +238,12 @@ namespace MLAPI syncedFieldValues.Add(sortedFields[i].GetValue(this)); syncedFieldTypes.Add(FieldType.Quaternion); } + else if(sortedFields[i].FieldType == typeof(byte[])) + { + syncedFields.Add(sortedFields[i]); + syncedFieldValues.Add(sortedFields[i].GetValue(this)); + syncedFieldTypes.Add(FieldType.ByteArray); + } else { Debug.LogError("MLAPI: The type " + sortedFields[i].FieldType.ToString() + " can not be used as a syncvar"); @@ -331,6 +337,10 @@ namespace MLAPI writer.Write(euler.y); writer.Write(euler.z); break; + case FieldType.ByteArray: + writer.Write((ushort)((byte[])syncedFields[i].GetValue(this)).Length); + writer.Write((byte[])syncedFields[i].GetValue(this)); + break; } } } @@ -420,6 +430,10 @@ namespace MLAPI writer.Write(euler.y); writer.Write(euler.z); break; + case FieldType.ByteArray: + writer.Write((ushort)((byte[])syncedFields[i].GetValue(this)).Length); + writer.Write((byte[])syncedFields[i].GetValue(this)); + break; } syncedFieldValues[i] = syncedFields[i].GetValue(this); @@ -537,6 +551,12 @@ namespace MLAPI else dirtyFields[i] = false; //Up to date break; + case FieldType.ByteArray: + if(((byte[])syncedFields[i].GetValue(this)).SequenceEqual(((byte[])syncedFieldValues[i]))) + dirtyFields[i] = true; //This fields value is out of sync! + else + dirtyFields[i] = false; //Up to date + break; } } }