using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using UnityEngine.SceneManagement; using System.Collections; public class MasterButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler { [Header("Navigasi Scene")] public bool aktifkanPindahScene = true; public string namaSceneTujuan; [Header("Audio SFX")] public AudioSource sfxSource; public AudioClip suaraKlik; [Header("Animasi Idle (Denyut)")] public bool gunakanDenyut = true; // Bisa dicentang atau tidak public float kekuatanDenyut = 0.05f; public float kecepatanDenyut = 3f; [Header("Efek Kenyal (Saat Klik)")] public bool gunakanEfekKenyal = true; public float kekuatanKenyal = 0.2f; public float kecepatanKenyal = 15f; private Vector3 skalaAwal; private Coroutine coroutineKenyal; void Start() { skalaAwal = transform.localScale; } void Update() { // Efek denyut hanya jalan kalau dicentang dan tidak lagi animasi klik if (gunakanDenyut && coroutineKenyal == null) { float pulse = Mathf.Sin(Time.time * kecepatanDenyut) * kekuatanDenyut; transform.localScale = skalaAwal + new Vector3(pulse, pulse, 0); } } public void OnPointerDown(PointerEventData eventData) { // Ganti bagian bunyiin suara jadi ini: if (AudioManager.instance != null && suaraKlik != null) { AudioManager.instance.PlayClick(suaraKlik); } else if (sfxSource != null && suaraKlik != null) { // Cadangan kalau AudioManager gak sengaja kehapus sfxSource.PlayOneShot(suaraKlik); } // Animasi kenyal pas ditekan if (gunakanEfekKenyal) { if (coroutineKenyal != null) StopCoroutine(coroutineKenyal); coroutineKenyal = StartCoroutine(AnimasiKenyal()); } } public void OnPointerUp(PointerEventData eventData) { // Pindah scene pas jari dilepas if (aktifkanPindahScene && !string.IsNullOrEmpty(namaSceneTujuan)) { SceneManager.LoadScene(namaSceneTujuan); } } IEnumerator AnimasiKenyal() { float timer = 0; float durasi = 0.4f; while (timer < durasi) { timer += Time.deltaTime; float damping = Mathf.Lerp(1, 0, timer / durasi); float sin = Mathf.Sin(timer * kecepatanKenyal) * kekuatanKenyal * damping; transform.localScale = new Vector3(skalaAwal.x + sin, skalaAwal.y - sin, skalaAwal.z); yield return null; } transform.localScale = skalaAwal; coroutineKenyal = null; // Selesai, balik ke mode denyut (kalau aktif) } }