122 lines
3.6 KiB
C#
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);
|
|
}
|
|
} |