48 lines
1.4 KiB
C#
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;
|
|
}
|
|
} |