public IEnumerable <PokemonData> GetPokemonToEvolve(IEnumerable <PokemonId> filter = null) { //Don't evolve pokemon in gyms var myPokemons = Pokemon.Where(p => p.DeployedFortId == string.Empty).OrderByDescending(p => p.Cp); var pokemons = filter != null?myPokemons.Where(p => filter.Contains(p.PokemonId)).ToList() : myPokemons.ToList(); var pokemonToEvolve = new List <PokemonData>(); foreach (var pokemon in pokemons) { var settings = PokemonSettings.Where(t => t != null).SingleOrDefault(x => x.PokemonId == pokemon.PokemonId); var familyCandy = PokemonFamilies.Where(t => t != null).SingleOrDefault(x => settings?.FamilyId == x.FamilyId); //Don't evolve if we can't evolve it if (settings == null || familyCandy == null || settings.EvolutionIds.Count == 0) { continue; } var pokemonCandyNeededAlready = pokemonToEvolve.Count( p => PokemonSettings.Where(t => t != null).Single(x => x.PokemonId == p.PokemonId).FamilyId == settings.FamilyId) * settings.CandyToEvolve; if (_logicSettings.EvolveAllPokemonAboveIv) { if (PokemonInfo.CalculatePokemonPerfection(pokemon) >= _logicSettings.EvolveAboveIvValue && familyCandy.Candy_ - pokemonCandyNeededAlready > settings.CandyToEvolve) { pokemonToEvolve.Add(pokemon); } } else { if (familyCandy.Candy_ - pokemonCandyNeededAlready > settings.CandyToEvolve) { pokemonToEvolve.Add(pokemon); } } } return(pokemonToEvolve); }
public IEnumerable <PokemonData> GetDuplicatePokemonForTransfer(bool keepPokemonsThatCanEvolve = false, bool prioritizeIvoverCp = false, IEnumerable <PokemonId> filter = null) { // TODO:: Gut this horrible code and replace it with something that is readable var pokemonList = Pokemon.Where( p => p.DeployedFortId == string.Empty && p.Favorite == 0 && p.Cp < _logicSettings.KeepMinCp) .ToList(); if (filter != null) { pokemonList = pokemonList.Where(p => !filter.Contains(p.PokemonId)).ToList(); } if (keepPokemonsThatCanEvolve) { var results = new List <PokemonData>(); var pokemonsThatCanBeTransfered = pokemonList.GroupBy(p => p.PokemonId) .Where(x => x.Count() > _logicSettings.KeepMinDuplicatePokemon).ToList(); foreach (var pokemon in pokemonsThatCanBeTransfered) { var settings = PokemonSettings.Single(x => x.PokemonId == pokemon.Key); var familyCandy = PokemonFamilies.Single(x => settings.FamilyId == x.FamilyId); var amountToSkip = _logicSettings.KeepMinDuplicatePokemon; var amountPossible = familyCandy.Candy_ / settings.CandyToEvolve; if (settings.CandyToEvolve > 0 && amountPossible > amountToSkip) { amountToSkip = amountPossible; } if (prioritizeIvoverCp) { results.AddRange(pokemonList.Where(x => x.PokemonId == pokemon.Key) .OrderByDescending(PokemonInfo.CalculatePokemonPerfection) .ThenBy(n => n.StaminaMax) .Skip(amountToSkip) .ToList()); } else { results.AddRange(pokemonList.Where(x => x.PokemonId == pokemon.Key) .OrderByDescending(x => x.Cp) .ThenBy(n => n.StaminaMax) .Skip(amountToSkip) .ToList()); } } return(results); } if (prioritizeIvoverCp) { return(pokemonList .GroupBy(p => p.PokemonId) .Where(x => x.Any()) .SelectMany( p => p.OrderByDescending(PokemonInfo.CalculatePokemonPerfection) .ThenBy(n => n.StaminaMax) .Skip(_logicSettings.KeepMinDuplicatePokemon) .ToList())); } return(pokemonList .GroupBy(p => p.PokemonId) .Where(x => x.Any()) .SelectMany( p => p.OrderByDescending(x => x.Cp) .ThenBy(n => n.StaminaMax) .Skip(_logicSettings.KeepMinDuplicatePokemon) .ToList())); }