Files
ParanormalEstateAgent/Assets/Scripts/UI/ReviewPromptUI.cs
2026-02-16 17:41:09 +00:00

142 lines
3.6 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using TMPro;
using System;
public class ReviewPromptUI : MonoBehaviour
{
[Header("UI References")]
[SerializeField] private GameObject promptPanel;
[SerializeField] private TextMeshProUGUI promptText;
[SerializeField] private Button brokenButton;
[SerializeField] private Button okButton;
private Action<bool> currentCallback;
private GameObject currentObject;
private void OnEnable()
{
SubscribeToLevelManager();
}
private void OnDisable()
{
UnsubscribeFromLevelManager();
}
private void Start()
{
// Hide panel initially
if (promptPanel != null)
{
promptPanel.SetActive(false);
}
else
{
Debug.LogError("ReviewPromptUI: Prompt Panel is NULL in Start!");
}
// Setup button listeners
if (brokenButton != null)
{
brokenButton.onClick.AddListener(() => OnReviewResponse(true));
}
else
{
Debug.LogError("ReviewPromptUI: Broken Button is NULL!");
}
if (okButton != null)
{
okButton.onClick.AddListener(() => OnReviewResponse(false));
}
else
{
Debug.LogError("ReviewPromptUI: OK Button is NULL!");
}
// Ensure subscription (in case OnEnable ran before LevelManager existed)
SubscribeToLevelManager();
}
private void SubscribeToLevelManager()
{
if (LevelManager.Instance != null)
{
LevelManager.Instance.OnRequestReview -= ShowReviewPrompt; // Remove first to avoid double subscription
LevelManager.Instance.OnRequestReview += ShowReviewPrompt;
}
}
private void UnsubscribeFromLevelManager()
{
if (LevelManager.Instance != null)
{
LevelManager.Instance.OnRequestReview -= ShowReviewPrompt;
}
}
private void ShowReviewPrompt(GameObject obj, Action<bool> callback)
{
// Hide interaction pop-up when showing review prompt
if (PopUpManager.Instance != null)
{
PopUpManager.Instance.HidePopUp();
}
currentObject = obj;
currentCallback = callback;
// Unlock cursor so player can click buttons
Cursor.lockState = CursorLockMode.None;
Cursor.visible = true;
// Pause game (optional - remove if you want gameplay to continue)
Time.timeScale = 0f;
// Show the panel
if (promptPanel != null)
{
promptPanel.SetActive(true);
}
else
{
Debug.LogError("ReviewPromptUI: PromptPanel is NULL! Assign it in the Inspector.");
}
// Update prompt text
if (promptText != null)
{
string objectName = obj != null ? obj.name : "Item";
promptText.text = $"Is the {objectName} working correctly?";
}
else
{
Debug.LogError("ReviewPromptUI: PromptText is NULL! Assign it in the Inspector.");
}
}
private void OnReviewResponse(bool isBroken)
{
// Hide the panel
if (promptPanel != null)
{
promptPanel.SetActive(false);
}
// Lock cursor back for gameplay
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
// Resume game
Time.timeScale = 1f;
// Invoke the callback
currentCallback?.Invoke(isBroken);
// Clear references
currentObject = null;
currentCallback = null;
}
}