2026-06-02 23:14:19 +07:00
|
|
|
using UnityEngine;
|
|
|
|
|
using UnityEngine.SceneManagement;
|
2026-06-03 04:32:58 +07:00
|
|
|
using System.Collections;
|
2026-06-06 00:00:27 +07:00
|
|
|
using Hallucinate.Audio; // Import namespace hệ thống âm thanh của bạn
|
2026-06-02 23:14:19 +07:00
|
|
|
|
|
|
|
|
public class FinishGate : MonoBehaviour
|
|
|
|
|
{
|
2026-06-03 04:32:58 +07:00
|
|
|
[Header("Cài đặt UI Chính")]
|
2026-06-04 17:49:04 +07:00
|
|
|
public GameObject winPanel;
|
2026-06-06 00:00:27 +07:00
|
|
|
public GameObject warningUI; // THÔNG BÁO: "Bạn chưa nhặt rương nào!"
|
2026-06-03 04:32:58 +07:00
|
|
|
|
2026-06-06 00:00:27 +07:00
|
|
|
[Header("Cài đặt Sao trên HUD (Giao diện chính lúc đang chạy)")]
|
2026-06-04 17:49:04 +07:00
|
|
|
public GameObject hudStar1;
|
|
|
|
|
public GameObject hudStar2;
|
|
|
|
|
public GameObject hudStar3;
|
|
|
|
|
|
2026-06-06 00:00:27 +07:00
|
|
|
[Header("Cài đặt Sao trên Bảng Win (Kết thúc game)")]
|
2026-06-04 17:49:04 +07:00
|
|
|
public GameObject winStar1;
|
|
|
|
|
public GameObject winStar2;
|
|
|
|
|
public GameObject winStar3;
|
2026-06-02 23:14:19 +07:00
|
|
|
|
2026-06-04 23:01:39 +07:00
|
|
|
[Header("Cài đặt Âm thanh")]
|
|
|
|
|
public string winSound = "UI_Win";
|
|
|
|
|
public string warningSound = "UI_Warning";
|
|
|
|
|
public string clickSound = "UI_Click";
|
|
|
|
|
|
2026-06-06 00:00:27 +07:00
|
|
|
[Header("Cấu hình Tag Hệ thống")]
|
|
|
|
|
[Tooltip("Tag của Người chơi/NPC dùng để kích hoạt Gate")]
|
|
|
|
|
public string playerTag = "Player";
|
|
|
|
|
|
2026-06-02 23:14:19 +07:00
|
|
|
private void Start()
|
|
|
|
|
{
|
2026-06-06 00:00:27 +07:00
|
|
|
// Đảm bảo thời gian chạy bình thường khi load màn
|
2026-06-03 04:32:58 +07:00
|
|
|
Time.timeScale = 1f;
|
|
|
|
|
|
2026-06-06 00:00:27 +07:00
|
|
|
// Ẩn các bảng UI khi vừa vào game
|
2026-06-03 04:32:58 +07:00
|
|
|
if (winPanel != null) winPanel.SetActive(false);
|
|
|
|
|
if (warningUI != null) warningUI.SetActive(false);
|
|
|
|
|
|
2026-06-06 00:00:27 +07:00
|
|
|
// Reset trạng thái sao về 0 lúc bắt đầu
|
2026-06-04 17:49:04 +07:00
|
|
|
UpdateStarsUI(0);
|
|
|
|
|
UpdateWinStarsUI(0);
|
2026-06-02 23:14:19 +07:00
|
|
|
}
|
2026-06-03 04:32:58 +07:00
|
|
|
|
2026-06-02 23:14:19 +07:00
|
|
|
private void OnTriggerEnter(Collider other)
|
|
|
|
|
{
|
2026-06-06 00:00:27 +07:00
|
|
|
// KIỂM TRA 1: Phải đúng Tag quy định (Nên để là "Player")
|
|
|
|
|
if (other.CompareTag(playerTag))
|
2026-06-02 23:14:19 +07:00
|
|
|
{
|
2026-06-06 00:00:27 +07:00
|
|
|
// KIỂM TRA 2: Tìm linh hoạt component PlayerInventory ở cả con và cha
|
2026-06-04 17:49:04 +07:00
|
|
|
PlayerInventory player = other.GetComponentInChildren<PlayerInventory>();
|
|
|
|
|
if (player == null) player = other.GetComponentInParent<PlayerInventory>();
|
|
|
|
|
|
|
|
|
|
if (player != null)
|
2026-06-03 04:32:58 +07:00
|
|
|
{
|
2026-06-06 00:00:27 +07:00
|
|
|
// TRƯỜNG HỢP 1: Đã đi đến cuối bản đồ nhặt được ít nhất 1 cổ vật -> CHIẾN THẮNG
|
2026-06-04 17:49:04 +07:00
|
|
|
if (player.treasuresCollected > 0)
|
|
|
|
|
{
|
2026-06-06 00:00:27 +07:00
|
|
|
Debug.Log($"<color=green>[Gate]</color> VỀ ĐÍCH HỢP LỆ! Hoàn thành với {player.treasuresCollected} cổ vật.");
|
2026-06-04 17:49:04 +07:00
|
|
|
WinGame(player.treasuresCollected);
|
|
|
|
|
}
|
2026-06-06 00:00:27 +07:00
|
|
|
// TRƯỜNG HỢP 2: Đi qua cổng lúc bắt đầu game (chưa nhặt được gì) -> HIỆN CẢNH BÁO
|
2026-06-04 17:49:04 +07:00
|
|
|
else
|
|
|
|
|
{
|
2026-06-06 00:00:27 +07:00
|
|
|
Debug.Log("<color=yellow>[Gate]</color> NPC/Player chưa nhặt cổ vật! Hãy chạy đến cuối map.");
|
2026-06-04 17:49:04 +07:00
|
|
|
StopAllCoroutines();
|
|
|
|
|
StartCoroutine(ShowTempUI(warningUI));
|
|
|
|
|
}
|
2026-06-03 04:32:58 +07:00
|
|
|
}
|
2026-06-02 23:14:19 +07:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-06 00:00:27 +07:00
|
|
|
// Hàm public được gọi từ TreasureItem để cập nhật HUD ngay lập tức khi vừa nhặt đồ
|
2026-06-04 17:49:04 +07:00
|
|
|
public void UpdateStarsUI(int count)
|
|
|
|
|
{
|
2026-06-06 00:00:27 +07:00
|
|
|
if (hudStar1 != null) hudStar1.SetActive(count >= 1);
|
|
|
|
|
if (hudStar2 != null) hudStar2.SetActive(count >= 2);
|
|
|
|
|
if (hudStar3 != null) hudStar3.SetActive(count >= 3);
|
2026-06-04 17:49:04 +07:00
|
|
|
}
|
|
|
|
|
|
2026-06-06 00:00:27 +07:00
|
|
|
// Hàm nội bộ cập nhật số sao trên bảng kết quả tổng kết
|
|
|
|
|
private void UpdateWinStarsUI(int count)
|
2026-06-03 04:32:58 +07:00
|
|
|
{
|
2026-06-06 00:00:27 +07:00
|
|
|
if (winStar1 != null) winStar1.SetActive(count >= 1);
|
|
|
|
|
if (winStar2 != null) winStar2.SetActive(count >= 2);
|
|
|
|
|
if (winStar3 != null) winStar3.SetActive(count >= 3);
|
2026-06-03 04:32:58 +07:00
|
|
|
}
|
|
|
|
|
|
2026-06-06 00:00:27 +07:00
|
|
|
private void WinGame(int count)
|
2026-06-02 23:14:19 +07:00
|
|
|
{
|
2026-06-04 17:49:04 +07:00
|
|
|
if (winPanel != null)
|
|
|
|
|
{
|
|
|
|
|
winPanel.SetActive(true);
|
2026-06-06 00:00:27 +07:00
|
|
|
UpdateWinStarsUI(count);
|
2026-06-04 17:49:04 +07:00
|
|
|
}
|
2026-06-04 23:01:39 +07:00
|
|
|
|
2026-06-06 00:00:27 +07:00
|
|
|
// Phát âm thanh thắng cuộc toàn cục
|
|
|
|
|
AudioManager.PlayGlobal(winSound);
|
2026-06-02 23:14:19 +07:00
|
|
|
|
2026-06-06 00:00:27 +07:00
|
|
|
// Dừng thời gian game và mở khóa chuột
|
2026-06-02 23:14:19 +07:00
|
|
|
Time.timeScale = 0f;
|
|
|
|
|
Cursor.lockState = CursorLockMode.None;
|
|
|
|
|
Cursor.visible = true;
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-06 00:00:27 +07:00
|
|
|
private IEnumerator ShowTempUI(GameObject ui)
|
2026-06-04 17:49:04 +07:00
|
|
|
{
|
|
|
|
|
if (ui == null) yield break;
|
2026-06-06 00:00:27 +07:00
|
|
|
|
2026-06-04 17:49:04 +07:00
|
|
|
ui.SetActive(true);
|
2026-06-04 23:01:39 +07:00
|
|
|
|
2026-06-06 00:00:27 +07:00
|
|
|
// Chỉ phát âm thanh cảnh báo nếu đây là UI cảnh báo thiếu đồ
|
|
|
|
|
if (ui == warningUI)
|
|
|
|
|
{
|
|
|
|
|
AudioManager.PlayGlobal(warningSound);
|
|
|
|
|
}
|
2026-06-04 23:01:39 +07:00
|
|
|
|
2026-06-04 17:49:04 +07:00
|
|
|
yield return new WaitForSeconds(3f);
|
|
|
|
|
ui.SetActive(false);
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-06 00:00:27 +07:00
|
|
|
// --- CÁC HÀM ĐIỀU HƯỚNG UI BUTTONS ---
|
2026-06-02 23:14:19 +07:00
|
|
|
public void RestartGame()
|
|
|
|
|
{
|
2026-06-06 00:00:27 +07:00
|
|
|
AudioManager.PlayGlobal(clickSound);
|
2026-06-02 23:14:19 +07:00
|
|
|
Time.timeScale = 1f;
|
2026-06-03 04:32:58 +07:00
|
|
|
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
|
2026-06-02 23:14:19 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void QuitGame()
|
|
|
|
|
{
|
2026-06-06 00:00:27 +07:00
|
|
|
AudioManager.PlayGlobal(clickSound);
|
2026-06-03 04:32:58 +07:00
|
|
|
Application.Quit();
|
2026-06-06 00:00:27 +07:00
|
|
|
|
2026-06-02 23:14:19 +07:00
|
|
|
#if UNITY_EDITOR
|
2026-06-03 04:32:58 +07:00
|
|
|
UnityEditor.EditorApplication.isPlaying = false;
|
2026-06-02 23:14:19 +07:00
|
|
|
#endif
|
|
|
|
|
}
|
2026-06-06 00:00:27 +07:00
|
|
|
}
|