From 1d9d16b4c5690fa544e84149846d843acd341fe8 Mon Sep 17 00:00:00 2001 From: aishandavaniaaanisah Date: Thu, 30 May 2024 13:38:08 +0700 Subject: [PATCH] Upload files to "/" --- ControlQuest.cs | 261 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 ControlQuest.cs diff --git a/ControlQuest.cs b/ControlQuest.cs new file mode 100644 index 0000000..31096d6 --- /dev/null +++ b/ControlQuest.cs @@ -0,0 +1,261 @@ +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 + } +} \ No newline at end of file