using DominionBase.Enums; using DominionBase.Piles; using DominionBase.Players; using DominionBase.Properties; using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Linq; namespace DominionBase.Cards.Renaissance { public class Seer : Card { public Seer() : base(Categories.Action, Source.Renaissance, Location.Kingdom, Traits.Cantrip | Traits.CardOrdering | Traits.NetCardDraw | Traits.PlusAction | Traits.PlusCard) { BaseCost = new Cost(5); Benefit.Cards = 1; Benefit.Actions = 1; } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); player.Draw(3, DeckLocation.Revealed); var availableCosts = new List { new Cost(2), new Cost(3), new Cost(4) }; player.AddCardsToHand(player.RetrieveCardsFrom(DeckLocation.Revealed, c => availableCosts.Any(cost => player._Game.ComputeCost(c) == cost) )); var replaceChoice = new Choice(Resource.ChooseOrderToTopdeck, this, player.Revealed, ChoiceOutcome.Select, player, isOrdered: true, minimum: player.Revealed.Count, maximum: player.Revealed.Count); var replaceResult = player.MakeChoice(replaceChoice); player.RetrieveCardsFrom(DeckLocation.Revealed, replaceResult.Cards); player.AddCardsToDeck(replaceResult.Cards, DeckPosition.Top); } } }