extends CanvasLayer @onready var _container: VBoxContainer = $VBoxContainer/StatsContainer var _font = preload("res://assets/fonts/slkscre.ttf") func _ready() -> void: _build_stats() func _build_stats() -> void: var d = StatsManager.data _add_section("General") _add_row("Runs Played", str(d["runs_played"])) _add_row("Deaths", str(d["total_deaths"])) _add_row("Total Time Survived", _fmt_time(d["total_survive_seconds"])) _add_row("Longest Run", _fmt_time(d["longest_run_seconds"])) _add_gap() _add_section("Enemies Killed") var kill_names = {"slime": "Slime", "blue_slime": "Blue Slime", "fire_slime": "Fire Slime"} var total_kills = 0 for key in kill_names: var n: int = d["kills"][key] _add_row(kill_names[key], str(n)) total_kills += n _add_row("Total", str(total_kills)) _add_gap() _add_section("Spells Cast") var spell_names = { "fireball": "Fireball", "shuriken": "Shuriken", "laser": "Laser", "fire_swirl": "Fire Swirl", "tornado": "Tornado", "purge": "Purge", "throwing_knife": "Throwing Knife" } var total_spells = 0 for key in spell_names: var n: int = d["spells_cast"][key] _add_row(spell_names[key], str(n)) total_spells += n _add_row("Total", str(total_spells)) func _add_section(title: String) -> void: var lbl := Label.new() lbl.text = "- " + title + " -" lbl.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER lbl.add_theme_font_override("font", _font) lbl.add_theme_font_size_override("font_size", 20) lbl.add_theme_color_override("font_color", Color(0.75, 0.45, 1.0, 1.0)) _container.add_child(lbl) func _add_row(label: String, value: String) -> void: var hbox := HBoxContainer.new() hbox.add_theme_constant_override("separation", 8) var lbl := Label.new() lbl.text = label lbl.size_flags_horizontal = Control.SIZE_EXPAND_FILL lbl.add_theme_font_override("font", _font) lbl.add_theme_font_size_override("font_size", 18) lbl.add_theme_color_override("font_color", Color(1.0, 0.95, 0.8, 1.0)) hbox.add_child(lbl) var val := Label.new() val.text = value val.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT val.custom_minimum_size = Vector2(80, 0) val.add_theme_font_override("font", _font) val.add_theme_font_size_override("font_size", 18) val.add_theme_color_override("font_color", Color(1.0, 1.0, 0.55, 1.0)) hbox.add_child(val) _container.add_child(hbox) func _add_gap() -> void: var spacer := Control.new() spacer.custom_minimum_size = Vector2(0, 8) _container.add_child(spacer) func _fmt_time(seconds: float) -> String: var s := int(seconds) var h := s / 3600 var m := (s % 3600) / 60 var sec := s % 60 if h > 0: return "%dh %02dm %02ds" % [h, m, sec] return "%dm %02ds" % [m, sec] func _on_back_button_pressed() -> void: get_tree().change_scene_to_file("res://scenes/mainmenu.tscn")