private RequestPlayerTrashOtherPlayersRevealedCard ( |
||
gameState | ||
acceptableCard | CardPredicate | |
otherPlayer | ||
return | Dominion.Card |
internal Card RequestPlayerTrashOtherPlayersRevealedCard(GameState gameState, CardPredicate acceptableCard, PlayerState otherPlayer)
{
Card cardtoTrash = null;
if (otherPlayer.cardsBeingRevealed.HasCard(acceptableCard))
{
Card cardTypeToTrash = this.actions.GetCardFromOtherPlayersRevealedCardsToTrash(gameState, otherPlayer, acceptableCard);
cardtoTrash = otherPlayer.cardsBeingRevealed.RemoveCard(cardTypeToTrash);
if (cardtoTrash == null)
{
throw new Exception("Must choose a revealed card to trash");
}
if (!acceptableCard(cardtoTrash))
{
throw new Exception("Card constraint doesnt match.");
}
otherPlayer.MoveCardToTrash(cardtoTrash, gameState);
}
return cardtoTrash;
}
public override void DoSpecializedAttack(PlayerState currentPlayer, PlayerState otherPlayer, GameState gameState) { otherPlayer.RevealCardsFromDeck(2, gameState); Card trashedCard = currentPlayer.RequestPlayerTrashOtherPlayersRevealedCard(gameState, card => card.isTreasure, otherPlayer); if (trashedCard != null) { if (currentPlayer.actions.ShouldGainCard(gameState, trashedCard)) { Card cardToGain = gameState.trash.RemoveCard(trashedCard); currentPlayer.GainCard(gameState, cardToGain, originalLocation:DeckPlacement.Trash, defaultPlacement:DeckPlacement.Discard); } } otherPlayer.MoveRevealedCardsToDiscard(gameState); }