Ekosistem_Game/Assets/Script/KepinganGeser.cs

48 lines
1.4 KiB
C#

using UnityEngine;
using UnityEngine.UI;
public class KepinganGeser : MonoBehaviour
{
[Header("Masukkan Keping_Kosong ke kotak ini:")]
public Transform ruangKosong;
void Start()
{
// Sihir otomatis: Bos nggak perlu repot klik "+" di Inspector untuk tombolnya!
GetComponent<Button>().onClick.AddListener(Geser);
}
public void Geser()
{
// Ambil nomor urut posisi kepingan ini dan ruang kosong di dalam PapanGrid
int indexSaya = transform.GetSiblingIndex();
int indexKosong = ruangKosong.GetSiblingIndex();
// Cek apakah posisi kepingan ini bersebelahan persis dengan ruang kosong
if (BisaGeser(indexSaya, indexKosong))
{
// TUKAR POSISI (GESER)!
transform.SetSiblingIndex(indexKosong);
ruangKosong.SetSiblingIndex(indexSaya);
}
}
bool BisaGeser(int saya, int kosong)
{
int jarak = Mathf.Abs(saya - kosong);
// Jika Atas / Bawah (Jaraknya pasti 3 kotak di grid 3x3)
if (jarak == 3) return true;
// Jika Kiri / Kanan (Jaraknya 1 kotak, tapi harus di baris yang sama)
if (jarak == 1)
{
int barisSaya = saya / 3;
int barisKosong = kosong / 3;
if (barisSaya == barisKosong) return true;
}
// Kalau menyilang atau posisinya jauh, kepingan nggak bisa digeser
return false;
}
}