using DominionBase.Enums; using System.Diagnostics.Contracts; using System.Linq; namespace DominionBase.Cards.Nocturne { public class Fool : Fate { public Fool() : base(Categories.Action, Location.Kingdom, Traits.ConditionalBenefit | Traits.Terminal) { BaseCost = new Cost(3); } public override void SetupSupply(IGame game, ISupply supply) { Contract.Requires(game != null, "game cannot be null"); base.SetupSupply(game, supply); for (var i = 0; i < game.Players.Count; i++) { Card card = new LuckyCoin(); game.Table.Copper.AddTo(card); card.SetupCard(game); } } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); if (!player.Takeables.Any(s => s.Type == TypeClass.LostInTheWoods)) { player.Take(TypeClass.LostInTheWoods); var supply = (IBoonSupply)player._Game.Table.SpecialPiles[TypeClass.Boons]; // Maybe combine these statements? var takenBoons = player.TakeBoon(supply, 3); while (takenBoons.Any()) { var choice = new Choice("Choose a Boon to receive.", this, takenBoons, player); var result = player.MakeChoice(choice); if (result.Boons.Any()) { var boon = result.Boons.First(); if (boon.Receive(player)) player.ReturnBoon(supply, boon); takenBoons.Remove(boon); } } } } } }