using DominionBase.Enums; using DominionBase.Currencies; using DominionBase.Piles; using DominionBase.Properties; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Nocturne { public class DevilsWorkshop : Card { public DevilsWorkshop() : base(Categories.Night, Source.Nocturne, Location.Kingdom, Traits.ConditionalBenefit | Traits.Gainer | Traits.IncludesExtraPiles) { BaseCost = new Cost(4); } public override void SetupSupply(IGame game, ISupply supply) { Contract.Requires(game != null, "game cannot be null"); base.SetupSupply(game, supply); Imp.SetupSupply(game); } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); switch (player.CurrentTurn.CardsGained.Count) { case 0: player.Gain(player._Game.Table.Gold, this); break; case 1: var gainableSupplies = new SupplyCollection(player._Game.Table.TableEntities.FindAll(supply => supply.CanGain() && supply.CurrentCost <= new Coin(4))); var choice = new Choice(Resource.GainUpTo4, this, gainableSupplies, ChoiceOutcome.Gain, player, false); var result = player.MakeChoice(choice); if (result.Supply != null) player.Gain(result.Supply, this); break; default: player.Gain((ISupply)player._Game.Table.SpecialPiles[TypeClass.Imp], this); break; } } } }