Ekosistem_Game/Assets/Script/ManagerSuaraPilih.cs

127 lines
3.8 KiB
C#

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
public class ManagerSuaraPilih : MonoBehaviour
{
[Header("--- SPEAKER UTAMA ---")]
public AudioSource speakerUtama;
[Header("--- PENGATURAN WAKTU ---")]
public float waktuTungguSapaan = 1.0f;
[Header("--- PENGATURAN PINDAH SCENE ---")]
public string namaSceneBermain = "GamePilihan"; // GANTI SESUAI NAMA SCENE BOS
[Header("--- SUARA KLIK UMUM ---")]
public AudioClip kasetKlikUmum;
[Header("--- PANEL 1: PILIH MODE ---")]
public AudioClip sapaanAwalMode;
public AudioClip kasetKlikBelajar;
public AudioClip kasetKlikBermain;
[Header("--- PANEL 2: PILIH MATERI ---")]
public AudioClip sapaanPilihMateri;
public AudioClip kasetMateriEkosistem;
public AudioClip kasetMateriAbiotikBiotik;
public AudioClip kasetMateriSimbiosis;
void Start()
{
StartCoroutine(JedaSapaanAwal());
}
IEnumerator JedaSapaanAwal()
{
yield return new WaitForSeconds(waktuTungguSapaan);
if (speakerUtama != null && sapaanAwalMode != null)
{
speakerUtama.PlayOneShot(sapaanAwalMode);
}
}
public void TombolKlikUmum()
{
if (speakerUtama != null && kasetKlikUmum != null) speakerUtama.PlayOneShot(kasetKlikUmum);
}
public void TombolBelajar()
{
PutarSuara(kasetKlikBelajar);
StartCoroutine(JedaSuaraMateri());
}
// =====================================
// TOMBOL BERMAIN (PINDAH SCENE INSTAN)
// =====================================
public void TombolBermain()
{
// 1. Putar suara pakai jurus abadi biar ngikut pindah scene
PutarSuaraAbadi(kasetKlikBermain);
// 2. Langsung sikat pindah scene tanpa nunggu!
SceneManager.LoadScene(namaSceneBermain);
}
// =====================================
// JURUS SAKTI: SPEAKER GAIB ABADI
// =====================================
private void PutarSuaraAbadi(AudioClip kaset)
{
if (kaset == null) return;
// Bikin objek speaker gaib baru khusus muter suara ini
GameObject speakerGaib = new GameObject("SpeakerGaib_" + kaset.name);
AudioSource sumberSuara = speakerGaib.AddComponent<AudioSource>();
sumberSuara.clip = kaset;
sumberSuara.Play();
// Jadikan ABADI biar suaranya ikut nyebrang ke scene sebelah
DontDestroyOnLoad(speakerGaib);
// Hancurkan otomatis kalau suaranya udah beres durasinya
Destroy(speakerGaib, kaset.length);
}
// =====================================
// FUNGSI UNTUK TOMBOL DI PANEL 2
// =====================================
public void TombolEkosistem() { PutarSuara(kasetMateriEkosistem); }
public void TombolAbiotikBiotik() { PutarSuara(kasetMateriAbiotikBiotik); }
public void TombolSimbiosis() { PutarSuara(kasetMateriSimbiosis); }
private void PutarSuara(AudioClip kaset)
{
if (speakerUtama != null && kaset != null)
{
speakerUtama.Stop();
speakerUtama.PlayOneShot(kaset);
}
}
IEnumerator JedaSuaraMateri()
{
yield return new WaitForSeconds(1.0f);
if (speakerUtama != null && sapaanPilihMateri != null)
{
speakerUtama.PlayOneShot(sapaanPilihMateri);
}
}
// =====================================
// TAMBAHAN BARU: REM DARURAT (PANGGIL DI TOMBOL KEMBALI)
// =====================================
public void HentikanSuara()
{
// 1. Batalkan semua hitungan mundur (biar suara "Pilih materi" batal muncul)
StopAllCoroutines();
// 2. Matikan suara yang sedang ngoceh di speaker utama
if (speakerUtama != null)
{
speakerUtama.Stop();
}
}
}