99 lines
2.9 KiB
GDScript
99 lines
2.9 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_reset_button_pressed() -> void:
|
|
StatsManager.reset()
|
|
AchievementManager.reset()
|
|
get_tree().change_scene_to_file("res://scenes/stats_screen.tscn")
|
|
|
|
func _on_back_button_pressed() -> void:
|
|
get_tree().change_scene_to_file("res://scenes/mainmenu.tscn")
|