/// <summary> /// Метод десерилизации /// Создает новую карту в Статическом Классе Игры и загружает ее из xml файла по указанному пути. /// </summary> /// <param name="path">Путь</param> public static GameMap Deserialize(string path, GameMap map) { if (File.Exists(path)) { var xdocument = XDocument.Load(path); map = new GameMap(); if (xdocument.Root != null) { foreach (var node in xdocument.Root.Attributes()) { if(node.Name.ToString().Equals("Width")) map.Width = (int)xdocument.Root.Attribute("Width"); else if (node.Name.ToString().Equals("Height")) map.Height = (int)xdocument.Root.Attribute("Height"); } foreach (var node in xdocument.Root.Elements()) map.Lands.Add((Landscape)node.Deserialize()); } return map; } else { throw new Exception("File to deserialize doesn't exists"); } }
public MapPresenter() { figures = new List<FigurePresenter>(); map = null; }
public MapPresenter(GameMap map) { this.map = map; //Background = map.Background; figures = new List<FigurePresenter>(); }
/// <summary> /// reload all lands, units and items from the game map, used when game map itself was reloaded /// </summary> /// <param name="newMap"></param> internal void Update(GameMap newMap) { map = newMap; Width = map.Width; Height = map.Height; Background = map.Background; Landscape = map.Lands.Select(x => new LandscapePresenter(x)).ToList(); UpdateVisibility(); }
/// <summary> /// Обновление карты в случае загрузки новой карты /// </summary> /// <param name="newMap"></param> public void UpdateMap(GameMap newMap) { Map.Update(newMap); // This is to redraw the map at once. // Crap, I don't know how to do it nicely var m = Map; Map = null; Map = m; }
public static void NewGame(GameMap map) { try { GameEngine.Game.StartNewGame(map); gamePresenter = new GamePresenter(startTime: new DateTime(1939, 5, 1), side: 0); gamePresenter.UpdateMap(map); RaiseGameReloaded(); } catch (Exception e) { throw e; // todo remove this } }
/// <summary> /// Метод серилизации /// Сохраняет игру в формате xml по указанному пути. /// </summary> /// <param name="map">Карта</param> /// <param name="path">Путь</param> public static void Serialize(GameMap map, string path, string name) { var mapPath = path + "\\Maps\\" + name + " map.xaml"; var xdocument = new XDocument(map.Serialize()); xdocument.Save(mapPath); path += "\\" + name + ".xml"; var xMap = new XElement("Map"); xMap.SetAttributeValue("Path", mapPath); //сохранение фонового изображения var xBackground = new XElement("Background"); if (map.Background != null && map.Background !="") { FileStream bgOrigin = new FileStream(map.Background, FileMode.Open, FileAccess.Read);//источник фона карты var directs = map.Background.Split('.'); string bgMapAddress = "bg" + name + "." + directs[directs.Length - 1]; FileStream bgMap = new FileStream(bgMapAddress, FileMode.Create);//куда скопировать фоновое изображение bgOrigin.CopyTo(bgMap); xBackground.SetAttributeValue("Path", bgMapAddress); } // сохраняем юнитов var xDoc = new XDocument(Serialize(map.Units)); // сохраняем итемы XElement xItems = Serialize(map.Items); xDoc.Root.Add(xMap); xDoc.Root.Add(xBackground); xDoc.Root.Add(xItems); xDoc.Save(path); }
/// <summary> /// Метод загрузки игры /// Загружает карту игры и состояние юнитов /// </summary> /// <param name="path">Путь к файлу загрузки</param> public static GameMap LoadGame(string path, GameMap map) { if (File.Exists(path)) { var xdocument = XDocument.Load(path); var units = new List<Unit>(); if (xdocument.Root != null) { units = DeserializeUnits(path); var xElement = xdocument.Root.Element("Map"); if (xElement != null) map = Deserialize("..\\..\\"+(string)xElement.Attribute("Path"), map); // map.Name = (string)xElement.Attribute("Path"); //нахождение фона карты var xBackground = xdocument.Root.Element("Background"); if (xBackground != null) map.Background = DeserializeBGImage((string)xBackground.Attribute("Path")); } map.Units.Clear(); map.Units.AddRange(units); Game.gameLoaded = true; // what? return map; } else { throw new Exception("File to deserialize doesn't exists"); } }
/// <summary> /// Конструктор игры по умолчанию /// </summary> static Game() { mainMap = new GameMap(); }
public static void StartNewGame(GameMap map) { try { Game.mainMap = map; // Вызываем инициализацию карты } catch (Exception) { throw new Exception("Starting New Game Failed."); } }
/// <summary> /// /// </summary> /// <param name="path"></param> public static void StartNewGame(string path) { try { Game.mainMap = Serializer.LoadGame(path, null); // Вызываем инициализацию карты } catch (Exception) { throw new Exception("Starting New Game Failed."); } }