using DominionBase.Enums; using DominionBase.Properties; using System; using System.Collections.Generic; using System.Diagnostics.Contracts; using System.Linq; namespace DominionBase.Cards.Renaissance { public class Scepter : Card { private List CardsPlayed = new List(); public Scepter() : base(Categories.Treasure, Source.Renaissance, Location.Kingdom, Traits.ConditionalBenefit | Traits.Multiplier | Traits.PlusCoin) { BaseCost = new Cost(5); } public override bool CanCleanUp { get => CardsPlayed.All(cp => cp.CanCleanUp) && base.CanCleanUp; } public override void FollowInstructions(IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.FollowInstructions(player); var choice = new Choice(Resource.ChooseOne, this, this, new List { Resource.Plus2Coins, Resource.ReplayAnActionInPlay }, player); var result = player.MakeChoice(choice); if (result.Options.Contains(Resource.Plus2Coins)) player.ReceiveBenefit(this, new CardBenefit { Currency = new Currency(2) }); if (result.Options.Contains(Resource.ReplayAnActionInPlay)) { var replayChoice = new Choice( Resource.ReplayAnActionInPlay, this, player.InPlayAndSetAside[c => c.Category.HasFlag(Categories.Action) && player.CurrentTurn.CardsPlayed.Contains(c) ], ChoiceOutcome.Select, player, false, true ); var replayResult = player.MakeChoice(replayChoice); if (replayResult.Cards.Any()) { var card = replayResult.Cards[0]; CardsPlayed.Add(card); card.ChainedInto.Add(this); player.Actions++; var previousPlayerMode = player.PutCardIntoPlay(card, Resource.AgainFromCard.Replace("{card}", this.ToString())); player.PlayCard(card.LogicalCard, previousPlayerMode); } } } public override void RemovedFrom(Type deckType, IPlayer player) { Contract.Requires(player != null, "player cannot be null"); base.RemovedFrom(deckType, player); CardsPlayed.Clear(); } public override void GainDurationBenefits(IPlayer player) { foreach (var card in CardsPlayed) ModifyDuration(player, card); } } }