/// <summary>Calculates the metrics of a player's performance.</summary> /// <param name="r"> /// The SQLite DataRow containing the player's box score. Should be the result of an INNER JOIN'ed query between /// PlayerResults and GameResults. /// </param> public void CalcMetrics(DataRow r) { var bs = new TeamBoxScore(r, null); var ts = new TeamStats(TeamID); var tsopp = new TeamStats(OppTeamID); var team1ID = ParseCell.GetInt32(r, "Team1ID"); var team2ID = ParseCell.GetInt32(r, "Team2ID"); if (TeamID == team1ID) { TeamStats.AddTeamStatsFromBoxScore(bs, ref ts, ref tsopp); } else { TeamStats.AddTeamStatsFromBoxScore(bs, ref tsopp, ref ts); } var ps = new PlayerStats { ID = PlayerID }; ps.AddBoxScore(this, bs.IsPlayoff); ps.CalcMetrics(ts, tsopp, new TeamStats(-1), GmScOnly: true); GmSc = ps.Metrics["GmSc"]; GmScE = ps.Metrics["GmScE"]; }
/// <summary>Calculates the metrics of a player's performance.</summary> /// <param name="bs">The game's box score from which to calculate the metrics.</param> public void CalcMetrics(TeamBoxScore bs) { var ts = new TeamStats(TeamID); var tsopp = new TeamStats(OppTeamID); var team1ID = bs.Team1ID; if (TeamID == team1ID) { TeamStats.AddTeamStatsFromBoxScore(bs, ref ts, ref tsopp); } else { TeamStats.AddTeamStatsFromBoxScore(bs, ref tsopp, ref ts); } var ps = new PlayerStats { ID = PlayerID }; ps.AddBoxScore(this, bs.IsPlayoff); ps.CalcMetrics(ts, tsopp, new TeamStats(-1), GmScOnly: true); GmSc = ps.Metrics["GmSc"]; GmScE = ps.Metrics["GmScE"]; }
/// <summary> /// Handles the SelectionChanged event of the cmbOppPlayer control. /// Allows the user to change the opposing player, to whose stats the current player's stats will be compared. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e"> /// The <see cref="SelectionChangedEventArgs" /> instance containing the event data. /// </param> private void cmbOppPlayer_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { if (cmbTeam.SelectedIndex == -1 || cmbOppTeam.SelectedIndex == -1 || cmbPlayer.SelectedIndex == -1 || cmbOppPlayer.SelectedIndex == -1) { dgvHTH.ItemsSource = null; dgvHTHBoxScores.ItemsSource = null; return; } } catch { return; } dgvHTH.ItemsSource = null; selectedOppPlayerID = ((KeyValuePair<int, string>) (cmbOppPlayer.SelectedItem)).Key; var psrList = new ObservableCollection<PlayerStatsRow>(); _hthAllPBS = new List<PlayerBoxScore>(); if (_selectedPlayerID == selectedOppPlayerID) { return; } if (rbHTHStatsAnyone.IsChecked.GetValueOrDefault()) { _psr.Type = _psr.FirstName + " " + _psr.LastName; psrList.Add(_psr); var gameIDs = new List<int>(); foreach (PlayerBoxScore cur in _pbsList) { _hthAllPBS.Add(cur); gameIDs.Add(cur.GameID); } ParallelQuery<PlayerBoxScore> oppPBSList = MainWindow.BSHist.AsParallel() .Where(bse => bse.PBSList.Any(pbs => pbs.PlayerID == selectedOppPlayerID)) .Select(bse => bse.PBSList.Single(pbs => pbs.PlayerID == selectedOppPlayerID)) .Where(pbs => !pbs.IsOut); foreach (PlayerBoxScore oppPBS in oppPBSList) { if (!gameIDs.Contains(oppPBS.GameID)) { oppPBS.AddInfoFromTeamBoxScore(MainWindow.BSHist.Single(bse => bse.BS.ID == oppPBS.GameID).BS, MainWindow.TST); _hthAllPBS.Add(oppPBS); } } PlayerStats oppPS = MainWindow.PST[selectedOppPlayerID]; psrList.Add(new PlayerStatsRow(oppPS, oppPS.FirstName + " " + oppPS.LastName)); } else { ParallelQuery<BoxScoreEntry> againstBSList = MainWindow.BSHist.AsParallel() .Where( bse => _pbsList.Any(pbs => pbs.GameID == bse.BS.ID) && bse.PBSList.Any(pbs => pbs.PlayerID == selectedOppPlayerID && !pbs.IsOut)); var psOwn = new PlayerStats(_psr); psOwn.ResetStats(); PlayerStats psOpp = MainWindow.PST[selectedOppPlayerID].DeepClone(); psOpp.ResetStats(); foreach (BoxScoreEntry bse in againstBSList) { PlayerBoxScore pbsOwn = bse.PBSList.Single(pbs => pbs.PlayerID == psOwn.ID); pbsOwn.AddInfoFromTeamBoxScore(bse.BS, MainWindow.TST); PlayerBoxScore pbsOpp = bse.PBSList.Single(pbs => pbs.PlayerID == psOpp.ID); psOwn.AddBoxScore(pbsOwn); psOpp.AddBoxScore(pbsOpp); _hthAllPBS.Add(pbsOwn); } var psrOwn = new PlayerStatsRow(psOwn); psrOwn.Type = psrOwn.FullNameGivenFirst; psrList.Add(psrOwn); var psrOpp = new PlayerStatsRow(psOpp); psrOpp.Type = psrOpp.FullNameGivenFirst; psrList.Add(psrOpp); } _hthAllPBS.Sort((pbs1, pbs2) => pbs2.RealDate.CompareTo(pbs1.RealDate)); dgvHTH.ItemsSource = psrList; dgvHTHBoxScores.ItemsSource = _hthAllPBS; }