using UnityEngine; using UnityEngine.UI; using TMPro; using UnityEngine.SceneManagement; public class GameManagerJigsaw : MonoBehaviour { [Header("Hubungkan Folder Wadah (TempatSusun)")] [Tooltip("Masukkan objek yang isinya Wadah_1 sampai Wadah_9")] public Transform tempatSusun; [Header("Pengaturan Waktu")] public float waktuSisa = 60f; private float waktuAwal; [Header("Sistem Timer Visual")] public Image barWaktu; public Image[] bintangTimer; [Header("Hubungkan ke Panel Hasil")] public GameObject panelHasil; public TextMeshProUGUI teksSkorAkhir; public Image[] slotBintangPanel; private bool gameSelesai = false; void Start() { waktuAwal = waktuSisa; 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) { waktuSisa -= Time.deltaTime; if (barWaktu != null) { barWaktu.fillAmount = waktuSisa / waktuAwal; if (waktuSisa <= 10f) barWaktu.color = Color.red; } // Bintang meredup di detik 40 dan 20 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; } CekKemenangan(); } else { waktuSisa = 0; GagalMain(); } } void CekKemenangan() { int jumlahTerisi = 0; // Kita cek satu-satu Wadah yang ada di dalam TempatSusun for (int i = 0; i < tempatSusun.childCount; i++) { // Karena kepingan yang nempel dimasukkan jadi anak Wadah, // kita tinggal cek apakah Wadah ini punya anak (childCount > 0) if (tempatSusun.GetChild(i).childCount > 0) { jumlahTerisi++; } } // Kalau jumlah wadah yang terisi sudah sama dengan total wadah yang ada (misal 9) if (jumlahTerisi == tempatSusun.childCount && waktuSisa < (waktuAwal - 0.5f)) { 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!"; } public void MainLagi() { SceneManager.LoadScene(SceneManager.GetActiveScene().name); } }