Example #1
0
        public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
        {
            var itemType = value.GetType().GetElementType();
            var array = ((Array)value);

            writer.Type(itemType, defaultItemType);
            writer.Int(array.Rank);
            for (int i = 0; i < array.Rank; i++)
                writer.Int(array.GetLength(i));

            var indexes = new int[array.Rank];
            DimensionalWriteResoursy(writer, array, itemType, 0, indexes);
        }
Example #2
0
        public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
        {
            var itemType = value.GetType().GetElementType();
            var array = ((Array)value);

            writer.Type(itemType, defaultItemType);
            writer.Int(array.Length);
            for (int i = 0; i < array.Length; i++)
                writer.Complex(array.GetValue(i), itemType);
        }
Example #3
0
        public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
        {
            //Сохраняем данные в хеше, получаем объект который:
            //Если данные отсутствовали в хеше - возвращает текущую позицию
            //Если данные были в хеше - возвращает позицию, которая была при сохранении
            var objData = writer.SaveToClassHashtable(value);
            if (objData.definitionPosition == writer.position)
            {
                writer.Byte(IsDefinition);

                var classType = value.GetType();
                writer.Type(classType, defaultItemType);

                var rule = ByteUtils.GetRule(classType);
                if (rule != null)
                {
                    rule.OnWriteInternal(writer, value);
                }
                else
                {
                    var fields = usedFields.GetUnical(classType);
                    if (fields == null)
                        fields = ByteUtils.GetSerializeFields(classType);

                    writer.Ushort((ushort)fields.Length);
                    for (int i = 0; i < fields.Length; i++)
                    {
                        var field = fields[i];
                        writer.String(field.Name);
                        writer.Complex(field.GetValue(value), null);
                    }
                }
            }
            else
            {
                writer.Byte(IsGoto);
                writer.Int(objData.definitionPosition);
            }
        }
Example #4
0
 public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
 {
     var unityObj = (UnityEngine.Object)value;
     writer.unityHashtable[unityObj.GetInstanceID()] = unityObj;
     writer.Int(unityObj.GetInstanceID());
 }
Example #5
0
 public override void OnWrite(ByteObjectWriter writer, object value, Type defaultItemType)
 {
     writer.Int((int)value);
 }