public List <ManaColor> GetAvailableMana(ManaUsage usage, ConvokeAndDelveOptions convokeAndDelve) { var restricted = new HashSet <ManaUnit>(); var allocated = new List <ManaUnit>(); var units = _units .Concat(GetAdditionalManaSources(convokeAndDelve)) .ToList(); foreach (var manaUnit in units) { if (IsAvailable(manaUnit, restricted, usage)) { restricted.Add(manaUnit); allocated.Add(manaUnit); RestrictUsingDifferentSourcesFromSameCard(manaUnit, restricted, units); } } return(allocated.Select(x => x.Color).ToList()); }