MIF_E31230979/Assets/Scripts/HomePage/Button.cs

93 lines
2.7 KiB
C#

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