using DominionBase.Enums; using DominionBase.Players; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Renaissance { public class GuildHall : Project { public GuildHall() : base(Source.Renaissance, 5, Traits.Component | Traits.ReactToGain | Traits.PlusCoffer) { } public override void TearDown(IGame game) { foreach (var cgp in PurchasedPlayers) cgp.CardGained -= Player_CardGained; base.TearDown(game); } public override void Bought(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.Bought(player); var cgp = PurchasedPlayers.Find(p => p == player); if (cgp != null) cgp.CardGained -= Player_CardGained; else PurchasedPlayers.Add(player); player.CardGained += Player_CardGained; } private void Player_CardGained(object sender, CardGainEventArgs e) { var player = sender as IPlayer; var key = ToString(); if (e.HandledBy.Contains(TypeClass.GuildHall) || !e.Card.Category.HasFlag(Categories.Treasure)) return; if (!e.Resolvers.ContainsKey(key)) e.Resolvers[key] = new CardGainResolver(player, this, "ResolveCard", $"Resolve {this}", Player_Action, true); } internal void Player_Action(IPlayer player, ref CardGainEventArgs e) { player.ReceiveBenefit(this, new CardBenefit { Coffers = 1 }); e.HandledBy.Add(TypeClass.GuildHall); } } }