extends Node class_name DeckManager var deck: Array = [] var hand: Array = [] var discard: Array = [] var attached_cards: Dictionary = {} # piece_id: card var hand_size: int = 5 # Card costs for shop const CARD_BASE_COSTS = { Card.Rank.RANK_0: 100, Card.Rank.RANK_1: 75, Card.Rank.RANK_2: 50, Card.Rank.RANK_3: 25 } func _init(): initializeStartingDeck() func initializeStartingDeck(): # Add basic Rank 3 and 4 cards as per design doc for i in range(10): deck.append(Card.new()) # Basic movement cards shuffleDeck() drawStartingHand() func shuffleDeck(): deck.shuffle() func drawStartingHand(): for i in range(min(hand_size, deck.size())): drawCard() func drawCard(): if deck.is_empty() && !discard.is_empty(): deck = discard.duplicate() discard.clear() shuffleDeck() if !deck.is_empty() && hand.size() < hand_size: hand.append(deck.pop_back()) signal hand_updated func playCard(card: Card, target_piece: Pawn, board_flow = null, game_state = null): if !hand.has(card): return false emit_signal("hand_updated", hand) if card.apply_effect(target_piece, board_flow, game_state): hand.erase(card) match card.rank: Card.Rank.RANK_0: # Burned permanently pass Card.Rank.RANK_1: # Burned until next match pass Card.Rank.RANK_2: discard.append(card) Card.Rank.RANK_3: deck.append(card) shuffleDeck() if card.duration > 0: attached_cards[target_piece.get_instance_id()] = card return true return false func updateCardDurations(): var expired_cards = [] for piece_id in attached_cards: var card = attached_cards[piece_id] card.update_duration() if card.remaining_turns <= 0: expired_cards.append(piece_id) for piece_id in expired_cards: attached_cards.erase(piece_id) # Shop functionality func getShopCards(num_cards: int = 3) -> Array: var shop_cards = [] # Generate random shop selection #for i in range(num_cards): #var card = generate_random_card() #shop_cards.append({ #"card": card, #"cost": calculateCardCost(card) #}) return shop_cards func calculateCardCost(card: Card) -> int: var base_cost = CARD_BASE_COSTS[card.rank] # Add modifiers based on card effects return base_cost func upgradeCard(card: Card) -> bool: # Implement card upgrading logic return false