139 lines
3.7 KiB
C#
139 lines
3.7 KiB
C#
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text.RegularExpressions;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class QuizController : MonoBehaviour {
|
|
|
|
public GameObject[] answers;
|
|
|
|
public Text counterText;
|
|
|
|
public Text scoreText;
|
|
|
|
public Text questionText;
|
|
|
|
public Button btnNextQuestion;
|
|
|
|
private float counterValue;
|
|
|
|
private const int numberOfAnswers = 4;
|
|
|
|
private const int scoreCorrectAnswer = 10;
|
|
|
|
private const int scoreIncorrectAnswer = -15;
|
|
|
|
private const int scoreTimedOut = 0;
|
|
|
|
private const int counterInitialValue = 10;
|
|
|
|
private const int displayAnswersCounterValue = 3;
|
|
|
|
private int scoreValue = 0;
|
|
|
|
private int questionIdx = 0;
|
|
|
|
private List<int> selectedAnswers;
|
|
|
|
List<Question> questions = new List<Question>() {
|
|
new Question("1. Neki od ovih prozora imaju 2-3 puta manje toplotnih gubitaka za razliku od drugih, koji su to?", new int[] {1, 3}),
|
|
new Question("2. Na jedan od načina možete uštedjeti i do 10 litara vode po osobi dnevno, uz koji predmet?", new int[] {2}),
|
|
};
|
|
|
|
// Use this for initialization
|
|
void Start () {
|
|
selectedAnswers = new List<int>();
|
|
counterValue = counterInitialValue;
|
|
UpdateScene();
|
|
UpdateCounter();
|
|
UpdateScore();
|
|
btnNextQuestion.GetComponent<Button>().onClick.AddListener(LoadNextQuestion);
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
if (counterValue > 0)
|
|
{
|
|
counterValue -= Time.deltaTime;
|
|
UpdateCounter();
|
|
}
|
|
else
|
|
{
|
|
LoadNextQuestion();
|
|
counterValue = counterInitialValue;
|
|
}
|
|
|
|
if (Input.GetMouseButtonDown(0))
|
|
{
|
|
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
|
RaycastHit hit;
|
|
|
|
if (Physics.Raycast(ray, out hit, 100))
|
|
{
|
|
Debug.Log(hit.transform.gameObject.name);
|
|
int answerIdx = GetAnswerIdx(hit.transform.gameObject.name) - numberOfAnswers * questionIdx;
|
|
if (!selectedAnswers.Contains(answerIdx))
|
|
selectedAnswers.Add(answerIdx);
|
|
}
|
|
}
|
|
}
|
|
|
|
void LoadNextQuestion()
|
|
{
|
|
scoreValue += GetScore();
|
|
UpdateScore();
|
|
questionIdx = (questionIdx + 1) % 2;
|
|
selectedAnswers.Clear();
|
|
UpdateScene();
|
|
counterValue = counterInitialValue;
|
|
}
|
|
|
|
private void UpdateScore()
|
|
{
|
|
scoreText.text = scoreValue.ToString();
|
|
}
|
|
|
|
private void UpdateCounter()
|
|
{
|
|
counterText.text = counterValue.ToString("f0");
|
|
}
|
|
|
|
private void UpdateScene()
|
|
{
|
|
// Set new question
|
|
questionText.text = questions[questionIdx].getQuestionText();
|
|
// Set right answers
|
|
for(int i = 0; i < answers.Length; i++)
|
|
{
|
|
if (i >= numberOfAnswers * questionIdx && i < numberOfAnswers * (questionIdx + 1))
|
|
{
|
|
Debug.Log("Set active: " + i);
|
|
answers[i].SetActive(true);
|
|
}
|
|
else
|
|
answers[i].SetActive(false);
|
|
}
|
|
}
|
|
|
|
private int GetAnswerIdx(string gameObjName)
|
|
{
|
|
string resultString = Regex.Match(gameObjName, @"\d+").Value;
|
|
return System.Int32.Parse(resultString);
|
|
}
|
|
|
|
private int GetScore() {
|
|
// Didn't try
|
|
if (selectedAnswers.Count == 0)
|
|
return scoreTimedOut;
|
|
// Correct answer
|
|
if (selectedAnswers.SequenceEqual(new List<int>(questions[questionIdx].getCorrectAnswers())))
|
|
return scoreCorrectAnswer;
|
|
else
|
|
return scoreIncorrectAnswer;
|
|
|
|
}
|
|
}
|