using DominionBase.Currencies; using DominionBase.Enums; using DominionBase.Piles; using DominionBase.Players; using DominionBase.Properties; using System.Diagnostics.Contracts; using System.Linq; namespace DominionBase.Cards.Menagerie { public class Enhance : Event { public Enhance() : base(Source.Menagerie, 3, Traits.Gainer | Traits.RemoveCurses | Traits.RemoveFromHand | Traits.Trasher) { } public override void Bought(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.Bought(player); var trashOptions = player.Hand[c => !c.Category.HasFlag(Categories.Victory)]; if (trashOptions.Any()) { var choiceTrash = new Choice(Resource.ChooseToTrashOptional, this, trashOptions, ChoiceOutcome.Trash, player, minimum: 0); var resultTrash = player.MakeChoice(choiceTrash); if (resultTrash.Cards.Any()) { var toTrash = resultTrash.Cards[0]; player.Trash(this, player.RetrieveCardsFrom(DeckLocation.Hand, resultTrash.Cards)); var trashedCardCost = player._Game.ComputeCost(toTrash); var gainableSupplies = new SupplyCollection( player._Game.Table.TableEntities.FindAll( supply => supply.CanGain() && supply.CurrentCost <= trashedCardCost + new Coin(2))); var choice = new Choice(Resource.GainCard, this, gainableSupplies, ChoiceOutcome.Gain, player, false); var result = player.MakeChoice(choice); if (result.Supply != null) player.Gain(result.Supply, this); } } } } }