public void Save(SavedGameDto game) { //if (File.Exists(FileXml.OriginalString)) //{ // File.Delete(FileXml.OriginalString); //} using (var file = File.Create(Path.GetFileName(FileSaveXml.LocalPath))) serializer.Serialize(file, ConvertFromDto(game)); }
public void Load() { SavedGame = ReposGame.Load(); SetIsGameSaved(SavedGame != null); }
protected static SavedGameXML ConvertFromDto(SavedGameDto game) { if (game == null) { return(null); } //if (!(game.Types?.Count >= 3)) if (!(game.Types != null && game.Types.Count >= 3)) { throw new ArgumentOutOfRangeException(nameof(game) + "." + nameof(game.Types), "Не может быть меньше трёх"); } List <CellTypeXML> types = game.Types .Select(dto => new CellTypeXML() { Id = dto.Id, Value = dto.Type }) .ToList(); var tps = types.ToDictionary(tp => tp.Value, tp => tp.Id); List <CellXML> cells = new List <CellXML>(); if (game.Cells != null) { foreach (CellDto cell in game.Cells.Where(cll => cll?.CellType != null && cll.CellType != CellTypeDto.Empty)) { cells.Add(new CellXML() { Id = cell.Id, Row = cell.Row, Column = cell.Column, TypeId = tps[cell.CellType.Type] }); } } int turnId = -1; foreach (UserDto user in game.Users) { if (user.IsTurn) { turnId = user.Id; break; } } if (!(game.Users?.Count > 0)) { throw new ArgumentOutOfRangeException(nameof(game) + "." + nameof(game.Users), "Не может быть меньше одного"); } List <UserXML> users = game.Users .Select(dto => new UserXML() { Id = dto.Id, Name = dto.UserName, ImageIndex = dto.ImageIndex, Turn = dto.Turn, TypeId = tps[dto.CellType.Type] }) .ToList(); return(new SavedGameXML() { Users = users, Cells = cells, CellTypes = types, CurrentUser = new CurrentUserXML() { UserId = turnId }, Game = new GameSettings() { Rows = game.RowsCount, Columns = game.ColumnsCount, LengthToWin = game.LengthLineForWin } }); }