using DominionBase.Currencies; using DominionBase.Enums; using DominionBase.Piles; using DominionBase.Players; using DominionBase.Properties; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Menagerie { public class WayOfTheButterfly : Way { public WayOfTheButterfly() : base(Source.Menagerie, Traits.Gainer | Traits.Terminal) { } public override void FollowAlternateInstructions(IPlayer player, Card playedCard) { Contract.Requires(player != null, "player cannot be null"); Contract.Requires(playedCard != null, "playedCard cannot be null"); base.FollowAlternateInstructions(player, playedCard); if (player.InPlay.Contains(playedCard)) { var supply = player._Game.Table.FindSupplyPileByType(playedCard.Type, true); if (supply != null) { player.RetrieveCardFrom(DeckLocation.InPlay, playedCard); player.Lose(playedCard); supply.AddTo(playedCard); player._Game.SendMessage(player, this, "Return", supply); var returnedCardCost = player._Game.ComputeCost(playedCard); var gainableSupplies = new SupplyCollection(player._Game.Table.TableEntities.FindAll( supplyGain => supplyGain.CanGain() && supplyGain.CurrentCost == (returnedCardCost + new Coin(1)) )); var choice = new Choice(Resource.GainCard, this, gainableSupplies, ChoiceOutcome.Gain, player, false); var result = player.MakeChoice(choice); if (result.Supply != null) player.Gain(result.Supply, this); } } } } }