public void AddRoundToPairingCount(PlayerPairings pairings) { foreach (var team in Teams) { team.AddToPairingsCount(pairings); } }
internal void AddPlayer(Player player, PlayerPairings pairings) { var team = Teams.First(t => t.PlayerCount == Teams.Min(tt => tt.PlayerCount)); team.AddPlayerLate(player, pairings); SaveToFile(); }
/// <summary> /// For each pair of players, record that they played together /// </summary> public void AddToPairingsCount(PlayerPairings pairings) { foreach (var playerPairing in PlayerPairings()) { pairings.PlayedTogether(playerPairing); } }
internal void Delete(PlayerPairings pairings) { File.Delete(_filename); foreach (var team in Teams) { team.OnDelete(pairings); } }
/// <summary> /// Permanently delete a player from the team /// </summary> internal void RemovePlayer(Player player, PlayerPairings pairings) { Players.Remove(player); // Undo the players' pairings foreach (var playerPairing in PlayerPairings(player)) { pairings.UndoPlayerPairing(playerPairing); } }
/// <summary> /// Add a player to the team after pairings have already been generated /// </summary> public void AddPlayerLate(Player player, PlayerPairings pairings) { AddPlayer(player); foreach (var pairing in PlayerPairings(player)) { pairings.PlayedTogether(pairing); } player.GameDone(GameResult, Model.GameResult.NoneYet); }
internal void DeletePlayer(Player player, PlayerPairings pairings) { foreach (var team in Teams) { if (team.Players.Contains(player)) { team.RemovePlayer(player, pairings); } } SaveToFile(); }
public void OnDelete(PlayerPairings pairings) { // Undo the players' scores UpdateGameScore(Model.GameResult.NoneYet); // Undo the players' pairings foreach (var playerPairing in PlayerPairings()) { pairings.UndoPlayerPairing(playerPairing); } }
public Tournament(TournamentPersistence storageLocator) { _storage = storageLocator; LoadSettings(); var provider = new PlayerListFile(_storage, Settings); PlayerProvider = provider; PlayerPairings = new PlayerPairings(); provider.PlayerDeleted += PlayerDeleted; Rounds = new ObservableCollection <HatRound>(); }
public void LoadExistingData() { Rounds.Clear(); PlayerPairings.Clear(); var files = _storage.GetHatRoundPaths(); foreach (var file in files) { try { var doc = new XmlDocument(); using (var stream = new FileStream(file, FileMode.Open)) { doc.Load(stream); } var teams = doc.SelectNodes("/HatRound/Teams/Team"); // Basic validation if (teams.Count == 0 || teams.Count % 2 != 0) { throw new Exception(); } var teamList = new List <Team>(); foreach (XmlNode team in teams) { var teamName = team.SelectSingleNode("Name").InnerText; Team t = new Team(teamName); var players = team.SelectNodes("Players/Player"); // Basic validation if (players.Count == 0) { throw new Exception(); } foreach (XmlNode player in players) { var name = player.SelectSingleNode("Name").InnerText; Player p = PlayerProvider.GetPlayer(name); // Player list may have changed throughout the day, so accept this difference if (p != null) { t.AddPlayer(p); } } GameResult gameResult = (GameResult)Enum.Parse(typeof(GameResult), team.SelectSingleNode("GameResult").InnerText); if (gameResult != GameResult.NoneYet) { t.GameDone(gameResult); } teamList.Add(t); } var round = new HatRound(teamList, file); AddRound(round); } catch (Exception) { throw new InvalidRoundException(string.Format("Round file {0} is an invalid file", file)); } } }