using DominionBase.Enums; using DominionBase.Players; using System.Collections.Generic; using System.Diagnostics.Contracts; namespace DominionBase.Cards.Menagerie { public class WayOfTheChameleon : Way { private readonly List cards = new List(); public WayOfTheChameleon() : base(Source.Menagerie, Traits.ConditionalBenefit | Traits.Terminal) { } public override void FollowAlternateInstructions(IPlayer player, Card playedCard) { Contract.Requires(player != null, "player cannot be null"); Contract.Requires(playedCard != null, "playedCard cannot be null"); base.FollowAlternateInstructions(player, playedCard); cards.Add(playedCard); player.BenefitReceiving += Player_BenefitReceiving; playedCard.FollowInstructions(player); player.BenefitReceiving -= Player_BenefitReceiving; cards.Remove(playedCard); } private void Player_BenefitReceiving(object sender, BenefitReceiveEventArgs e) { if (e.CardSource == null || !(e.CardSource is Card) || !cards.Contains((Card)e.CardSource)) return; // Swap +Cards and +Coins var plusCards = e.Benefit.Cards; var plusCoins = e.Benefit.Currency.Coin.Value; if (plusCards > 0) { e.Player._Game.SendMessage(e.Player, this, "ConvertCardsToCoins", plusCards); e.Benefit.Currency.Coin.Value += plusCards; e.Benefit.Cards -= plusCards; } if (plusCoins > 0) { e.Player._Game.SendMessage(e.Player, this, "ConvertCoinsToCards", plusCoins); e.Benefit.Cards += plusCoins; e.Benefit.Currency.Coin.Value -= plusCoins; } } } }