private void NewRound()
 {
     m_qManager.NewDay(m_currentDay);
     m_currentExercise = m_qManager.NextExercise();
     SpawnStudents();
     StartCoroutine(StartRound());
 }
    private IEnumerator StartRound()
    {
        yield return(new WaitForSeconds(1.5f));

        int studentAlive = m_studentsList.Count;

        while (m_studentsList.Count > 0)
        {
            yield return(new WaitForSeconds(1.5f));

            Exercise exercise = Instantiate(m_currentExercise.Explanation, m_teacher.transform);
            m_sManager.PlayExperience();
            yield return(new WaitForSeconds(m_currentExercise.DisplayTime));

            exercise.gameObject.SetActive(false);
            yield return(new WaitForSeconds(2.0f));

            for (int i = 0; i < m_currentExercise.Questions.Count && m_studentsList.Count > 0; ++i)
            {
                Question question = Instantiate(m_currentExercise.Questions[i], m_studentsList.Peek().transform);
                m_sManager.PlayQuestion();
                question.Init(exercise.m_elements);
                while (!question.IsAnswered())
                {
                    yield return(new WaitForFixedUpdate());
                }
                Student student     = m_studentsList.Pop();
                bool    rightAnswer = question.IsAnswerRight();
                student.CraftPotion(rightAnswer);
                if (!rightAnswer)
                {
                    studentAlive -= 1;
                }
                GameObject.Destroy(question.gameObject);
                yield return(new WaitForSeconds((rightAnswer ? 3.0f : 5.0f)));
            }
            GameObject.Destroy(exercise.gameObject);
            if (m_studentsList.Count > 0)
            {
                m_currentExercise = m_qManager.NextExercise();
            }
        }
        if (studentAlive <= 0)
        {
            m_transition.FadeToGameOver();
        }
        else if (++m_currentDay > MAX_DAYS)
        {
            m_transition.FadeToVictory();
        }
        else
        {
            m_text.text = m_days[m_currentDay - 1];
            m_transition.SetCallback(() => {
                DeleteStudents();
                NewRound();
            });
            m_transition.FadeOut();
            m_transition.FadeIn();
        }
    }