public static Rune[][] MakeSets(IList <Rune> runes, Attr slot2, Attr slot4, Attr slot6, Predicate <Rune> odds, RuneSet[] reqsets = null) { Rune[][] runesSlot = new Rune[6][]; Predicate <Rune> set = r => true; if (reqsets != null) { int reqCount = 0; foreach (RuneSet s in reqsets) { reqCount += Rune.SetRequired(s); } if (reqCount == 6) { set = r => reqsets.Any(s => s == r.Set); } } var unlocked = runes.Where(r => !r.Locked).ToArray(); var sets = unlocked.Where(r => set.Invoke(r)).ToArray(); var odd = sets.Where(r => odds.Invoke(r)).ToArray(); runesSlot[0] = odd.Where(r => r.Slot == 1).ToArray(); runesSlot[1] = sets.Where(r => r.Slot == 2 && (r.MainType == slot2 || slot2 == Attr.Null)).ToArray(); runesSlot[2] = odd.Where(r => r.Slot == 3).ToArray(); runesSlot[3] = sets.Where(r => r.Slot == 4 && (r.MainType == slot4 || slot4 == Attr.Null)).ToArray(); runesSlot[4] = odd.Where(r => r.Slot == 5).ToArray(); runesSlot[5] = sets.Where(r => r.Slot == 6 && (r.MainType == slot6 || slot6 == Attr.Null)).ToArray(); foreach (Rune[] rs in runesSlot.Where(r => r.Length == 0)) { Console.WriteLine("No runes for slot " + (runesSlot.ToList().IndexOf(rs) + 1) + ":("); } return(runesSlot); }
public static IEnumerable<Rune>[] MakeSets(IList<Rune> runes, Attr slot2, Attr slot4, Attr slot6, Predicate<Rune> odds, RuneSet[] reqsets = null) { Rune[][] runesSlot = new Rune[6][]; Predicate<Rune> set = r => true; if (reqsets != null) { int reqCount = 0; foreach (RuneSet s in reqsets) reqCount += Rune.SetRequired(s); if (reqCount == 6) set = r => reqsets.Any(s => s == r.Set); } var unlocked = runes.Where(r => !r.Locked).ToArray(); var sets = unlocked.Where(r => set.Invoke(r)).ToArray(); var odd = sets.Where(r => odds.Invoke(r)).ToArray(); runesSlot[0] = odd.Where(r => r.Slot == 1).ToArray(); runesSlot[1] = sets.Where(r => r.Slot == 2 && (r.MainType == slot2 || slot2 == Attr.Null)).ToArray(); runesSlot[2] = odd.Where(r => r.Slot == 3).ToArray(); runesSlot[3] = sets.Where(r => r.Slot == 4 && (r.MainType == slot4 || slot4 == Attr.Null)).ToArray(); runesSlot[4] = odd.Where(r => r.Slot == 5).ToArray(); runesSlot[5] = sets.Where(r => r.Slot == 6 && (r.MainType == slot6 || slot6 == Attr.Null)).ToArray(); foreach (Rune[] rs in runesSlot.Where(r => r.Length == 0)) Console.WriteLine("No runes for slot " + (runesSlot.ToList().IndexOf(rs) + 1) + ":("); return runesSlot; }