示例#1
0
        public static void Look <K, V>(ref Dictionary <K, V> dict, string label, LookMode keyLookMode, LookMode valueLookMode, ref List <K> keysWorkingList, ref List <V> valuesWorkingList) where K : new()
        {
            if (Scribe.EnterNode(label))
            {
                try
                {
                    if (Scribe.mode == LoadSaveMode.Saving || Scribe.mode == LoadSaveMode.LoadingVars)
                    {
                        keysWorkingList   = new List <K>();
                        valuesWorkingList = new List <V>();
                    }
                    if (Scribe.mode == LoadSaveMode.Saving)
                    {
                        foreach (KeyValuePair <K, V> item in dict)
                        {
                            keysWorkingList.Add(item.Key);
                            valuesWorkingList.Add(item.Value);
                        }
                    }
                    Scribe_Collections.Look <K>(ref keysWorkingList, "keys", keyLookMode, new object[0]);
                    Scribe_Collections.Look <V>(ref valuesWorkingList, "values", valueLookMode, new object[0]);
                    if (Scribe.mode == LoadSaveMode.Saving)
                    {
                        if (keysWorkingList != null)
                        {
                            keysWorkingList.Clear();
                            keysWorkingList = null;
                        }
                        if (valuesWorkingList != null)
                        {
                            valuesWorkingList.Clear();
                            valuesWorkingList = null;
                        }
                    }
                    bool flag = keyLookMode == LookMode.Reference || valueLookMode == LookMode.Reference;
                    if (flag && Scribe.mode == LoadSaveMode.ResolvingCrossRefs)
                    {
                        goto IL_0118;
                    }
                    if (!flag && Scribe.mode == LoadSaveMode.LoadingVars)
                    {
                        goto IL_0118;
                    }
                    goto IL_0279;
IL_0118:
                    dict.Clear();
                    if (keysWorkingList == null)
                    {
                        Log.Error("Cannot fill dictionary because there are no keys.");
                    }
                    else if (valuesWorkingList == null)
                    {
                        Log.Error("Cannot fill dictionary because there are no values.");
                    }
                    else
                    {
                        if (keysWorkingList.Count != valuesWorkingList.Count)
                        {
                            Log.Error("Keys count does not match the values count while loading a dictionary (maybe keys and values were resolved during different passes?). Some elements will be skipped. keys=" + keysWorkingList.Count + ", values=" + valuesWorkingList.Count);
                        }
                        int num = Math.Min(keysWorkingList.Count, valuesWorkingList.Count);
                        for (int i = 0; i < num; i++)
                        {
                            if (keysWorkingList[i] == null)
                            {
                                Log.Error("Null key while loading dictionary of " + typeof(K) + " and " + typeof(V) + ".");
                            }
                            else
                            {
                                try
                                {
                                    dict.Add(keysWorkingList[i], valuesWorkingList[i]);
                                }
                                catch (Exception ex)
                                {
                                    Log.Error("Exception in LookDictionary(node=" + label + "): " + ex);
                                }
                            }
                        }
                    }
                    goto IL_0279;
IL_0279:
                    if (Scribe.mode == LoadSaveMode.PostLoadInit)
                    {
                        if (keysWorkingList != null)
                        {
                            keysWorkingList.Clear();
                            keysWorkingList = null;
                        }
                        if (valuesWorkingList != null)
                        {
                            valuesWorkingList.Clear();
                            valuesWorkingList = null;
                        }
                    }
                }
                finally
                {
                    Scribe.ExitNode();
                }
            }
            else if (Scribe.mode == LoadSaveMode.LoadingVars)
            {
                dict = null;
            }
        }
示例#2
0
        public static void Look <T>(ref List <T> list, bool saveDestroyedThings, string label, LookMode lookMode = LookMode.Undefined, params object[] ctorArgs)
        {
            if (lookMode == LookMode.Undefined && !Scribe_Universal.TryResolveLookMode(typeof(T), out lookMode))
            {
                Log.Error(string.Concat("LookList call with a list of ", typeof(T), " must have lookMode set explicitly."));
            }
            else if (Scribe.EnterNode(label))
            {
                try
                {
                    if (Scribe.mode == LoadSaveMode.Saving)
                    {
                        if (list == null)
                        {
                            Scribe.saver.WriteAttribute("IsNull", "True");
                            return;
                        }
                        foreach (T item8 in list)
                        {
                            switch (lookMode)
                            {
                            case LookMode.Value:
                            {
                                T value5 = item8;
                                Scribe_Values.Look(ref value5, "li", default(T), forceSave: true);
                                break;
                            }

                            case LookMode.LocalTargetInfo:
                            {
                                LocalTargetInfo value4 = (LocalTargetInfo)(object)item8;
                                Scribe_TargetInfo.Look(ref value4, saveDestroyedThings, "li");
                                break;
                            }

                            case LookMode.TargetInfo:
                            {
                                TargetInfo value3 = (TargetInfo)(object)item8;
                                Scribe_TargetInfo.Look(ref value3, saveDestroyedThings, "li");
                                break;
                            }

                            case LookMode.GlobalTargetInfo:
                            {
                                GlobalTargetInfo value2 = (GlobalTargetInfo)(object)item8;
                                Scribe_TargetInfo.Look(ref value2, saveDestroyedThings, "li");
                                break;
                            }

                            case LookMode.Def:
                            {
                                Def value = (Def)(object)item8;
                                Scribe_Defs.Look(ref value, "li");
                                break;
                            }

                            case LookMode.BodyPart:
                            {
                                BodyPartRecord part = (BodyPartRecord)(object)item8;
                                Scribe_BodyParts.Look(ref part, "li");
                                break;
                            }

                            case LookMode.Deep:
                            {
                                T target = item8;
                                Scribe_Deep.Look(ref target, saveDestroyedThings, "li", ctorArgs);
                                break;
                            }

                            case LookMode.Reference:
                            {
                                ILoadReferenceable refee = (ILoadReferenceable)(object)item8;
                                Scribe_References.Look(ref refee, "li", saveDestroyedThings);
                                break;
                            }
                            }
                        }
                    }
                    else if (Scribe.mode == LoadSaveMode.LoadingVars)
                    {
                        XmlNode      curXmlParent = Scribe.loader.curXmlParent;
                        XmlAttribute xmlAttribute = curXmlParent.Attributes["IsNull"];
                        if (xmlAttribute != null && xmlAttribute.Value.ToLower() == "true")
                        {
                            if (lookMode == LookMode.Reference)
                            {
                                Scribe.loader.crossRefs.loadIDs.RegisterLoadIDListReadFromXml(null, null);
                            }
                            list = null;
                            return;
                        }
                        switch (lookMode)
                        {
                        case LookMode.Value:
                            list = new List <T>(curXmlParent.ChildNodes.Count);
                            foreach (XmlNode childNode in curXmlParent.ChildNodes)
                            {
                                T item = ScribeExtractor.ValueFromNode(childNode, default(T));
                                list.Add(item);
                            }
                            break;

                        case LookMode.Deep:
                            list = new List <T>(curXmlParent.ChildNodes.Count);
                            foreach (XmlNode childNode2 in curXmlParent.ChildNodes)
                            {
                                T item7 = ScribeExtractor.SaveableFromNode <T>(childNode2, ctorArgs);
                                list.Add(item7);
                            }
                            break;

                        case LookMode.Def:
                            list = new List <T>(curXmlParent.ChildNodes.Count);
                            foreach (XmlNode childNode3 in curXmlParent.ChildNodes)
                            {
                                T item6 = ScribeExtractor.DefFromNodeUnsafe <T>(childNode3);
                                list.Add(item6);
                            }
                            break;

                        case LookMode.BodyPart:
                        {
                            list = new List <T>(curXmlParent.ChildNodes.Count);
                            int num4 = 0;
                            foreach (XmlNode childNode4 in curXmlParent.ChildNodes)
                            {
                                T item5 = (T)(object)ScribeExtractor.BodyPartFromNode(childNode4, num4.ToString(), null);
                                list.Add(item5);
                                num4++;
                            }
                            break;
                        }

                        case LookMode.LocalTargetInfo:
                        {
                            list = new List <T>(curXmlParent.ChildNodes.Count);
                            int num3 = 0;
                            foreach (XmlNode childNode5 in curXmlParent.ChildNodes)
                            {
                                T item4 = (T)(object)ScribeExtractor.LocalTargetInfoFromNode(childNode5, num3.ToString(), LocalTargetInfo.Invalid);
                                list.Add(item4);
                                num3++;
                            }
                            break;
                        }

                        case LookMode.TargetInfo:
                        {
                            list = new List <T>(curXmlParent.ChildNodes.Count);
                            int num2 = 0;
                            foreach (XmlNode childNode6 in curXmlParent.ChildNodes)
                            {
                                T item3 = (T)(object)ScribeExtractor.TargetInfoFromNode(childNode6, num2.ToString(), TargetInfo.Invalid);
                                list.Add(item3);
                                num2++;
                            }
                            break;
                        }

                        case LookMode.GlobalTargetInfo:
                        {
                            list = new List <T>(curXmlParent.ChildNodes.Count);
                            int num = 0;
                            foreach (XmlNode childNode7 in curXmlParent.ChildNodes)
                            {
                                T item2 = (T)(object)ScribeExtractor.GlobalTargetInfoFromNode(childNode7, num.ToString(), GlobalTargetInfo.Invalid);
                                list.Add(item2);
                                num++;
                            }
                            break;
                        }

                        case LookMode.Reference:
                        {
                            List <string> list2 = new List <string>(curXmlParent.ChildNodes.Count);
                            foreach (XmlNode childNode8 in curXmlParent.ChildNodes)
                            {
                                list2.Add(childNode8.InnerText);
                            }
                            Scribe.loader.crossRefs.loadIDs.RegisterLoadIDListReadFromXml(list2, "");
                            break;
                        }
                        }
                    }
                    else
                    {
                        if (Scribe.mode != LoadSaveMode.ResolvingCrossRefs)
                        {
                            return;
                        }
                        switch (lookMode)
                        {
                        case LookMode.Reference:
                            list = Scribe.loader.crossRefs.TakeResolvedRefList <T>("");
                            break;

                        case LookMode.LocalTargetInfo:
                            if (list != null)
                            {
                                for (int j = 0; j < list.Count; j++)
                                {
                                    list[j] = (T)(object)ScribeExtractor.ResolveLocalTargetInfo((LocalTargetInfo)(object)list[j], j.ToString());
                                }
                            }
                            break;

                        case LookMode.TargetInfo:
                            if (list != null)
                            {
                                for (int k = 0; k < list.Count; k++)
                                {
                                    list[k] = (T)(object)ScribeExtractor.ResolveTargetInfo((TargetInfo)(object)list[k], k.ToString());
                                }
                            }
                            break;

                        case LookMode.GlobalTargetInfo:
                            if (list != null)
                            {
                                for (int i = 0; i < list.Count; i++)
                                {
                                    list[i] = (T)(object)ScribeExtractor.ResolveGlobalTargetInfo((GlobalTargetInfo)(object)list[i], i.ToString());
                                }
                            }
                            break;
                        }
                        return;
                    }
                }
                finally
                {
                    Scribe.ExitNode();
                }
            }
            else if (Scribe.mode == LoadSaveMode.LoadingVars)
            {
                if (lookMode == LookMode.Reference)
                {
                    Scribe.loader.crossRefs.loadIDs.RegisterLoadIDListReadFromXml(null, label);
                }
                list = null;
            }
        }
示例#3
0
        public static void Look <K, V>(ref Dictionary <K, V> dict, string label, LookMode keyLookMode = LookMode.Undefined, LookMode valueLookMode = LookMode.Undefined)
        {
            if (Scribe.mode == LoadSaveMode.LoadingVars)
            {
                bool flag  = keyLookMode == LookMode.Reference;
                bool flag2 = valueLookMode == LookMode.Reference;
                if (flag != flag2)
                {
                    Log.Error("You need to provide working lists for the keys and values in order to be able to load such dictionary. label=" + label);
                }
            }
            List <K> keysWorkingList   = null;
            List <V> valuesWorkingList = null;

            Look(ref dict, label, keyLookMode, valueLookMode, ref keysWorkingList, ref valuesWorkingList);
        }
示例#4
0
 public ThingOwner(IThingHolder owner, bool oneStackOnly, LookMode contentsLookMode = LookMode.Deep) : this(owner)
 {
     this.maxStacks        = ((!oneStackOnly) ? 999999 : 1);
     this.contentsLookMode = contentsLookMode;
 }
示例#5
0
        public static void Look <T>(ref HashSet <T> valueHashSet, bool saveDestroyedThings, string label, LookMode lookMode = LookMode.Undefined)
        {
            List <T> list = null;

            if (Scribe.mode == LoadSaveMode.Saving)
            {
                if (valueHashSet != null)
                {
                    list = new List <T>();
                    foreach (T item in valueHashSet)
                    {
                        list.Add(item);
                    }
                }
            }
            Scribe_Collections.Look <T>(ref list, saveDestroyedThings, label, lookMode, new object[0]);
            if ((lookMode == LookMode.Reference && Scribe.mode == LoadSaveMode.ResolvingCrossRefs) || (lookMode != LookMode.Reference && Scribe.mode == LoadSaveMode.LoadingVars))
            {
                if (list == null)
                {
                    valueHashSet = null;
                }
                else
                {
                    valueHashSet = new HashSet <T>();
                    for (int i = 0; i < list.Count; i++)
                    {
                        valueHashSet.Add(list[i]);
                    }
                }
            }
        }
示例#6
0
 public static void Look <T>(ref List <T> list, string label, LookMode lookMode = LookMode.Undefined, params object[] ctorArgs)
 {
     Look(ref list, saveDestroyedThings: false, label, lookMode, ctorArgs);
 }
示例#7
0
 public static void Look <T>(ref List <T> list, bool saveDestroyedThings, string label, LookMode lookMode = LookMode.Undefined, params object[] ctorArgs)
 {
     if (lookMode == LookMode.Undefined)
     {
         if (ParseHelper.HandlesType(typeof(T)))
         {
             lookMode = LookMode.Value;
         }
         else if (typeof(T) == typeof(LocalTargetInfo))
         {
             lookMode = LookMode.LocalTargetInfo;
         }
         else if (typeof(T) == typeof(TargetInfo))
         {
             lookMode = LookMode.TargetInfo;
         }
         else if (typeof(T) == typeof(GlobalTargetInfo))
         {
             lookMode = LookMode.GlobalTargetInfo;
         }
         else if (typeof(Def).IsAssignableFrom(typeof(T)))
         {
             lookMode = LookMode.Def;
         }
         else if (typeof(T) == typeof(BodyPartRecord))
         {
             lookMode = LookMode.BodyPart;
         }
         else
         {
             if (!typeof(IExposable).IsAssignableFrom(typeof(T)) || typeof(ILoadReferenceable).IsAssignableFrom(typeof(T)))
             {
                 Log.Error("LookList call with a list of " + typeof(T) + " must have lookMode set explicitly.", false);
                 return;
             }
             lookMode = LookMode.Deep;
         }
     }
     if (Scribe.EnterNode(label))
     {
         try
         {
             if (Scribe.mode == LoadSaveMode.Saving)
             {
                 if (list == null)
                 {
                     Scribe.saver.WriteAttribute("IsNull", "True");
                 }
                 else
                 {
                     foreach (T current in list)
                     {
                         if (lookMode == LookMode.Value)
                         {
                             T t = current;
                             Scribe_Values.Look <T>(ref t, "li", default(T), true);
                         }
                         else if (lookMode == LookMode.LocalTargetInfo)
                         {
                             LocalTargetInfo localTargetInfo = (LocalTargetInfo)((object)current);
                             Scribe_TargetInfo.Look(ref localTargetInfo, saveDestroyedThings, "li");
                         }
                         else if (lookMode == LookMode.TargetInfo)
                         {
                             TargetInfo targetInfo = (TargetInfo)((object)current);
                             Scribe_TargetInfo.Look(ref targetInfo, saveDestroyedThings, "li");
                         }
                         else if (lookMode == LookMode.GlobalTargetInfo)
                         {
                             GlobalTargetInfo globalTargetInfo = (GlobalTargetInfo)((object)current);
                             Scribe_TargetInfo.Look(ref globalTargetInfo, saveDestroyedThings, "li");
                         }
                         else if (lookMode == LookMode.Def)
                         {
                             Def def = (Def)((object)current);
                             Scribe_Defs.Look <Def>(ref def, "li");
                         }
                         else if (lookMode == LookMode.BodyPart)
                         {
                             BodyPartRecord bodyPartRecord = (BodyPartRecord)((object)current);
                             Scribe_BodyParts.Look(ref bodyPartRecord, "li", null);
                         }
                         else if (lookMode == LookMode.Deep)
                         {
                             T t2 = current;
                             Scribe_Deep.Look <T>(ref t2, saveDestroyedThings, "li", ctorArgs);
                         }
                         else if (lookMode == LookMode.Reference)
                         {
                             ILoadReferenceable loadReferenceable = (ILoadReferenceable)((object)current);
                             Scribe_References.Look <ILoadReferenceable>(ref loadReferenceable, "li", saveDestroyedThings);
                         }
                     }
                 }
             }
             else if (Scribe.mode == LoadSaveMode.LoadingVars)
             {
                 XmlNode      curXmlParent = Scribe.loader.curXmlParent;
                 XmlAttribute xmlAttribute = curXmlParent.Attributes["IsNull"];
                 if (xmlAttribute != null && xmlAttribute.Value.ToLower() == "true")
                 {
                     list = null;
                 }
                 else if (lookMode == LookMode.Value)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     foreach (XmlNode subNode in curXmlParent.ChildNodes)
                     {
                         T item = ScribeExtractor.ValueFromNode <T>(subNode, default(T));
                         list.Add(item);
                     }
                 }
                 else if (lookMode == LookMode.Deep)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     foreach (XmlNode subNode2 in curXmlParent.ChildNodes)
                     {
                         T item2 = ScribeExtractor.SaveableFromNode <T>(subNode2, ctorArgs);
                         list.Add(item2);
                     }
                 }
                 else if (lookMode == LookMode.Def)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     foreach (XmlNode subNode3 in curXmlParent.ChildNodes)
                     {
                         T item3 = ScribeExtractor.DefFromNodeUnsafe <T>(subNode3);
                         list.Add(item3);
                     }
                 }
                 else if (lookMode == LookMode.BodyPart)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     int num = 0;
                     foreach (XmlNode node in curXmlParent.ChildNodes)
                     {
                         T item4 = (T)((object)ScribeExtractor.BodyPartFromNode(node, num.ToString(), null));
                         list.Add(item4);
                         num++;
                     }
                 }
                 else if (lookMode == LookMode.LocalTargetInfo)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     int num2 = 0;
                     foreach (XmlNode node2 in curXmlParent.ChildNodes)
                     {
                         LocalTargetInfo localTargetInfo2 = ScribeExtractor.LocalTargetInfoFromNode(node2, num2.ToString(), LocalTargetInfo.Invalid);
                         T item5 = (T)((object)localTargetInfo2);
                         list.Add(item5);
                         num2++;
                     }
                 }
                 else if (lookMode == LookMode.TargetInfo)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     int num3 = 0;
                     foreach (XmlNode node3 in curXmlParent.ChildNodes)
                     {
                         TargetInfo targetInfo2 = ScribeExtractor.TargetInfoFromNode(node3, num3.ToString(), TargetInfo.Invalid);
                         T          item6       = (T)((object)targetInfo2);
                         list.Add(item6);
                         num3++;
                     }
                 }
                 else if (lookMode == LookMode.GlobalTargetInfo)
                 {
                     list = new List <T>(curXmlParent.ChildNodes.Count);
                     int num4 = 0;
                     foreach (XmlNode node4 in curXmlParent.ChildNodes)
                     {
                         GlobalTargetInfo globalTargetInfo2 = ScribeExtractor.GlobalTargetInfoFromNode(node4, num4.ToString(), GlobalTargetInfo.Invalid);
                         T item7 = (T)((object)globalTargetInfo2);
                         list.Add(item7);
                         num4++;
                     }
                 }
                 else if (lookMode == LookMode.Reference)
                 {
                     List <string> list2 = new List <string>(curXmlParent.ChildNodes.Count);
                     foreach (XmlNode xmlNode in curXmlParent.ChildNodes)
                     {
                         list2.Add(xmlNode.InnerText);
                     }
                     Scribe.loader.crossRefs.loadIDs.RegisterLoadIDListReadFromXml(list2, string.Empty);
                 }
             }
             else if (Scribe.mode == LoadSaveMode.ResolvingCrossRefs)
             {
                 if (lookMode == LookMode.Reference)
                 {
                     list = Scribe.loader.crossRefs.TakeResolvedRefList <T>(string.Empty);
                 }
                 else if (lookMode == LookMode.LocalTargetInfo)
                 {
                     if (list != null)
                     {
                         for (int i = 0; i < list.Count; i++)
                         {
                             list[i] = (T)((object)ScribeExtractor.ResolveLocalTargetInfo((LocalTargetInfo)((object)list[i]), i.ToString()));
                         }
                     }
                 }
                 else if (lookMode == LookMode.TargetInfo)
                 {
                     if (list != null)
                     {
                         for (int j = 0; j < list.Count; j++)
                         {
                             list[j] = (T)((object)ScribeExtractor.ResolveTargetInfo((TargetInfo)((object)list[j]), j.ToString()));
                         }
                     }
                 }
                 else if (lookMode == LookMode.GlobalTargetInfo && list != null)
                 {
                     for (int k = 0; k < list.Count; k++)
                     {
                         list[k] = (T)((object)ScribeExtractor.ResolveGlobalTargetInfo((GlobalTargetInfo)((object)list[k]), k.ToString()));
                     }
                 }
             }
         }
         finally
         {
             Scribe.ExitNode();
         }
     }
     else if (Scribe.mode == LoadSaveMode.LoadingVars)
     {
         if (lookMode == LookMode.Reference)
         {
             Scribe.loader.crossRefs.loadIDs.RegisterLoadIDListReadFromXml(null, label);
         }
         list = null;
     }
 }
示例#8
0
 public static void Look <T>(ref List <T> list, string label, LookMode lookMode = LookMode.Undefined, params object[] ctorArgs)
 {
     Scribe_Collections.Look <T>(ref list, false, label, lookMode, ctorArgs);
 }
示例#9
0
        /// <summary>
        /// Dictionary Look with value type keys
        /// </summary>
        public static void LookWithValueKey <K, V>(ref Dictionary <K, V> dict, string label, LookMode valueLookMode, params object[] valueCtorArgs)
        {
            List <V> list = null;

            LookWithValueKey(ref dict, label, valueLookMode, ref list, valueCtorArgs);
        }
示例#10
0
        /// <summary>
        /// Dictionary Look with value type keys
        /// </summary>
        public static void LookWithValueKey <K, V>(ref Dictionary <K, V> dict, string label, LookMode valueLookMode, ref List <V> valuesWorkingList, params object[] valueCtorArgs)
        {
            LookMode keyLookMode     = LookMode.Value;
            List <K> keysWorkingList = null;

            if (Scribe.EnterNode(label))
            {
                try
                {
                    if (Scribe.mode == LoadSaveMode.Saving || Scribe.mode == LoadSaveMode.LoadingVars)
                    {
                        keysWorkingList   = new List <K>();
                        valuesWorkingList = new List <V>();
                    }

                    if (Scribe.mode == LoadSaveMode.Saving)
                    {
                        foreach (KeyValuePair <K, V> current in dict)
                        {
                            keysWorkingList.Add(current.Key);
                            valuesWorkingList.Add(current.Value);
                        }
                    }

                    Scribe_Collections.Look(ref keysWorkingList, "keys", keyLookMode);
                    Scribe_Collections.Look(ref valuesWorkingList, "values", valueLookMode, valueCtorArgs);

                    if (Scribe.mode == LoadSaveMode.Saving)
                    {
                        if (keysWorkingList != null)
                        {
                            keysWorkingList.Clear();
                            keysWorkingList = null;
                        }

                        if (valuesWorkingList != null)
                        {
                            valuesWorkingList.Clear();
                            valuesWorkingList = null;
                        }
                    }

                    bool flag = keyLookMode == LookMode.Reference || valueLookMode == LookMode.Reference;
                    if ((flag && Scribe.mode == LoadSaveMode.ResolvingCrossRefs) || (!flag && Scribe.mode == LoadSaveMode.LoadingVars))
                    {
                        dict.Clear();
                        if (keysWorkingList == null)
                        {
                            Log.Error("Cannot fill dictionary because there are no keys.");
                        }
                        else if (valuesWorkingList == null)
                        {
                            Log.Error("Cannot fill dictionary because there are no values.");
                        }
                        else
                        {
                            if (keysWorkingList.Count != valuesWorkingList.Count)
                            {
                                Log.Error(string.Concat(new object[]
                                {
                                    "Keys count does not match the values count while loading a dictionary (maybe keys and values were resolved during different passes?). Some elements will be skipped. keys=",
                                    keysWorkingList.Count,
                                    ", values=",
                                    valuesWorkingList.Count
                                }));
                            }

                            int num = Math.Min(keysWorkingList.Count, valuesWorkingList.Count);
                            for (int i = 0; i < num; i++)
                            {
                                if (keysWorkingList[i] == null)
                                {
                                    Log.Error(string.Concat(new object[]
                                    {
                                        "Null key while loading dictionary of ",
                                        typeof(K),
                                        " and ",
                                        typeof(V),
                                        "."
                                    }));
                                }
                                else
                                {
                                    try
                                    {
                                        dict.Add(keysWorkingList[i], valuesWorkingList[i]);
                                    }
                                    catch (Exception ex)
                                    {
                                        Log.Error(string.Concat(new object[]
                                        {
                                            "Exception in LookDictionary(node=",
                                            label,
                                            "): ",
                                            ex
                                        }));
                                    }
                                }
                            }
                        }
                    }

                    if (Scribe.mode == LoadSaveMode.PostLoadInit)
                    {
                        if (keysWorkingList != null)
                        {
                            keysWorkingList.Clear();
                            keysWorkingList = null;
                        }

                        if (valuesWorkingList != null)
                        {
                            valuesWorkingList.Clear();
                            valuesWorkingList = null;
                        }
                    }
                }
                finally
                {
                    Scribe.ExitNode();
                }
            }
            else if (Scribe.mode == LoadSaveMode.LoadingVars)
            {
                dict = null;
            }
        }
示例#11
0
 public static void Look2 <T>(ref ThreadSafeLinkedList <T> list, bool saveDestroyedThings, string label, LookMode lookMode = LookMode.Undefined, params object[] ctorArgs)
 {
     Look(ref list, saveDestroyedThings: false, label, lookMode, ctorArgs);
 }
示例#12
0
 public ArmorRackInnerContainer(IThingHolder owner, bool oneStackOnly, LookMode contentsLookMode = LookMode.Deep)
     : base(owner, oneStackOnly, contentsLookMode)
 {
 }
示例#13
0
 public SaveableDefPair(VehicleDef def, FieldInfo field, string uniqueKey, K key, LookMode valueLookMode) : base(def, field)
 {
     this.key           = key;
     defName            = key.defName;
     this.uniqueKey     = uniqueKey;
     this.valueLookMode = valueLookMode;
     keyType            = typeof(K);
 }
示例#14
0
 public static void Look <T>(ref HashSet <T> valueHashSet, string label, LookMode lookMode = LookMode.Undefined)
 {
     Look(ref valueHashSet, saveDestroyedThings: false, label, lookMode);
 }
示例#15
0
 public ThingOwner(IThingHolder owner, bool oneStackOnly, LookMode contentsLookMode = LookMode.Deep)
     : base(owner, oneStackOnly, contentsLookMode)
 {
 }
示例#16
0
        public static void Look <T>(ref HashSet <T> valueHashSet, bool saveDestroyedThings, string label, LookMode lookMode = LookMode.Undefined)
        {
            List <T> list = null;

            if (Scribe.mode == LoadSaveMode.Saving && valueHashSet != null)
            {
                list = new List <T>();
                foreach (T item in valueHashSet)
                {
                    list.Add(item);
                }
            }
            Look(ref list, saveDestroyedThings, label, lookMode);
            if ((lookMode != LookMode.Reference || Scribe.mode != LoadSaveMode.ResolvingCrossRefs) && (lookMode == LookMode.Reference || Scribe.mode != LoadSaveMode.LoadingVars))
            {
                return;
            }
            if (list == null)
            {
                valueHashSet = null;
                return;
            }
            valueHashSet = new HashSet <T>();
            for (int i = 0; i < list.Count; i++)
            {
                valueHashSet.Add(list[i]);
            }
        }
示例#17
0
 private static void LookInternalDef <T>(ref T obj, string label, LookMode lookMode) where T : Def, new()
 {
     Scribe_Defs.Look(ref obj, label);
 }
示例#18
0
 public static void Look <T>(ref HashSet <T> valueHashSet, string label, LookMode lookMode = LookMode.Undefined)
 {
     Scribe_Collections.Look <T>(ref valueHashSet, false, label, lookMode);
 }
示例#19
0
 private static void LookInternalReference <T>(ref T obj, string label, LookMode lookMode) where T : ILoadReferenceable
 {
     Scribe_References.Look(ref obj, label);
 }
示例#20
0
 public void UpdateViewVelocity(Vector2 deltaLook)
 {
     // Set current Velocity of the Look-Motion
     currentLookMode = LookMode.Velocity;
     this.deltaLook  = deltaLook;
 }
示例#21
0
 public static bool TryResolveLookMode(Type type, out LookMode lookMode, bool desperate = false, bool preferDeepIfDesperateAndAmbiguous = false)
 {
     if (type == null)
     {
         if (desperate)
         {
             lookMode = LookMode.Value;
             return(true);
         }
         lookMode = LookMode.Undefined;
         return(false);
     }
     if (type == typeof(object) && desperate)
     {
         lookMode = LookMode.Value;
         return(true);
     }
     if (ParseHelper.HandlesType(type))
     {
         lookMode = LookMode.Value;
         return(true);
     }
     if (type == typeof(LocalTargetInfo))
     {
         lookMode = LookMode.LocalTargetInfo;
         return(true);
     }
     if (type == typeof(TargetInfo))
     {
         lookMode = LookMode.TargetInfo;
         return(true);
     }
     if (type == typeof(GlobalTargetInfo))
     {
         lookMode = LookMode.GlobalTargetInfo;
         return(true);
     }
     if (typeof(Def).IsAssignableFrom(type))
     {
         lookMode = LookMode.Def;
         return(true);
     }
     if (type == typeof(BodyPartRecord))
     {
         lookMode = LookMode.BodyPart;
         return(true);
     }
     if (typeof(IExposable).IsAssignableFrom(type) && !typeof(ILoadReferenceable).IsAssignableFrom(type))
     {
         lookMode = LookMode.Deep;
         return(true);
     }
     if (desperate && typeof(ILoadReferenceable).IsAssignableFrom(type))
     {
         if (preferDeepIfDesperateAndAmbiguous)
         {
             lookMode = LookMode.Deep;
         }
         else
         {
             lookMode = LookMode.Reference;
         }
         return(true);
     }
     lookMode = LookMode.Undefined;
     return(false);
 }
示例#22
0
        public static void Look <T>(ref List <T> list, bool saveDestroyedThings, string label, LookMode lookMode = LookMode.Undefined, params object[] ctorArgs)
        {
            if (lookMode == LookMode.Undefined)
            {
                if (ParseHelper.HandlesType(typeof(T)))
                {
                    lookMode = LookMode.Value;
                }
                else if (typeof(T) == typeof(LocalTargetInfo))
                {
                    lookMode = LookMode.LocalTargetInfo;
                }
                else if (typeof(T) == typeof(TargetInfo))
                {
                    lookMode = LookMode.TargetInfo;
                }
                else if (typeof(T) == typeof(GlobalTargetInfo))
                {
                    lookMode = LookMode.GlobalTargetInfo;
                }
                else if (typeof(Def).IsAssignableFrom(typeof(T)))
                {
                    lookMode = LookMode.Def;
                }
                else if (typeof(T) == typeof(BodyPartRecord))
                {
                    lookMode = LookMode.BodyPart;
                }
                else
                {
                    if (!typeof(IExposable).IsAssignableFrom(typeof(T)) || typeof(ILoadReferenceable).IsAssignableFrom(typeof(T)))
                    {
                        Log.Error("LookList call with a list of " + typeof(T) + " must have lookMode set explicitly.");
                        return;
                    }
                    lookMode = LookMode.Deep;
                }
            }
            if (Scribe.EnterNode(label))
            {
                try
                {
                    if (Scribe.mode == LoadSaveMode.Saving)
                    {
                        if (list == null)
                        {
                            Scribe.saver.WriteAttribute("IsNull", "True");
                        }
                        else
                        {
                            foreach (T item8 in list)
                            {
                                switch (lookMode)
                                {
                                case LookMode.Value:
                                {
                                    T value5 = item8;
                                    Scribe_Values.Look(ref value5, "li", default(T), forceSave: true);
                                    break;
                                }

                                case LookMode.LocalTargetInfo:
                                {
                                    LocalTargetInfo value4 = (LocalTargetInfo)(object)item8;
                                    Scribe_TargetInfo.Look(ref value4, saveDestroyedThings, "li");
                                    break;
                                }

                                case LookMode.TargetInfo:
                                {
                                    TargetInfo value3 = (TargetInfo)(object)item8;
                                    Scribe_TargetInfo.Look(ref value3, saveDestroyedThings, "li");
                                    break;
                                }

                                case LookMode.GlobalTargetInfo:
                                {
                                    GlobalTargetInfo value2 = (GlobalTargetInfo)(object)item8;
                                    Scribe_TargetInfo.Look(ref value2, saveDestroyedThings, "li");
                                    break;
                                }

                                case LookMode.Def:
                                {
                                    Def value = (Def)(object)item8;
                                    Scribe_Defs.Look(ref value, "li");
                                    break;
                                }

                                case LookMode.BodyPart:
                                {
                                    BodyPartRecord part = (BodyPartRecord)(object)item8;
                                    Scribe_BodyParts.Look(ref part, "li");
                                    break;
                                }

                                case LookMode.Deep:
                                {
                                    T target = item8;
                                    Scribe_Deep.Look(ref target, saveDestroyedThings, "li", ctorArgs);
                                    break;
                                }

                                case LookMode.Reference:
                                {
                                    ILoadReferenceable refee = (ILoadReferenceable)(object)item8;
                                    Scribe_References.Look(ref refee, "li", saveDestroyedThings);
                                    break;
                                }
                                }
                            }
                        }
                    }
                    else if (Scribe.mode == LoadSaveMode.LoadingVars)
                    {
                        XmlNode      curXmlParent = Scribe.loader.curXmlParent;
                        XmlAttribute xmlAttribute = curXmlParent.Attributes["IsNull"];
                        if (xmlAttribute == null || !(xmlAttribute.Value.ToLower() == "true"))
                        {
                            switch (lookMode)
                            {
                            case LookMode.Value:
                            {
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                IEnumerator enumerator3 = curXmlParent.ChildNodes.GetEnumerator();
                                try
                                {
                                    while (enumerator3.MoveNext())
                                    {
                                        XmlNode subNode = (XmlNode)enumerator3.Current;
                                        T       item    = ScribeExtractor.ValueFromNode(subNode, default(T));
                                        list.Add(item);
                                    }
                                }
                                finally
                                {
                                    IDisposable disposable2;
                                    if ((disposable2 = (enumerator3 as IDisposable)) != null)
                                    {
                                        disposable2.Dispose();
                                    }
                                }
                                break;
                            }

                            case LookMode.Deep:
                            {
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                IEnumerator enumerator9 = curXmlParent.ChildNodes.GetEnumerator();
                                try
                                {
                                    while (enumerator9.MoveNext())
                                    {
                                        XmlNode subNode3 = (XmlNode)enumerator9.Current;
                                        T       item7    = ScribeExtractor.SaveableFromNode <T>(subNode3, ctorArgs);
                                        list.Add(item7);
                                    }
                                }
                                finally
                                {
                                    IDisposable disposable8;
                                    if ((disposable8 = (enumerator9 as IDisposable)) != null)
                                    {
                                        disposable8.Dispose();
                                    }
                                }
                                break;
                            }

                            case LookMode.Def:
                            {
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                IEnumerator enumerator8 = curXmlParent.ChildNodes.GetEnumerator();
                                try
                                {
                                    while (enumerator8.MoveNext())
                                    {
                                        XmlNode subNode2 = (XmlNode)enumerator8.Current;
                                        T       item6    = ScribeExtractor.DefFromNodeUnsafe <T>(subNode2);
                                        list.Add(item6);
                                    }
                                }
                                finally
                                {
                                    IDisposable disposable7;
                                    if ((disposable7 = (enumerator8 as IDisposable)) != null)
                                    {
                                        disposable7.Dispose();
                                    }
                                }
                                break;
                            }

                            case LookMode.BodyPart:
                            {
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                int         num4        = 0;
                                IEnumerator enumerator7 = curXmlParent.ChildNodes.GetEnumerator();
                                try
                                {
                                    while (enumerator7.MoveNext())
                                    {
                                        XmlNode node4 = (XmlNode)enumerator7.Current;
                                        T       item5 = (T)(object)ScribeExtractor.BodyPartFromNode(node4, num4.ToString(), null);
                                        list.Add(item5);
                                        num4++;
                                    }
                                }
                                finally
                                {
                                    IDisposable disposable6;
                                    if ((disposable6 = (enumerator7 as IDisposable)) != null)
                                    {
                                        disposable6.Dispose();
                                    }
                                }
                                break;
                            }

                            case LookMode.LocalTargetInfo:
                            {
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                int         num3        = 0;
                                IEnumerator enumerator6 = curXmlParent.ChildNodes.GetEnumerator();
                                try
                                {
                                    while (enumerator6.MoveNext())
                                    {
                                        XmlNode         node3           = (XmlNode)enumerator6.Current;
                                        LocalTargetInfo localTargetInfo = ScribeExtractor.LocalTargetInfoFromNode(node3, num3.ToString(), LocalTargetInfo.Invalid);
                                        T item4 = (T)(object)localTargetInfo;
                                        list.Add(item4);
                                        num3++;
                                    }
                                }
                                finally
                                {
                                    IDisposable disposable5;
                                    if ((disposable5 = (enumerator6 as IDisposable)) != null)
                                    {
                                        disposable5.Dispose();
                                    }
                                }
                                break;
                            }

                            case LookMode.TargetInfo:
                            {
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                int         num2        = 0;
                                IEnumerator enumerator5 = curXmlParent.ChildNodes.GetEnumerator();
                                try
                                {
                                    while (enumerator5.MoveNext())
                                    {
                                        XmlNode    node2      = (XmlNode)enumerator5.Current;
                                        TargetInfo targetInfo = ScribeExtractor.TargetInfoFromNode(node2, num2.ToString(), TargetInfo.Invalid);
                                        T          item3      = (T)(object)targetInfo;
                                        list.Add(item3);
                                        num2++;
                                    }
                                }
                                finally
                                {
                                    IDisposable disposable4;
                                    if ((disposable4 = (enumerator5 as IDisposable)) != null)
                                    {
                                        disposable4.Dispose();
                                    }
                                }
                                break;
                            }

                            case LookMode.GlobalTargetInfo:
                            {
                                list = new List <T>(curXmlParent.ChildNodes.Count);
                                int         num         = 0;
                                IEnumerator enumerator4 = curXmlParent.ChildNodes.GetEnumerator();
                                try
                                {
                                    while (enumerator4.MoveNext())
                                    {
                                        XmlNode          node             = (XmlNode)enumerator4.Current;
                                        GlobalTargetInfo globalTargetInfo = ScribeExtractor.GlobalTargetInfoFromNode(node, num.ToString(), GlobalTargetInfo.Invalid);
                                        T item2 = (T)(object)globalTargetInfo;
                                        list.Add(item2);
                                        num++;
                                    }
                                }
                                finally
                                {
                                    IDisposable disposable3;
                                    if ((disposable3 = (enumerator4 as IDisposable)) != null)
                                    {
                                        disposable3.Dispose();
                                    }
                                }
                                break;
                            }

                            case LookMode.Reference:
                            {
                                List <string> list2       = new List <string>(curXmlParent.ChildNodes.Count);
                                IEnumerator   enumerator2 = curXmlParent.ChildNodes.GetEnumerator();
                                try
                                {
                                    while (enumerator2.MoveNext())
                                    {
                                        XmlNode xmlNode = (XmlNode)enumerator2.Current;
                                        list2.Add(xmlNode.InnerText);
                                    }
                                }
                                finally
                                {
                                    IDisposable disposable;
                                    if ((disposable = (enumerator2 as IDisposable)) != null)
                                    {
                                        disposable.Dispose();
                                    }
                                }
                                Scribe.loader.crossRefs.loadIDs.RegisterLoadIDListReadFromXml(list2, string.Empty);
                                break;
                            }
                            }
                        }
                        else
                        {
                            list = null;
                        }
                    }
                    else if (Scribe.mode == LoadSaveMode.ResolvingCrossRefs)
                    {
                        switch (lookMode)
                        {
                        case LookMode.Reference:
                            list = Scribe.loader.crossRefs.TakeResolvedRefList <T>(string.Empty);
                            break;

                        case LookMode.LocalTargetInfo:
                            if (list != null)
                            {
                                for (int j = 0; j < list.Count; j++)
                                {
                                    list[j] = (T)(object)ScribeExtractor.ResolveLocalTargetInfo((LocalTargetInfo)(object)list[j], j.ToString());
                                }
                            }
                            break;

                        case LookMode.TargetInfo:
                            if (list != null)
                            {
                                for (int k = 0; k < list.Count; k++)
                                {
                                    list[k] = (T)(object)ScribeExtractor.ResolveTargetInfo((TargetInfo)(object)list[k], k.ToString());
                                }
                            }
                            break;

                        case LookMode.GlobalTargetInfo:
                            if (list != null)
                            {
                                for (int i = 0; i < list.Count; i++)
                                {
                                    list[i] = (T)(object)ScribeExtractor.ResolveGlobalTargetInfo((GlobalTargetInfo)(object)list[i], i.ToString());
                                }
                            }
                            break;
                        }
                    }
                }
                finally
                {
                    Scribe.ExitNode();
                }
            }
            else if (Scribe.mode == LoadSaveMode.LoadingVars)
            {
                if (lookMode == LookMode.Reference)
                {
                    Scribe.loader.crossRefs.loadIDs.RegisterLoadIDListReadFromXml(null, label);
                }
                list = null;
            }
        }
示例#23
0
        public static void Look <K, V>(ref Dictionary <K, V> dict, string label, LookMode keyLookMode = LookMode.Undefined, LookMode valueLookMode = LookMode.Undefined) where K : new()
        {
            if (Scribe.mode == LoadSaveMode.LoadingVars)
            {
                bool flag  = keyLookMode == LookMode.Reference;
                bool flag2 = valueLookMode == LookMode.Reference;
                if (flag != flag2)
                {
                    Log.Error("You need to provide working lists for the keys and values in order to be able to load such dictionary.");
                    return;
                }
            }
            List <K> list  = null;
            List <V> list2 = null;

            Scribe_Collections.Look <K, V>(ref dict, label, keyLookMode, valueLookMode, ref list, ref list2);
        }
示例#24
0
 public static void Look <K, V>(ref Dictionary <K, V> dict, string label, LookMode keyLookMode, LookMode valueLookMode, ref List <K> keysWorkingList, ref List <V> valuesWorkingList)
 {
     if (Scribe.EnterNode(label))
     {
         try
         {
             if (Scribe.mode == LoadSaveMode.Saving && dict == null)
             {
                 Scribe.saver.WriteAttribute("IsNull", "True");
             }
             else
             {
                 if (Scribe.mode == LoadSaveMode.LoadingVars)
                 {
                     XmlAttribute xmlAttribute = Scribe.loader.curXmlParent.Attributes["IsNull"];
                     if (xmlAttribute != null && xmlAttribute.Value.ToLower() == "true")
                     {
                         dict = null;
                     }
                     else
                     {
                         dict = new Dictionary <K, V>();
                     }
                 }
                 if (Scribe.mode == LoadSaveMode.Saving || Scribe.mode == LoadSaveMode.LoadingVars)
                 {
                     keysWorkingList   = new List <K>();
                     valuesWorkingList = new List <V>();
                     if (Scribe.mode == LoadSaveMode.Saving && dict != null)
                     {
                         foreach (KeyValuePair <K, V> item in dict)
                         {
                             keysWorkingList.Add(item.Key);
                             valuesWorkingList.Add(item.Value);
                         }
                     }
                 }
                 Look(ref keysWorkingList, "keys", keyLookMode);
                 Look(ref valuesWorkingList, "values", valueLookMode);
                 if (Scribe.mode == LoadSaveMode.Saving)
                 {
                     if (keysWorkingList != null)
                     {
                         keysWorkingList.Clear();
                         keysWorkingList = null;
                     }
                     if (valuesWorkingList != null)
                     {
                         valuesWorkingList.Clear();
                         valuesWorkingList = null;
                     }
                 }
                 bool flag = keyLookMode == LookMode.Reference || valueLookMode == LookMode.Reference;
                 if (((flag && Scribe.mode == LoadSaveMode.ResolvingCrossRefs) || (!flag && Scribe.mode == LoadSaveMode.LoadingVars)) && dict != null)
                 {
                     if (keysWorkingList == null)
                     {
                         Log.Error("Cannot fill dictionary because there are no keys. label=" + label);
                     }
                     else if (valuesWorkingList == null)
                     {
                         Log.Error("Cannot fill dictionary because there are no values. label=" + label);
                     }
                     else
                     {
                         if (keysWorkingList.Count != valuesWorkingList.Count)
                         {
                             Log.Error("Keys count does not match the values count while loading a dictionary (maybe keys and values were resolved during different passes?). Some elements will be skipped. keys=" + keysWorkingList.Count + ", values=" + valuesWorkingList.Count + ", label=" + label);
                         }
                         int num = Math.Min(keysWorkingList.Count, valuesWorkingList.Count);
                         for (int i = 0; i < num; i++)
                         {
                             if (keysWorkingList[i] == null)
                             {
                                 Log.Error("Null key while loading dictionary of " + typeof(K) + " and " + typeof(V) + ". label=" + label);
                             }
                             else
                             {
                                 try
                                 {
                                     dict.Add(keysWorkingList[i], valuesWorkingList[i]);
                                 }
                                 catch (OutOfMemoryException)
                                 {
                                     throw;
                                 }
                                 catch (Exception ex2)
                                 {
                                     Log.Error("Exception in LookDictionary(label=" + label + "): " + ex2);
                                 }
                             }
                         }
                     }
                 }
                 if (Scribe.mode == LoadSaveMode.PostLoadInit)
                 {
                     if (keysWorkingList != null)
                     {
                         keysWorkingList.Clear();
                         keysWorkingList = null;
                     }
                     if (valuesWorkingList != null)
                     {
                         valuesWorkingList.Clear();
                         valuesWorkingList = null;
                     }
                 }
             }
         }
         finally
         {
             Scribe.ExitNode();
         }
     }
     else if (Scribe.mode == LoadSaveMode.LoadingVars)
     {
         dict = null;
     }
 }
示例#25
0
 public static void LookList <T>(ref List <T> list, bool saveDestroyedThings, string label, LookMode lookMode = LookMode.Undefined, params object[] ctorArgs)
 {
     if (lookMode == LookMode.Undefined)
     {
         if (Helper_Parsing.HandlesType(typeof(T)))
         {
             lookMode = LookMode.Value;
         }
         else
         {
             lookMode = LookMode.Deep;
         }
     }
     if (Scribe.mode == LoadSaveMode.Saving)
     {
         if (list == null && lookMode == LookMode.Reference)
         {
             //Log.Warning(string.Concat(new object[]
             //{
             //    "Saving null list \"",
             //    label,
             //    "\" with look mode ",
             //    lookMode,
             //    ". This will cause bugs because null lists are not registered during loading so CrossRefResolver will break."
             //}));
         }
         Scribe.EnterNode(label);
         if (list == null)
         {
             Scribe.WriteAttribute("IsNull", "True");
         }
         else
         {
             foreach (T current in list)
             {
                 if (lookMode == LookMode.Value)
                 {
                     T t = current;
                     Scribe_Values.LookValue <T>(ref t, "li", default(T), true);
                 }
                 else if (lookMode == LookMode.Deep)
                 {
                     T t2 = current;
                     Scribe_Deep.LookDeep <T>(ref t2, "li", ctorArgs);
                 }
             }
         }
         Scribe.ExitNode();
     }
     else if (Scribe.mode == LoadSaveMode.LoadingVars)
     {
         if (Scribe.curParent == null)
         {
             //Log.Error("XmlHandling.curParent is null. I'm not sure why.");
             list = null;
             return;
         }
         XmlNode xmlNode = Scribe.curParent[label];
         if (xmlNode == null)
         {
             list = null;
             return;
         }
         XmlAttribute xmlAttribute = xmlNode.Attributes["IsNull"];
         if (xmlAttribute != null && xmlAttribute.Value.ToLower() == "true")
         {
             list = null;
             return;
         }
         if (lookMode == LookMode.Value)
         {
             list = new List <T>(xmlNode.ChildNodes.Count);
             foreach (XmlNode subNode in xmlNode.ChildNodes)
             {
                 T item = ScribeExtractor.ValueFromNode <T>(subNode, default(T));
                 list.Add(item);
             }
         }
         else if (lookMode == LookMode.Deep)
         {
             list = new List <T>(xmlNode.ChildNodes.Count);
             foreach (XmlNode subNode2 in xmlNode.ChildNodes)
             {
                 T item2 = ScribeExtractor.SaveableFromNode <T>(subNode2, ctorArgs);
                 list.Add(item2);
             }
         }
     }
 }