MIF_E31230838/Assets/Scripts/QuizOnline.cs

137 lines
4.0 KiB
C#

using UnityEngine;
using UnityEngine.Networking;
using TMPro;
using System.Collections.Generic;
using UnityEngine.SceneManagement; // Tambah ini buat baca nama Scene
public class QuizOnline : MonoBehaviour
{
[Header("Link Google Sheet (Isi Keduanya)")]
public string linkCSV_Unsur = "PASTE_LINK_SHEET_1_DISINI";
public string linkCSV_Senyawa = "PASTE_LINK_SHEET_2_DISINI";
// Variabel buat nampung link mana yang bakal dipake
private string urlFinal;
[Header("Referensi UI")]
public GameObject panelKuis;
public GameObject panelLoading;
public GameObject panelError;
public TextMeshProUGUI textError;
private Quiz quizManager;
private QuizCollection databaseOnline;
void Start()
{
quizManager = FindObjectOfType<Quiz>();
// --- LOGIKA DETEKSI SCENE ---
string namaScene = SceneManager.GetActiveScene().name;
// Cek nama scenenya mengandung kata apa?
if (namaScene.Contains("Unsur"))
{
urlFinal = linkCSV_Unsur;
Debug.Log("Mode Kuis: UNSUR (Sheet 1)");
}
else if (namaScene.Contains("Senyawa"))
{
urlFinal = linkCSV_Senyawa;
Debug.Log("Mode Kuis: SENYAWA (Sheet 2)");
}
else
{
// Default kalau nama scene gak jelas, pake unsur aja
urlFinal = linkCSV_Unsur;
}
AmbilData();
}
public void AmbilData()
{
StartCoroutine(ProsesDownload());
}
// ... (Sisanya SAMA PERSIS kayak kode lama kamu di bawah ini) ...
public void ModeOffline()
{
if(panelLoading) panelLoading.SetActive(false);
if(panelError) panelError.SetActive(false);
if(panelKuis) panelKuis.SetActive(true);
}
System.Collections.IEnumerator ProsesDownload()
{
if(panelKuis) panelKuis.SetActive(false);
if(panelError) panelError.SetActive(false);
if(panelLoading) panelLoading.SetActive(true);
if (Application.internetReachability == NetworkReachability.NotReachable)
{
MunculkanError("Yah, tidak ada koneksi internet!");
yield break;
}
// PENTING: Pake urlFinal yang sudah dipilih tadi
UnityWebRequest www = UnityWebRequest.Get(urlFinal);
yield return www.SendWebRequest();
if(panelLoading) panelLoading.SetActive(false);
if (www.result != UnityWebRequest.Result.Success)
{
MunculkanError("Gagal mengambil soal.\nCek koneksi kamu ya!");
}
else
{
ProsesCSV(www.downloadHandler.text);
if(panelKuis) panelKuis.SetActive(true);
}
}
void MunculkanError(string pesan)
{
if(panelLoading) panelLoading.SetActive(false);
if(panelError) panelError.SetActive(true);
if(textError) textError.text = pesan;
}
void ProsesCSV(string text)
{
databaseOnline = new QuizCollection();
databaseOnline.daftarSoal = new List<QuestionData>();
string[] baris = text.Split('\n');
for (int i = 1; i < baris.Length; i++)
{
string barisData = baris[i].Trim();
if (string.IsNullOrEmpty(barisData)) continue;
string[] kolom = barisData.Split(',');
if (kolom.Length < 6) continue;
QuestionData q = new QuestionData();
q.pertanyaan = kolom[0].Replace("\"", "");
q.pilihanJawaban = new string[4];
q.pilihanJawaban[0] = kolom[1].Replace("\"", "");
q.pilihanJawaban[1] = kolom[2].Replace("\"", "");
q.pilihanJawaban[2] = kolom[3].Replace("\"", "");
q.pilihanJawaban[3] = kolom[4].Replace("\"", "");
int.TryParse(kolom[5], out q.kunciJawaban);
databaseOnline.daftarSoal.Add(q);
}
if(quizManager != null && databaseOnline.daftarSoal.Count > 0)
{
quizManager.SetSoalOnline(databaseOnline);
}
}
}