Exemple #1
0
        private void QualifyToThirdPlace(MatchHeaderInfo match)
        {
            var positioningEngine     = GetPositioningEngine(CompetitionMethod.Knockout);
            var competitionRepository = ServiceProvider.Get <ICompetitionRepository>();

            var competitionDetails = competitionRepository.GetCompetitionDetails(match.CompetitionId);
            var looserId           = (match.Winner == MatchWinner.Player1 ? match.Player2 : match.Player1).Id;
            var thirdPlaceMatch    = competitionDetails.Matches.Where(m => m.Section == CompetitionSection.Final).OrderBy(m => m.Position).Last();
            var updateInfo         = new UpdatePlayerPositionInfo()
            {
                PlayerId = looserId,
                Position = thirdPlaceMatch.Player1.IsNull() ? 0 : 1,
                MatchId  = thirdPlaceMatch.Id
            };
            var competitionMatchesRepository = ServiceProvider.Get <ICompetitionMatchesRepository>();

            competitionMatchesRepository.UpdatePlayersPosition(match.CompetitionId, new[] { updateInfo });
        }
Exemple #2
0
        private void QualifyToConsolation(MatchHeaderInfo match)
        {
            var playersCount = 32;
            var competitionMatchesRepository = ServiceProvider.Get <ICompetitionMatchesRepository>();
            var round          = 0;
            var rounds         = competitionMatchesRepository.GetCompetitionSectionRounds(match.CompetitionId, CompetitionSection.Final);
            var qualifyToMatch = default(MatchHeaderInfo);

            if (match.Round == (6 - rounds))
            {
                qualifyToMatch = competitionMatchesRepository.GetMatchByRelativePosition(match.CompetitionId,
                                                                                         CompetitionSection.Consolation,
                                                                                         round,
                                                                                         match.Position / 2);
            }
            else
            {
                var map      = new ConsolationMap();
                var position = map.Position(playersCount, match.Position);
                qualifyToMatch = competitionMatchesRepository.GetMatchByPosition(match.CompetitionId,
                                                                                 CompetitionSection.Consolation, position);
            }

            var looser = (match.Winner == MatchWinner.Player1 ? match.Player2 : match.Player1);

            if (looser != null && qualifyToMatch != null)
            {
                var roundMatchesCount = competitionMatchesRepository.GetRoundMatchesCount(match.CompetitionId,
                                                                                          CompetitionSection.Consolation,
                                                                                          qualifyToMatch.Round);
                var updatePlayerInfo = new UpdatePlayerPositionInfo()
                {
                    MatchId  = qualifyToMatch.Id,
                    PlayerId = looser.Id,
                    Position = match.Round == (6 - rounds) ?  (qualifyToMatch.Player1 == null? 0 : 1) : (qualifyToMatch.RoundRelativePosition < roundMatchesCount / 2 ? 1 : 0)
                };



                competitionMatchesRepository.UpdatePlayersPosition(match.CompetitionId, new[] { updatePlayerInfo });
            }
        }
Exemple #3
0
    public UpdatePlayerPositionInfo AddPlayerToSection(int playerId, CompetitionSection section, CompetitionDetails details)
    {
        var result = default(UpdatePlayerPositionInfo);


        // rounds are in descending order, so first will be the max
        var maxRound = details.Matches.Where(m => m.Section == section).Max(m => m.Round);
        var match    =
            details.Matches.FirstOrDefault(
                m => m.Section == section && m.Round == 1 && (m.Player1.IsNull() || m.Player2.IsNull()));

        if (match.IsNotNull())
        {
            result          = new UpdatePlayerPositionInfo();
            result.MatchId  = match.Id;
            result.PlayerId = playerId;
            result.Position = match.Player1.IsNull() ? 0 : 1;
        }

        return(result);
    }
Exemple #4
0
        public void PositionPlayerInSection(int competitionId, int playerId, CompetitionSection section, string matchCode = null)
        {
            var positioningEngine     = GetPositioningEngine(CompetitionMethod.Knockout);
            var competitionRepository = ServiceProvider.Get <ICompetitionRepository>();

            var competitionDetails = competitionRepository.GetCompetitionDetails(competitionId);
            var updatePlayerInfo   = new UpdatePlayerPositionInfo();

            if (matchCode.NotNullOrEmpty())
            {
                foreach (var match in competitionDetails.Matches)
                {
                    if (match.Player1Code == matchCode)
                    {
                        updatePlayerInfo.PlayerId = playerId;
                        updatePlayerInfo.MatchId  = match.Id;
                        updatePlayerInfo.Position = 0;
                    }
                    else if (match.Player2Code == matchCode)
                    {
                        updatePlayerInfo.PlayerId = playerId;
                        updatePlayerInfo.MatchId  = match.Id;
                        updatePlayerInfo.Position = 1;
                    }
                }
            }
            else
            {
                updatePlayerInfo = positioningEngine.AddPlayerToSection(playerId, section, competitionDetails);
            }

            if (updatePlayerInfo.IsNotNull())
            {
                var competitionMatchesRepository = ServiceProvider.Get <ICompetitionMatchesRepository>();
                competitionMatchesRepository.UpdatePlayersPosition(competitionId, new[] { updatePlayerInfo });
            }
        }
Exemple #5
0
    private static IEnumerable <UpdatePlayerPositionInfo> GetUpdatePlayerPositionInfos(CompetitionPosition[] qualifyingPlayersPositions, MatchHeaderInfo[] orderedMatches)
    {
        var matchIndex    = 0;
        var positionIndex = 0;
        var results       = qualifyingPlayersPositions.Select(position => {
            var result = default(UpdatePlayerPositionInfo);
            if (position.PlayerId.HasValue)
            {
                result = new UpdatePlayerPositionInfo {
                    PlayerId = position.PlayerId.Value,
                    MatchId  = orderedMatches[matchIndex].Id,
                    Position = positionIndex % 2
                };
            }
            positionIndex++;
            if ((positionIndex % 2) == 0)
            {
                matchIndex++;
            }
            return(result);
        });

        return(results);
    }