Update ui

This commit is contained in:
manhduyhoang90
2026-06-06 00:25:02 +07:00
parent 7e45faec11
commit a7e07a007f
4 changed files with 539 additions and 86 deletions

View File

@@ -1,20 +1,21 @@
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
using Hallucinate.Audio; // Import namespace hệ thống âm thanh của bạn
using Hallucinate.Audio;
public class FinishGate : MonoBehaviour
{
[Header("Cài đặt UI Chính")]
public GameObject winPanel;
public GameObject warningUI; // THÔNG BÁO: "Bạn chưa nhặt rương nào!"
public GameObject welcomeUI; // THÔNG BÁO 1: "Chào mừng!"
public GameObject warningUI; // THÔNG BÁO 2: "Bạn chưa nhặt rương nào!"
[Header("Cài đặt Sao trên HUD (Giao diện chính lúc đang chạy)")]
[Header("Cài đặt Sao trên HUD")]
public GameObject hudStar1;
public GameObject hudStar2;
public GameObject hudStar3;
[Header("Cài đặt Sao trên Bảng Win (Kết thúc game)")]
[Header("Cài đặt Sao trên Bảng Win")]
public GameObject winStar1;
public GameObject winStar2;
public GameObject winStar3;
@@ -24,53 +25,54 @@ public class FinishGate : MonoBehaviour
public string warningSound = "UI_Warning";
public string clickSound = "UI_Click";
[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")]
[Header("Cấu hình Tag")]
public string playerTag = "Player";
private bool hasEnteredOnce = false; // Theo dõi lần chạm cổng đầu tiên
private void Start()
{
// Đảm bảo thời gian chạy bình thường khi load màn
Time.timeScale = 1f;
// Ẩn các bảng UI khi vừa vào game
if (winPanel != null) winPanel.SetActive(false);
if (welcomeUI != null) welcomeUI.SetActive(false);
if (warningUI != null) warningUI.SetActive(false);
// Reset trạng thái sao về 0 lúc bắt đầu
UpdateStarsUI(0);
UpdateWinStarsUI(0);
}
private void OnTriggerEnter(Collider other)
{
// KIỂM TRA 1: Phải đúng Tag quy định (Nên để là "Player")
if (other.CompareTag(playerTag))
{
// KIỂM TRA 2: Tìm linh hoạt component PlayerInventory ở cả con và cha
PlayerInventory player = other.GetComponentInChildren<PlayerInventory>();
if (player == null) player = other.GetComponentInParent<PlayerInventory>();
if (player != null)
{
// 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
if (player.treasuresCollected > 0)
{
Debug.Log($"<color=green>[Gate]</color> VỀ ĐÍCH HỢP LỆ! Hoàn thành với {player.treasuresCollected} cổ vật.");
WinGame(player.treasuresCollected);
}
// 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
else
{
Debug.Log("<color=yellow>[Gate]</color> NPC/Player chưa nhặt cổ vật! Hãy chạy đến cuối map.");
StopAllCoroutines();
StartCoroutine(ShowTempUI(warningUI));
// Nếu là lần đầu tiên -> Hiện Welcome. Nếu là lần sau -> Hiện Warning.
if (!hasEnteredOnce)
{
hasEnteredOnce = true;
StartCoroutine(ShowTempUI(welcomeUI));
}
else
{
StartCoroutine(ShowTempUI(warningUI));
}
}
}
}
}
// Hàm public được gọi từ TreasureItem để cập nhật HUD ngay lập tức khi vừa nhặt đồ
public void UpdateStarsUI(int count)
{
if (hudStar1 != null) hudStar1.SetActive(count >= 1);
@@ -78,7 +80,6 @@ public class FinishGate : MonoBehaviour
if (hudStar3 != null) hudStar3.SetActive(count >= 3);
}
// 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)
{
if (winStar1 != null) winStar1.SetActive(count >= 1);
@@ -94,10 +95,7 @@ public class FinishGate : MonoBehaviour
UpdateWinStarsUI(count);
}
// Phát âm thanh thắng cuộc toàn cục
AudioManager.PlayGlobal(winSound);
// Dừng thời gian game và mở khóa chuột
Time.timeScale = 0f;
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
@@ -107,9 +105,12 @@ public class FinishGate : MonoBehaviour
{
if (ui == null) yield break;
// Tắt tất cả UI tạm thời khác trước khi bật cái mới để tránh đè chữ
if (welcomeUI != null) welcomeUI.SetActive(false);
if (warningUI != null) warningUI.SetActive(false);
ui.SetActive(true);
// 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);
@@ -119,7 +120,6 @@ public class FinishGate : MonoBehaviour
ui.SetActive(false);
}
// --- CÁC HÀM ĐIỀU HƯỚNG UI BUTTONS ---
public void RestartGame()
{
AudioManager.PlayGlobal(clickSound);
@@ -131,7 +131,6 @@ public class FinishGate : MonoBehaviour
{
AudioManager.PlayGlobal(clickSound);
Application.Quit();
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#endif