118 lines
3.2 KiB
C#
118 lines
3.2 KiB
C#
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);
|
|
}
|
|
} |