using DominionBase.Enums; using DominionBase.Piles; using System.Diagnostics.Contracts; using System.Linq; namespace DominionBase.Cards.Nocturne { public class Imp : Card { public const int BaseCount = 13; public Imp() : base(Categories.Action | Categories.Spirit, Source.Nocturne, Location.Special, Traits.ConditionalBenefit | Traits.NetCardDraw | Traits.PlusCard) { BaseCost = new Cost(2, special: true); Benefit.Cards = 2; } public static void SetupSupply(IGame game) { Contract.Requires(game != null, "game cannot be null"); if (!game.Table.SpecialPiles.ContainsKey(TypeClass.Imp)) { var supply = new Supply(game, game.Players, TypeClass.Imp, BaseCount); supply.FullSetup(); game.Table.SpecialPiles.Add(TypeClass.Imp, supply); } } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); var choice = new Choice("Choose an Action card to play", this, player.Hand[c => c.Category.HasFlag(Categories.Action) && !player.InPlayAndSetAside.Any(ci => ci.Name == c.Name)], ChoiceOutcome.Select, player, minimum: 0); var result = player.MakeChoice(choice); if (result.Cards.Any()) { player.Actions++; var previousPlayerMode = player.PutCardIntoPlay(result.Cards[0]); var logicalCard = result.Cards[0].LogicalCard; player.PlayCard(logicalCard, previousPlayerMode); } else player.PlayNothing(); } } }