using DominionBase.Currencies; using DominionBase.Enums; using DominionBase.Piles; using DominionBase.Properties; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Menagerie { public class Groom : Card { public Groom() : base(Categories.Action, Source.Menagerie, Location.Kingdom, Traits.ConditionalBenefit | Traits.Gainer | Traits.IncludesExtraPiles | Traits.PlusCard | Traits.PlusCoin) { BaseCost = new Cost(4); } public override void SetupSupply(IGame game, ISupply supply) { Contract.Requires(game != null, "game cannot be null"); base.SetupSupply(game, supply); Horse.SetupSupply(game); } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); var supplies = new SupplyCollection(player._Game.Table.TableEntities.FindAll( s => s.CanGain() && s.CurrentCost <= new Coin(4) )); var choiceGain = new Choice(Resource.GainUpTo4, this, supplies, ChoiceOutcome.Gain, player, false); var resultGain = player.MakeChoice(choiceGain); if (resultGain.Supply != null) { var cardToGain = resultGain.Supply.TopCard; if (player.Gain(resultGain.Supply, this)) { if (cardToGain.Category.HasFlag(Categories.Action)) player.Gain((ISupply)player._Game.Table.SpecialPiles[TypeClass.Horse], this); if (cardToGain.Category.HasFlag(Categories.Treasure)) player.Gain(player._Game.Table.Silver, this); if (cardToGain.Category.HasFlag(Categories.Victory)) player.ReceiveBenefit(this, new CardBenefit { Cards = 1, Actions = 1 }); } } } } }