Dominion.UniqueCardPicker.GetCard C# (CSharp) Method

GetCard() public method

public GetCard ( bool>.Func meetConstraint ) : Dominion.Card
meetConstraint bool>.Func
return Dominion.Card
        public Dominion.Card GetCard(Func<Dominion.Card, bool> meetConstraint)
        {
            int curIndex = this.maxIndex;
            while (curIndex >= 0)
            {
                int resultCardIndex = NumberBetweenInclusive(this.random, 0, maxIndex);
                Dominion.Card currentCard = this.allCards[remainingCards[resultCardIndex]];

                if (!IsExcluded(currentCard) && meetConstraint(currentCard))
                {
                    remainingCards[resultCardIndex] = remainingCards[maxIndex];
                    --maxIndex;
                    return currentCard;
                }
                --curIndex;
            }

            return null;
        }

Usage Example

 private static void PopulateCardListToCount <T>(int targetCount, List <T> list, UniqueCardPicker <T> cardPicker, Func <T, bool> meetConstraint)
     where T : CardShapedObject
 {
     while (list.Count < targetCount)
     {
         T currentCard = cardPicker.GetCard(meetConstraint);
         if (currentCard == null)
         {
             break;
         }
         list.Add(currentCard);
     }
 }
All Usage Examples Of Dominion.UniqueCardPicker::GetCard