private CardCopies GetValidCard() { CardCopies cardCopies = GetCard(); int attempts = 1; int maxAttempts = Constants.instance.loopLimit; while (!cardCopies.card.CanDraw() && attempts < maxAttempts) { cardCopies = GetCard(); attempts++; // Don't throw card out -- if it's a random effect card, its effects may be different on a redraw /* * if (!cardCopies.card.CanDraw()) { * ThrowOutCardCopies(cardCopies); * } */ } if (attempts == maxAttempts) { Debug.LogWarning("Max attempts reached while trying to draw a card."); } cardCopies.card.OnDraw(); return(cardCopies); }
private CardCopies GetCard() { int rand = Random.Range(0, _deckSize); CardCopies cardCopies = GetCardCopiesFromIndex(rand); if (cardCopies.card is TransformingCard) { cardCopies = new CardCopies(((TransformingCard)cardCopies.card).ApplyTransformation(), cardCopies.copies); } cardCopies.card.OnPeek(); return(cardCopies); }
// Returns a random card from this deck. Set allowDuplicates to false to throw out all cards of the same type after drawing. public Card DrawCard(bool allowDuplicates = true) { if (!_deckCounted) { SetDeckSize(); } CardCopies cardCopies = GetValidCard(); if (!allowDuplicates) { ThrowOutCardCopies(cardCopies); } return(cardCopies.card); }
private void ThrowOutCardCopies(CardCopies cardCopies) { _deckSize -= cardCopies.copies; composition.Remove(cardCopies); }