public static List <DigivolveDNA> GetAllOptions(string childName) { var result = new List <DigivolveDNA>(); //находим дигимона в списке var digimon = DBStatic.Digimons.FirstOrDefault(x => x.NameEng == childName); var digimonTable = DigimonTemps.FirstOrDefault(x => x.NameEng == childName); if (digimonTable == null) { return(result); } var digimonTableCode = digimonTable.ResultCode; var dic = new Dictionary <string, List <string> >(); var digimonTemps = new List <DigimonTemp>(); var rank = Rank.Champion; switch (digimon.Rank) { case Rank.Rookie: dic = ChampTableDictionary; digimonTemps = DigimonTemps.Where(x => x.Rank == Rank.Champion).ToList(); rank = Rank.Champion; break; case Rank.Champion: dic = UltimaTableDictionary; digimonTemps = DigimonTemps.Where(x => x.Rank == Rank.Ultimate).ToList(); rank = Rank.Ultimate; break; case Rank.Ultimate: dic = MegaTableDictionary; digimonTemps = DigimonTemps.Where(x => x.Rank == Rank.Mega).ToList(); rank = Rank.Mega; break; case Rank.Mega: return(result); default: throw new ArgumentOutOfRangeException(); } var temp = dic.FirstOrDefault(x => x.Value.Contains(digimonTableCode)); if (temp.Key == null) { // MessageBox.Show($"Не найдено соотвествие в таблице для {childName} код {digimonTableCode}"); return(result); } var firstDigimonCode = temp.Key; var index = temp.Value.IndexOf(digimonTableCode); var secondDigimonCode = dic.ToList()[index].Key; var digimonTempsFirst = digimonTemps.Where(x => x.SourceCode == firstDigimonCode).ToList(); var digimonTempsSecond = digimonTemps.Where(x => x.SourceCode == secondDigimonCode).ToList(); var digimonWithBrotherFirst = digimonTempsFirst.SelectMany(x => DigimonWithOlderBrother(x.NameEng)).Distinct().ToList(); var digimonWithBrotherSecond = digimonTempsSecond.SelectMany(x => DigimonWithOlderBrother(x.NameEng)).Distinct().ToList(); foreach (var digimon1 in digimonWithBrotherFirst) { foreach (var digimon2 in digimonWithBrotherSecond) { var exist = result.Any(x => (x.DigimonParent1Id == digimon1 && x.DigimonParent2Id == digimon2) || (x.DigimonParent1Id == digimon2 && x.DigimonParent2Id == digimon1)); if (!exist && (DBStatic.GetRank(digimon1) == rank || DBStatic.GetRank(digimon2) == rank)) { result.Add(new DigivolveDNA(digimon1, digimon2, childName)); } } } result.AddRange(GetMutation().Where(x => x.DigimonChildId == childName)); return(result); }
public static void LoadStatic() { AllDigimons = DBStatic.GetAllDigimons().GetVMs(); DigimonLoadCompleted?.Invoke(AllDigimons); DNALoadCompleted?.Invoke(AllDigimons, AllOptions); }