extends Control @onready var exit_btn = $MarginContainer/VBoxContainer/Header/ExitButton @onready var progress_label = $MarginContainer/VBoxContainer/Header/ProgressLabel @onready var score_label = $MarginContainer/VBoxContainer/ScorePanel/ScoreLabel @onready var card_container = $MarginContainer/VBoxContainer/CardContainer var quiz_session: QuizSession var current_card_display: Node const FlashcardDisplayScene = preload("res://scenes/ui/quiz_mode/flashcard_display.tscn") const MultipleChoiceDisplayScene = preload("res://scenes/ui/quiz_mode/multiple_choice_display.tscn") func _ready() -> void: exit_btn.pressed.connect(_on_exit_pressed) func start_quiz(deck: Deck) -> void: if not deck or deck.cards.is_empty(): push_error("Cannot start quiz with empty or null deck") return quiz_session = QuizSession.new() quiz_session.question_answered.connect(_on_question_answered) quiz_session.session_completed.connect(_on_session_completed) quiz_session.progress_updated.connect(_on_progress_updated) quiz_session.start_session(deck, true) var progress = DataManager.get_or_create_progress(deck.id) progress.start_session() DataManager.save_progress() _show_next_card() _update_ui() func _show_next_card() -> void: var card = quiz_session.get_current_card() if not card: return if current_card_display: current_card_display.queue_free() current_card_display = null if card.card_type == Flashcard.QuestionType.BASIC: current_card_display = FlashcardDisplayScene.instantiate() else: current_card_display = MultipleChoiceDisplayScene.instantiate() card_container.add_child(current_card_display) current_card_display.set_card(card) current_card_display.answer_submitted.connect(_on_answer_submitted) func _on_answer_submitted(is_correct: bool) -> void: var card = quiz_session.get_current_card() if quiz_session.deck: DataManager.record_quiz_result(quiz_session.deck.id, card.id, is_correct) quiz_session.answer_question(is_correct) func _on_question_answered(is_correct: bool, card: Flashcard) -> void: await get_tree().create_timer(0.5).timeout _update_ui() _show_next_card() func _on_progress_updated(current: int, total: int) -> void: _update_ui() func _on_session_completed(results: Dictionary) -> void: print("Quiz completed! Results:") print(" Total: %d" % results.total_questions) print(" Correct: %d" % results.correct) print(" Incorrect: %d" % results.incorrect) print(" Accuracy: %.1f%%" % results.accuracy) print(" Duration: %.1f seconds" % results.duration_seconds) await get_tree().create_timer(1.0).timeout GameManager.return_to_main_menu() func _update_ui() -> void: if quiz_session: progress_label.text = "Card %d / %d" % [ quiz_session.current_index + 1, quiz_session.shuffled_cards.size() ] score_label.text = "Score: %d correct, %d incorrect (%.1f%%)" % [ quiz_session.session_correct, quiz_session.session_incorrect, quiz_session.get_session_accuracy() ] func _on_exit_pressed() -> void: GameManager.return_to_main_menu()