74 lines
2.2 KiB
C#
74 lines
2.2 KiB
C#
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
|
|
public class DragPotonganPuzzle : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
|
|
{
|
|
[Header("Pengaturan Target")]
|
|
public RectTransform targetPosisiBenar;
|
|
public float jarakToleransi = 70f;
|
|
|
|
[Header("Pengaturan Audio & Bos Puzzle")]
|
|
public AudioSource sumberSuara;
|
|
public AudioClip klipPasangBenar;
|
|
public AudioClip klipPasangSalah;
|
|
public PuzzleManager bosPuzzle;
|
|
|
|
private RectTransform rectTransform;
|
|
private Canvas canvas;
|
|
private Vector2 posisiAwal;
|
|
private bool sudahTerpasang = false;
|
|
|
|
void Awake()
|
|
{
|
|
rectTransform = GetComponent<RectTransform>();
|
|
canvas = GetComponentInParent<Canvas>();
|
|
}
|
|
|
|
public void OnBeginDrag(PointerEventData eventData)
|
|
{
|
|
if (sudahTerpasang) return;
|
|
|
|
posisiAwal = rectTransform.anchoredPosition;
|
|
transform.SetAsLastSibling();
|
|
}
|
|
|
|
public void OnDrag(PointerEventData eventData)
|
|
{
|
|
if (sudahTerpasang) return;
|
|
rectTransform.anchoredPosition += eventData.delta / canvas.scaleFactor;
|
|
}
|
|
|
|
public void OnEndDrag(PointerEventData eventData)
|
|
{
|
|
if (sudahTerpasang) return;
|
|
|
|
// Mengukur jarak kepingan dengan target bayangannya
|
|
float jarak = Vector2.Distance(rectTransform.anchoredPosition, targetPosisiBenar.anchoredPosition);
|
|
|
|
if (jarak <= jarakToleransi)
|
|
{
|
|
// ==========================================
|
|
// 🔥 JIKA JAWABAN BENAR!
|
|
// ==========================================
|
|
rectTransform.anchoredPosition = targetPosisiBenar.anchoredPosition;
|
|
sudahTerpasang = true;
|
|
|
|
if (sumberSuara != null && klipPasangBenar != null)
|
|
sumberSuara.PlayOneShot(klipPasangBenar);
|
|
|
|
if (bosPuzzle != null) bosPuzzle.TambahPotonganBenar();
|
|
}
|
|
else
|
|
{
|
|
// ==========================================
|
|
// ❌ JIKA JAWABAN SALAH!
|
|
// ==========================================
|
|
rectTransform.anchoredPosition = posisiAwal;
|
|
|
|
if (GameManagerHewan.instance != null)
|
|
{
|
|
GameManagerHewan.instance.JawabanSalah();
|
|
}
|
|
}
|
|
}
|
|
} |