using UnityEngine; public class SetelahGempaUI : MonoBehaviour { public GameObject canvasSetelahGempa; // Parent canvas public GameObject[] slides; // Panel-panel slide public GameObject slidePanel; // Panel container (parent dari slides) public PlayerBergerak1 kontrolPlayer; public PathVisualizer pathVisualizer; public int indexSlideUntukConfirm = 5; private int currentSlide = 0; private float waktuTerakhirNextSlide = -10f; private float delayMinimumConfirm = 0.2f; public FlowController flowController; public float jarakMax = 2f; void Start() { } public void TampilkanUI(Transform kamera) { if (canvasSetelahGempa == null || kamera == null) { Debug.LogWarning("UI atau kamera belum di-assign!"); return; } Vector3 arah = kamera.forward; Ray ray = new Ray(kamera.position, arah); RaycastHit hit; Vector3 posisiFinal; if (Physics.Raycast(ray, out hit, jarakMax)) { posisiFinal = hit.point - arah * 0.1f; } else { posisiFinal = kamera.position + arah * jarakMax; } posisiFinal.y = 1.6f; canvasSetelahGempa.transform.position = posisiFinal; Vector3 arahRotasi = posisiFinal - kamera.position; arahRotasi.y = 0; canvasSetelahGempa.transform.rotation = Quaternion.LookRotation(arahRotasi); canvasSetelahGempa.SetActive(true); ShowSlide(0); slidePanel.SetActive(true); } void ShowSlide(int index) { for (int i = 0; i < slides.Length; i++) { slides[i].SetActive(i == index); } currentSlide = index; } void NextSlide() { if (currentSlide < slides.Length - 1) { ShowSlide(currentSlide + 1); waktuTerakhirNextSlide = Time.time; } } void PrevSlide() { if (currentSlide > 0) { ShowSlide(currentSlide - 1); } } void ConfirmSlide() { if (currentSlide != indexSlideUntukConfirm) { Debug.LogWarning("❌ Confirm bukan pada slide yang ditentukan."); return; } if (Time.time - waktuTerakhirNextSlide < delayMinimumConfirm) { Debug.LogWarning("❌ Confirm terlalu cepat."); return; } slidePanel.SetActive(false); if (canvasSetelahGempa != null) canvasSetelahGempa.SetActive(false); if (kontrolPlayer != null) kontrolPlayer.Gerak = true; if (pathVisualizer != null) pathVisualizer.enabled = true; if (flowController != null) flowController.SelesaiEvakuasi(); Debug.Log("✅ Confirm selesai, player bisa bergerak, path ditampilkan."); } void Update() { if (!canvasSetelahGempa.activeSelf) return; if (Input.GetKeyDown(KeyCode.JoystickButton1) || Input.GetKeyDown(KeyCode.RightArrow) || Input.GetKeyDown(KeyCode.E)) { if (currentSlide < indexSlideUntukConfirm) NextSlide(); else if (currentSlide == indexSlideUntukConfirm && Time.time - waktuTerakhirNextSlide > delayMinimumConfirm) ConfirmSlide(); } if (Input.GetKeyDown(KeyCode.JoystickButton0) || Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.Q)) { PrevSlide(); } if (Input.GetKeyDown(KeyCode.Return)) { if (currentSlide == indexSlideUntukConfirm && Time.time - waktuTerakhirNextSlide > delayMinimumConfirm) ConfirmSlide(); } } public bool UIAktif { get { return canvasSetelahGempa != null && canvasSetelahGempa.activeSelf; } } }