Dominion.PlayerState.RequestPlayerTopDeckCardFromHand C# (CSharp) Method

RequestPlayerTopDeckCardFromHand() private method

private RequestPlayerTopDeckCardFromHand ( GameState gameState, CardPredicate acceptableCard, bool isOptional ) : Dominion.Card
gameState GameState
acceptableCard CardPredicate
isOptional bool
return Dominion.Card
        internal Card RequestPlayerTopDeckCardFromHand(GameState gameState, CardPredicate acceptableCard, bool isOptional)
        {
            if (!this.hand.HasCard(acceptableCard))
            {
                return null;
            }

            Card cardTypeToTopDeck = this.actions.GetCardFromHandToTopDeck(gameState, acceptableCard, isOptional);
            if (cardTypeToTopDeck == null)
            {
                if (isOptional)
                {
                    return null;
                }
                else
                {
                    throw new Exception("Player must choose a card to top deck");
                }
            }

            Card cardToTopDeck = this.hand.RemoveCard(cardTypeToTopDeck);
            if (cardToTopDeck == null)
            {
                throw new Exception("Could not remove Card From Hand");
            }

            if (!acceptableCard(cardToTopDeck))
            {
                throw new Exception("Card does not meet constraint for top deck");
            }

            this.gameLog.PlayerTopDeckedCard(this, cardToTopDeck);
            this.deck.AddCardToTop(cardToTopDeck);

            return cardToTopDeck;
        }

Usage Example

Example #1
0
 public override void DoSpecializedAttack(PlayerState currentPlayer, PlayerState otherPlayer, GameState gameState)
 {
     CardPredicate acceptableCard = card => card.isVictory;
     Card cardTopDecked = otherPlayer.RequestPlayerTopDeckCardFromHand(gameState, acceptableCard, isOptional: false);
     if (cardTopDecked == null)
     {
         otherPlayer.RevealHand();
     }
     else
     {
         otherPlayer.RevealCard(cardTopDecked, DeckPlacement.TopOfDeck);
     }
 }
All Usage Examples Of Dominion.PlayerState::RequestPlayerTopDeckCardFromHand
PlayerState