@@ -45,6 +45,137 @@ internal enum FieldType
4545
4646 internal static class FieldTypeHelper
4747 {
48+ internal static void WriteFieldType ( BitWriter writer , object value , FieldType fieldType )
49+ {
50+ switch ( fieldType )
51+ {
52+ case FieldType . Bool :
53+ writer . WriteBool ( ( bool ) value ) ;
54+ break ;
55+ case FieldType . Byte :
56+ writer . WriteByte ( ( byte ) value ) ;
57+ break ;
58+ case FieldType . Double :
59+ writer . WriteDouble ( ( double ) value ) ;
60+ break ;
61+ case FieldType . Single :
62+ writer . WriteFloat ( ( float ) value ) ;
63+ break ;
64+ case FieldType . Int :
65+ writer . WriteInt ( ( int ) value ) ;
66+ break ;
67+ case FieldType . Long :
68+ writer . WriteLong ( ( long ) value ) ;
69+ break ;
70+ case FieldType . SByte :
71+ writer . WriteSByte ( ( sbyte ) value ) ;
72+ break ;
73+ case FieldType . Short :
74+ writer . WriteShort ( ( short ) value ) ;
75+ break ;
76+ case FieldType . UInt :
77+ writer . WriteUInt ( ( uint ) value ) ;
78+ break ;
79+ case FieldType . ULong :
80+ writer . WriteULong ( ( ulong ) value ) ;
81+ break ;
82+ case FieldType . UShort :
83+ writer . WriteUShort ( ( ushort ) value ) ;
84+ break ;
85+ case FieldType . String :
86+ writer . WriteString ( ( string ) value ) ;
87+ break ;
88+ case FieldType . Vector3 :
89+ Vector3 vector3 = ( Vector3 ) value ;
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 ) value ;
96+ writer . WriteFloat ( vector2 . x ) ;
97+ writer . WriteFloat ( vector2 . y ) ;
98+ break ;
99+ case FieldType . Quaternion :
100+ Vector3 euler = ( ( Quaternion ) value ) . 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 [ ] ) value ;
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 [ ] ) value ) ;
113+ break ;
114+ case FieldType . DoubleArray :
115+ writer . WriteDoubleArray ( ( double [ ] ) value ) ;
116+ break ;
117+ case FieldType . SingleArray :
118+ writer . WriteFloatArray ( ( float [ ] ) value ) ;
119+ break ;
120+ case FieldType . IntArray :
121+ writer . WriteIntArray ( ( int [ ] ) value ) ;
122+ break ;
123+ case FieldType . LongArray :
124+ writer . WriteLongArray ( ( long [ ] ) value ) ;
125+ break ;
126+ case FieldType . SByteArray :
127+ writer . WriteSByteArray ( ( sbyte [ ] ) value ) ;
128+ break ;
129+ case FieldType . ShortArray :
130+ writer . WriteShortArray ( ( short [ ] ) value ) ;
131+ break ;
132+ case FieldType . UIntArray :
133+ writer . WriteUIntArray ( ( uint [ ] ) value ) ;
134+ break ;
135+ case FieldType . ULongArray :
136+ writer . WriteULongArray ( ( ulong [ ] ) value ) ;
137+ break ;
138+ case FieldType . UShortArray :
139+ writer . WriteUShortArray ( ( ushort [ ] ) value ) ;
140+ break ;
141+ case FieldType . StringArray :
142+ string [ ] strings = ( string [ ] ) value ;
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 [ ] ) value ;
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 [ ] ) value ;
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 [ ] ) value ;
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+
48179 internal static void WriteFieldType ( BitWriter writer , FieldInfo field , object fieldInstance , FieldType fieldType )
49180 {
50181 switch ( fieldType )
@@ -241,5 +372,155 @@ internal static FieldType GetFieldType(Type type)
241372 else
242373 return FieldType . Invalid ;
243374 }
375+
376+ internal static object [ ] ReadObjects ( BitReader reader , byte paramCount )
377+ {
378+ object [ ] returnVal = new object [ paramCount ] ;
379+ for ( int i = 0 ; i < paramCount ; i ++ )
380+ {
381+ FieldType fieldType = ( FieldType ) reader . ReadBits ( 5 ) ;
382+
383+ switch ( fieldType )
384+ {
385+ case FieldType . Bool :
386+ returnVal [ i ] = reader . ReadBool ( ) ;
387+ break ;
388+ case FieldType . Byte :
389+ returnVal [ i ] = reader . ReadByte ( ) ;
390+ break ;
391+ case FieldType . Double :
392+ returnVal [ i ] = reader . ReadDouble ( ) ;
393+ break ;
394+ case FieldType . Single :
395+ returnVal [ i ] = reader . ReadFloat ( ) ;
396+ break ;
397+ case FieldType . Int :
398+ returnVal [ i ] = reader . ReadInt ( ) ;
399+ break ;
400+ case FieldType . Long :
401+ returnVal [ i ] = reader . ReadLong ( ) ;
402+ break ;
403+ case FieldType . SByte :
404+ returnVal [ i ] = reader . ReadSByte ( ) ;
405+ break ;
406+ case FieldType . Short :
407+ returnVal [ i ] = reader . ReadShort ( ) ;
408+ break ;
409+ case FieldType . UInt :
410+ returnVal [ i ] = reader . ReadUInt ( ) ;
411+ break ;
412+ case FieldType . ULong :
413+ returnVal [ i ] = reader . ReadULong ( ) ;
414+ break ;
415+ case FieldType . UShort :
416+ returnVal [ i ] = reader . ReadUShort ( ) ;
417+ break ;
418+ case FieldType . String :
419+ returnVal [ i ] = reader . ReadString ( ) ;
420+ break ;
421+ case FieldType . Vector3 :
422+ Vector3 vector3 = Vector3 . zero ;
423+ vector3 . x = reader . ReadFloat ( ) ;
424+ vector3 . y = reader . ReadFloat ( ) ;
425+ vector3 . z = reader . ReadFloat ( ) ;
426+ returnVal [ i ] = vector3 ;
427+ break ;
428+ case FieldType . Vector2 :
429+ Vector2 vector2 = Vector2 . zero ;
430+ vector2 . x = reader . ReadFloat ( ) ;
431+ vector2 . y = reader . ReadFloat ( ) ;
432+ returnVal [ i ] = vector2 ;
433+ break ;
434+ case FieldType . Quaternion :
435+ Vector3 eulerAngle = Vector3 . zero ;
436+ eulerAngle . x = reader . ReadFloat ( ) ;
437+ eulerAngle . y = reader . ReadFloat ( ) ;
438+ eulerAngle . z = reader . ReadFloat ( ) ;
439+ returnVal [ i ] = Quaternion . Euler ( eulerAngle ) ;
440+ break ;
441+ case FieldType . BoolArray :
442+ ushort boolCount = reader . ReadUShort ( ) ;
443+ for ( int j = 0 ; j < boolCount ; j ++ )
444+ returnVal [ i ] = reader . ReadBool ( ) ;
445+ break ;
446+ case FieldType . ByteArray :
447+ returnVal [ i ] = reader . ReadByteArray ( ) ;
448+ break ;
449+ case FieldType . DoubleArray :
450+ returnVal [ i ] = reader . ReadDoubleArray ( ) ;
451+ break ;
452+ case FieldType . SingleArray :
453+ returnVal [ i ] = reader . ReadFloatArray ( ) ;
454+ break ;
455+ case FieldType . IntArray :
456+ returnVal [ i ] = reader . ReadIntArray ( ) ;
457+ break ;
458+ case FieldType . LongArray :
459+ returnVal [ i ] = reader . ReadLongArray ( ) ;
460+ break ;
461+ case FieldType . SByteArray :
462+ returnVal [ i ] = reader . ReadSByteArray ( ) ;
463+ break ;
464+ case FieldType . ShortArray :
465+ returnVal [ i ] = reader . ReadShortArray ( ) ;
466+ break ;
467+ case FieldType . UIntArray :
468+ returnVal [ i ] = reader . ReadUIntArray ( ) ;
469+ break ;
470+ case FieldType . ULongArray :
471+ returnVal [ i ] = reader . ReadULongArray ( ) ;
472+ break ;
473+ case FieldType . UShortArray :
474+ returnVal [ i ] = reader . ReadUShortArray ( ) ;
475+ break ;
476+ case FieldType . StringArray :
477+ ushort stringCount = reader . ReadUShort ( ) ;
478+ string [ ] strings = new string [ stringCount ] ;
479+ for ( int j = 0 ; j < stringCount ; j ++ )
480+ strings [ j ] = reader . ReadString ( ) ;
481+ returnVal [ i ] = strings ;
482+ break ;
483+ case FieldType . Vector3Array :
484+ ushort vector3Count = reader . ReadUShort ( ) ;
485+ Vector3 [ ] vector3s = new Vector3 [ vector3Count ] ;
486+ for ( int j = 0 ; j < vector3Count ; j ++ )
487+ {
488+ Vector3 vec3 = Vector3 . zero ;
489+ vec3 . x = reader . ReadFloat ( ) ;
490+ vec3 . y = reader . ReadFloat ( ) ;
491+ vec3 . z = reader . ReadFloat ( ) ;
492+ vector3s [ j ] = vec3 ;
493+ }
494+ returnVal [ i ] = vector3s ;
495+ break ;
496+ case FieldType . Vector2Array :
497+ ushort vector2Count = reader . ReadUShort ( ) ;
498+ Vector2 [ ] vector2s = new Vector2 [ vector2Count ] ;
499+ for ( int j = 0 ; j < vector2Count ; j ++ )
500+ {
501+ Vector2 vec2 = Vector2 . zero ;
502+ vec2 . x = reader . ReadFloat ( ) ;
503+ vec2 . y = reader . ReadFloat ( ) ;
504+ vector2s [ j ] = vec2 ;
505+ }
506+ returnVal [ i ] = vector2s ;
507+ break ;
508+ case FieldType . QuaternionArray :
509+ ushort quaternionCount = reader . ReadUShort ( ) ;
510+ Quaternion [ ] quaternions = new Quaternion [ quaternionCount ] ;
511+ for ( int j = 0 ; j < quaternionCount ; j ++ )
512+ {
513+ Vector3 vec3 = Vector3 . zero ;
514+ vec3 . x = reader . ReadFloat ( ) ;
515+ vec3 . y = reader . ReadFloat ( ) ;
516+ vec3 . z = reader . ReadFloat ( ) ;
517+ quaternions [ j ] = Quaternion . Euler ( vec3 ) ;
518+ }
519+ returnVal [ i ] = quaternions ;
520+ break ;
521+ }
522+ }
523+ return returnVal ;
524+ }
244525 }
245526}
0 commit comments