extends Node class_name DeckManager const DoubleTimeCard = preload("res://Systems/Cards/Doubletime.gd") const HopscotchCard = preload("res://Systems/Cards/Hopscotch.gd") const DrunkDrivingCard = preload("res://Systems/Cards/Drunkdriving.gd") const SupernovaCard = preload("res://Systems/Cards/Supernova.gd") const ExplosiveBootsCard = preload("res://Systems/Cards/Explosiveboots.gd") 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(): deck.clear(); # for i in range(2): # deck.append(DoubleTimeCard.new()) deck.append(ExplosiveBootsCard.new()) deck.append(DoubleTimeCard.new()) deck.append(DrunkDrivingCard.new()) deck.append(HopscotchCard.new()) deck.append(SupernovaCard.new()) 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()) emit_signal("hand_updated", hand) signal hand_updated func playCard(card: Card, target_piece: Pawn, board_flow = null, game_state = null): if !hand.has(card): # print("Failed Play Card 1") return false if card.duration > 0: attached_cards[target_piece.get_instance_id()] = card if card.apply_effect(target_piece, board_flow, game_state): if card.duration > 0: attached_cards[target_piece.get_instance_id()] = card hand.erase(card) emit_signal("hand_updated", hand) return true # print("Failed Play Card 2") return false func updateCardDurations(): var expired_cards = [] for piece_id in attached_cards: var card = attached_cards[piece_id] card.update_duration() # print("Card: ", card.id, " | ", card.cardName, " | ", card.remaining_turns) if card.remaining_turns <= 0: expired_cards.append(piece_id) match card.rank: Card.Rank.RANK_0: print("Rank 3 Burned permanently") pass Card.Rank.RANK_1: print("Rank 3 Burned until next match") pass Card.Rank.RANK_2: print("Rank 2 add to Discard") discard.append(card) pass Card.Rank.RANK_3: deck.append(card) print("Rank 3 add to Deck") pass else: var piece_node = instance_from_id(piece_id) if is_instance_valid(piece_node): piece_node.update_appearance() for piece_id in expired_cards: attached_cards.erase(piece_id) var piece_node = instance_from_id(piece_id) if is_instance_valid(piece_node): piece_node.update_appearance() # print("updateCardDurations", attached_cards) # 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