Dominion.PlayerState.RequestPlayerTrashCardFromHandOrDiscard C# (CSharp) Method

RequestPlayerTrashCardFromHandOrDiscard() private method

private RequestPlayerTrashCardFromHandOrDiscard ( GameState gameState, CardPredicate acceptableCardsToTrash, bool isOptional ) : Dominion.Card
gameState GameState
acceptableCardsToTrash CardPredicate
isOptional bool
return Dominion.Card
        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");
            }
        }

Usage Example

Example #1
0
        public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState)
        {
            currentPlayer.RequestPlayerTrashCardFromHandOrDiscard(gameState,
                CanTrashCard,
                isOptional: true);

            currentPlayer.RequestPlayerGainCardFromSupply(gameState,
                acceptableCard => acceptableCard.CurrentCoinCost(currentPlayer) <= 3 && acceptableCard.potionCost == 0,
                "Gain a card costing up to 3");
        }
PlayerState