Пример #1
0
        /// <summary>
        /// Gets the list of match dates for all completed matches.
        /// </summary>
        /// <returns>Returns the list of match dates for all completed matches.</returns>
        public List <DateTime> GetMatchDays()
        {
            var matchDates = MatchesPlayed.Where(m => m.MatchDate.HasValue).Select(m => m.MatchDate !.Value.Date).Distinct().ToList();

            matchDates.Sort();
            return(matchDates);
        }
Пример #2
0
        /// <summary>
        /// Get the <see cref="RankingList"/> for the default upper date limit, which
        /// is the maximum match date.
        /// </summary>
        /// <param name="lastUpdatedOn">The date when the matches were last updated.</param>
        /// <returns>Get the <see cref="RankingList"/> for the default upper date limit, which is the maximum match date.</returns>
        public RankingList GetList(out DateTime lastUpdatedOn)
        {
            var upperDateLimit = MatchesPlayed.Count > 0
                ? MatchesPlayed.Max(m => m.MatchDate ?? DateTime.MinValue)
                : MatchesToPlay.Max(m => m.MatchDate ?? DateTime.UtcNow);

            return(GetList(upperDateLimit, out lastUpdatedOn));
        }
Пример #3
0
        private RankingList GetUnsortedList(DateTime upperDateLimit, out DateTime lastUpdatedOn)
        {
            var teamIds = new HashSet <long>();

            MatchesToPlay.ToList().ForEach(m => { teamIds.Add(m.HomeTeamId); teamIds.Add(m.GuestTeamId); });
            MatchesPlayed.ToList().ForEach(m => { teamIds.Add(m.HomeTeamId); teamIds.Add(m.GuestTeamId); });

            return(GetUnsortedList(teamIds, upperDateLimit, out lastUpdatedOn));
        }
Пример #4
0
        public override string ToString()
        {
            var matchScores       = string.Join(",", MatchScores.Select(s => s.ToString()).ToArray());
            var competitorsString = string.Join(",", PreviousCombatants.Where(s => !string.IsNullOrEmpty(s)).ToArray());
            var strings           = new List <string>
            {
                Genome,
                Score.ToString(),
                MatchesPlayed.ToString(),
                MatchesSurvived.ToString(),
                KilledAllDrones.ToString(),
                TotalDroneKills.ToString(),
                matchScores,
                competitorsString
            };

            return(string.Join(";", strings.ToArray()));
        }
Пример #5
0
        private RankingList GetUnsortedList(IEnumerable <long> teamIds, DateTime upperDateLimit, out DateTime lastUpdatedOn)
        {
            lastUpdatedOn = DateTime.UtcNow;
            if (MatchesPlayed.Any())
            {
                lastUpdatedOn = MatchesPlayed
                                .Where(m => teamIds.Contains(m.HomeTeamId) || teamIds.Contains(m.GuestTeamId))
                                .Max(m => m.ModifiedOn);
            }
            else if (MatchesToPlay.Any())
            {
                lastUpdatedOn = MatchesToPlay
                                .Where(m => teamIds.Contains(m.HomeTeamId) || teamIds.Contains(m.GuestTeamId))
                                .Max(m => m.ModifiedOn);
            }

            var rankingList = new RankingList {
                UpperDateLimit = upperDateLimit, LastUpdatedOn = lastUpdatedOn
            };

            foreach (var teamId in teamIds)
            {
                var rank = new Rank {
                    Number = -1, TeamId = teamId, MatchesPlayed = MatchesPlayed.Count(m => m.HomeTeamId == teamId || m.GuestTeamId == teamId), MatchesToPlay = MatchesToPlay.Count(m => m.HomeTeamId == teamId || m.GuestTeamId == teamId)
                };

                // upperDateLimit contains the date part (without time), so the MatchDate must also be compared with the date part!
                foreach (var match in MatchesPlayed.Where(m => (m.HomeTeamId == teamId || m.GuestTeamId == teamId) && m.MatchDate.HasValue && m.MatchDate.Value.Date <= upperDateLimit.Date))
                {
                    if (match.HomeTeamId == teamId)
                    {
                        rank.MatchPoints.Home  += match.HomeMatchPoints ?? 0;
                        rank.MatchPoints.Guest += match.GuestMatchPoints ?? 0;

                        rank.SetPoints.Home  += match.HomeSetPoints ?? 0;
                        rank.SetPoints.Guest += match.GuestSetPoints ?? 0;

                        rank.BallPoints.Home  += match.HomeBallPoints ?? 0;
                        rank.BallPoints.Guest += match.GuestBallPoints ?? 0;

                        rank.MatchesWonAndLost.Home  += match.HomeMatchPoints > match.GuestMatchPoints ? 1 : 0;
                        rank.MatchesWonAndLost.Guest += match.HomeMatchPoints < match.GuestMatchPoints ? 1 : 0;
                    }
                    else
                    {
                        rank.MatchPoints.Home  += match.GuestMatchPoints ?? 0;
                        rank.MatchPoints.Guest += match.HomeMatchPoints ?? 0;

                        rank.SetPoints.Home  += match.GuestSetPoints ?? 0;
                        rank.SetPoints.Guest += match.HomeSetPoints ?? 0;

                        rank.BallPoints.Home  += match.GuestBallPoints ?? 0;
                        rank.BallPoints.Guest += match.HomeBallPoints ?? 0;

                        rank.MatchesWonAndLost.Home  += match.HomeMatchPoints < match.GuestMatchPoints ? 1 : 0;
                        rank.MatchesWonAndLost.Guest += match.HomeMatchPoints > match.GuestMatchPoints ? 1 : 0;
                    }
                }
                rankingList.Add(rank);
            }

            return(rankingList);
        }