using DominionBase.Enums; using DominionBase.Players; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Renaissance { public class TreasureChest : Artifact { private IPlayer _buyPhaseStartedPlayer; public TreasureChest() : base(Source.Renaissance, Traits.Gainer) { } public override void TearDown(IGame game) { base.TearDown(game); if (_buyPhaseStartedPlayer != null) _buyPhaseStartedPlayer.PhaseChanging -= Player_PhaseChanging; _buyPhaseStartedPlayer = null; } public override void TakenBy(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.TakenBy(player); if (_buyPhaseStartedPlayer != null) _buyPhaseStartedPlayer.PhaseChanging -= Player_PhaseChanging; _buyPhaseStartedPlayer = player; _buyPhaseStartedPlayer.PhaseChanging += Player_PhaseChanging; } public override void ReturnedBy(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.ReturnedBy(player); player.PhaseChanging -= Player_PhaseChanging; _buyPhaseStartedPlayer = null; } private void Player_PhaseChanging(object sender, PhaseChangingEventArgs e) { if (!e.HandledBy.Contains(TypeClass.TreasureChest) && e.NewPhase == PhaseEnum.BuyTreasure) e.Resolvers[TypeClass.TreasureChest] = new PhaseChangingResolver(this, "Gain a Gold", Player_Action, true); } internal void Player_Action(IPlayer player, ref PhaseChangingEventArgs e) { player.Gain(player._Game.Table.Gold, this); e.HandledBy.Add(TypeClass.TreasureChest); } } }