Ekosistem_Game/Assets/Script/ManagerSuaraBermain.cs

81 lines
2.2 KiB
C#

using UnityEngine;
using System.Collections;
public class ManagerSuaraBermain : MonoBehaviour
{
[Header("--- SPEAKER UTAMA ---")]
public AudioSource speakerUtama;
// Variabel static ini kunci ingatannya bos
public static bool sudahPernahMenyapa = false;
[Header("--- PENGATURAN WAKTU ---")]
public float waktuTungguSapaan = 1.0f;
[Header("--- SUARA SAPAAN AWAL ---")]
public AudioClip sapaanPilihGame;
[Header("--- SUARA KLIK UMUM ---")]
public AudioClip kasetKlikUmum;
void Start()
{
// Narator cuma bunyi kalau belum pernah nyapa di sesi ini
if (!sudahPernahMenyapa)
{
StartCoroutine(JedaSapaanAwal());
sudahPernahMenyapa = true;
}
}
IEnumerator JedaSapaanAwal()
{
yield return new WaitForSeconds(waktuTungguSapaan);
if (speakerUtama != null && sapaanPilihGame != null)
{
speakerUtama.PlayOneShot(sapaanPilihGame);
}
}
// ==========================================
// FUNGSI BARU: MATIKAN SUARA MENU SECARA PAKSA
// ==========================================
public void HentikanPaksaSuara()
{
StopAllCoroutines();
if (speakerUtama != null)
{
speakerUtama.Stop();
}
}
// ==========================================
// MODIFIKASI: RESET SAAT KEMBALI KE MENU PILIH
// ==========================================
public void TombolKlikUmum()
{
if (speakerUtama != null && kasetKlikUmum != null)
{
speakerUtama.PlayOneShot(kasetKlikUmum);
}
// --- JURUS RESET BOS ---
// Kalau bos pencet tombol ini buat balik ke Scene Pilih Level,
// kita set jadi false lagi biar nanti pas masuk ke scene bermain dia nyapa lagi.
sudahPernahMenyapa = false;
}
public void PutarSuaraStage(AudioClip kaset)
{
if (kaset == null) return;
GameObject speakerGaib = new GameObject("SpeakerGaib_" + kaset.name);
AudioSource sumberSuara = speakerGaib.AddComponent<AudioSource>();
sumberSuara.clip = kaset;
sumberSuara.Play();
DontDestroyOnLoad(speakerGaib);
Destroy(speakerGaib, kaset.length);
}
}