Beispiel #1
0
        /// <summary>
        /// Will save your data only if it present on persistentData
        /// </summary>
        /// <param name="savedData"></param>
        public void SaveData(SavedData savedData)
        {
            if (saveMode == SaveMode.SINGLE_FILE)
            {
                Debug.LogError("You don't use multiple file, you can't save only one saved data. Use SaveData() instead");
                return;
            }

            string dataPath = savedData.filePath;
            Type   type     = savedData.GetType();

            if (string.IsNullOrEmpty(dataPath))
            {
                List <SavedData> savedDataList;
                savedDataDictionnary.TryGetValue(savedData.GetType(), out savedDataList);

                if (savedDataList == null)
                {
                    Debug.LogError("There is no type of this data in the dictionnary, this is not possible. Use AddNewSavedData");
                    return;
                }


                int cpt = 0;
                foreach (SavedData sd in savedDataList)
                {
                    if (sd == savedData)
                    {
                        dataPath = multipleFilesDirectoryPath + type.Name;

                        if (!Directory.Exists(dataPath))
                        {
                            Directory.CreateDirectory(dataPath);
                        }

                        dataPath += "/" + cpt;

                        if (savedData is SavedData.IFullSerializationControl)
                        {
                            dataPath += ControlledSerializationFileExtension;
                            using (FileStream fs = File.Create(dataPath))
                            {
                                BinaryWriter writer = new BinaryWriter(fs);
                                writer.Write(type.Name);

                                ((SavedData.IFullSerializationControl)savedData).GetObjectData(writer);
                                fs.Close();
                            }
                        }
                        else
                        {
                            dataPath += AutomaticSerializationFileExtension;
                            BinaryFormatter bf = new BinaryFormatter();
                            using (FileStream fs = File.Create(dataPath))
                            {
                                bf.Serialize(fs, savedData);
                                fs.Close();
                            }
                        }

                        savedData.filePath   = dataPath;
                        savedData.fileNumber = cpt;
                    }

                    cpt++;
                }

                if (!savedDataList.Contains(savedData))
                {
                    Debug.LogError("This data is not in the dictionnary, this is not possible. Use AddNewSavedData");
                    return;
                }
            }
            else
            {
                if (savedData is SavedData.IFullSerializationControl)
                {
                    using (FileStream fs = File.Create(dataPath))
                    {
                        BinaryWriter writer = new BinaryWriter(fs);
                        writer.Write(type.Name);

                        ((SavedData.IFullSerializationControl)savedData).GetObjectData(writer);
                        fs.Close();
                    }
                }
                else
                {
                    using (FileStream fs = File.Create(dataPath))
                    {
                        BinaryFormatter bf = new BinaryFormatter();
                        bf.Serialize(fs, savedData);
                        fs.Close();
                    }
                }
            }
        }