using DominionBase.Currencies; using DominionBase.Enums; using DominionBase.Players; using DominionBase.Properties; using System; using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Linq; namespace DominionBase.Cards.Menagerie { public class Scrap : Card { public Scrap() : base(Categories.Action, Source.Menagerie, Location.Kingdom, Traits.ConditionalBenefit | Traits.DeckReduction | Traits.Gainer | Traits.IncludesExtraPiles | Traits.PlusAction | Traits.PlusBuy | Traits.PlusCard | Traits.PlusCoin | Traits.RemoveCurses | Traits.Trasher | Traits.TrashForBenefit) { BaseCost = new Cost(3); } public override void SetupSupply(IGame game, ISupply supply) { Contract.Requires(game != null, "game cannot be null"); base.SetupSupply(game, supply); Horse.SetupSupply(game); } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); var choiceTrash = new Choice(Resource.ChooseACardToTrash, this, player.Hand, ChoiceOutcome.Trash, player); var resultTrash = player.MakeChoice(choiceTrash); if (resultTrash.Cards.Any()) { var costCoins = Math.Min(6, player._Game.ComputeCost(resultTrash.Cards.First()).Coin.Value); player.Trash(this, player.RetrieveCardsFrom(DeckLocation.Hand, resultTrash.Cards)); if (costCoins > 0) { var choice = new Choice($"Choose {costCoins}:", this, this, new List() { "+1Card", "+1Action", "+1Buy", "+1", Resource.GainSilver, Resource.GainHorse }, player, minimum: costCoins, maximum: costCoins); var result = player.MakeChoice(choice); var benefit = new CardBenefit(); if (result.Options.Contains("+1Card")) benefit.Cards = 1; if (result.Options.Contains("+1Action")) benefit.Actions = 1; if (result.Options.Contains("+1Buy")) benefit.Buys += 1; if (result.Options.Contains("+1")) benefit.Currency += new Coin(1); if (benefit.Any) player.ReceiveBenefit(this, benefit); if (result.Options.Contains(Resource.GainSilver)) player.Gain(player._Game.Table.Silver, this); if (result.Options.Contains(Resource.GainHorse)) player.Gain((ISupply)player._Game.Table.SpecialPiles[TypeClass.Horse], this); } } } } }