68 lines
No EOL
1.8 KiB
GDScript
68 lines
No EOL
1.8 KiB
GDScript
extends Control
|
|
class_name CardDisplay
|
|
|
|
var card_displays = []
|
|
var selected_card = null
|
|
const CARD_WIDTH = 100
|
|
const CARD_HEIGHT = 150
|
|
const CARD_MARGIN = 10
|
|
var container: HBoxContainer
|
|
|
|
func _ready():
|
|
container = HBoxContainer.new()
|
|
container.name = "CardContainer"
|
|
container.set_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: Card):
|
|
var card_panel = PanelContainer.new()
|
|
card_panel.custom_minimum_size = Vector2(CARD_WIDTH, CARD_HEIGHT)
|
|
|
|
var vbox = VBoxContainer.new()
|
|
card_panel.add_child(vbox)
|
|
|
|
var name_label = Label.new()
|
|
name_label.text = card.card_name
|
|
name_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
|
vbox.add_child(name_label)
|
|
|
|
var rank_label = Label.new()
|
|
rank_label.text = "Rank " + str(card.rank)
|
|
rank_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
|
vbox.add_child(rank_label)
|
|
|
|
var desc_label = Label.new()
|
|
desc_label.text = card.description
|
|
desc_label.autowrap_mode = TextServer.AUTOWRAP_WORD
|
|
desc_label.custom_minimum_size = Vector2(CARD_WIDTH - 10, 0)
|
|
vbox.add_child(desc_label)
|
|
|
|
card_displays.append(card_panel)
|
|
container.add_child(card_panel)
|
|
|
|
func _on_card_clicked(event: InputEvent, card: Card):
|
|
if event is InputEventMouseButton and event.pressed:
|
|
selected_card = card
|
|
highlight_selected_card(card)
|
|
|
|
func highlight_selected_card(selected: Card):
|
|
for display in card_displays:
|
|
var style = StyleBoxFlat.new()
|
|
style.bg_color = Color(0.2, 0.2, 0.2, 1)
|
|
if display.get_child(0).get_child(0).text == selected.card_name:
|
|
style.bg_color = Color(0.4, 0.6, 0.4, 1)
|
|
display.add_theme_stylebox_override("panel", style)
|
|
|
|
func get_selected_card() -> Card:
|
|
return selected_card
|
|
|
|
func clear_cards():
|
|
for display in card_displays:
|
|
display.queue_free()
|
|
card_displays.clear()
|
|
selected_card = null |