Ekosistem_Game/Assets/Script/GamaManagerJigsaw.cs

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