internal Card RequestPlayerTrashCardFromHandOrDiscard(GameState gameState, CardPredicate acceptableCardsToTrash, bool isOptional)
{
if (!this.hand.HasCard(acceptableCardsToTrash) &&
!this.discard.HasCard(acceptableCardsToTrash))
{
return null;
}
DeckPlacement deckPlacement = DeckPlacement.Default;
Card cardTypeToTrash = this.actions.GetCardFromHandOrDiscardToTrash(gameState, acceptableCardsToTrash, isOptional, out deckPlacement);
if (cardTypeToTrash == null)
{
if (isOptional)
{
return null;
}
else
{
throw new Exception("Player must choose a card to trash");
}
}
if (deckPlacement == DeckPlacement.Hand)
{
return this.TrashCardFromHandOfType(gameState, cardTypeToTrash, guaranteeInHand: true);
}
else if (deckPlacement == DeckPlacement.Discard)
{
return this.TrashCardFromDiscardOfType(gameState, cardTypeToTrash, guaranteeInDiscard: true);
}
else
{
throw new Exception("Must trash from hand or discard");
}
}