diff --git a/api/QuestionsApi/Controllers/QuestionsController.cs b/api/QuestionsApi/Controllers/QuestionsController.cs index 10b1d99..8517ec1 100644 --- a/api/QuestionsApi/Controllers/QuestionsController.cs +++ b/api/QuestionsApi/Controllers/QuestionsController.cs @@ -84,7 +84,9 @@ public class QuestionsController : ControllerBase return Ok(new FirstQuestionAttemptResponse { QuestionExternalId = question.ExternalId, - ChoiceSelectionPercentages = await _attempts.GetPercentagesForQuestionAsync(question.ExternalId) + ChoiceSelectionPercentages = QuestionResponse.BuildChoiceSelectionPercentages( + question, + await _attempts.GetPercentagesForQuestionAsync(question.ExternalId)) }); } diff --git a/api/QuestionsApi/Models/QuestionResponse.cs b/api/QuestionsApi/Models/QuestionResponse.cs index 6af59b3..0773deb 100644 --- a/api/QuestionsApi/Models/QuestionResponse.cs +++ b/api/QuestionsApi/Models/QuestionResponse.cs @@ -28,9 +28,7 @@ public class QuestionResponse CorrectChoiceId = question.CorrectChoiceId, Explanation = question.Explanation, ChoiceExplanations = question.ChoiceExplanations, - ChoiceSelectionPercentages = liveChoiceSelectionPercentages is { Count: > 0 } - ? liveChoiceSelectionPercentages - : question.ChoiceSelectionPercentages, + ChoiceSelectionPercentages = BuildChoiceSelectionPercentages(question, liveChoiceSelectionPercentages), Discipline = question.Discipline, System = question.System, Difficulty = question.Difficulty, @@ -38,6 +36,16 @@ public class QuestionResponse Media = question.Media, Tags = question.Tags }; + + public static Dictionary BuildChoiceSelectionPercentages(Question question, Dictionary? liveChoiceSelectionPercentages) + { + if (liveChoiceSelectionPercentages is not { Count: > 0 }) + return question.ChoiceSelectionPercentages; + + return question.Choices.ToDictionary( + choice => choice.Id, + choice => liveChoiceSelectionPercentages.GetValueOrDefault(choice.Id, 0)); + } } public class FirstQuestionAttemptResponse diff --git a/scripts/ui/question_player.gd b/scripts/ui/question_player.gd index e1984e1..a6f0a90 100644 --- a/scripts/ui/question_player.gd +++ b/scripts/ui/question_player.gd @@ -601,10 +601,10 @@ func _set_choice_button_text(index: int, choice: Dictionary) -> void: var choice_id := str(choice.get("id", "")) var choice_text := str(choice.get("text", "")) if locked_wrong_choice_ids.has(choice_id): - var text := "%s. [wrong] %s" % [choice_id, _strike_text(choice_text)] + var text := "%s. %s" % [choice_id, _strike_text(choice_text)] var percentage := _get_choice_selection_percentage(choice_id) if percentage >= 0: - text += "\n %d%% chose this on first attempt" % percentage + text += "\n %d%%" % percentage choice_buttons[index].text = text elif eliminated.has(choice_id): choice_buttons[index].text = "%s. [eliminated] %s" % [choice_id, _strike_text(choice_text)] @@ -615,8 +615,10 @@ func _set_choice_button_text(index: int, choice: Dictionary) -> void: func _get_choice_selection_percentage(choice_id: String) -> int: var question := BlockSessionService.get_current_question() var percentages: Dictionary = question.get("choice_selection_percentages", {}) - if not percentages.has(choice_id): + if percentages.is_empty(): return -1 + if not percentages.has(choice_id): + return 0 return clamp(int(percentages.get(choice_id, -1)), 0, 100)