using DominionBase.Enums; using DominionBase.Players; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Menagerie { public class SnowyVillage : Card { private IPlayer _turnEndedPlayer; private TurnEndedEventHandler _turnEndedEventHandler; private BenefitReceivingEventHandler _benefitReceivingEventHandler; public SnowyVillage() : base(Categories.Action, Source.Menagerie, Location.Kingdom, Traits.PlusAction | Traits.PlusBuy | Traits.PlusCard | Traits.PlusMultipleActions) { BaseCost = new Cost(3); Benefit.Cards = 1; Benefit.Actions = 4; Benefit.Buys = 1; } public override void TearDown(IGame game) { base.TearDown(game); if (_turnEndedEventHandler != null && _turnEndedPlayer != null) Player_TurnEnded(_turnEndedPlayer, new TurnEndedEventArgs(_turnEndedPlayer)); _turnEndedEventHandler = null; } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); if (_turnEndedEventHandler == null) { _turnEndedPlayer = player; _turnEndedEventHandler = new TurnEndedEventHandler(Player_TurnEnded); player.TurnEnded += _turnEndedEventHandler; } if (_benefitReceivingEventHandler == null) { _benefitReceivingEventHandler = new BenefitReceivingEventHandler(Player_SnowyVillagePlayed); player.BenefitReceiving += _benefitReceivingEventHandler; } } private void Player_SnowyVillagePlayed(object sender, BenefitReceiveEventArgs e) { if (e.Benefit.Actions > 0) { e.Player._Game.SendMessage(e.Player, this, "ActionGainChanged", 0); e.Benefit.Actions = 0; } } private void Player_TurnEnded(object sender, TurnEndedEventArgs e) { var player = sender as IPlayer; if (_turnEndedEventHandler != null && _turnEndedPlayer != null) _turnEndedPlayer.TurnEnded -= _turnEndedEventHandler; _turnEndedPlayer = null; _turnEndedEventHandler = null; if (_benefitReceivingEventHandler != null) player.BenefitReceiving -= _benefitReceivingEventHandler; _benefitReceivingEventHandler = null; } } }