using DominionBase.Enums; using DominionBase.Piles; using DominionBase.Players; using System.Diagnostics.Contracts; using System.Linq; namespace DominionBase.Cards.Renaissance { public class Lantern : Artifact { private IPlayer _BorderGuardPlayer; public Lantern() : base(Source.Renaissance, Traits.Discard) { } public override void TearDown(IGame game) { base.TearDown(game); if (_BorderGuardPlayer != null) { _BorderGuardPlayer.CardPlaying -= Player_CardPlaying; foreach (var bg in _BorderGuardPlayer.EndgamePile.OfType()) bg.BorderGuardRevealing -= Card_BorderGuardRevealing; } _BorderGuardPlayer = null; } public override void TakenBy(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.TakenBy(player); if (_BorderGuardPlayer != null) _BorderGuardPlayer.CardPlaying -= Player_CardPlaying; _BorderGuardPlayer = player; _BorderGuardPlayer.CardPlaying += Player_CardPlaying; } public override void ReturnedBy(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.ReturnedBy(player); player.CardPlaying -= Player_CardPlaying; _BorderGuardPlayer = null; } private void Player_CardPlaying(object sender, CardPlayingEventArgs e) { foreach (var card in e.Cards.OfType()) card.BorderGuardRevealing += Card_BorderGuardRevealing; } private void Card_BorderGuardRevealing(object sender, BorderGuardRevealEventArgs e) { (sender as BorderGuard).BorderGuardRevealing -= Card_BorderGuardRevealing; e.CardsToReveal = 3; } } }