Example #1
0
        private static object LoadArray(IList list, Type arrayType, BinaryReader reader)
        {
            var count = reader.ReadNumberMostlyBelow255();

            if (list == null)
            {
                list = Activator.CreateInstance(arrayType, new object[] { count }) as IList;
            }
            if (count == 0)
            {
                return(list);
            }
            var arrayElementType = (BinaryDataSaver.ArrayElementType)reader.ReadByte();

            if (arrayElementType == BinaryDataSaver.ArrayElementType.AllTypesAreNull)
            {
                return(list);
            }
            if (arrayElementType == BinaryDataSaver.ArrayElementType.AllTypesAreDifferent)
            {
                LoadArrayWhereAllElementsAreNotTheSameType(list, arrayType, reader, count);
            }
            else
            {
                Type elementType = arrayElementType == BinaryDataSaver.ArrayElementType.AllTypesAreTypes
                                        ? typeof(Type)
                                        : BinaryDataExtensions.GetTypeFromShortNameOrFullNameIfNotFound(reader.ReadString());
                LoadArrayWhereAllElementsAreTheSameType(list, arrayType, reader, count, elementType);
            }
            return(list);
        }
Example #2
0
        private static void LoadEntityBehaviors(BinaryReader reader, Entity entity)
        {
            var behaviors = LoadArray(null, typeof(List <string>), reader) as List <string>;

            foreach (string behavior in behaviors)
            {
                entity.Start(BinaryDataExtensions.GetTypeFromShortNameOrFullNameIfNotFound(behavior));
            }
        }
Example #3
0
        private static void LoadDrawableEntityDrawBehaviors(BinaryReader reader,
                                                            DrawableEntity drawable)
        {
            var drawBehaviors = LoadArray(null, typeof(List <string>), reader) as List <string>;

            foreach (string behavior in drawBehaviors)
            {
                drawable.OnDraw(BinaryDataExtensions.GetTypeFromShortNameOrFullNameIfNotFound(behavior));
            }
        }
Example #4
0
        private static void LoadListElement(IList list, BinaryReader reader)
        {
            Type elementType =
                BinaryDataExtensions.GetTypeFromShortNameOrFullNameIfNotFound(reader.ReadString());
            bool isNotNull = reader.ReadBoolean();

            if (isNotNull)
            {
                list.Add(CreateAndLoad(elementType, reader));
            }
        }
Example #5
0
        private static void LoadDictionaryWhereAllValuesAreTheSameType(IDictionary data,
                                                                       BinaryReader reader, int count)
        {
            Type everyKeyType =
                BinaryDataExtensions.GetTypeFromShortNameOrFullNameIfNotFound(reader.ReadString());
            Type everyValueType =
                BinaryDataExtensions.GetTypeFromShortNameOrFullNameIfNotFound(reader.ReadString());

            for (int i = 0; i < count; i++)
            {
                data.Add(CreateAndLoad(everyKeyType, reader), CreateAndLoad(everyValueType, reader));
            }
        }