using DominionBase.Enums; using DominionBase.Players; using DominionBase.Properties; using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Linq; namespace DominionBase.Cards.Menagerie { public class Cardinal : Card { public Cardinal() : base(Categories.Action | Categories.Attack, Source.Menagerie, Location.Kingdom, Traits.AffectOthers | Traits.Exiler | Traits.PlusCoin | Traits.Terminal) { BaseCost = new Cost(4); Benefit.Currency.Coin.Value = 2; } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); var availableCosts = new List { new Cost(3), new Cost(4), new Cost(5), new Cost(6) }; var enumerator = player._Game.GetPlayersStartingWithEnumerator(player); enumerator.MoveNext(); while (enumerator.MoveNext()) { var attackee = enumerator.Current; if (IsAttackBlocked[attackee]) continue; attackee.Draw(2, DeckLocation.Revealed); var choiceExile = new Choice(Resource.ChooseCardToExile, this, attackee.Revealed[c => availableCosts.Any(cost => player._Game.ComputeCost(c) == cost)], ChoiceOutcome.Trash, player); var resultExile = attackee.MakeChoice(choiceExile); if (resultExile.Cards.Any()) { var cardToExile = resultExile.Cards[0]; attackee.AddCardInto(TypeClass.Exile, attackee.RetrieveCardFrom(DeckLocation.Revealed, cardToExile)); attackee._Game.SendMessage(attackee, this, "Exile", cardToExile); } attackee.DiscardRevealed(); } } } }