using DominionBase.Piles; using DominionBase.Players; using DominionBase.Properties; using System.Diagnostics.Contracts; using System.Globalization; namespace DominionBase.Cards.Menagerie { public class Exile : CardMat { private IPlayer Owner; public Exile() : base(Visibility.All, VisibilityTo.All, new Sorting.ByTypeName(Sorting.SortDirection.Descending), false) { Name = "Exile"; IsObtainable = true; } public override void Init(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.Init(player); Owner = player; Owner.CardGained += Player_CardGained; } public override void TearDown(IGame game) { Owner.CardGained -= Player_CardGained; base.TearDown(game); } private void Player_CardGained(object sender, Players.CardGainEventArgs e) { // It's not available to trigger any more if (e.Cancelled) return; var player = sender as IPlayer; var key = TypeClass.Exile.ToString(); //var matchingInExile = FindAll(c => c != e.Card && c.Name == e.Card.Name).Count; var matchingInExile = FindAll(c => c.Name == e.Card.Name).Count; // This is not the card you are looking for if (e.Resolvers.ContainsKey(key) || e.HandledBy.Contains(this) || matchingInExile == 0) return; e.Resolvers[key] = new CardGainResolver(player, this, "DiscardFromExile", Resource.DiscardFromExile.Replace("{count}", matchingInExile.ToString(CultureInfo.CurrentCulture)), (IPlayer playerAction, ref Players.CardGainEventArgs eAction) => { var gainCardName = eAction.Card.Name; player.Discard(DeckLocation.PlayerMat, Type, c => c.Name == gainCardName); }, false); } } }