using DominionBase.Currencies; using DominionBase.Enums; using DominionBase.Piles; using DominionBase.Properties; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Menagerie { public class Bargain : Event { public Bargain() : base(Source.Menagerie, 4, Traits.AffectOthers | Traits.Gainer | Traits.IncludesExtraPiles) { } public override void Finalize(IGame game) { Contract.Requires(game != null, "game cannot be null"); base.Finalize(game); Horse.SetupSupply(game); } public override void Bought(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.Bought(player); var gainableSupplies = new SupplyCollection( player._Game.Table.TableEntities.FindAll(supply => supply.CanGain() && supply.CurrentCost <= new Coin(5) && !supply.TopCard.Category.HasFlag(Categories.Victory) )); var choice = new Choice(Resource.GainUpTo5, this, gainableSupplies, ChoiceOutcome.Gain, player, false); var result = player.MakeChoice(choice); if (result.Supply != null) player.Gain(result.Supply, this); var enumerator = player._Game.GetPlayersStartingWithEnumerator(player); // Skip current player enumerator.MoveNext(); while (enumerator.MoveNext()) { var actee = enumerator.Current; actee.Gain((ISupply)player._Game.Table[TypeClass.Horse], this); } } } }