@@ -45,6 +45,137 @@ internal enum FieldType
45
45
46
46
internal static class FieldTypeHelper
47
47
{
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
+
48
179
internal static void WriteFieldType ( BitWriter writer , FieldInfo field , object fieldInstance , FieldType fieldType )
49
180
{
50
181
switch ( fieldType )
@@ -241,5 +372,155 @@ internal static FieldType GetFieldType(Type type)
241
372
else
242
373
return FieldType . Invalid ;
243
374
}
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
+ FieldType fieldType = ( FieldType ) reader . ReadByte ( ) ;
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
+ }
244
525
}
245
526
}
0 commit comments