ZoeAppClass/Assets/Jogos/Modulo 02/Aula 1/Game 1/Scripts/A1M2QuestionManager.cs

133 lines
3.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class A1M2QuestionManager : MonoBehaviour
{
public List<A1M2QuestionClass> 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<Animator>();
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<A1M2AnswerButton> btnList = new List<A1M2AnswerButton>();
btnList.AddRange(answerOrganizer.GetComponentsInChildren<A1M2AnswerButton>());
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();
}
}