Exemplo n.º 1
0
 public void SaveWithoutTransform(BinaryWriter writer)
 {
     KMonoBehaviour[] components = GetComponents <KMonoBehaviour>();
     if (components != null)
     {
         int num = 0;
         KMonoBehaviour[] array = components;
         foreach (KMonoBehaviour kMonoBehaviour in array)
         {
             if ((kMonoBehaviour is ISaveLoadableDetails || (object)kMonoBehaviour != null) && !kMonoBehaviour.GetType().IsDefined(typeof(SkipSaveFileSerialization), false))
             {
                 num++;
             }
         }
         foreach (KeyValuePair <string, ISerializableComponentManager> serializableComponentManager in serializableComponentManagers)
         {
             ISerializableComponentManager value = serializableComponentManager.Value;
             if (value.Has(base.gameObject))
             {
                 num++;
             }
         }
         writer.Write(num);
         KMonoBehaviour[] array2 = components;
         foreach (KMonoBehaviour kMonoBehaviour2 in array2)
         {
             if ((kMonoBehaviour2 is ISaveLoadableDetails || (object)kMonoBehaviour2 != null) && !kMonoBehaviour2.GetType().IsDefined(typeof(SkipSaveFileSerialization), false))
             {
                 writer.WriteKleiString(kMonoBehaviour2.GetType().ToString());
                 long position = writer.BaseStream.Position;
                 writer.Write(0);
                 long position2 = writer.BaseStream.Position;
                 if (kMonoBehaviour2 is ISaveLoadableDetails)
                 {
                     ISaveLoadableDetails saveLoadableDetails = (ISaveLoadableDetails)kMonoBehaviour2;
                     Serializer.SerializeTypeless(kMonoBehaviour2, writer);
                     saveLoadableDetails.Serialize(writer);
                 }
                 else if ((object)kMonoBehaviour2 != null)
                 {
                     Serializer.SerializeTypeless(kMonoBehaviour2, writer);
                 }
                 long position3 = writer.BaseStream.Position;
                 long num2      = position3 - position2;
                 writer.BaseStream.Position = position;
                 writer.Write((int)num2);
                 writer.BaseStream.Position = position3;
             }
         }
         foreach (KeyValuePair <string, ISerializableComponentManager> serializableComponentManager2 in serializableComponentManagers)
         {
             ISerializableComponentManager value2 = serializableComponentManager2.Value;
             if (value2.Has(base.gameObject))
             {
                 string key = serializableComponentManager2.Key;
                 writer.WriteKleiString(key);
                 value2.Serialize(base.gameObject, writer);
             }
         }
     }
 }
Exemplo n.º 2
0
    private static void LoadInternal(GameObject gameObject, IReader reader)
    {
        Dictionary <string, int> dictionary = new Dictionary <string, int>();

        KMonoBehaviour[] array = (!((UnityEngine.Object)gameObject != (UnityEngine.Object)null)) ? null : gameObject.GetComponents <KMonoBehaviour>();
        int num = reader.ReadInt32();

        for (int i = 0; i < num; i++)
        {
            string text     = reader.ReadKleiString();
            int    num2     = reader.ReadInt32();
            int    position = reader.Position;
            if (serializableComponentManagers.TryGetValue(text, out ISerializableComponentManager value))
            {
                value.Deserialize(gameObject, reader);
            }
            else
            {
                int value2 = 0;
                dictionary.TryGetValue(text, out value2);
                KMonoBehaviour kMonoBehaviour = null;
                int            num3           = 0;
                if (array != null)
                {
                    for (int j = 0; j < array.Length; j++)
                    {
                        if (array[j].GetType().ToString() == text)
                        {
                            if (num3 == value2)
                            {
                                kMonoBehaviour = array[j];
                                break;
                            }
                            num3++;
                        }
                    }
                }
                if ((UnityEngine.Object)kMonoBehaviour == (UnityEngine.Object)null)
                {
                    reader.SkipBytes(num2);
                }
                else if ((object)kMonoBehaviour == null && !(kMonoBehaviour is ISaveLoadableDetails))
                {
                    DebugUtil.LogErrorArgs("Component", text, "is not ISaveLoadable");
                    reader.SkipBytes(num2);
                }
                else
                {
                    dictionary[text] = num3 + 1;
                    if (kMonoBehaviour is ISaveLoadableDetails)
                    {
                        ISaveLoadableDetails saveLoadableDetails = (ISaveLoadableDetails)kMonoBehaviour;
                        Deserializer.DeserializeTypeless(kMonoBehaviour, reader);
                        saveLoadableDetails.Deserialize(reader);
                    }
                    else
                    {
                        Deserializer.DeserializeTypeless(kMonoBehaviour, reader);
                    }
                    if (reader.Position != position + num2)
                    {
                        DebugUtil.LogWarningArgs("Expected to be at offset", position + num2, "but was only at offset", reader.Position, ". Skipping to catch up.");
                        reader.SkipBytes(position + num2 - reader.Position);
                    }
                }
            }
        }
    }