//Compare two lineups in a specific way. private void CompareLineups(TeamMatch lower, TeamMatch higher, bool isLower, PlayersToCompare compare, RankingCompareType rankingType) { //Get players in the team matches. var lowerPlayerPositions = GetPlayerPositions(lower, true); var higherPlayerPositions = GetPlayerPositions(higher, true); foreach (var lowerPlayerPosition in lowerPlayerPositions) { //Find positions to compare with. Dictionary <Player, List <Lineup.PositionType> > playersPositionsToCompare = GetPlayerPositionsToCompare(lowerPlayerPosition, higherPlayerPositions, compare); //Compare 2 positions. foreach (var higherPlayerPos in playersPositionsToCompare) { //If rankingtype is level, compare the players' levels. //Else, compare category points in the positions that the upper player plays in. if (rankingType == RankingCompareType.Level) { if (!CheckPoints(lowerPlayerPosition.Key.Rankings.LevelPoints, higherPlayerPos.Key.Rankings.LevelPoints)) { AddRuleBreaks(lower, lowerPlayerPosition.Key, higher, higherPlayerPos.Key, isLower); } } else { if (!CompareAbovePlayerPositions(lowerPlayerPosition, higherPlayerPos, rankingType)) { AddRuleBreaks(lower, lowerPlayerPosition.Key, higher, higherPlayerPos.Key, isLower); } } } } }
//Compares positions from category points in the above players' positions. private bool CompareAbovePlayerPositions(KeyValuePair <Player, List <Lineup.PositionType> > lowerPos, KeyValuePair <Player, List <Lineup.PositionType> > higherPos, RankingCompareType compareType) { int count = 0; foreach (var comparePositionType in higherPos.Value) { if (ComparePlayerPointsType(lowerPos.Key, higherPos.Key, comparePositionType)) { count++; } } if (compareType == RankingCompareType.CategoryOne) { return(count >= 1); } if (compareType == RankingCompareType.CategoryBoth) { return(count >= 2); } return(true); }