Skip to content

Commit 438f4fa

Browse files
committed
Cleaned up SyncedVar system
1 parent afc4598 commit 438f4fa

File tree

2 files changed

+150
-525
lines changed

2 files changed

+150
-525
lines changed

MLAPI/Data/FieldType.cs

Lines changed: 134 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System;
1+
using MLAPI.NetworkingManagerComponents.Binary;
2+
using System;
3+
using System.Reflection;
24
using UnityEngine;
35

46
namespace MLAPI.Data
@@ -43,6 +45,137 @@ internal enum FieldType
4345

4446
internal static class FieldTypeHelper
4547
{
48+
internal static void WriteFieldType(BitWriter writer, FieldInfo field, object fieldInstance, FieldType fieldType)
49+
{
50+
switch (fieldType)
51+
{
52+
case FieldType.Bool:
53+
writer.WriteBool((bool)field.GetValue(fieldInstance));
54+
break;
55+
case FieldType.Byte:
56+
writer.WriteByte((byte)field.GetValue(fieldInstance));
57+
break;
58+
case FieldType.Double:
59+
writer.WriteDouble((double)field.GetValue(fieldInstance));
60+
break;
61+
case FieldType.Single:
62+
writer.WriteFloat((float)field.GetValue(fieldInstance));
63+
break;
64+
case FieldType.Int:
65+
writer.WriteInt((int)field.GetValue(fieldInstance));
66+
break;
67+
case FieldType.Long:
68+
writer.WriteLong((long)field.GetValue(fieldInstance));
69+
break;
70+
case FieldType.SByte:
71+
writer.WriteSByte((sbyte)field.GetValue(fieldInstance));
72+
break;
73+
case FieldType.Short:
74+
writer.WriteShort((short)field.GetValue(fieldInstance));
75+
break;
76+
case FieldType.UInt:
77+
writer.WriteUInt((uint)field.GetValue(fieldInstance));
78+
break;
79+
case FieldType.ULong:
80+
writer.WriteULong((ulong)field.GetValue(fieldInstance));
81+
break;
82+
case FieldType.UShort:
83+
writer.WriteUShort((ushort)field.GetValue(fieldInstance));
84+
break;
85+
case FieldType.String:
86+
writer.WriteString((string)field.GetValue(fieldInstance));
87+
break;
88+
case FieldType.Vector3:
89+
Vector3 vector3 = (Vector3)field.GetValue(fieldInstance);
90+
writer.WriteFloat(vector3.x);
91+
writer.WriteFloat(vector3.y);
92+
writer.WriteFloat(vector3.z);
93+
break;
94+
case FieldType.Vector2:
95+
Vector2 vector2 = (Vector2)field.GetValue(fieldInstance);
96+
writer.WriteFloat(vector2.x);
97+
writer.WriteFloat(vector2.y);
98+
break;
99+
case FieldType.Quaternion:
100+
Vector3 euler = ((Quaternion)field.GetValue(fieldInstance)).eulerAngles;
101+
writer.WriteFloat(euler.x);
102+
writer.WriteFloat(euler.y);
103+
writer.WriteFloat(euler.z);
104+
break;
105+
case FieldType.BoolArray:
106+
bool[] bools = (bool[])field.GetValue(fieldInstance);
107+
writer.WriteUShort((ushort)bools.Length);
108+
for (int j = 0; j < bools.Length; j++)
109+
writer.WriteBool(bools[j]);
110+
break;
111+
case FieldType.ByteArray:
112+
writer.WriteByteArray((byte[])field.GetValue(fieldInstance));
113+
break;
114+
case FieldType.DoubleArray:
115+
writer.WriteDoubleArray((double[])field.GetValue(fieldInstance));
116+
break;
117+
case FieldType.SingleArray:
118+
writer.WriteFloatArray((float[])field.GetValue(fieldInstance));
119+
break;
120+
case FieldType.IntArray:
121+
writer.WriteIntArray((int[])field.GetValue(fieldInstance));
122+
break;
123+
case FieldType.LongArray:
124+
writer.WriteLongArray((long[])field.GetValue(fieldInstance));
125+
break;
126+
case FieldType.SByteArray:
127+
writer.WriteSByteArray((sbyte[])field.GetValue(fieldInstance));
128+
break;
129+
case FieldType.ShortArray:
130+
writer.WriteShortArray((short[])field.GetValue(fieldInstance));
131+
break;
132+
case FieldType.UIntArray:
133+
writer.WriteUIntArray((uint[])field.GetValue(fieldInstance));
134+
break;
135+
case FieldType.ULongArray:
136+
writer.WriteULongArray((ulong[])field.GetValue(fieldInstance));
137+
break;
138+
case FieldType.UShortArray:
139+
writer.WriteUShortArray((ushort[])field.GetValue(fieldInstance));
140+
break;
141+
case FieldType.StringArray:
142+
string[] strings = (string[])field.GetValue(fieldInstance);
143+
writer.WriteUShort((ushort)strings.Length);
144+
for (int j = 0; j < strings.Length; j++)
145+
writer.WriteString(strings[j]);
146+
break;
147+
case FieldType.Vector3Array:
148+
Vector3[] vector3s = (Vector3[])field.GetValue(fieldInstance);
149+
writer.WriteUShort((ushort)vector3s.Length);
150+
for (int j = 0; j < vector3s.Length; j++)
151+
{
152+
writer.WriteFloat(vector3s[j].x);
153+
writer.WriteFloat(vector3s[j].y);
154+
writer.WriteFloat(vector3s[j].z);
155+
}
156+
break;
157+
case FieldType.Vector2Array:
158+
Vector2[] vector2s = (Vector2[])field.GetValue(fieldInstance);
159+
writer.WriteUShort((ushort)vector2s.Length);
160+
for (int j = 0; j < vector2s.Length; j++)
161+
{
162+
writer.WriteFloat(vector2s[j].x);
163+
writer.WriteFloat(vector2s[j].y);
164+
}
165+
break;
166+
case FieldType.QuaternionArray:
167+
Quaternion[] quaternions = (Quaternion[])field.GetValue(fieldInstance);
168+
writer.WriteUShort((ushort)quaternions.Length);
169+
for (int j = 0; j < quaternions.Length; j++)
170+
{
171+
writer.WriteFloat(quaternions[j].eulerAngles.x);
172+
writer.WriteFloat(quaternions[j].eulerAngles.y);
173+
writer.WriteFloat(quaternions[j].eulerAngles.z);
174+
}
175+
break;
176+
}
177+
}
178+
46179
internal static FieldType GetFieldType(Type type)
47180
{
48181
if (type == typeof(bool))

0 commit comments

Comments
 (0)