using DominionBase.Enums; using DominionBase.Players; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Nocturne { public class TheFieldsGift : Boon { private CleaningUpEventHandler _CleaningUpEventHandler; public TheFieldsGift() : base(Source.Nocturne, Traits.PlusAction | Traits.PlusCoin) { Benefit.Actions = 1; Benefit.Currency.Coin.Value = 1; } public override void TearDown(IGame game) { Contract.Requires(game != null, "game cannot be null"); base.TearDown(game); foreach (var player in game.Players) player.CleaningUp -= _CleaningUpEventHandler; } public override bool Receive(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.Receive(player); var boons = (IBoonSupply)player._Game.Table.SpecialPiles[TypeClass.Boons]; player.KeepBoon(boons, this); if (player._Game.ActivePlayer == player) { _CleaningUpEventHandler = new CleaningUpEventHandler(Player_CleaningUp); player.CleaningUp += _CleaningUpEventHandler; } return false; } private void Player_CleaningUp(object sender, CleaningUpEventArgs e) { if (e.Resolvers.ContainsKey(TypeClass.TheFieldsGift)) return; e.Resolvers[TypeClass.TheFieldsGift] = new CleaningUpResolver(this, $"Return {this}", Player_Action, true); } internal void Player_Action(IPlayer player, ref CleaningUpEventArgs e) { player.ReturnBoon((IBoonSupply)player._Game.Table.SpecialPiles[TypeClass.Boons], this); player.CleaningUp -= _CleaningUpEventHandler; } } }