boredom. / Assets / Scripts / Tasks / Homework / Homework.cs
Homework.cs
Raw
using System;
using System.Collections.Generic;
using UnityEngine;

[Serializable]
public class Homework {

    [Header("Questions")]
    [SerializeField] private int questionsPerQuiz;
    [SerializeField] private HomeworkQuestion[] questions;
    private HomeworkQuestion[] currQuestions;

    [Header("Checking")]
    [SerializeField] private Color correctColor;
    [SerializeField] private string correctMarker;
    [SerializeField] private Color incorrectColor;
    [SerializeField] private string incorrectMarker;
    [SerializeField] private float markerFadeDuration;

    public void Initialize() {

        foreach (HomeworkQuestion question in questions)
            question.Initialize();

        if (questionsPerQuiz > questions.Length)
            Debug.LogError("Homework:Initialize - Question per quiz exceeds total questions.");

    }

    public HomeworkQuestion[] GetRandomQuestions() {

        List<HomeworkQuestion> availableQuestions = new List<HomeworkQuestion>(questions);
        currQuestions = new HomeworkQuestion[questionsPerQuiz];

        for (int i = 0; i < questionsPerQuiz; i++) {

            int randIndex = UnityEngine.Random.Range(0, availableQuestions.Count);
            currQuestions[i] = availableQuestions[randIndex];
            availableQuestions.RemoveAt(randIndex);

        }

        return currQuestions;

    }

    public bool ValidateAnswers(List<HomeworkQuestionUI> questionUIs) {

        for (int i = 0; i < questionUIs.Count; i++)
            if (questionUIs[i].GetSelectedIndex() == -1) // a question is unanswered
                return false;

        bool allCorrect = true;

        // validate answers
        for (int i = 0; i < currQuestions.Length; i++) {

            if (currQuestions[i].IsCorrect(questionUIs[i].GetSelectedIndex())) {

                questionUIs[i].SetScoreMarker(correctMarker, correctColor, markerFadeDuration);

            } else {

                questionUIs[i].SetScoreMarker(incorrectMarker, incorrectColor, markerFadeDuration);
                allCorrect = false;

            }
        }

        return allCorrect;

    }
}