void GetPlayersStats(Project project, List <Play> subcatPlays, string optionName, SubCategoryStat subcatStat, Category cat) { foreach (ISubCategory subcat in cat.SubCategories) { PlayerSubCategory playerSubcat; Dictionary <Player, int> localPlayerCount = new Dictionary <Player, int>(); Dictionary <Player, int> visitorPlayerCount = new Dictionary <Player, int>(); if (!(subcat is PlayerSubCategory)) { continue; } playerSubcat = subcat as PlayerSubCategory; if (playerSubcat.Contains(Team.LOCAL) || playerSubcat.Contains(Team.BOTH)) { foreach (Player player in project.LocalTeamTemplate) { localPlayerCount.Add(player, GetPlayerCount(subcatPlays, player, subcat as PlayerSubCategory)); } subcatStat.AddPlayersStats(optionName, subcat.Name, Team.LOCAL, localPlayerCount); } if (playerSubcat.Contains(Team.VISITOR) || playerSubcat.Contains(Team.BOTH)) { foreach (Player player in project.VisitorTeamTemplate) { visitorPlayerCount.Add(player, GetPlayerCount(subcatPlays, player, subcat as PlayerSubCategory)); } subcatStat.AddPlayersStats(optionName, subcat.Name, Team.VISITOR, visitorPlayerCount); } } }
void GetSubcategoryStats(List <Play> subcatPlays, SubCategoryStat subcatStat, string desc, int totalCount, out int localTeamCount, out int visitorTeamCount) { int count; count = subcatPlays.Count(); CountPlaysInTeam(subcatPlays, out localTeamCount, out visitorTeamCount); PercentualStat pStat = new PercentualStat(desc, count, localTeamCount, visitorTeamCount, totalCount); subcatStat.AddOptionStat(pStat); }
public void AddSubcatStat(SubCategoryStat subcatStat) { subcatStats.Add(subcatStat); }
void UpdateStats(Project project) { catStats.Clear(); Field = project.Categories.FieldBackground; HalfField = project.Categories.HalfFieldBackground; Goal = project.Categories.GoalBackground; foreach (Category cat in project.Categories) { CategoryStats stats; List <Play> plays, homePlays, awayPlays; int localTeamCount, visitorTeamCount; plays = project.PlaysInCategory(cat); homePlays = plays.Where(p => p.Team == Team.LOCAL || p.Team == Team.BOTH).ToList(); awayPlays = plays.Where(p => p.Team == Team.VISITOR || p.Team == Team.BOTH).ToList(); stats = new CategoryStats(cat, plays.Count, homePlays.Count(), awayPlays.Count()); /* Fill zonal tagging stats */ stats.FieldCoordinates = plays.Select(p => p.FieldPosition).Where(p => p != null).ToList(); stats.HalfFieldCoordinates = plays.Select(p => p.HalfFieldPosition).Where(p => p != null).ToList(); stats.GoalCoordinates = plays.Select(p => p.GoalPosition).Where(p => p != null).ToList(); stats.HomeFieldCoordinates = homePlays.Select(p => p.FieldPosition).Where(p => p != null).ToList(); stats.HomeHalfFieldCoordinates = homePlays.Select(p => p.HalfFieldPosition).Where(p => p != null).ToList(); stats.HomeGoalCoordinates = homePlays.Select(p => p.GoalPosition).Where(p => p != null).ToList(); stats.AwayFieldCoordinates = awayPlays.Select(p => p.FieldPosition).Where(p => p != null).ToList(); stats.AwayHalfFieldCoordinates = awayPlays.Select(p => p.HalfFieldPosition).Where(p => p != null).ToList(); stats.AwayGoalCoordinates = awayPlays.Select(p => p.GoalPosition).Where(p => p != null).ToList(); catStats.Add(stats); foreach (ISubCategory subcat in cat.SubCategories) { SubCategoryStat subcatStat; if (subcat is PlayerSubCategory) { continue; } subcatStat = new SubCategoryStat(subcat); stats.AddSubcatStat(subcatStat); if (subcat is TagSubCategory) { foreach (string option in subcat.ElementsDesc()) { List <Play> subcatPlays; StringTag tag; tag = new StringTag { SubCategory = subcat, Value = option }; subcatPlays = plays.Where(p => p.Tags.Tags.Contains(tag)).ToList(); GetSubcategoryStats(subcatPlays, subcatStat, option, stats.TotalCount, out localTeamCount, out visitorTeamCount); GetPlayersStats(project, subcatPlays, option, subcatStat, cat); } } if (subcat is TeamSubCategory) { List <Team> teams = new List <Team>(); teams.Add(Team.LOCAL); teams.Add(Team.VISITOR); foreach (Team team in teams) { List <Play> subcatPlays; TeamTag tag; tag = new TeamTag { SubCategory = subcat, Value = team }; subcatPlays = plays.Where(p => p.Teams.Tags.Contains(tag)).ToList(); GetSubcategoryStats(subcatPlays, subcatStat, team.ToString(), stats.TotalCount, out localTeamCount, out visitorTeamCount); } } } } }
void UpdateStats(Project project) { catStats.Clear(); foreach (Category cat in project.Categories) { CategoryStats stats; List<Play> plays; int localTeamCount, visitorTeamCount; plays = project.PlaysInCategory (cat); CountPlaysInTeam(plays, out localTeamCount, out visitorTeamCount); stats = new CategoryStats(cat.Name, plays.Count, localTeamCount, visitorTeamCount); catStats.Add (stats); foreach (ISubCategory subcat in cat.SubCategories) { SubCategoryStat subcatStat; if (subcat is PlayerSubCategory) continue; subcatStat = new SubCategoryStat(subcat.Name); stats.AddSubcatStat(subcatStat); if (subcat is TagSubCategory) { foreach (string option in subcat.ElementsDesc()) { List<Play> subcatPlays; StringTag tag; tag = new StringTag{SubCategory=subcat, Value=option}; subcatPlays = plays.Where(p => p.Tags.Tags.Contains(tag)).ToList(); GetSubcategoryStats(subcatPlays, subcatStat, option, stats.TotalCount, out localTeamCount, out visitorTeamCount); GetPlayersStats(project, subcatPlays, option, subcatStat, cat); } } if (subcat is TeamSubCategory) { List<Team> teams = new List<Team>(); teams.Add(Team.LOCAL); teams.Add(Team.VISITOR); foreach (Team team in teams) { List<Play> subcatPlays; TeamTag tag; tag = new TeamTag{SubCategory=subcat, Value=team}; subcatPlays = plays.Where(p => p.Teams.Tags.Contains(tag)).ToList(); GetSubcategoryStats(subcatPlays, subcatStat, team.ToString(), stats.TotalCount, out localTeamCount, out visitorTeamCount); } } } } }
void GetSubcategoryStats(List<Play> subcatPlays, SubCategoryStat subcatStat, string desc, int totalCount, out int localTeamCount, out int visitorTeamCount) { int count; count = subcatPlays.Count(); CountPlaysInTeam(subcatPlays, out localTeamCount, out visitorTeamCount); PercentualStat pStat = new PercentualStat(desc, count, localTeamCount, visitorTeamCount, totalCount); subcatStat.AddOptionStat(pStat); }
void GetPlayersStats(Project project, List<Play> subcatPlays, string optionName, SubCategoryStat subcatStat, Category cat) { foreach (ISubCategory subcat in cat.SubCategories) { PlayerSubCategory playerSubcat; Dictionary<Player, int> localPlayerCount = new Dictionary<Player, int>(); Dictionary<Player, int> visitorPlayerCount = new Dictionary<Player, int>(); if (!(subcat is PlayerSubCategory)) continue; playerSubcat = subcat as PlayerSubCategory; if (playerSubcat.Contains(Team.LOCAL) || playerSubcat.Contains(Team.BOTH)){ foreach (Player player in project.LocalTeamTemplate) { localPlayerCount.Add(player, GetPlayerCount(subcatPlays, player, subcat as PlayerSubCategory)); } subcatStat.AddPlayersStats(optionName, subcat.Name, Team.LOCAL, localPlayerCount); } if (playerSubcat.Contains(Team.VISITOR) || playerSubcat.Contains(Team.BOTH)){ foreach (Player player in project.VisitorTeamTemplate) { visitorPlayerCount.Add(player, GetPlayerCount(subcatPlays, player, subcat as PlayerSubCategory)); } subcatStat.AddPlayersStats(optionName, subcat.Name, Team.VISITOR, visitorPlayerCount); } } }