class_name AchievementsScreen extends Control var app func _ready() -> void: var p: Profile = app.profile var col := Style.column(self, 900, 20, 5) Style.clabel(col, "Erfolge", 36, Style.GOLD, "center", true) var st: Dictionary = p.stats Style.clabel(col, "Kämpfe %d · Siege %d · Booster %d · Kampagne %d/%d" % [ st.games, st.wins, st.boosters, p.campaign_stage, Campaign.STAGES.size()], 16, Style.MUTED) var task := p.daily_task() var daily_text: String = ("Tagesaufgabe erledigt: %s ✓" % task.text) if p.daily.done else \ "Tagesaufgabe: %s (%d/%d) · +%d Münzen" % [task.text, p.daily.progress, task.goal, task.reward] Style.clabel(col, daily_text, 16, Style.BLUE) Style.spacer(col, 8) for a in Profile.ACHIEVEMENTS: var done: bool = a.id in p.achievements var panel := PanelContainer.new() panel.add_theme_stylebox_override("panel", Style.box(Style.PANEL if done else Style.darker(Style.PANEL, 0.8), 6)) col.add_child(panel) var r := Style.row(panel, 12) r.custom_minimum_size = Vector2(0, 42) Style.clabel(r, "✓" if done else "·", 22, Style.GREEN if done else Style.MUTED, "center", true, 40) Style.clabel(r, a.name, 18, Style.TEXT if done else Style.MUTED, "left", true, 250) Style.clabel(r, a.text, 15, Style.MUTED, "left", false, 380) Style.clabel(r, "+%d" % a.reward, 16, Style.GOLD, "right", true, 90) var top := p.top_cards(5) if not top.is_empty(): Style.spacer(col, 4) var parts: Array[String] = [] for row in top: parts.append("%s %d/%d" % [row.card.name, row.wins, row.games]) Style.clabel(col, "Beste Karten (Siege/Partien): " + " · ".join(parts), 14, Style.MUTED) Style.spacer(col, 6) var br := Style.row(col) br.alignment = BoxContainer.ALIGNMENT_CENTER Style.cbutton(br, "Zurück", Vector2(160, 44), func(): app.show_screen(MenuScreen.new())) func _input(event: InputEvent) -> void: if event is InputEventKey and event.pressed and event.keycode == KEY_ESCAPE: app.show_screen(MenuScreen.new())