113 lines
3.8 KiB
C#
113 lines
3.8 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
using System;
|
|
|
|
public class InputUserController : MonoBehaviour
|
|
{
|
|
public TMP_InputField inputNama;
|
|
public TMP_InputField inputKelas;
|
|
public TMP_InputField inputAbsen;
|
|
public TextMeshProUGUI infoText;
|
|
|
|
public void OnSubmitClicked()
|
|
{
|
|
if (string.IsNullOrWhiteSpace(inputNama.text) ||
|
|
string.IsNullOrWhiteSpace(inputKelas.text) ||
|
|
string.IsNullOrWhiteSpace(inputAbsen.text))
|
|
{
|
|
infoText.text = "Semua kolom wajib diisi.";
|
|
return;
|
|
}
|
|
|
|
if (!int.TryParse(inputAbsen.text.Trim(), out int absen))
|
|
{
|
|
infoText.text = "Nomor absen harus berupa angka.";
|
|
return;
|
|
}
|
|
|
|
string namaInput = inputNama.text.Trim();
|
|
string namaFormat = FormatNama(namaInput);
|
|
if (namaInput != namaFormat)
|
|
{
|
|
infoText.text = "Nama harus menggunakan format Title Case.\nContoh: Budi Setiawan";
|
|
return;
|
|
}
|
|
|
|
string username = namaFormat;
|
|
string kelas = inputKelas.text.Trim().ToUpper();
|
|
string absenStr = absen.ToString();
|
|
string kodeLogin = $"{username}_{kelas}_{absenStr}";
|
|
|
|
if (!DBManager.IsConnectedToInternet())
|
|
{
|
|
infoText.text = "Tidak ada koneksi internet.";
|
|
return;
|
|
}
|
|
|
|
infoText.text = "Mencoba login...";
|
|
|
|
// Cek apakah user sudah ada di Firebase
|
|
DBManager.SyncUserToFirebase(kodeLogin, success =>
|
|
{
|
|
if (success)
|
|
{
|
|
// Jika user ada, ambil semua datanya dari Firebase
|
|
TestManager.Instance.LoadAllUserDataFromFirebase(kodeLogin, loaded =>
|
|
{
|
|
if (loaded)
|
|
{
|
|
infoText.text = "Login berhasil!";
|
|
if (TestManager.Instance.pretestScore > 0)
|
|
SceneManager.LoadScene("Main Menu");
|
|
else
|
|
SceneManager.LoadScene("Pretest");
|
|
}
|
|
else
|
|
{
|
|
infoText.text = "Gagal memuat data user dari Firebase.";
|
|
}
|
|
});
|
|
}
|
|
else
|
|
{
|
|
infoText.text = "Akun tidak ditemukan. Mencoba mendaftarkan user baru...";
|
|
|
|
// Buat akun baru di Firebase
|
|
DBManager.CreateUser(kodeLogin, username, kelas, absenStr, created =>
|
|
{
|
|
if (created)
|
|
{
|
|
// Simpan progress level awal (1) untuk semua materi
|
|
if (LevelControl.Instance != null)
|
|
{
|
|
foreach (var pair in LevelControl.Instance.materiLevelPairs)
|
|
{
|
|
DBManager.SaveUnlockedLevel(kodeLogin, pair.materiName, 1);
|
|
}
|
|
}
|
|
|
|
// Set user data di TestManager
|
|
TestManager.Instance.SetUserData(username, 0, 0, kelas, absenStr);
|
|
infoText.text = "Pendaftaran berhasil. Lanjut ke Pretest...";
|
|
SceneManager.LoadScene("Pretest");
|
|
}
|
|
else
|
|
{
|
|
infoText.text = "Gagal mendaftarkan user. Periksa koneksi internet.";
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
private string FormatNama(string nama)
|
|
{
|
|
TextInfo textInfo = new CultureInfo("id-ID", false).TextInfo;
|
|
return textInfo.ToTitleCase(nama.ToLower());
|
|
}
|
|
}
|