Exemplo n.º 1
0
 public void Execute()
 {
     using (Stream stream = File.OpenRead(_fileName))
     {
         try
         {
             XMLSerializerEx serializer = new XMLSerializerEx();
             _objectLevelManager.GameLevel = (GameLevel)serializer.Deserialize(stream);
         }
         catch (Exception ex)
         {
             throw new ApplicationException(String.Format("Cannot open level: {0}", ex.Message), ex);
         }
     }
 }
Exemplo n.º 2
0
        public void Execute()
        {
            XDocument doc;

            try
            {
                XMLSerializerEx serializer = new XMLSerializerEx(new List <IXMLCustomSerializer> {
                    new RenderTarget2DXMLSerializer(), new WorldXMLSerializer(), new BodyXMLSerializer(), new FixtureXMLSerializer()
                });
                doc = serializer.Serialize(_level, "GameLevel"); //сохраняет текстуры в temp-папку
            }
            catch (Exception ex)
            {
                throw new ApplicationException(String.Format("Cannot serialize game level: {0}", ex.Message), ex);
            }

            try
            {
                using (Stream stream = File.Create(_fileName))
                {
                    doc.Save(stream);
                }

                //Перемещаем текстуры в текущую папку
                string currentPath = Path.GetDirectoryName(_fileName) + "\\";
                if (Directory.Exists(TextureSerializerSettings.FilePath))
                {
                    string[] files = Directory.GetFiles(TextureSerializerSettings.FilePath);
                    foreach (string file in files)
                    {
                        string newFileName = string.Concat(currentPath, Path.GetFileName(file));
                        //Если файл с таким именем уже существует, то вызываем метод обратного вызова
                        if (File.Exists(newFileName))
                        {
                            if (_fileExistsCallback != null)
                            {
                                DialogResult dResult = _fileExistsCallback(newFileName);
                                if (dResult == DialogResult.No)
                                {
                                    File.Delete(file);
                                    continue;
                                }
                                if ((dResult == DialogResult.Cancel) || (dResult == DialogResult.Abort))
                                {
                                    //Возвращаем всё к состоянию до сохранения
                                    File.Delete(_fileName);
                                    foreach (string file_ in files)
                                    {
                                        File.Delete(file_);
                                    }
                                    Directory.Delete(TextureSerializerSettings.FilePath);
                                    return;
                                }
                            }

                            File.Delete(newFileName);
                        }

                        File.Move(file, newFileName);
                    }

                    //Удаляем временную директорию из-под текстур
                    Directory.Delete(TextureSerializerSettings.FilePath);
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException(String.Format("Cannot save file: {0}", ex.Message), ex);
            }
        }