Beispiel #1
0
        public void Save()
        {
            ModDataSaveHeader header = new ModDataSaveHeader(_stream, _saveableMods.Keys, _modManager);

            // Allocate the required header space
            header.WriteHeader();

            BinaryFormatter formatter = new BinaryFormatter();

            foreach (var saveableObjectMod in _saveableMods)
            {
                header.SetSavePosition(saveableObjectMod.Key, _stream.Position);

                var fieldInfo = saveableObjectMod.Value as FieldInfo;
                if (fieldInfo != null)
                {
                    object saveObject = fieldInfo.GetValue(saveableObjectMod.Key);
                    formatter.Serialize(_stream, saveObject ?? NullSaveValue.Instance);
                }
                else
                {
                    var propertyInfo = saveableObjectMod.Value as PropertyInfo;
                    if (propertyInfo != null)
                    {
                        object saveObject = propertyInfo.GetMethod.Invoke(saveableObjectMod.Key, null);
                        formatter.Serialize(_stream, saveObject ?? NullSaveValue.Instance);
                    }
                }
            }

            // Re-write the header, now with the mods' save positions
            header.WriteHeader();
        }
Beispiel #2
0
        public void Load()
        {
            ModDataSaveHeader header = new ModDataSaveHeader(_stream, _saveableMods.Keys, _modManager);

            header.ReadHeader();

            BinaryFormatter formatter = new BinaryFormatter();

            foreach (var saveableObjectMod in _saveableMods)
            {
                long?position = header.GetSavePosition(saveableObjectMod.Key);
                if (!position.HasValue)
                {
                    continue;
                }

                _stream.Seek(position.Value, SeekOrigin.Begin);

                var fieldInfo = saveableObjectMod.Value as FieldInfo;
                if (fieldInfo != null)
                {
                    object saveObject = formatter.Deserialize(_stream);
                    if (saveObject is NullSaveValue)
                    {
                        fieldInfo.SetValue(saveableObjectMod.Key, null);
                    }
                    else
                    {
                        fieldInfo.SetValue(saveableObjectMod.Key, saveObject);
                    }
                }
                else
                {
                    var propertyInfo = saveableObjectMod.Value as PropertyInfo;
                    if (propertyInfo != null)
                    {
                        object saveObject = formatter.Deserialize(_stream);
                        if (saveObject is NullSaveValue)
                        {
                            propertyInfo.SetMethod.Invoke(saveableObjectMod.Key, new object[] { null });
                        }
                        else
                        {
                            propertyInfo.SetMethod.Invoke(saveableObjectMod.Key, new[] { saveObject });
                        }
                    }
                }
            }
        }
Beispiel #3
0
        public void Load()
        {
            ModDataSaveHeader header = new ModDataSaveHeader(_stream, _saveableMods.Keys,_modManager);
            header.ReadHeader();

            BinaryFormatter formatter = new BinaryFormatter();
            foreach (var saveableObjectMod in _saveableMods)
            {
                long? position = header.GetSavePosition(saveableObjectMod.Key);
                if (!position.HasValue)
                    continue;

                _stream.Seek(position.Value, SeekOrigin.Begin);

                var fieldInfo = saveableObjectMod.Value as FieldInfo;
                if (fieldInfo != null)
                {
                    object saveObject = formatter.Deserialize(_stream);
                    if (saveObject is NullSaveValue)
                    {
                        fieldInfo.SetValue(saveableObjectMod.Key, null);
                    }
                    else
                    {
                        fieldInfo.SetValue(saveableObjectMod.Key, saveObject);
                    }
                }
                else
                {
                    var propertyInfo = saveableObjectMod.Value as PropertyInfo;
                    if (propertyInfo != null)
                    {
                        object saveObject = formatter.Deserialize(_stream);
                        if (saveObject is NullSaveValue)
                        {
                            propertyInfo.SetMethod.Invoke(saveableObjectMod.Key, new object[] { null });
                        }
                        else
                        {
                            propertyInfo.SetMethod.Invoke(saveableObjectMod.Key, new[] { saveObject });
                        }
                    }
                }
            }
        }
Beispiel #4
0
        public void Save()
        {
            ModDataSaveHeader header = new ModDataSaveHeader(_stream, _saveableMods.Keys,_modManager);

            // Allocate the required header space
            header.WriteHeader();

            BinaryFormatter formatter = new BinaryFormatter();
            foreach (var saveableObjectMod in _saveableMods)
            {
                header.SetSavePosition(saveableObjectMod.Key, _stream.Position);

                var fieldInfo = saveableObjectMod.Value as FieldInfo;
                if (fieldInfo != null)
                {
                    object saveObject = fieldInfo.GetValue(saveableObjectMod.Key);
                    formatter.Serialize(_stream, saveObject ?? NullSaveValue.Instance);
                }
                else
                {
                    var propertyInfo = saveableObjectMod.Value as PropertyInfo;
                    if (propertyInfo != null)
                    {
                        object saveObject = propertyInfo.GetMethod.Invoke(saveableObjectMod.Key, null);
                        formatter.Serialize(_stream, saveObject ?? NullSaveValue.Instance);
                    }
                }
            }

            // Re-write the header, now with the mods' save positions
            header.WriteHeader();
        }