Dominion.PlayerState.MoveCardToTrash C# (CSharp) Method

MoveCardToTrash() private method

private MoveCardToTrash ( Dominion.Card card, GameState gameState ) : void
card Dominion.Card
gameState GameState
return void
        internal void MoveCardToTrash(Card card, GameState gameState)
        {
            this.gameLog.PlayerTrashedCard(this, card);
            this.gameLog.PushScope();
            gameState.cardContextStack.PushCardContext(this, card, CardContextReason.CardBeingTrashed);

            if (card.DoSpecializedTrash(this, gameState))
            {
                gameState.trash.AddCard(card);
            }

            // cards in hand react to trashing.
            if (this.ownsCardWithSpecializedActionOnTrashWhileInHand)
            {
                bool stateHasChanged = true;
                while (stateHasChanged)
                {
                    stateHasChanged = false;
                    foreach (Card cardInHand in this.hand)
                    {
                        gameState.cardContextStack.PushCardContext(this, cardInHand, CardContextReason.CardReacting);
                        stateHasChanged = cardInHand.DoSpecializedActionOnTrashWhileInHand(this, gameState, cardInHand);
                        gameState.cardContextStack.Pop();
                        if (stateHasChanged)
                            break;
                    }
                }
            }
            gameState.cardContextStack.Pop();
            this.gameLog.PopScope();
        }

Usage Example

Example #1
0
        public override void DoSpecializedAttack(PlayerState currentPlayer, PlayerState otherPlayer, GameState gameState)
        {
            otherPlayer.RevealCardsFromDeck(2);

            Card cardtoTrash = null;
            CardPredicate acceptableCards = card => card.isTreasure;
            if (otherPlayer.cardsBeingRevealed.HasCard(acceptableCards))
            {
                Card cardTypeToTrash = currentPlayer.actions.GetCardFromRevealedCardsToTrash(gameState, otherPlayer, acceptableCards);

                cardtoTrash = otherPlayer.cardsBeingRevealed.RemoveCard(cardTypeToTrash);
                if (cardtoTrash == null)
                {
                    throw new Exception("Must choose a revealed card to trash");
                }

                if (!acceptableCards(cardtoTrash))
                {
                    throw new Exception("Player Must choose a treasure card to trash");
                }

                otherPlayer.MoveCardToTrash(cardtoTrash, gameState);
            }

            if (cardtoTrash != null)
            {
                if (currentPlayer.actions.ShouldGainCard(gameState, cardtoTrash))
                {
                    Card cardToGain = gameState.trash.RemoveCard(cardtoTrash);
                    currentPlayer.GainCard(gameState, cardToGain, originalLocation:DeckPlacement.Trash, defaultPlacement:DeckPlacement.Discard);
                }
            }

            otherPlayer.MoveRevealedCardsToDiscard(gameState);
        }
All Usage Examples Of Dominion.PlayerState::MoveCardToTrash
PlayerState