using DominionBase.Enums; using DominionBase.Players; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Nocturne { public class Shepherd : Card { public Shepherd() : base(Categories.Action, Source.Nocturne, Location.Kingdom, Traits.ConditionalBenefit | Traits.Discard | Traits.PlusAction | Traits.PlusCard) { BaseCost = new Cost(4); Benefit.Actions = 1; } public override void SetupSupply(IGame game, ISupply supply) { Contract.Requires(game != null, "game cannot be null"); base.SetupSupply(game, supply); for (var i = 0; i < game.Players.Count; i++) { Card card = new Pasture(); game.Table.Copper.AddTo(card); card.SetupCard(game); } } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); var victoryCards = player.Hand[Categories.Victory]; var choice = new Choice("Discard any number of Victory cards. +2 Cards per card discarded.", this, victoryCards, ChoiceOutcome.Discard, player, minimum: 0, maximum: victoryCards.Count); var result = player.MakeChoice(choice); player.AddCardsInto(DeckLocation.Revealed, result.Cards); player.Discard(DeckLocation.Hand, player.RetrieveCardsFrom(DeckLocation.Revealed, result.Cards)); var benefit = new CardBenefit(); benefit.Cards += 2 * result.Cards.Count; player.ReceiveBenefit(this, benefit); } } }