public override void Resolve(TurnContext context) { var player = context.ActivePlayer; var log = context.Game.Log; if (player.Hand.OfType<IActionCard>().Any()) { var activity = new SelectCardsActivity( log, player, "Select an action to play twice", SelectionSpecifications.SelectExactlyXCards(1)); activity.Specification.CardTypeRestriction = typeof (IActionCard); activity.AfterCardsSelected = cards => { var actionCard = cards.OfType<IActionCard>().Single(); log.LogMessage("{0} selected {1} to be played twice.", player.Name, actionCard.Name); actionCard.MoveTo(player.PlayArea); actionCard.Play(context); actionCard.Play(context); }; _activities.Add(activity); } }
public override void Resolve(TurnContext context, ICard source) { var upgradeActivity = new SelectCardsActivity(context, "Select a card to Upgrade", SelectionSpecifications.SelectExactlyXCards(1), source); upgradeActivity.AfterCardsSelected = cardList => { var player = context.ActivePlayer; var cardToUpgrade = cardList.Single(); var upgradeCost = cardToUpgrade.Cost + 1; context.Trash(player, cardToUpgrade); if (context.Game.Bank.Piles.Any(p => !p.IsEmpty && p.TopCard.Cost == upgradeCost)) { var gainActivity = Activities.GainACardCostingExactlyX(context.Game.Log, player, upgradeCost, player.Discards, source); _activities.Add(gainActivity); } else { context.Game.Log.LogMessage("{0} could gain no card of appropriate cost", player); } }; _activities.Add(upgradeActivity); }
public static ISelectCardsActivity SelectUpToXCardsToTrash(TurnContext context, Player player, int count, ICard source) { var activity = new SelectCardsActivity(context.Game.Log, player, string.Format("Select up to {0} card(s) to trash.", count), SelectionSpecifications.SelectUpToXCards(count), source); activity.Hint = ActivityHint.TrashCards; activity.AfterCardsSelected = cards => context.TrashAll(player, cards); return(activity); }
public static IActivity DiscardCardsToDrawCards(TurnContext context, ICard source) { var activity = new SelectCardsActivity( context, "Select any number of cards to discard, you will draw 1 new card for each discard.", SelectionSpecifications.SelectUpToXCards(context.ActivePlayer.Hand.CardCount), source); activity.AfterCardsSelected = cards => { context.DiscardCards(activity.Player, cards); context.DrawCards(cards.Count()); }; return(activity); }
public override void Resolve(TurnContext context) { var activity = new SelectCardsActivity( context, "Select any number of cards to discard, you will gain $1 per card", SelectionSpecifications.SelectUpToXCards(context.ActivePlayer.Hand.CardCount)); activity.AfterCardsSelected = cards => { context.DiscardCards(activity.Player, cards); context.AvailableSpend += cards.Count(); }; _activities.Add(activity); }
public override void Resolve(TurnContext context, ICard source) { var activity = new SelectCardsActivity( context, "Select any number of cards to discard, you will draw 1 new card for each discard", SelectionSpecifications.SelectUpToXCards(context.ActivePlayer.Hand.CardCount), source); activity.AfterCardsSelected = cards => { context.DiscardCards(activity.Player, cards); context.DrawCards(cards.Count()); }; _activities.Add(activity); }
public override void Resolve(TurnContext context) { var activity = new SelectCardsActivity( context, "Select up to 4 cards to trash", SelectionSpecifications.SelectUpToXCards(4)); activity.AfterCardsSelected = cards => { foreach (var cardToTrash in cards) context.Trash(activity.Player, cardToTrash); }; _activities.Add(activity); }
public override void Resolve(TurnContext context) { var activity = new SelectCardsActivity(context, "Select a treasure card to mine", SelectionSpecifications.SelectExactlyXCards(1)); activity.Specification.CardTypeRestriction = typeof(ITreasureCard); activity.AfterCardsSelected = cardList => { var cardToMine = cardList.Single(); context.Trash(context.ActivePlayer, cardToMine); AddGainActivity(context.Game.Log, context.ActivePlayer, cardToMine.Cost + 3); }; _activities.Add(activity); }
public override void Resolve(TurnContext context, ICard source) { if (context.ActivePlayer.Hand.CardCount > 0) { var activity = new SelectCardsActivity(context, "Select a card to trash", SelectionSpecifications.SelectExactlyXCards(1), source); activity.AfterCardsSelected = cardList => { var cardToSalvage = cardList.Single(); context.AvailableSpend += cardToSalvage.Cost.Money; context.Trash(context.ActivePlayer, cardToSalvage); }; _activities.Add(activity); } }
public override void Resolve(TurnContext context, ICard source) { var remodelActivity = new SelectCardsActivity(context, _message, SelectionSpecifications.SelectExactlyXCards(1), source); remodelActivity.AfterCardsSelected = cardList => { var player = context.ActivePlayer; var cardToRemodel = cardList.Single(); context.Trash(player, cardToRemodel); var gainActivity = Activities.GainACardCostingUpToX(context.Game.Log, player, cardToRemodel.Cost + _costIncrease, source); _activities.Add(gainActivity); }; _activities.Add(remodelActivity); }
public static IActivity SelectACardToTrash(TurnContext context, Player player, ICard source, Action <ICard> afterTrash) { var activity = new SelectCardsActivity(context.Game.Log, player, "Select a card to trash.", SelectionSpecifications.SelectExactlyXCards(1), source); activity.Hint = ActivityHint.TrashCards; activity.AfterCardsSelected = cards => { foreach (var cardToTrash in cards) { context.Trash(activity.Player, cardToTrash); } afterTrash(cards.Single()); }; return(activity); }
public static ISelectCardsActivity SelectActionToPlayMultipleTimes(TurnContext context, Player player, IGameLog log, ICard source, int count) { var activity = new SelectCardsActivity( log, player, string.Format("Select an action to play {0} times", count), SelectionSpecifications.SelectExactlyXCards(1), source); activity.Hint = ActivityHint.PlayCards; activity.Specification.CardTypeRestriction = typeof(IActionCard); activity.AfterCardsSelected = cards => { var actionCard = cards.OfType <IActionCard>().Single(); log.LogMessage("{0} selected {1} to be played {2} times.", player.Name, actionCard.Name, count); actionCard.MoveTo(context.ActivePlayer.PlayArea); count.Times(() => context.AddEffect(source, new PlayCardEffect(actionCard))); }; return(activity); }
public override void Resolve(TurnContext context, ICard source) { if (context.ActivePlayer.Hand.CardCount > 0) { var activity = new SelectCardsActivity(context, "Select a card to trash", SelectionSpecifications.SelectExactlyXCards(1), source); activity.AfterCardsSelected = cardList => { var cardToTrash = cardList.Single(); var cardsToDraw = cardToTrash.Cost.Money; // Notice the card doesn't say its 2 per potion (if we add cards that cost multiple potions) if (cardToTrash.Cost.Potions > 0) cardsToDraw += 2; context.DrawCards(cardsToDraw); context.Trash(context.ActivePlayer, cardToTrash); }; _activities.Add(activity); } }
public override void Resolve(TurnContext context, ICard source) { if (context.ActivePlayer.Hand.OfType<ITreasureCard>().Any()) { var activity = new SelectCardsActivity(context, "Select a treasure card to mine", SelectionSpecifications.SelectExactlyXCards(1), source); activity.Specification.CardTypeRestriction = typeof (ITreasureCard); activity.AfterCardsSelected = cardList => { var cardToMine = cardList.Single(); context.Trash(context.ActivePlayer, cardToMine); AddGainActivity(context.Game.Log, context.ActivePlayer, cardToMine.Cost + 3, source); }; _activities.Add(activity); } else { context.Game.Log.LogMessage("No treasure cards to trash."); } }
private SelectCardsActivity GetReturnActivity(TurnContext context, ICard selection) { var returnActivity = new SelectCardsActivity(context, string.Format("Select up to two {0} to return to the supply", selection.Name), SelectionSpecifications.SelectUpToXCardsOfSameName(selection.Name, 2), _source); returnActivity.AfterCardsSelected = cards => ReturnCardsAndAttack(cards, context, selection.Name); return returnActivity; }
public static IActivity SelectUpToXCardsToTrash(TurnContext context, Player player, int count, ICard source) { var activity = new SelectCardsActivity(context.Game.Log, player, string.Format("Select up to {0} card(s) to trash", count), SelectionSpecifications.SelectUpToXCards(count), source); activity.Hint = ActivityHint.TrashCards; activity.AfterCardsSelected = cards => { foreach (var cardToTrash in cards) context.Trash(activity.Player, cardToTrash); }; return activity; }
public static ISelectCardsActivity SelectActionToPlayMultipleTimes(TurnContext context, Player player, IGameLog log, ICard source, int count) { var activity = new SelectCardsActivity( log, player, string.Format("Select an action to play {0} times", count), SelectionSpecifications.SelectExactlyXCards(1), source); activity.Hint = ActivityHint.PlayCards; activity.Specification.CardTypeRestriction = typeof(IActionCard); activity.AfterCardsSelected = cards => { var actionCard = cards.OfType<IActionCard>().Single(); log.LogMessage("{0} selected {1} to be played {2} times.", player.Name, actionCard.Name, count); actionCard.MoveTo(context.ActivePlayer.PlayArea); count.Times(() => context.AddEffect(source, new PlayCardEffect(actionCard))); }; return activity; }
public static IActivity DiscardCardsToDrawCards(TurnContext context, ICard source) { var activity = new SelectCardsActivity( context, "Select any number of cards to discard, you will draw 1 new card for each discard.", SelectionSpecifications.SelectUpToXCards(context.ActivePlayer.Hand.CardCount), source); activity.AfterCardsSelected = cards => { context.DiscardCards(activity.Player, cards); context.DrawCards(cards.Count()); }; return activity; }
public static IActivity SelectXCardsToTrash(TurnContext context, Player player, int count, ICard source, Action afterTrash) { var activity = new SelectCardsActivity(context.Game.Log, player, string.Format("Select {0} card(s) to trash.", count), SelectionSpecifications.SelectExactlyXCards(count), source); activity.Hint = ActivityHint.TrashCards; activity.AfterCardsSelected = cards => { context.TrashAll(player, cards); afterTrash(); }; return activity; }
public static IActivity SelectACardToTrash(TurnContext context, Player player, ICard source, Action<ICard> afterTrash) { var activity = new SelectCardsActivity(context.Game.Log, player, "Select a card to trash.", SelectionSpecifications.SelectExactlyXCards(1), source); activity.Hint = ActivityHint.TrashCards; activity.AfterCardsSelected = cards => { foreach (var cardToTrash in cards) context.Trash(activity.Player, cardToTrash); afterTrash(cards.Single()); }; return activity; }
private SelectCardsActivity GetRevealActivity(TurnContext context, ICard source) { var revealActivity = new SelectCardsActivity(context, "Select a card to reveal.", SelectionSpecifications.SelectExactlyXCards(1), _source); revealActivity.AfterCardsSelected = cards => { var selection = cards.Single(); var returnActivity = GetReturnActivity(context, selection); _activities.Add(returnActivity); }; return revealActivity; }