Exemplo n.º 1
0
        //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);
                        }
                    }
                }
            }
        }
        public void UpdateDetailedStats()
        {
            if (PlayersToCompare.Any())
            {
                TopPlayer = PlayersToCompare.OrderByDescending(p => p.HealingBreakdown.Abilities.Sum(a => a.TotalEffectiveHealing)).First();
            }

            AbilityDps = new List <Ability>();
            AbilityHps = new List <Ability>();

            foreach (var ptc in PlayersToCompare)
            {
                #region Damage
                if (ptc.DamageBreakdown.Abilities.Any())
                {
                    long totalDamageDealt = ptc.DamageBreakdown.Abilities.Sum(a => a.TotalDamage);
                    //ptc.DamageBreakdown.TotalHits = ptc.DamageBreakdown.Abilities.Sum(a => a.Statistics.Hits);
                    //ptc.DamageBreakdown.TotalCrits = ptc.DamageBreakdown.Abilities.Sum(a => a.Statistics.Crits);
                    foreach (var playerAbility in ptc.DamageBreakdown.Abilities)
                    {
                        if (!AbilityDps.Any(a => a.AbilityId == playerAbility.AbilityId))
                        {
                            AbilityDps.Add(playerAbility);
                        }
                        else
                        {
                            var thisAbility = AbilityDps.First(a => a.AbilityId == playerAbility.AbilityId);
                            //long thisAbilityDamage = thisAbility.TotalDamage;

                            //if (playerAbility.TotalDamage > thisAbilityDamage)
                            //{
                            //    thisAbility.TotalDamage = thisAbilityDamage;
                            //    thisAbility.DamagePerSecond = thisAbilityDamage/(long) Encounter.Duration.TotalSeconds;
                            //}
                            if (playerAbility.TotalDamage > thisAbility.HighestTotalDamage)
                            {
                                thisAbility.HighestTotalDamage = playerAbility.TotalDamage;
                            }
                        }
                        playerAbility.BreakdownPercentage = playerAbility.TotalDamage > 0
                            ? ((decimal)playerAbility.TotalDamage / (decimal)totalDamageDealt) * 100
                            : 0;
                    }
                }
                #endregion
                #region Healing
                if (ptc.HealingBreakdown.Abilities.Any())
                {
                    // Add the abilities we find to the temp list
                    // Use ability names while comparing healing as it seems some healing abilities
                    // have totally different IDs, once we're done and have sorted the temp list, copy it to the main one.
                    long totalHealingDone = ptc.HealingBreakdown.Abilities.Sum(a => a.TotalEffectiveHealing);
                    foreach (var playerAbility in ptc.HealingBreakdown.Abilities)
                    {
                        var thisHealingAbility =
                            AbilityHps.FirstOrDefault(
                                a => a.Name == playerAbility.Name && a.IconPath == playerAbility.IconPath);

                        if (thisHealingAbility == null)
                        {
                            AbilityHps.Add(playerAbility);
                        }
                        else
                        {
                            thisHealingAbility.TotalEffectiveHealing += playerAbility.TotalEffectiveHealing;
                            playerAbility.BreakdownPercentage         = playerAbility.TotalEffectiveHealing > 0
                            ? ((decimal)playerAbility.TotalEffectiveHealing / (decimal)totalHealingDone) * 100
                            : 0;
                        }
                    }
                }
                #endregion
            }
        }
Exemplo n.º 3
0
        //Finds the positions that a position needs to be compared with.
        private Dictionary <Player, List <Lineup.PositionType> > GetPlayerPositionsToCompare(KeyValuePair <Player, List <Lineup.PositionType> > lowerPosition, Dictionary <Player, List <Lineup.PositionType> > higherPositions, PlayersToCompare compare)
        {
            var playersToCompare = new Dictionary <Player, List <Lineup.PositionType> >();

            if (compare == PlayersToCompare.SameSex)
            {
                playersToCompare = higherPositions.Where(p => p.Key.Sex == lowerPosition.Key.Sex)
                                   .ToDictionary(pair => pair.Key, pair => pair.Value);
            }
            else if (compare == PlayersToCompare.SameCategory)
            {
                playersToCompare = higherPositions.Where(p => lowerPosition.Value.Count(q => p.Value.Contains(q)) > 1)
                                   .ToDictionary(pair => pair.Key, pair => pair.Value);
            }

            return(playersToCompare);
        }