internal Card RequestPlayerChooseCardToRemoveFromHandForPlay(GameState gameState, CardPredicate acceptableCard, bool isTreasure, bool isAction, bool isOptional)
{
if (!(isTreasure ^ isAction))
throw new System.InvalidOperationException("Must be action or treasure");
if (!this.hand.HasCard(acceptableCard))
{
return null;
}
Card cardTypeToPlay = isTreasure ?
this.actions.GetTreasureFromHandToPlay(gameState, acceptableCard, isOptional) :
this.actions.GetCardFromHandToPlay(gameState, acceptableCard, isOptional);
if (cardTypeToPlay == null)
{
if (!isOptional)
{
throw new Exception("Must choose an action to play");
}
return null;
}
Card currentCard = this.RemoveCardFromHand(cardTypeToPlay);
if (currentCard == null)
{
throw new Exception("Player tried to remove a card that wasn't available in hand");
}
return currentCard;
}