using DominionBase.Enums; using DominionBase.Properties; using System; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Nocturne { public class CursedVillage : Doom { public CursedVillage() : base(Categories.Action, Location.Kingdom, Traits.ConditionalBenefit | Traits.NetCardDraw | Traits.PlusAction | Traits.PlusMultipleActions | Traits.ReactToGain) { BaseCost = new Cost(5); Benefit.Actions = 2; } public override void SetupCard(IGame game) { Contract.Requires(game != null, "game cannot be null"); base.SetupCard(game); foreach (var player in game.Players) player.CardGained += Player_CardGained; } public override void TearDown(IGame game) { Contract.Requires(game != null, "game cannot be null"); base.TearDown(game); foreach (var player in game.Players) player.CardGained -= Player_CardGained; } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); while (player.Hand.Count < 6 && player.CanDraw) player.DrawHand(1); } private void Player_CardGained(object sender, Players.CardGainEventArgs e) { var player = sender as IPlayer; var key = TypeClass.CursedVillage.ToString(); // This is not the card you are looking for if (e.Card != this || e.Resolvers.ContainsKey(key) || e.HandledBy.Contains(this)) return; e.Resolvers[key] = new Players.CardGainResolver(player, this, "ReceiveHex", Resource.ReceiveHex, Player_GainCursedVillage, true); } internal void Player_GainCursedVillage(IPlayer player, ref Players.CardGainEventArgs e) { var supply = (IHexSupply)player._Game.Table.SpecialPiles[TypeClass.Hexes]; supply.TurnOverNextAndReceive(player); e.HandledBy.Add(this); } } }