using DominionBase.Enums; using DominionBase.Players; using System.Diagnostics.Contracts; using System.Linq; namespace DominionBase.Cards.Renaissance { public class Exploration : Project { public Exploration() : base(Source.Renaissance, 4, Traits.Component | Traits.PlusCoffer | Traits.PlusVillager) { } public override void TearDown(IGame game) { foreach (var bpp in PurchasedPlayers) bpp.PhaseChanging -= Player_PhaseChanging; base.TearDown(game); } public override void Bought(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.Bought(player); var bpp = PurchasedPlayers.Find(p => p == player); if (bpp != null) bpp.PhaseChanging -= Player_PhaseChanging; else PurchasedPlayers.Add(player); player.PhaseChanging += Player_PhaseChanging; } private void Player_PhaseChanging(object sender, PhaseChangingEventArgs e) { if (e.HandledBy.Contains(Type) || e.CurrentPhase != PhaseEnum.Buy || (e.NewPhase != PhaseEnum.Night && e.NewPhase != PhaseEnum.Cleanup) || e.CurrentPlayer.CurrentTurn.CardsBought.Any(c => c.Category.HasFlag(Categories.Card))) return; if (!e.Resolvers.ContainsKey(Type)) e.Resolvers[Type] = new PhaseChangingResolver(this, $"Resolve {this}", Player_Action, true); } internal void Player_Action(IPlayer player, ref PhaseChangingEventArgs e) { player.ReceiveBenefit(this, new CardBenefit { Coffers = 1, Villagers = 1 }); e.HandledBy.Add(Type); } } }