Dominion.PlayerState.RequestPlayerGainCardFromTrash C# (CSharp) Method

RequestPlayerGainCardFromTrash() private method

private RequestPlayerGainCardFromTrash ( GameState gameState, CardPredicate acceptableCard, string description, bool isOptional = false, DeckPlacement defaultLocation = DeckPlacement.Discard ) : Dominion.Card
gameState GameState
acceptableCard CardPredicate
description string
isOptional bool
defaultLocation DeckPlacement
return Dominion.Card
        internal Card RequestPlayerGainCardFromTrash(GameState gameState, CardPredicate acceptableCard, string description, bool isOptional = false, DeckPlacement defaultLocation = DeckPlacement.Discard)
        {
            if (!gameState.trash.HasCard(acceptableCard))
                return null;

            Card cardType = this.actions.GetCardFromTrashToGain(gameState, acceptableCard, isOptional);
            if (cardType == null)
            {
                if (isOptional)
                {
                    return null;
                }
                throw new Exception("Must gain a card where " + description);
            }

            if (!acceptableCard(cardType))
            {
                throw new Exception("Card does not meet constraint: " + description);
            }

            Card cardFromTrash = gameState.trash.RemoveCard(cardType);
            if (cardFromTrash == null)
            {
                throw new Exception("Card requested wasnt in the trash");
            }

            this.GainCard(gameState, cardFromTrash, DeckPlacement.Trash, defaultLocation, GainReason.Gain);

            return cardFromTrash;
        }

Usage Example

Beispiel #1
0
        public override void DoSpecializedAction(PlayerState currentPlayer, GameState gameState)
        {
            PlayerActionChoice choice = currentPlayer.RequestPlayerChooseBetween(gameState,
                acceptableChoice => acceptableChoice == PlayerActionChoice.GainCard || acceptableChoice == PlayerActionChoice.Trash);

            if (choice == PlayerActionChoice.GainCard)
            {
                currentPlayer.RequestPlayerGainCardFromTrash(gameState,
                    acceptableCard => CardValidToGainFromTrash(acceptableCard, currentPlayer),
                    "Must gain a card costing between 3 and 6",
                    defaultLocation: DeckPlacement.TopOfDeck);
            }
            else
            {
                Card trashedCard = currentPlayer.RequestPlayerTrashCardFromHand(gameState, acceptableCard => CardValidToTrash(acceptableCard), isOptional: false);
                if (trashedCard != null)
                {
                    int maxCost = trashedCard.CurrentCoinCost(currentPlayer) + 3;
                    currentPlayer.RequestPlayerGainCardFromSupply(gameState,
                        acceptableCard => acceptableCard.CurrentCoinCost(currentPlayer) <= maxCost && acceptableCard.potionCost <= trashedCard.potionCost,
                        "gain a card costing up to 3 more than the trashed card");
                }
            }
        }
All Usage Examples Of Dominion.PlayerState::RequestPlayerGainCardFromTrash
PlayerState