/// <summary> /// If in hand, allows discarding instead of forgetting. /// </summary> public override void Forget(PowerCard card) { // (Source-1) Purchased / Active if (InPlay.Contains(card)) { foreach (var el in card.Elements) { Elements[el.Key] -= el.Value; // lose elements from forgotten card } InPlay.Remove(card); DiscardPile.Add(card); return; } if (Hand.Contains(card)) { Hand.Remove(card); DiscardPile.Add(card); return; } if (DiscardPile.Contains(card)) { base.Forget(card); return; } throw new System.Exception("Can't find card to forget:" + card.Name); }
public CardPosition PurgeCardFromDeck(string id) { if (!TotalDeckList.Where(i => i.Id == id).Any()) { throw new Exception("Could not find card with ID of " + id); } var card = TotalDeckList.Where(i => i.Id == id).Single(); if (DrawPile.Contains(card)) { DrawPile.Remove(card); return(CardPosition.DRAW); } if (DiscardPile.Contains(card)) { DiscardPile.Remove(card); return(CardPosition.DISCARD); } if (Hand.Contains(card)) { Hand.Remove(card); return(CardPosition.HAND); } throw new Exception("This should be impossible"); }
public Card GetCard(string cardName) { if (!discardPile.Contains(cardName)) { return(null); } if (cardName.Equals(topCard.name)) { return(topCard); } discardPile.RemoveCard(cardName); return(CardFactory.CreateCard(cardName)); }
public override async Task <PowerCard> ForgetPowerCard_UserChoice(Present present = Present.Always) { IEnumerable <SingleCardUse> options = SingleCardUse.GenerateUses(CardUse.Discard, InPlay.Union(Hand)) .Union(SingleCardUse.GenerateUses(CardUse.Forget, DiscardPile)); var decision = new Select.PowerCard("Select card to forget or discard", options, present); PowerCard cardToForgetOrDiscard = await this.Action.Decision(decision); if (cardToForgetOrDiscard != null) { Forget(cardToForgetOrDiscard); } return(cardToForgetOrDiscard != null && !DiscardPile.Contains(cardToForgetOrDiscard) ? cardToForgetOrDiscard // card not in discard pile, must have been forgotten : null); }
/// <summary> /// Determines if an area contains an element. /// </summary> /// <param name="element">The element to look for.</param> /// <param name="location">The location to check.</param> /// <returns><see langword="true"/> if the element is in that location.</returns> public bool Contains(TElement element, Location location = Location.DrawPile) { Contract.Requires(Enum.IsDefined(typeof(Location), location)); switch (location) { case Location.DiscardPile: return(DiscardPile.Contains(element)); case Location.Hand: return(HandSet.Any(hand => hand.Contains(element))); case Location.Table: return(Table.Contains(element)); case Location.DrawPile: return(DrawPile.Contains(element)); default: throw new NotImplementedException($"The value of {location} wasn't coded for."); } return(false); }
internal bool DiscardPileContains(CardInstance headbuttTarget) { return(DiscardPile.Contains(headbuttTarget)); }