using UnityEngine;
using UnityEngine.UI;
using TMPro;
using System.Collections;
public class MissionManager : MonoBehaviour
{
public static MissionManager instance;
[Header("UI Panel Dialog")]
public GameObject panelDialogUI;
public TextMeshProUGUI txtNamaUI;
public TextMeshProUGUI txtIsiDialogUI;
[Header("UI Tombol Pilihan")]
public Button[] tombolPilihanUI;
public TextMeshProUGUI[] txtTombolUI;
[Header("UI Skor & Tracker")]
public TextMeshProUGUI txtSkorUI;
public TextMeshProUGUI txtTrackerMisiUI;
[Header("Referensi Player")]
public PlayerMovement playerScript;
[Header("--- PENGATURAN LEVEL (GANTI DI INSPECTOR) ---")]
public int urutanLevelIni = 1;
[TextArea] public string teksIntroLevel = "Teks intro misi level ini...";
public string idMisi1 = "Barang1";
[TextArea] public string notifMisi1Selesai = "Notifikasi saat barang 1 diambil";
public string idMisi2 = "Barang2";
[TextArea] public string notifMisi2Selesai = "Notifikasi saat barang 2 diambil";
public string namaSceneSelanjutnya = "NamaSceneBerikutnya";
[Header("Pengaturan Game")]
public float kecepatanKetik = 0.02f;
public int poinGameMisi = 100;
// Status Checklist Misi
private Coroutine ketikCoroutine;
private bool sudahMisi1 = false;
private bool sudahMisi2 = false;
private int totalSkorKesopanan = 100;
private int jumlahTugasSelesai = 0;
void Awake()
{
instance = this;
}
void Start()
{
panelDialogUI.SetActive(false);
UpdateSkorUI();
UpdateTrackerUI();
MulaiIntroCerita();
}
void MulaiIntroCerita()
{
playerScript.canMove = false;
panelDialogUI.SetActive(true);
txtNamaUI.text = "INFO MISI";
CetakTeksDialog(teksIntroLevel);
SetupTombolTunggal("Siap, Mulai!");
}
public void CetakTeksDialog(string kalimat)
{
if (ketikCoroutine != null) StopCoroutine(ketikCoroutine);
ketikCoroutine = StartCoroutine(KetikKalimatAsinkron(kalimat));
}
IEnumerator KetikKalimatAsinkron(string kalimat)
{
txtIsiDialogUI.text = "";
foreach (char huruf in kalimat.ToCharArray())
{
txtIsiDialogUI.text += huruf;
yield return new WaitForSeconds(kecepatanKetik);
}
}
void SetupTombolTunggal(string teksTombol)
{
foreach (var btn in tombolPilihanUI) btn.gameObject.SetActive(false);
tombolPilihanUI[0].gameObject.SetActive(true);
txtTombolUI[0].text = teksTombol;
tombolPilihanUI[0].onClick.RemoveAllListeners();
tombolPilihanUI[0].onClick.AddListener(TutupPanelDialog);
}
public void InteraksiDenganObjek(string idObjek)
{
playerScript.canMove = false;
panelDialogUI.SetActive(true);
txtNamaUI.text = "NOTIFIKASI MISI";
string teksMisi = "";
if (idObjek == idMisi1 && !sudahMisi1)
{
sudahMisi1 = true;
jumlahTugasSelesai++;
teksMisi = notifMisi1Selesai;
}
else if (idObjek == idMisi2 && !sudahMisi2)
{
sudahMisi2 = true;
jumlahTugasSelesai++;
teksMisi = notifMisi2Selesai;
}
UpdateTrackerUI();
if (playerScript.objekTerdekat != null)
{
Destroy(playerScript.objekTerdekat.gameObject);
if (playerScript.promptInteraksiUI != null) playerScript.promptInteraksiUI.SetActive(false);
}
CetakTeksDialog(teksMisi);
SetupTombolTunggal("Lanjutkan");
}
void UpdateTrackerUI()
{
if (txtTrackerMisiUI != null)
{
if (jumlahTugasSelesai < 2)
{
txtTrackerMisiUI.text = "Tugas: " + jumlahTugasSelesai + " / 2";
txtTrackerMisiUI.color = Color.yellow;
}
else
{
txtTrackerMisiUI.text = "Semua Tugas Selesai!";
txtTrackerMisiUI.color = Color.green;
}
}
}
public void JalankanDialogNPC(DialogData data)
{
playerScript.canMove = false;
panelDialogUI.SetActive(true);
txtNamaUI.text = data.namaKarakter;
CetakTeksDialog(data.kalimatIntro);
foreach (var btn in tombolPilihanUI) btn.gameObject.SetActive(false);
for (int i = 0; i < data.pilihanJawaban.Length; i++)
{
if (i >= tombolPilihanUI.Length) break;
tombolPilihanUI[i].gameObject.SetActive(true);
txtTombolUI[i].text = data.pilihanJawaban[i].teksTombol;
int index = i;
tombolPilihanUI[i].onClick.RemoveAllListeners();
tombolPilihanUI[i].onClick.AddListener(() => MemilihJawabanDialog(data.pilihanJawaban[index]));
}
}
void MemilihJawabanDialog(OpsiPilihan opsi)
{
totalSkorKesopanan += opsi.poinKesopanan;
bool jawabanSopan = opsi.poinKesopanan > 0;
int tugasTerlewat = 0;
if (!sudahMisi1)
{
poinGameMisi -= 20;
tugasTerlewat++;
}
if (!sudahMisi2)
{
poinGameMisi -= 20;
tugasTerlewat++;
}
UpdateSkorUI();
txtNamaUI.text = "EVALUASI SIKAP & TUGAS";
string teksEvaluasi = opsi.feedbackEnding + "\n\n";
if (jawabanSopan)
teksEvaluasi += "[SIKAP SOPAN] Pintar! Kamu berinteraksi dan menjawab dengan santun.\n\n";
else
teksEvaluasi += "[KURANG SOPAN] Wah, caramu barusan kurang sopan. Poin kesopananmu berkurang.\n\n";
if (tugasTerlewat == 0)
teksEvaluasi += "[TUGAS SELESAI] Hebat! Semua misi di area ini berhasil diselesaikan.";
else if (tugasTerlewat == 1)
teksEvaluasi += "[TUGAS TERLEWAT] Kamu melupakan salah satu misi di area ini! Poin Game berkurang.";
else
teksEvaluasi += "[TUGAS TERLEWAT] Kamu tidak menyelesaikan misimu sama sekali! Poin Game banyak berkurang.";
CetakTeksDialog(teksEvaluasi);
foreach (var btn in tombolPilihanUI) btn.gameObject.SetActive(false);
tombolPilihanUI[0].gameObject.SetActive(true);
txtTombolUI[0].text = "Lanjut Level Berikutnya";
tombolPilihanUI[0].onClick.RemoveAllListeners();
tombolPilihanUI[0].onClick.AddListener(PindahKeSceneBerikutnya);
}
void PindahKeSceneBerikutnya()
{
panelDialogUI.SetActive(false);
// --- TAMBAHAN BARU: SIMPAN SKOR AKHIR UNTUK RAPORT ---
PlayerPrefs.SetInt("SkorFinalPoin", poinGameMisi);
PlayerPrefs.SetInt("SkorFinalSopan", totalSkorKesopanan);
// -----------------------------------------------------
// --- SISTEM UNLOCK LEVEL ---
int levelTerbukaSaatIni = PlayerPrefs.GetInt("ProgresRPG", 1);
if (urutanLevelIni >= levelTerbukaSaatIni)
{
PlayerPrefs.SetInt("ProgresRPG", urutanLevelIni + 1);
}
// ----------------------------
UnityEngine.SceneManagement.SceneManager.LoadScene(namaSceneSelanjutnya);
}
void UpdateSkorUI()
{
if (txtSkorUI != null)
txtSkorUI.text = "Poin Game: " + poinGameMisi + " | Sopan: " + totalSkorKesopanan;
}
public void TutupPanelDialog()
{
panelDialogUI.SetActive(false);
playerScript.canMove = true;
}
}