using DominionBase.Enums; using DominionBase.Players; using System.Diagnostics.Contracts; using System.Linq; namespace DominionBase.Cards.Renaissance { public class Ducat : Card { public Ducat() : base(Categories.Treasure, Source.Renaissance, Location.Kingdom, Traits.Component | Traits.PlusBuy | Traits.PlusCoffer | Traits.Trasher) { BaseCost = new Cost(2); Benefit.Coffers = 1; Benefit.Buys = 1; Benefit.Currency.Coin.SpecialDisplay = "0"; } //protected override bool AllowUndo => true; public override void SetupCard(IGame game) { Contract.Requires(game != null, "game cannot be null"); base.SetupCard(game); foreach (var player in game.Players) player.CardGained += Player_CardGained; } public override void TearDown(IGame game) { Contract.Requires(game != null, "game cannot be null"); base.TearDown(game); foreach (var player in game.Players) player.CardGained -= Player_CardGained; } private void Player_CardGained(object sender, CardGainEventArgs e) { var player = sender as IPlayer; var key = Type.ToString(); // This is not the card you are looking for if (e.Card != this || e.Resolvers.ContainsKey(key) || e.HandledBy.Contains(this)) return; e.Resolvers[key] = new CardGainResolver(player, this, "TrashCopper", "Trash a Copper from your hand", Player_GainDucat, true); } internal void Player_GainDucat(IPlayer player, ref CardGainEventArgs e) { var choiceTrash = new Choice("You may trash a Copper from your hand", this, player.Hand[Universal.TypeClass.Copper], ChoiceOutcome.Trash, player, minimum: 0); var resultTrash = player.MakeChoice(choiceTrash); if (resultTrash.Cards.Any()) player.Trash(this, player.RetrieveCardsFrom(DeckLocation.Hand, resultTrash.Cards)); e.HandledBy.Add(this); } } }