Ekosistem_Game/Assets/Script/GameManagerSliding.cs

122 lines
3.6 KiB
C#

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);
}
}