/// <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);
    }
Esempio n. 2
0
    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");
    }
Esempio n. 3
0
    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);
    }
Esempio n. 5
0
        /// <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);
        }
Esempio n. 6
0
 internal bool DiscardPileContains(CardInstance headbuttTarget)
 {
     return(DiscardPile.Contains(headbuttTarget));
 }