using UnityEngine; using UnityEngine.UI; using TMPro; // Wajib karena pakai TextMeshPro using UnityEngine.SceneManagement; public class GameManagerSliding : MonoBehaviour { [Header("Hubungkan Papan Puzzle")] public Transform papanGrid; [Header("Pengaturan Waktu")] public float waktuSisa = 60f; private float waktuAwal; [Header("Sistem Timer Visual")] public Image barWaktu; public Image[] bintangTimer; // Pastikan isi Element 0, 1, 2 di Inspector! [Header("Hubungkan ke Panel Hasil")] public GameObject panelHasil; public TextMeshProUGUI teksSkorAkhir; public Image[] slotBintangPanel; private bool gameSelesai = false; void Start() { waktuAwal = waktuSisa; // Sembunyikan panel hasil di awal dan buat semua bintang di panel jadi abu-abu if(panelHasil != null) panelHasil.SetActive(false); foreach (Image bintang in slotBintangPanel) { if(bintang != null) bintang.color = Color.gray; } } void Update() { if (gameSelesai) return; if (waktuSisa > 0) { // Waktu terus berkurang waktuSisa -= Time.deltaTime; // Animasi Bar Waktu (berubah merah kalau sisa 10 detik) if (barWaktu != null) { barWaktu.fillAmount = waktuSisa / waktuAwal; if (waktuSisa <= 10f) barWaktu.color = Color.red; } // Animasi Bintang Atas Berkurang (Gelap di sisa 20 detik dan 10 detik) if (bintangTimer.Length >= 3) { if (waktuSisa <= 40f && bintangTimer[2] != null) bintangTimer[2].color = Color.gray; if (waktuSisa <= 20f && bintangTimer[1] != null) bintangTimer[1].color = Color.gray; } // Terus Cek Apakah Harimau Sudah Utuh CekKemenangan(); } else { waktuSisa = 0; GagalMain(); } } void CekKemenangan() { int jumlahBenar = 0; // Cek satu-satu posisi kepingan harimau for (int i = 0; i < papanGrid.childCount; i++) { if (papanGrid.GetChild(i).name == "Keping_" + (i + 1) || papanGrid.GetChild(i).name == "Keping_Kosong") { // Khusus slot kosong harus di paling akhir (index 8) if (papanGrid.GetChild(i).name == "Keping_Kosong" && i != 8) continue; jumlahBenar++; } } // Kalau 9 kepingan benar dan game baru berjalan lebih dari 1 detik if (jumlahBenar == 9 && waktuSisa < (waktuAwal - 1f)) { MenangMain(); } } void MenangMain() { gameSelesai = true; if(panelHasil != null) panelHasil.SetActive(true); if(teksSkorAkhir != null) teksSkorAkhir.text = Mathf.Ceil(waktuSisa).ToString() + " Detik"; // Aturan Bintang Menang di Panel Hasil if (waktuSisa > 40f) MunculkanBintang(3); else if (waktuSisa > 20f) MunculkanBintang(2); else MunculkanBintang(1); } void MunculkanBintang(int jumlah) { for (int i = 0; i < jumlah; i++) { if(slotBintangPanel[i] != null) slotBintangPanel[i].color = Color.white; } } void GagalMain() { gameSelesai = true; if(panelHasil != null) panelHasil.SetActive(true); if(teksSkorAkhir != null) teksSkorAkhir.text = "WAKTU HABIS!"; } // Sambungkan ini ke Tombol "Main Lagi" atau "Restart" public void MainLagi() { SceneManager.LoadScene(SceneManager.GetActiveScene().name); } }