class_name CardDisplay extends Control const CARD_WIDTH = 150 const CARD_HEIGHT = 250 const CARD_MARGIN = 10 var cardDisplays = [] var selectedCard = null var container: HBoxContainer func _ready(): # Create the container first container = HBoxContainer.new() container.name = "Hand" container.position = Vector2(10, 500) add_child(container) func update_hand(hand: Array): clear_cards() for card in hand: add_card_display(card) func add_card_display(card): var cardPanel = PanelContainer.new() cardPanel.custom_minimum_size = Vector2(CARD_WIDTH, CARD_HEIGHT) var vbox = VBoxContainer.new() vbox.set_meta("card_id", card.id) cardPanel.add_child(vbox) var nameLabel = Label.new() nameLabel.text = card.cardName nameLabel.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER vbox.add_child(nameLabel) var rankLabel = Label.new() rankLabel.text = "Rank " + str(card.rank) rankLabel.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER vbox.add_child(rankLabel) var descLabel = Label.new() descLabel.text = card.description descLabel.autowrap_mode = TextServer.AUTOWRAP_WORD descLabel.custom_minimum_size = Vector2(CARD_WIDTH - 10, 0) vbox.add_child(descLabel) var unitWhitelistLabel = Label.new() unitWhitelistLabel.text = ", ".join(card.unitWhitelist) unitWhitelistLabel.autowrap_mode = TextServer.AUTOWRAP_WORD unitWhitelistLabel.custom_minimum_size = Vector2(CARD_WIDTH - 10, 0) vbox.add_child(unitWhitelistLabel) var idLabel = Label.new() idLabel.text = card.id.substr(card.id.length() - 8, -1) idLabel.autowrap_mode = true idLabel.custom_minimum_size = Vector2(CARD_WIDTH - 10, 0) vbox.add_child(idLabel) cardPanel.gui_input.connect(func(event): _on_card_clicked(event, card)) cardDisplays.append(cardPanel) container.add_child(cardPanel) func _on_card_clicked(event: InputEvent, card: Card): if event is InputEventMouseButton and event.pressed: if selectedCard == null || selectedCard.id != card.id: selectedCard = card container.emit_signal("card_pressed", card) elif selectedCard.id == card.id: selectedCard = null highlight_selectedCard(selectedCard) func highlight_selectedCard(selected: Card) -> void: for display in cardDisplays: var style = StyleBoxFlat.new() style.bg_color = Utils.DARK_CELL # Default color var vbox = display.get_child(0) if selected && vbox.get_meta("card_id") == selected.id: style.bg_color = Color(0.4, 0.6, 0.4, 1) # Selected color display.add_theme_stylebox_override("panel", style) func get_card_by_uuid(uuid: String) -> Card: for display in cardDisplays: var vbox = display.get_child(0) if vbox.get_meta("card_id") == uuid: return selectedCard return null func getSelectedCard() -> Card: return selectedCard func clear_cards(): for display in cardDisplays: display.queue_free() cardDisplays.clear() selectedCard = null