using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TMPro; using UnityEngine.EventSystems; public class ShowingQuest : MonoBehaviour { public TextMeshProUGUI questText; public TextMeshProUGUI[] answerTexts; public int[] randomAnswers; public ControlQuest controlQuest; int numberQuest; public int gameRound; public int[] randomQuests; [Header("Panel")] public GameObject panelResult; public GameObject panelFeedback; public TextMeshProUGUI feedbackText; public Image panelFeedColor; [Header("Point")] public TextMeshProUGUI pointText; public int point; int totalPoint; public TextMeshProUGUI textNoQuest; public TextMeshProUGUI textSoalBiasa; public GameObject scrollSoalPanjang; public TextMeshProUGUI textSoalPanjang; public enum TestType { Pretest, Posttest } public TestType testType; AudioGame audioGame; private void Awake() { audioGame = GameObject.FindGameObjectWithTag("Audio").GetComponent(); } void Start() { RandomNumberQuest(); //RandomNumberAnswer(); GenerateQuest(); } void Update() { textNoQuest.text = (numberQuest + 1).ToString(); } void RandomNumberQuest() { for (int i = 0; i < randomQuests.Length; i++) { int a = randomQuests[i]; int b = Random.Range(0, randomQuests.Length); randomQuests[i] = randomQuests[b]; randomQuests[b] = a; } } void RandomNumberAnswer() { for (int i = 0; i < randomAnswers.Length; i++) { int a = randomAnswers[i]; int b = Random.Range(0, randomAnswers.Length); randomAnswers[i] = randomAnswers[b]; randomAnswers[b] = a; } } void GenerateQuest() { RandomNumberAnswer(); string soal = controlQuest.quests[randomQuests[numberQuest]].elementQuest.quest; const int maxLengthNoScroll = 200; bool isLong = soal.Length > maxLengthNoScroll; if (isLong) { // Tampilkan scroll scrollSoalPanjang.SetActive(true); textSoalBiasa.gameObject.SetActive(false); textSoalPanjang.text = soal; } else { // Tampilkan biasa scrollSoalPanjang.SetActive(false); textSoalBiasa.gameObject.SetActive(true); textSoalBiasa.text = soal; } for (int i = 0; i < answerTexts.Length; i++) { answerTexts[i].text = controlQuest.quests[randomQuests[numberQuest]].elementQuest.answers[randomAnswers[i]]; } } public void ButtonAnswer() { TextMeshProUGUI currentAnswer = EventSystem.current.currentSelectedGameObject.transform.GetChild(0).GetComponent(); if (currentAnswer.text == controlQuest.quests[randomQuests[numberQuest]].elementQuest.answers[controlQuest.quests[randomQuests[numberQuest]].elementQuest.trueAnswer]) { feedbackText.text = "Benar!"; panelFeedColor.color = new Color32(12, 213, 7, 255); //totalPoint += point; audioGame.PlaySFX(audioGame.correct); Debug.Log("benar"); totalPoint += point; } else { feedbackText.text = "Salah!"; panelFeedColor.color = Color.red; audioGame.PlaySFX(audioGame.incorrect); Debug.Log("salah"); } panelFeedback.SetActive(true); Invoke(nameof(CloseFeedback), 1f); if (numberQuest == gameRound - 1) { //string kodeLogin = TestManager.Instance.kodeLogin; string kodeLogin = TestManager.Instance != null ? TestManager.Instance.kodeLogin : null; if (string.IsNullOrEmpty(kodeLogin)) { Debug.LogError("KodeLogin kosong! Skor tidak disimpan."); return; } DBManager.SaveTestScore(kodeLogin, totalPoint, testType); DBManager.SyncUserToFirebase(kodeLogin, success => { Debug.Log("Sync selesai: " + success); }); if (testType == TestType.Pretest) { TestManager.Instance.pretestScore = totalPoint; } else if (testType == TestType.Posttest) { TestManager.Instance.posttestScore = totalPoint; } panelResult.transform.GetComponentInChildren().text = "Selamat telah menyelesaikan semua soal!"; panelResult.SetActive(true); pointText.text = $"Total point : {totalPoint} / {point * gameRound}"; } else { numberQuest++; GenerateQuest(); } } void CloseFeedback() { panelFeedback.SetActive(false); audioGame.PlaySFX(audioGame.popUp); } }