gae_wild_jam/scripts/stats_screen.gd

94 lines
2.7 KiB
GDScript

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")