using DominionBase.Enums; using DominionBase.Piles; using DominionBase.Players; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Nocturne { public class Locusts : Hex { public Locusts() : base(Source.Nocturne, Traits.Trasher | Traits.Gainer | Traits.PlusCurses) { } public override void Receive(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.Receive(player); if (player.CanDraw) { var card = player.Draw(DeckLocation.Revealed); player.Trash(this, player.RetrieveCardFrom(DeckLocation.Revealed, card)); if (card is Universal.Copper || card is Universal.Estate) player.Gain(player._Game.Table.Curse, this); else { var gainableSupplies = new SupplyCollection(player._Game.Table.TableEntities.FindAll(supply => supply.CanGain() && supply.CurrentCost < _Game.ComputeCost(card) && (supply.TopCard.Category & card.Category) != Categories.Card)); var choice = new Choice($"Choose a card to gain", this, gainableSupplies, ChoiceOutcome.Gain, player, false); var result = player.MakeChoice(choice); if (result.Supply != null) player.Gain(result.Supply, this); } } } } }