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); }
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)); } }
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)); } }
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)); } }
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)); } }