using DominionBase.Currencies; using DominionBase.Enums; using DominionBase.Piles; using DominionBase.Players; using DominionBase.Properties; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Menagerie { public class Demand : Event { public Demand() : base(Source.Menagerie, 5, Traits.CardOrdering | Traits.Gainer | Traits.IncludesExtraPiles) { } public override void Finalize(IGame game) { Contract.Requires(game != null, "game cannot be null"); base.Finalize(game); Horse.SetupSupply(game); } public override void Bought(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.Bought(player); player.Gain((ISupply)player._Game.Table[TypeClass.Horse], this, DeckLocation.Deck, DeckPosition.Top); var supplies = new SupplyCollection(player._Game.Table.TableEntities.FindAll( s => s.CanGain() && s.CurrentCost <= new Coin(4) )); var choiceGain = new Choice(Resource.GainUpTo4ToDeck, this, supplies, ChoiceOutcome.Gain, player, false); var resultGain = player.MakeChoice(choiceGain); if (resultGain.Supply != null) player.Gain(resultGain.Supply, this, DeckLocation.Deck, DeckPosition.Top); } } }