93 lines
No EOL
2.8 KiB
GDScript
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) |