using DominionBase.Enums; using DominionBase.Piles; using System.Diagnostics.Contracts; using System.Linq; namespace DominionBase.Cards.Nocturne { public class Tormentor : Doom { public Tormentor() : base(Categories.Action | Categories.Attack, Location.Kingdom, Traits.AffectOthers | Traits.ConditionalBenefit | Traits.Gainer | Traits.IncludesExtraPiles | Traits.PlusCoin | Traits.Terminal) { BaseCost = new Cost(5); Benefit.Currency.Coin.Value = 2; } public override void SetupSupply(IGame game, ISupply supply) { Contract.Requires(game != null, "game cannot be null"); base.SetupSupply(game, supply); Imp.SetupSupply(game); } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); if (!player.InPlayAndSetAside.Any(c => c != PhysicalCard)) player.Gain((ISupply)player._Game.Table.SpecialPiles[TypeClass.Imp], this); else { var hexPile = (IHexSupply)player._Game.Table.SpecialPiles[TypeClass.Hexes]; var hexTurnedOver = hexPile.TurnOverNext(player); var enumerator = player._Game.GetPlayersStartingWithEnumerator(player); enumerator.MoveNext(); while (enumerator.MoveNext()) { var attackee = enumerator.Current; // Skip if the attack is blocked (Moat, Lighthouse, etc.) if (IsAttackBlocked[attackee]) continue; if (hexTurnedOver) ((IHex)hexPile.TopDiscard).Receive(attackee); } } } } }