using DominionBase.Currencies; using DominionBase.Enums; using DominionBase.Piles; using DominionBase.Players; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Nocturne { public class ZombieMason : Card { public ZombieMason() : base(Categories.Action | Categories.Zombie, Source.Nocturne, Location.Special, Traits.ConditionalBenefit | Traits.DeckReduction | Traits.Gainer | Traits.RemoveCurses | Traits.Terminal | Traits.Trasher | Traits.TrashForBenefit) { BaseCost = new Cost(3); } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); if (player.CanDraw) { var card = player.Draw(DeckLocation.Revealed); player.Trash(this, player.RetrieveCardFrom(DeckLocation.Revealed, card)); var trashedCardCost = player._Game.ComputeCost(card); var gainableSupplies = new SupplyCollection(player._Game.Table.TableEntities.FindAll(supply => supply.CanGain() && supply.CurrentCost <= (trashedCardCost + new Coin(1)))); var choice = new Choice($"Choose a card to gain", this, gainableSupplies, ChoiceOutcome.Gain, player, true); var result = player.MakeChoice(choice); if (result.Supply != null) player.Gain(result.Supply, this); } } } }