using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.UIElements; using Button = UnityEngine.UI.Button; using Image = UnityEngine.UI.Image; public class ControlQuest : MonoBehaviour { public AudioSfx audioSfx; [System.Serializable] public class Soals { [System.Serializable] public class ElementSoals // nomer 1 dst { public Sprite spriteSoal; public Sprite[] spriteJawabans; public int kunciJawaban; //kunci jwb dlm int untuk array } public ElementSoals elementSoals; } public Soals[] soals; [Header("Random Index")] //random index public int[] indexRandomSoal; public int[] indexRandomJawaban; public int totalSoal; //total soal yang akan dipakai public int urutanSoal; int jawabanBenar; [Header("UI soal dan jawaban")] public Image imageSoal; public Image[] imageJawabans; [Header("voice over")] public AudioSource audioSourceVO; public AudioClip[] audioClipVOs; public Button buttonPlayVO; [Header("score")] public Text textScore; //di game public Text textScoreAkhir; //di akhir end game public int increaseScore; //score yg ditambahkan public int decreaseScore; public int totalScoreAkhir; public GameObject panelEndGame; [Header("kondisi next soal")] public bool isJawabanHarusBenar; [Tooltip("hanya untuk debug")] public bool isJawabanBenar; [Header("sistem hasil jawaban")] public bool isHasilJawab; public GameObject panelHasilJawab; public Image imagecharacterhasiljawab; public Sprite[] spritecharacterhasiljawab; int indexHasilJawab; public float waktuTungguHasilJawab; void Start() { GenerateIndexRandomSoal(); GenerateIndexRandomJawaban(); GenerateSoal(); } void Update() { } void ReactiveButtonVO() { buttonPlayVO.interactable = true; } public void ButtonPlayVoiceOver() { if (audioSourceVO.isPlaying == false) { audioSourceVO.clip = audioClipVOs[indexRandomSoal[urutanSoal]]; audioSourceVO.Play(); buttonPlayVO.interactable = false; Invoke("ReactiveButtonVO", audioClipVOs[indexRandomSoal[urutanSoal]].length); } } void DecreaseScore() { if (totalScoreAkhir - decreaseScore >= 0) { totalScoreAkhir -= decreaseScore; } else { Debug.Log("hasil negatif"); totalScoreAkhir = 0; } textScore.text = totalScoreAkhir.ToString(); } void IncreaseScore() { totalScoreAkhir += increaseScore; textScore.text = totalScoreAkhir.ToString(); } public void ButtonJawabans(int indexJawaban) { if (indexRandomJawaban[indexJawaban] == jawabanBenar) { Debug.Log("benar"); IncreaseScore(); isJawabanBenar = true; indexHasilJawab = 0; audioSfx.SoundSfxBenar(); } else { DecreaseScore(); Debug.Log("salah"); indexHasilJawab = 1; audioSfx.SoundSfxSalah(); } if(isJawabanHarusBenar == true) //kontrolkondisi { if(isJawabanBenar == true) //cek kondisi { if(isHasilJawab == false) { GenerateNextSoal(); } else //true { HasilJawab(); } } } else { if(isHasilJawab == false) { GenerateNextSoal(); } else { HasilJawab(); } } } void TutupHasilJawab() { panelHasilJawab.SetActive(false); GenerateNextSoal() ; } void HasilJawab() { panelHasilJawab.SetActive(true); imagecharacterhasiljawab.sprite = spritecharacterhasiljawab[indexHasilJawab]; Invoke("TutupHasilJawab", waktuTungguHasilJawab); } void GenerateNextSoal() { if (urutanSoal < totalSoal - 1) //check kondisi { urutanSoal += 1; //menambah urutan soal/lanjut GenerateSoal(); //GenerateIndexRandomJawaban(); isJawabanBenar = false; } else { Debug.Log("Finish Game"); panelEndGame.SetActive(true); textScoreAkhir.text = totalScoreAkhir.ToString(); } } void GenerateIndexRandomJawaban() { indexRandomJawaban = new int[2]; //opsi jawaban ab for (int i = 0; i < indexRandomJawaban.Length; i++) { indexRandomJawaban[i] = i; } for (int i = 0; i < indexRandomJawaban.Length; i++) { int a = indexRandomJawaban[i]; //int b = Random.Range(0, indexRandomJawaban.Length); //indexRandomJawaban[i] = indexRandomJawaban[b]; //indexRandomJawaban[b] = a; } } void GenerateIndexRandomSoal() { indexRandomSoal = new int[soals.Length]; //create slot array for (int i = 0; i < indexRandomSoal.Length; i++) //fill slot array dengan int { indexRandomSoal[i] = i; } for (int i = 0; i < indexRandomSoal.Length; i++) //random index { int a = indexRandomSoal[i]; int b = Random.Range(0, indexRandomSoal.Length); indexRandomSoal[i] = indexRandomSoal[b]; indexRandomSoal[b] = a; } } void GenerateSoal() { //update soal imageSoal.sprite = soals[indexRandomSoal[urutanSoal]].elementSoals.spriteSoal; //update jawaban for (int i = 0; i < 2; i++) // opsi jawab ab { imageJawabans[i].sprite = soals[indexRandomSoal[urutanSoal]].elementSoals.spriteJawabans[indexRandomJawaban[i]]; } //jawaban benar jawabanBenar = soals[indexRandomSoal[urutanSoal]].elementSoals.kunciJawaban; //mengambil kunci jawaban } }