using DominionBase.Enums; using DominionBase.Players; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Renaissance { public class Flag : Artifact { private IPlayer _drawNewHandPlayer; public Flag() : base(Source.Renaissance, Traits.PlusCard) { } public override void TearDown(IGame game) { base.TearDown(game); if (_drawNewHandPlayer != null) _drawNewHandPlayer.DrawNewHand -= Player_DrawNewHand; _drawNewHandPlayer = null; } public override void TakenBy(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.TakenBy(player); if (_drawNewHandPlayer != null) _drawNewHandPlayer.DrawNewHand -= Player_DrawNewHand; _drawNewHandPlayer = player; _drawNewHandPlayer.DrawNewHand += Player_DrawNewHand; } public override void ReturnedBy(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.ReturnedBy(player); player.DrawNewHand -= Player_DrawNewHand; _drawNewHandPlayer = null; } private void Player_DrawNewHand(object sender, DrawNewHandEventArgs e) { if (e.Resolvers.ContainsKey(Type) || e.HandledBy.Contains(this)) return; e.Resolvers[Type] = new DrawNewHandResolver(this, $"Resolve {this}", Player_Action, true); } internal void Player_Action(IPlayer player, ref DrawNewHandEventArgs e) { e.DrawSize += 1; player._Game.SendMessage(player, this, e.DrawSize); e.HandledBy.Add(this); } } }