using DominionBase.Enums; using DominionBase.Properties; using System; using System.Diagnostics.Contracts; using System.Linq; namespace DominionBase.Cards.Menagerie { public class Wayfarer : Card { public Wayfarer() : base(Categories.Action, Source.Menagerie, Location.Kingdom, Traits.Gainer | Traits.ModifyCost | Traits.NetCardDraw | Traits.PlusCard) { BaseCost = new Cost(6, special: true); Benefit.Cards = 3; } public override void SetupCard(IGame game) { Contract.Requires(game != null, "game cannot be null"); base.SetupCard(game); game.CostCompute += Wayfarer_CostCompute; } public override void TearDown(IGame game) { Contract.Requires(game != null, "game cannot be null"); base.TearDown(game); game.CostCompute -= Wayfarer_CostCompute; } private void Wayfarer_CostCompute(object sender, CostComputeEventArgs e) { if (e.Card != this) return; var game = sender as IGame; bool filter(Card c) { return c.Name != Name; } if (game.ActivePlayer != null && game.ActivePlayer.CurrentTurn != null && game.ActivePlayer.CurrentTurn.CardsGained.Any(filter)) e.Cost = game.ComputeCost(game.ActivePlayer.CurrentTurn.CardsGained.LastOrDefault(filter)); } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); var result = player.MakeChoice(Choice.CreateYesNoChoice(Resource.ShouldGainSilver, this, player)); if (result.Options.FirstOrDefault() == Resource.Yes) player.Gain(player._Game.Table.Silver, this); } } }