MIF_E31230101/Assets/Script Manager/RPG_Revisi/ProfilAktivitasUI.cs

191 lines
7.3 KiB
C#

using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class ProfilAktivitasUI : MonoBehaviour
{
[Header("UI Profil")]
public GameObject panelProfil;
public TMP_Text txtIsiProfil;
public Button btnLihatProfil;
public Button btnTutupProfil;
[Header("Data Level")]
[Tooltip("Isi persis sesuai nama level di Manager, contoh: Rumah. Khusus Ending wajib ketik: ENDING")]
public string namaLevel = "Rumah";
[Header("Opsional")]
public Manager_Game_RPG managerGame;
private void Start()
{
if (managerGame == null)
managerGame = FindObjectOfType<Manager_Game_RPG>();
// Mengatur kondisi awal panel saat game dimulai
if (namaLevel.ToUpper() == "ENDING")
{
if (panelProfil != null) panelProfil.SetActive(true);
TampilkanProfil();
}
else
{
if (panelProfil != null) panelProfil.SetActive(false);
}
if (btnLihatProfil != null)
{
btnLihatProfil.onClick.RemoveAllListeners();
btnLihatProfil.onClick.AddListener(TampilkanProfil);
}
if (btnTutupProfil != null)
{
btnTutupProfil.onClick.RemoveAllListeners();
btnTutupProfil.onClick.AddListener(TutupProfil);
}
}
public void TampilkanProfil()
{
if (managerGame == null)
managerGame = FindObjectOfType<Manager_Game_RPG>();
string isiProfil;
if (namaLevel.ToUpper() == "ENDING")
{
isiProfil = HitungAkumulasiRaporAkhir();
}
else if (managerGame != null)
{
isiProfil = managerGame.BuatTeksProfilSaatIni();
}
else
{
isiProfil = AmbilProfilDariPlayerPrefs();
}
if (txtIsiProfil != null)
txtIsiProfil.text = isiProfil;
// Keamanan Kontrol: Karakter hanya dikunci jika panel background putihnya berhasil muncul
if (panelProfil != null)
{
panelProfil.SetActive(true);
if (managerGame != null && namaLevel.ToUpper() != "ENDING")
{
managerGame.SetKontrolDariUI(true);
}
}
}
public void TutupProfil()
{
if (panelProfil != null)
panelProfil.SetActive(false);
if (namaLevel.ToUpper() == "ENDING")
{
PlayerPrefs.DeleteAll();
SceneManager.LoadScene(0);
}
else
{
if (managerGame != null)
managerGame.SetKontrolDariUI(false);
}
}
private string HitungAkumulasiRaporAkhir()
{
int totalSopan = 0, totalTanggung = 0, totalDisiplin = 0, totalPeduli = 0;
int totalPelanggaran = 0;
string[] listLevel = { "Rumah", "Halaman Rumah", "Halaman Sekolah", "Ruang Kelas", "Taman Bermain", "Halaman Sekolah 2", "Rumah Kembali" };
foreach (string lvl in listLevel)
{
string prefix = "SALIM_" + lvl + "_";
totalSopan += PlayerPrefs.GetInt(prefix + "SopanSantun", 0);
totalTanggung += PlayerPrefs.GetInt(prefix + "TanggungJawab", 0);
totalDisiplin += PlayerPrefs.GetInt(prefix + "Disiplin", 0);
totalPeduli += PlayerPrefs.GetInt(prefix + "Peduli", 0);
totalPelanggaran += PlayerPrefs.GetInt(prefix + "Peringatan", 0);
}
int totalPoinSemua = totalSopan + totalTanggung + totalDisiplin + totalPeduli;
string predikatFinal = "KURANG";
string gradeFinal = "C";
if (totalPoinSemua >= 350 && totalPelanggaran <= 3) { predikatFinal = "SANGAT BAIK"; gradeFinal = "A"; }
else if (totalPoinSemua >= 200 && totalPelanggaran <= 6) { predikatFinal = "BAIK"; gradeFinal = "B"; }
return
"<b>[ RAPOR FINAL PETUALANGAN SALIM ]</b>\n" +
"Status Game : TAMAT (Selesai)\n" +
"Nilai Akhir : " + predikatFinal + " (" + gradeFinal + ")\n" +
"Total Skor : " + totalPoinSemua + " Poin\n" +
"--------------------------------------------------\n\n" +
"<b>[ TOTAL AKUMULASI POIN SIKAP ]</b>\n" +
"(-) Total Sopan Santun : " + totalSopan + " Poin\n" +
"(-) Total Tanggung Jawab: " + totalTanggung + " Poin\n" +
"(-) Total Disiplin : " + totalDisiplin + " Poin\n" +
"(-) Total Peduli : " + totalPeduli + " Poin\n" +
"--------------------------------------------------\n\n" +
"<b>[ TOTAL PELANGGARAN TERAKUMULASI ]</b>\n" +
"(!) Total Pelanggaran Aturan Map : " + totalPelanggaran + " Kali\n" +
"--------------------------------------------------\n\n" +
"<b>[ PESAN KELULUSAN ]</b>\n" +
"Selamat! Salim telah menyelesaikan seluruh petualangan dengan baik. " +
"Semoga sikap terpuji ini selalu diterapkan di kehidupan nyata ya!";
}
private string AmbilProfilDariPlayerPrefs()
{
string prefix = "SALIM_" + namaLevel + "_";
int sopan = PlayerPrefs.GetInt(prefix + "SopanSantun", 0);
int tanggung = PlayerPrefs.GetInt(prefix + "TanggungJawab", 0);
int disiplin = PlayerPrefs.GetInt(prefix + "Disiplin", 0);
int peduli = PlayerPrefs.GetInt(prefix + "Peduli", 0);
int total = PlayerPrefs.GetInt(prefix + "TotalPoin", 0);
int peringatan = PlayerPrefs.GetInt(prefix + "Peringatan", 0);
string baik = PlayerPrefs.GetString(prefix + "AktivitasBaik", "- Belum ada aktivitas selesai.");
string terlewat = PlayerPrefs.GetString(prefix + "AktivitasTerlewat", "- Tidak ada aktivitas terlewat.");
string obstacle = PlayerPrefs.GetString(prefix + "Obstacle", "- Tidak terkena obstacle.");
string predikat = PlayerPrefs.GetString(prefix + "Predikat", "BELUM BERMAIN");
string catatan = PlayerPrefs.GetString(prefix + "Catatan", "Belum ada catatan.");
string nilaiHuruf = "D";
if (predikat == "SANGAT BAIK") nilaiHuruf = "A";
else if (predikat == "BAIK") nilaiHuruf = "B";
else if (predikat == "CUKUP") nilaiHuruf = "C";
return
"<b>[ ARSIP PERKEMBANGAN SIKAP SALIM ]</b>\n" +
"Catatan Rekam : Level " + namaLevel + "\n" +
"Nilai Karakter : " + predikat + " (" + nilaiHuruf + ")\n" +
"--------------------------------------------------\n\n" +
"<b>[ DATA CAPAIAN ASPEK POIN ]</b>\n" +
"(-) Sopan Santun : " + sopan + " Poin\n" +
"(-) Tanggung Jawab: " + tanggung + " Poin\n" +
"(-) Disiplin : " + disiplin + " Poin\n" +
"(-) Peduli : " + peduli + " Poin\n" +
"--------------------------------------------------\n\n" +
"<b>[ JURNAL HISTORY JALANNYA MISI ]</b>\n" +
"(*) Aktivitas Sukses:\n" + baik + "\n\n" +
"(-) Aktivitas Terlewat:\n" + terlewat + "\n\n" +
"(!) Pelanggaran Gangguan:\n" + obstacle + "\n" +
"--------------------------------------------------\n\n" +
"<b>[ PESAN EVALUASI GURU ]</b>\n" + catatan;
}
}