Add question bank mastery paths and gap questions

This commit is contained in:
hz
2026-07-31 23:46:46 -05:00
parent 012d0cf196
commit 8c439c6294
28 changed files with 1409 additions and 121 deletions
+17 -3
View File
@@ -9,6 +9,8 @@ var size_spin: SpinBox
var mode_option: OptionButton
var status_label: Label
var start_button: Button
var requested_count := 10
var targeted_setup := false
func _ready() -> void:
set_anchors_preset(Control.PRESET_FULL_RECT)
@@ -67,7 +69,16 @@ func _ready() -> void:
func on_show(payload: Variant = null) -> void:
selected_system = str(payload) if payload != null else "All Systems"
if typeof(payload) == TYPE_DICTIONARY:
targeted_setup = true
selected_system = str(payload.get("step3_system", "All Systems"))
requested_count = int(payload.get("question_count", 10))
size_spin.value = requested_count
QuestionBankService.load_targeted_questions(selected_system, requested_count,
int(payload.get("difficulty_min", 0)), int(payload.get("difficulty_max", 0)))
else:
targeted_setup = false
selected_system = str(payload) if payload != null else "All Systems"
_refresh_setup()
@@ -77,14 +88,17 @@ func _refresh_setup() -> void:
system_label.text = "Zone: %s" % selected_system
var available := QuestionBankService.get_questions_for_system(selected_system).size()
size_spin.max_value = max(1, available)
size_spin.value = min(size_spin.value, available)
if not QuestionBankService.is_loading and available > 0:
size_spin.value = min(requested_count, available) if targeted_setup else min(size_spin.value, available)
targeted_setup = false
start_button.disabled = available == 0 or QuestionBankService.is_loading
if QuestionBankService.is_loading:
status_label.text = "Question API unavailable. Retrying in %d seconds..." % QuestionBankService.next_retry_seconds if QuestionBankService.load_state == "retrying" else "Loading question bank..."
elif available == 0:
status_label.text = QuestionBankService.last_error if QuestionBankService.last_error != "" else "No questions are available for this zone yet."
else:
status_label.text = "%d questions available." % available
status_label.text = "%d questions available.%s" % [available,
" The requested difficulty range was broadened." if QuestionBankService.targeted_fallback_used else ""]
func _start_block() -> void: