public IEnumerator AskQuestion(QuestionSpec questionSpec)
        {
            Debug.Log($"Asking question [{questionSpec.QuestionElements["BaseQuestion"].Text}]");
            yield return(new WaitForSeconds(_questionsSpec.GeneralQuestionsSpec.AnswerListeningDuration));

            Debug.Log($"Correct answers: [{string.Join(", ", questionSpec.CorrectAnswers)}]");
        }
 private IEnumerator OnCorrectAnswer(QuestionSpec questionSpec)
 {
     if (questionSpec.QuestionElements[QuestionSpec.DefaultKeys.Motivator].Voice != null)
     {
         yield return(PlayVoice(questionSpec.QuestionElements[QuestionSpec.DefaultKeys.Motivator]));
     }
     else
     {
         yield return(PlayVoice(_questionsSpec.GeneralQuestionsSpec.CongratsOnCorrectAnswer.Random(Random.Range)));
     }
 }
        public IEnumerator AskQuestion(QuestionSpec questionSpec)
        {
            _speechRecognizer.Setup(questionSpec.CorrectAnswers);
            yield return(PlayVoice(questionSpec.QuestionElements[QuestionSpec.DefaultKeys.Intro]));

            yield return(PlayVoice(questionSpec.QuestionElements[QuestionSpec.DefaultKeys.BaseQuestion]));

            yield return(_speechRecognizer.Recognize(questionSpec.QuestionElements[QuestionSpec.DefaultKeys.BaseQuestion].Text,
                                                     _questionsSpec.GeneralQuestionsSpec.AnswerListeningDuration));

            if (_speechRecognizer.IsCorrectAnswer())
            {
                OnAnswer?.Invoke(_statisticsInfo
                                 .AddTimeBeforeAnswer(_speechRecognizer.TimeBeforeAnswer)
                                 .AddCorrectAnswerAttempt(1));
                yield return(OnCorrectAnswer(questionSpec));

                yield break;
            }

            yield return(PlayVoice(questionSpec.QuestionElements[QuestionSpec.DefaultKeys.SupportQuestion]));

            yield return(_speechRecognizer.Recognize(questionSpec.QuestionElements[QuestionSpec.DefaultKeys.BaseQuestion].Text,
                                                     _questionsSpec.GeneralQuestionsSpec.AnswerListeningDuration));

            if (_speechRecognizer.IsCorrectAnswer())
            {
                OnAnswer?.Invoke(_statisticsInfo
                                 .AddTimeBeforeAnswer(_speechRecognizer.TimeBeforeAnswer)
                                 .AddCorrectAnswerAttempt(2));
                yield return(OnCorrectAnswer(questionSpec));

                yield break;
            }

            OnAnswer?.Invoke(_statisticsInfo);
            yield return(PlayVoice(questionSpec.QuestionElements[QuestionSpec.DefaultKeys.RepeatOnIncorrect]));
        }
 public QuestionStatisticInfo AddQuestionInfo(int questionNumber, QuestionSpec questionSpec)
 {
     QuestionNumber = questionNumber;
     QuestionSpec   = questionSpec;
     return(this);
 }