ChessBuilder/Systems/CardPreview.gd

93 lines
No EOL
2.8 KiB
GDScript

extends Control
class_name CardPreview
const PREVIEW_WIDTH = 150
const PREVIEW_HEIGHT = 200
const SCREEN_MARGIN = 20
var currentCard: Card = null
var previewPanel: PanelContainer
func _init() -> void:
previewPanel = PanelContainer.new()
previewPanel.custom_minimum_size = Vector2(PREVIEW_WIDTH, PREVIEW_HEIGHT)
position = Vector2(0, 0)
var vbox = VBoxContainer.new()
previewPanel.add_child(vbox)
var style = StyleBoxFlat.new()
style.bg_color = Color(0.2, 0.2, 0.2, 0.9)
style.corner_radius_top_left = 10
style.corner_radius_top_right = 10
style.corner_radius_bottom_left = 10
style.corner_radius_bottom_right = 10
previewPanel.add_theme_stylebox_override("panel", style)
previewPanel.hide()
add_child(previewPanel)
func show_card_preview(card: Card) -> void:
if card == null:
previewPanel.hide()
currentCard = null
return
currentCard = card
var vbox = previewPanel.get_child(0)
for child in vbox.get_children():
child.queue_free()
var nameLabel = Label.new()
nameLabel.text = card.cardName
nameLabel.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
nameLabel.add_theme_font_size_override("font_size", 18)
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 idLabel = Label.new()
idLabel.text = "ID: " + card.id.substr(card.id.length() - 8, -1)
idLabel.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
vbox.add_child(idLabel)
var durationLabel = Label.new()
durationLabel.text = str(card.remaining_turns) + " turns remaining"
durationLabel.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
vbox.add_child(durationLabel)
var descLabel = Label.new()
descLabel.text = card.description
descLabel.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
descLabel.autowrap_mode = TextServer.AUTOWRAP_WORD
descLabel.custom_minimum_size = Vector2(PREVIEW_WIDTH - 20, 0)
vbox.add_child(descLabel)
previewPanel.show()
func hide_preview() -> void:
previewPanel.hide()
currentCard = null
func update_moves_remaining(moves: int) -> void:
if currentCard == null:
return
var vbox = previewPanel.get_child(0)
var movesLabel = Label.new()
movesLabel.text = "Moves remaining this turn: " + str(moves)
movesLabel.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
# Remove old moves label if it exists
for child in vbox.get_children():
if child.text.begins_with("Moves remaining this turn:"):
child.queue_free()
vbox.add_child(movesLabel)