public void SelectTalents(TalentTree wantedTalents, int talentPoints) { Dictionary <int, Dictionary <int, Talent> > talentTrees = TalentTree.AsDict(); Dictionary <int, Dictionary <int, Talent> > wantedTalentTrees = wantedTalents.AsDict(); List <(int, int, int)> talentsToSpend = new(); // order the trees to skill the main tree first foreach (KeyValuePair <int, Dictionary <int, Talent> > kv in wantedTalentTrees.OrderByDescending(e => e.Value.Count)) { if (CheckTalentTree(ref talentPoints, kv.Key, talentTrees[kv.Key], kv.Value, out List <(int, int, int)> newTalents)) { talentsToSpend.AddRange(newTalents); } } if (talentsToSpend.Any()) { SpendTalents(talentsToSpend); } }