using DominionBase.Currencies; using DominionBase.Enums; using DominionBase.Piles; using DominionBase.Players; using DominionBase.Properties; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Renaissance { public class Sculptor : Card { public Sculptor() : base(Categories.Action, Source.Renaissance, Location.Kingdom, Traits.Component | Traits.ConditionalBenefit | Traits.Gainer | Traits.PlusVillager | Traits.Terminal) { BaseCost = new Cost(5); } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); var gainableSupplies = new SupplyCollection(player._Game.Table.TableEntities.FindAll(supply => supply.CanGain() && supply.CurrentCost <= new Coin(4))); var choice = new Choice(Resource.GainUpTo4ToHand, this, gainableSupplies, ChoiceOutcome.Gain, player, false); var result = player.MakeChoice(choice); if (result.Supply != null) { var cardToGain = result.Supply.TopCard; if (player.Gain(result.Supply, this, DeckLocation.Hand)) { if (cardToGain.Category.HasFlag(Categories.Treasure)) player.ReceiveBenefit(this, new CardBenefit { Villagers = 1 }); } } } } }