extends Control class_name DeckManagerScreen signal back_pressed # Node references @onready var deckGrid = $MainContainer/GridScrollContainer/GridContainer @onready var bankContainer = $MainContainer/BankContainer/ScrollContainer/VBoxContainer @onready var backButton = $BackButton # Default deck size (can be overridden via options) var maxDeckSize = 35 var deckManager = null var bankCards = [] # Cards available but not in deck # The current deck var currentDeck = [] func _ready(): # Connect back button if backButton: backButton.connect("pressed", Callable(self, "_on_backButton_pressed")) func initialize(options = null): # Process options if provided if options: if options.has("maxDeckSize") and options.maxDeckSize is int: maxDeckSize = options.maxDeckSize # Find the DeckManager instance var board = get_node_or_null("/root/Board") as ChessGame if board and "deckManager" in board: deckManager = board.deckManager print("Found deck manager:", deckManager) # if(!deckManager.deck): # deckManager.initializeStartingDeck() else: print("DeckManager not found on Board node") print("DECK MANAGER") # Load cards from deck and bank loadCards() # Set up the grid with empty card containers setupDeckGrid() # Populate the bank with available cards populateBank() func loadCards(): if deckManager: # Clone the deck to work with currentDeck = deckManager.deck.duplicate() bankCards = deckManager.bank.duplicate() else: # Fallback with empty collections if deck manager not found currentDeck = [] bankCards = [] print("Warning: DeckManager not found") func setupDeckGrid(): # Clear existing children for child in deckGrid.get_children(): child.queue_free() # Calculate grid dimensions var cols = 7 #check screen to deteremine var rows = maxDeckSize / cols deckGrid.columns = cols # Create card slots for i in range(maxDeckSize): var card_slot = preload("res://card_slot.tscn").instantiate() deckGrid.add_child(card_slot) # Connect signals card_slot.connect("card_selected", Callable(self, "_on_deck_card_selected")) # Set card if available if i < currentDeck.size(): card_slot.set_card(currentDeck[i]) else: card_slot.clear() func populateBank(): # Clear existing children for child in bankContainer.get_children(): child.queue_free() # Add each bank card to the list for card in bankCards: var card_item = preload("res://card_bank_item.tscn").instantiate() bankContainer.add_child(card_item) card_item.set_card(card) card_item.connect("card_selected", Callable(self, "_on_bank_card_selected")) func _on_deck_card_selected(card_slot, card): if card: # Remove card from deck var index = currentDeck.find(card) if index >= 0: currentDeck.remove_at(index) # Add to bank bankCards.append(card) # Update UI card_slot.clear() populateBank() func _on_bank_card_selected(card_item, card): print("_on_bank_card_selected") # Find first empty slot in deck var empty_slot_index = -1 for i in range(deckGrid.get_child_count()): var slot = deckGrid.get_child(i) if !slot.has_card(): empty_slot_index = i break if empty_slot_index >= 0 and currentDeck.size() < maxDeckSize: # Remove from bank var bank_index = bankCards.find(card) if bank_index >= 0: bankCards.remove_at(bank_index) # Add to deck currentDeck.append(card) # Update UI deckGrid.get_child(empty_slot_index).set_card(card) populateBank() func saveDeck(): if deckManager: # Save the current deck to the deck manager deckManager.deck = currentDeck.duplicate() deckManager.bank = bankCards.duplicate() print("Deck saved with ", currentDeck.size(), " cards") func _on_backButton_pressed(): # Save changes before returning saveDeck() # Emit signal to go back emit_signal("back_pressed") # Hide this screen visible = false