// ------------------------------------ // Add Player Tab // ------------------------------------ private void addPlayerButton_Click(object sender, EventArgs e) { Person person = new Person(); person.Name = addPlayerBox.Text; person.Team = addTeamBox.Text; person.Characters = addCharacterBox.Text; person.Mu = startMu; person.Sigma = startSigma; addPlayerBox.Clear(); addTeamBox.Clear(); addCharacterBox.Clear(); playerList.Add(person); rebuildPlayerSelection(); addTeamBox.Select(); }
// Confirm Import. Process all matches in selected event. private void importButton_Click(object sender, EventArgs e) { foreach (ImportPlayer p in challongePlayerList) { if (p.SKLink == " << Create New Player >>") { if (!playerNames.Contains(p.Name)) { Person person = new Person(); person.Name = p.Name; importPlayers.Add(person); } } else if (p.SKLink != p.Name) { addAlts.Add(p.SKLink + "\t" + p.Name); } } foreach (Fizzi.Libraries.ChallongeApiWrapper.Match m in portal.GetMatches(curTourney.Id)) { if (m.State == "complete") { createMatch(m.Player1Id.ToString(), m.Player2Id.ToString(), m.WinnerId.ToString()); } } this.Close(); }
// ------------------------------------ // View/Modify Tab // ------------------------------------ private void modifySelector_SelectedIndexChanged(object sender, EventArgs e) { Person person = new Person(); foreach (Person p1 in playerList) { if (p1.Name == modifySelector.Text) { person = p1; } } modifyPlayerButton.Enabled = true; modifyDeleteButton.Enabled = true; modifyTeamBox.Text = person.Team; modifyNameBox.Text = person.Name; modifyCharacterBox.Text = person.Characters; modifyHideCheck.Checked = person.Invisible; modifyAltsBox.Clear(); foreach (String alt in person.Alts) { modifyAltsBox.Text += alt + ";"; } if(modifyAltsBox.Text.Length > 0) modifyAltsBox.Text = modifyAltsBox.Text.Substring(0, modifyAltsBox.Text.Length - 1); modifyMuBox.Text = person.Mu.ToString(); modifySigmaBox.Text = person.Sigma.ToString(); modifyScoreBox.Text = person.Score.ToString(); modifyWLDBox.Text = person.Wins + " -- " + person.Losses + " -- " + person.Draws + " (" + person.WinPercent + "%)"; String details = "INDIVIDUAL MATCH TALLY:\r\n"; foreach (Person opponent in playerList) { if (opponent.Name != person.Name) { int wins = 0; int losses = 0; int draws = 0; foreach (Match match in matchList) { if (match.Player1 == opponent.Name && match.Player2 == person.Name) { if (match.Winner == 1) losses++; else if (match.Winner == 2) wins++; else if (match.Winner == 0) draws++; } else if (match.Player1 == person.Name && match.Player2 == opponent.Name) { if (match.Winner == 1) wins++; else if (match.Winner == 2) losses++; else if (match.Winner == 0) draws++; } } if(wins + losses + draws > 0) details += opponent.Name + " -- " + wins + "/" + losses + "/" + draws + "\r\n"; } } details += "\r\nMATCH HISTORY:\r\n"; foreach (Match match in matchList) { if (match.Player2 == person.Name) { if (match.Winner == 1) details += "LOSS vs " + match.Player1 + " (" + match.P2Score + " vs " + match.P1Score + ", " + (match.P2Score2 - match.P2Score) + ") -- " + match.Description + " -- " + match.Timestamp.Date.ToShortDateString() + "\r\n"; else if (match.Winner == 2) details += "WIN vs " + match.Player1 + " (" + match.P2Score + " vs " + match.P1Score + ", " + (match.P2Score2 - match.P2Score) + ") -- " + match.Description + " -- " + match.Timestamp.Date.ToShortDateString() + "\r\n"; else if (match.Winner == 0) details += "DRAW vs " + match.Player1 + " (" + match.P2Score + " vs " + match.P1Score + ", " + (match.P2Score2 - match.P2Score) + ") -- " + match.Description + " -- " + match.Timestamp.Date.ToShortDateString() + "\r\n"; } else if (match.Player1 == person.Name) { if (match.Winner == 1) details += "WIN vs " + match.Player2 + " (" + match.P1Score + " vs " + match.P2Score + ", " + (match.P1Score2 - match.P1Score) + ") -- " + match.Description + " -- " + match.Timestamp.Date.ToShortDateString() + "\r\n"; else if (match.Winner == 2) details += "LOSS vs " + match.Player2 + " (" + match.P1Score + " vs " + match.P2Score + ", " + (match.P1Score2 - match.P1Score) + ") -- " + match.Description + " -- " + match.Timestamp.Date.ToShortDateString() + "\r\n"; else if (match.Winner == 0) details += "DRAW vs " + match.Player2 + " (" + match.P1Score + " vs " + match.P2Score + ", " + (match.P1Score2 - match.P1Score) + ") -- " + match.Description + " -- " + match.Timestamp.Date.ToShortDateString() + "\r\n"; } } modifyDetailBox.Text = details; }
private void player2Box_SelectedIndexChanged(object sender, EventArgs e) { p1WinButton.Enabled = false; p2WinButton.Enabled = false; drawButton.Enabled = false; Person person = new Person(); Boolean p1Valid = false; foreach (Person p1 in playerList) { if (p1.Name == player2Selector.Text) { person = p1; } if (p1.Name == player1Selector.Text) { person = p1; p1Valid = true; } } refreshScoreBoxes(); if (player1Selector.Text != player2Selector.Text && p1Valid) { p1WinButton.Enabled = true; p2WinButton.Enabled = true; drawButton.Enabled = true; } }
private void fileImportGlickoButton_Click(object sender, EventArgs e) { importFileDialog.Filter = "GLK files (*.glk)|*.glk|CSV files (*.csv)|*.csv|All files (*.*)|*.*"; if (importFileDialog.ShowDialog() == DialogResult.OK) { StreamReader sr = new StreamReader(importFileDialog.FileName); using (sr) { String line; String[] row; while ((line = sr.ReadLine()) != null) { if (line.Equals("--==--")) break; row = line.Split(','); if (row.Length < 8) return; Person p = new Person(); p.Team = row[0]; p.Name = row[1]; Boolean alreadyExists = false; foreach (Person pl in playerList) { if (pl.Name == p.Name) { alreadyExists = true; break; } } if (!alreadyExists) { playerList.Add(p); } } while ((line = sr.ReadLine()) != null) { if (!(line.Equals("//reset,//reset") || line.Equals("//reset,//reset,"))) { if (line.Equals("--==--")) break; row = line.Split(','); Match m = new Match(); m.Player1 = row[0]; m.Player2 = row[1]; m.Winner = 1; if (row.Length == 3) m.Description = row[2]; m.Order = Toolbox.getNewMatchNumber(matchList, DateTime.Today); matchList.Add(m); } } } rebuildPlayerSelection(); matchList = matchList.OrderBy(s => s.Timestamp).ThenBy(s => s.Order).ToList(); Toolbox.recalcMatches(playerList, matchList, startMu, startSigma, multiplier, decay, decayValue); buildHistory(); } }
private void fileLoadButton_Click(object sender, EventArgs e) { if (requireSave) { DialogResult checkSave = confirmSave(); if (checkSave == DialogResult.Yes) { fileUpdateButton_Click(sender, e); } else if (checkSave == DialogResult.Cancel) return; } playerList.Clear(); matchList.Clear(); openWorldDialog.Filter = "Bacon files (*.bcn)|*.bcn|SkillKeeper92 files (*.sk92)|*.sk92|All files (*.*)|*.*"; if (openWorldDialog.ShowDialog() == DialogResult.OK) { openedWorld = openWorldDialog.FileName; requireSave = false; progressBar1.Visible = true; progressBar1.Value = 0; progressLabel.Visible = true; var xEle = XElement.Load(openWorldDialog.FileName); Int32 totalItems = xEle.Element("Players").Elements("Player").Count() + xEle.Element("Matches").Elements("Match").Count(); Int32 progress = 0; if (xEle.Element("Settings") != null) { multiplier = Int32.Parse(xEle.Element("Settings").Attribute("Multiplier").Value); if(xEle.Element("Settings").Attribute("MinMatches") != null) minMatches = UInt32.Parse(xEle.Element("Settings").Attribute("MinMatches").Value); decay = UInt16.Parse(xEle.Element("Settings").Attribute("Decay").Value); if (xEle.Element("Settings").Attribute("DecayValue") != null) decayValue = UInt32.Parse(xEle.Element("Settings").Attribute("DecayValue").Value); else decayValue = 1; settingsMultiplierBox.Text = multiplier.ToString(); } progressLabel.Text = "Loading players..."; progressLabel.Refresh(); foreach (XElement player in xEle.Element("Players").Elements("Player")) { Person person = new Person(); person.Name = player.Attribute("Name").Value; person.Team = player.Attribute("Team").Value; person.Invisible = Boolean.Parse(player.Attribute("Invisible").Value); person.Characters = player.Attribute("Characters").Value; person.AltsString = player.Attribute("Alts").Value; playerList.Add(person); progress++; progressBar1.Value = (progress * 100) / totalItems; progressBar1.PerformStep(); progressBar1.Refresh(); } progressLabel.Text = "Loading matches..."; progressLabel.Refresh(); foreach (XElement m in xEle.Element("Matches").Elements("Match")) { Match match = new Match(); match.Timestamp = DateTime.Parse(m.Attribute("Timestamp").Value); match.Order = UInt32.Parse(m.Attribute("Order").Value); if(m.Attribute("Description") != null) match.Description = m.Attribute("Description").Value; if (m.Attribute("ID") != null) match.ID = m.Attribute("ID").Value; else match.ID = Guid.NewGuid().ToString("N"); match.Player1 = m.Attribute("Player1").Value; match.Player2 = m.Attribute("Player2").Value; match.Winner = UInt16.Parse(m.Attribute("Winner").Value); matchList.Add(match); progress++; progressBar1.Value = (progress * 100) / totalItems; progressBar1.PerformStep(); } settingsDecayIntBox.Text = decayValue + ""; switch (decay) { case 1: settingsDecayDaily.Checked = true; break; case 2: settingsDecayWeekly.Checked = true; break; case 3: settingsDecayMonthly.Checked = true; break; case 4: settingsDecayYearly.Checked = true; break; case 0: settingsDecayNever.Checked = true; break; } progressLabel.Text = "Processing players..."; progressLabel.Refresh(); rebuildPlayerSelection(); progressLabel.Text = "Calculating scores..."; progressLabel.Refresh(); Toolbox.recalcMatches(playerList, matchList, startMu, startSigma, multiplier, decay, decayValue, progressBar1); progressLabel.Text = "Verifying match history..."; progressLabel.Refresh(); progressBar1.Refresh(); buildHistory(); progressBar1.Visible = false; progressLabel.Visible = false; requireSave = false; } }
private void refreshScoreBoxes() { Person p1 = new Person(); Person p2 = new Person(); foreach (Person person in playerList) { if (person.Name == player1Selector.Text) { p1 = person; } if (person.Name == player2Selector.Text) { p2 = person; } } p1MuDisplay.Text = p1.Mu.ToString(); p1SigmaDisplay.Text = p1.Sigma.ToString(); p1ScoreDisplay.Text = p1.Score.ToString(); p2MuDisplay.Text = p2.Mu.ToString(); p2SigmaDisplay.Text = p2.Sigma.ToString(); p2ScoreDisplay.Text = p2.Score.ToString(); p1WLDBox.Text = p1.Wins + " -- " + p1.Losses + " -- " + p1.Draws + " (" + p1.WinPercent + "%)"; p2WLDBox.Text = p2.Wins + " -- " + p2.Losses + " -- " + p2.Draws + " (" + p2.WinPercent + "%)"; Player p1s = new Player(1); Player p2s = new Player(2); Rating p1r = new Rating(p1.Mu, p1.Sigma); Rating p2r = new Rating(p2.Mu, p2.Sigma); Team t1 = new Team(p1s, p1r); Team t2 = new Team(p2s, p2r); matchQualBox.Text = (TrueSkillCalculator.CalculateMatchQuality(GameInfo.DefaultGameInfo, Teams.Concat(t1, t2)) * 100).ToString(); }
private void combinePlayers(String player1, String player2) { Person oldP = new Person(), newP = new Person(); foreach (Person p in playerList) { if (p.Name == player1) { oldP = p; } else if (p.Name == player2) { newP = p; } } foreach (String alt in oldP.Alts) { newP.Alts.Add(alt); } newP.Alts.Add(oldP.Name); foreach (Match m in matchList) { if (m.Player1 == player1) m.Player1 = player2; else if (m.Player2 == player1) m.Player2 = player2; } modifySelector.Text = player2; playerList.Remove(oldP); rebuildPlayerSelection(); matchList = matchList.OrderBy(s => s.Timestamp).ThenBy(s => s.Order).ToList(); Toolbox.recalcMatches(playerList, matchList, startMu, startSigma, multiplier, decay, decayValue); buildHistory(); requireSave = true; }
private void updatePlayerMatch(UInt16 winner) { Person p1 = new Person(); Person p2 = new Person(); foreach (Person person in playerList) { if (person.Name == player1Selector.Text) { p1 = person; } if (person.Name == player2Selector.Text) { p2 = person; } } Player p1s = new Player(1); Player p2s = new Player(2); Rating p1r = new Rating(p1.Mu, p1.Sigma); Rating p2r = new Rating(p2.Mu, p2.Sigma); Team t1 = new Team(p1s, p1r); Team t2 = new Team(p2s, p2r); IDictionary<Player, Rating> newRatings = null; if(winner == 0) newRatings = TrueSkillCalculator.CalculateNewRatings(GameInfo.DefaultGameInfo, Teams.Concat(t1, t2), 1, 1); else if(winner == 1) newRatings = TrueSkillCalculator.CalculateNewRatings(GameInfo.DefaultGameInfo, Teams.Concat(t1, t2), 1, 2); else if(winner == 2) newRatings = TrueSkillCalculator.CalculateNewRatings(GameInfo.DefaultGameInfo, Teams.Concat(t1, t2), 2, 1); p1.Mu = newRatings[p1s].Mean; p1.Sigma = newRatings[p1s].StandardDeviation; p2.Mu = newRatings[p2s].Mean; p2.Sigma = newRatings[p2s].StandardDeviation; foreach (Person person in playerList) { if (person.Name == player1Selector.Text) { person.Mu = p1.Mu; person.Sigma = p1.Sigma; if (winner == 0) person.Draws++; else if (winner == 1) person.Wins++; else if (winner == 2) person.Losses++; } if (person.Name == player2Selector.Text) { person.Mu = p2.Mu; person.Sigma = p2.Sigma; if (winner == 0) person.Draws++; else if (winner == 1) person.Losses++; else if (winner == 2) person.Wins++; } } requireSave = true; refreshScoreBoxes(); }
// Confirm Import. Process all matches in selected event. private void importButton_Click(object sender, EventArgs e) { foreach (ImportPlayer p in tioList) { if (p.SKLink == " << Create New Player >>") { if (!playerNames.Contains(p.Name)) { Person person = new Person(); person.Name = p.Name; importPlayers.Add(person); } } else if (p.SKLink != p.Name) { addAlts.Add(p.SKLink + "\t" + p.Name); } } foreach (XElement tioEvent in xEle.Element("EventList").Element("Event").Element("Games").Elements("Game")) { if (tioEvent.Element("Name").Value == eventSelector.Text) { if (tioEvent.Element("Bracket").Element("Pools") != null) foreach (XElement pool in tioEvent.Element("Bracket").Element("Pools").Elements("Pool")) foreach (XElement match in pool.Element("Matches").Elements("Match")) createMatch(match); else foreach (XElement match in tioEvent.Element("Bracket").Element("Matches").Elements("Match")) createMatch(match); } } if (hasFinals1) importMatches.Add(finals1); if (hasFinals2) importMatches.Add(finals2); this.Close(); }