public void DrawCard(CardPile pile) { // Can't draw cards if we're not the active player if (!activePlayer) { return; } // Can't draw a card if we have one floating if (currentCard != null) { return; } // Check if pile has cards if (pile.GetCardCount() <= 0) { // Check if we can dump the graveyard back in the deck if (GameMng.GetRules().infiniteDeck) { var cards = graveyard.GetCards(); graveyard.Clear(); if (GameMng.GetRules().reshuffleInfinite) { ShuffleDeck(cards); } pile.Add(cards); if (pile.GetCardCount() <= 0) { return; } } else { return; } } // Check if we can draw cards (cards in hand is less than maximum allowed) if (hand.GetCardCount() >= GameMng.GetRules().maxCardsInHand) { return; } // Check if we've already drawn enough cards this turn if (drawCount >= GameMng.GetRules().drawPerTurn) { return; } drawCount++; // Get the first card CardDesc card = pile.GetFirstCard(); // Create the card itself and pop it on the hand var cardObject = GameMng.CreateCard(card); hand.Add(cardObject); }