class_name AchievementsScreen extends Control var app var export_label: Label func _ready() -> void: var p: Profile = app.profile var col := Style.column(self, 900, 12, 4) Style.clabel(col, "Erfolge", 32, 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.total()], 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.clabel(col, "Serie: %d (beste %d) · Schnellster Sieg: %s" % [p.records.streak, p.records.best_streak, ("%d Züge" % p.records.fastest_win) if p.records.fastest_win > 0 else "–"], 15, Style.MUTED) Style.spacer(col, 4) 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, 36) 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) export_label = Style.clabel(col, "", 13, Style.GREEN) Style.spacer(col, 2) var br := Style.row(col, 16) br.alignment = BoxContainer.ALIGNMENT_CENTER Style.cbutton(br, "Statistik exportieren", Vector2(220, 40), export_stats) Style.cbutton(br, "Zurück", Vector2(160, 40), func(): app.show_screen(MenuScreen.new())) func export_stats() -> void: var path := "user://statistik.csv" var err: String = app.profile.export_stats(path) export_label.text = ("Gespeichert: " + ProjectSettings.globalize_path(path)) if err == "" else err func _input(event: InputEvent) -> void: if event is InputEventKey and event.pressed and event.keycode == KEY_ESCAPE: app.show_screen(MenuScreen.new())