using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class A1M2QuestionManager : MonoBehaviour { public List questions; public static A1M2QuestionManager instance; public AudioSource thisAS; public Image bgImage; public Transform answerOrganizer; public Text questionTxt; private int currentIndex; private Animator anim; private void Awake() { instance = this; anim = GetComponent(); LoadNextQuestion(); if (GameControl.instance != null) { GameControl.instance.StartedGame(); } } public void LoadNextQuestion() { if (questions == null || questions.Count <= currentIndex) return; if (questions[currentIndex].background && bgImage != null) { bgImage.sprite = questions[currentIndex].background; } if (questionTxt != null) { questionTxt.text = questions[currentIndex].questionString; } SetupAnswers(); } public void SetupAnswers() { if (answerOrganizer == null) return; List btnList = new List(); btnList.AddRange(answerOrganizer.GetComponentsInChildren()); for(int i = 0; i < btnList.Count; i++) { if (questions[currentIndex].answers.Count > i) { btnList[i].SetupThis(questions[currentIndex].answers[i]); } } PlayAudio(); } public void CorrectAnswer() { if (anim != null) { anim.SetTrigger("Correct"); } if (A10D1AudioSystem.instance != null) { A10D1AudioSystem.instance.Correct(); } currentIndex++; if (currentIndex < questions.Count) { StartCoroutine(WaitToNext()); } else { if (GameControl.instance != null) { GameControl.instance.FinishGame(); } } } public void WrongAnswer() { if (anim != null) { anim.SetTrigger("Wrong"); } if (A10D1AudioSystem.instance != null) { A10D1AudioSystem.instance.Wrong(); } } public void PlayAudio() { if (thisAS == null || questions[currentIndex].questionAC == null) return; if (thisAS.isPlaying) { StartCoroutine(QueueSound(questions[currentIndex].questionAC)); } else { thisAS.PlayOneShot(questions[currentIndex].questionAC); } } IEnumerator QueueSound(AudioClip toPlay) { while(thisAS != null && thisAS.isPlaying) { yield return new WaitForEndOfFrame(); } if (thisAS != null && toPlay != null) { thisAS.PlayOneShot(toPlay); } } IEnumerator WaitToNext() { yield return new WaitForSecondsRealtime(1); LoadNextQuestion(); } }