Initial STEP 3 study game and questions API

This commit is contained in:
hz
2026-07-09 20:50:33 -05:00
commit 277076a245
51 changed files with 2671 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
extends VBoxContainer
const Style := preload("res://scripts/ui/ui_style.gd")
var main: Control
var zone_list: GridContainer
func _ready() -> void:
set_anchors_preset(Control.PRESET_FULL_RECT)
add_theme_constant_override("separation", 14)
var title := Label.new()
title.text = "Study Map"
Style.set_label(title, 34, Style.TEXT)
add_child(title)
var help := Label.new()
help.text = "Choose a system zone. Strong scores unlock momentum badges and level progress."
help.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
Style.set_label(help, 16, Style.MUTED)
add_child(help)
zone_list = GridContainer.new()
zone_list.columns = 3
zone_list.size_flags_vertical = Control.SIZE_EXPAND_FILL
add_child(zone_list)
func on_show(_payload: Variant = null) -> void:
for child in zone_list.get_children():
child.queue_free()
var systems: Array[String] = ["All Systems"]
systems.append_array(QuestionBankService.get_systems())
var stats: Dictionary = ProfileService.get_profile().get("system_stats", {})
for system_name in systems:
var button := Button.new()
button.custom_minimum_size = Vector2(260, 110)
button.text = _zone_text(system_name, stats)
Style.style_chip(button, Style.CYAN if system_name == "All Systems" else Style.MAGENTA)
button.pressed.connect(func(zone_name: String = system_name): main.show_screen("setup", zone_name))
zone_list.add_child(button)
func _zone_text(system_name: String, stats: Dictionary) -> String:
if system_name == "All Systems" or not stats.has(system_name):
return "%s\nStart block" % system_name
var seen := int(stats[system_name].get("seen", 0))
var correct := int(stats[system_name].get("correct", 0))
var accuracy := 0
if seen > 0:
accuracy = int(round(float(correct) / float(seen) * 100.0))
return "%s\n%d seen | %d%%" % [system_name, seen, accuracy]