first commit
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class InteractionPromptUI : MonoBehaviour
|
||||
{
|
||||
public static InteractionPromptUI Instance { get; private set; }
|
||||
|
||||
[SerializeField] private GameObject promptPanel;
|
||||
[SerializeField] private Text promptText;
|
||||
|
||||
private Object currentOwner;
|
||||
private string currentMessage = "Нажмите E";
|
||||
|
||||
public void Configure(GameObject panel, Text textComponent)
|
||||
{
|
||||
promptPanel = panel;
|
||||
promptText = textComponent;
|
||||
|
||||
if (promptPanel != null)
|
||||
{
|
||||
promptPanel.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (Instance != null && Instance != this)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
return;
|
||||
}
|
||||
|
||||
Instance = this;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
RefreshVisibility();
|
||||
}
|
||||
|
||||
public void ShowPrompt(Object owner, string message)
|
||||
{
|
||||
if (owner == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
currentOwner = owner;
|
||||
currentMessage = string.IsNullOrWhiteSpace(message) ? "Нажмите E" : message;
|
||||
RefreshVisibility();
|
||||
}
|
||||
|
||||
public void HidePrompt(Object owner)
|
||||
{
|
||||
if (owner == null || currentOwner != owner)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
currentOwner = null;
|
||||
RefreshVisibility();
|
||||
}
|
||||
|
||||
public void HideAll()
|
||||
{
|
||||
currentOwner = null;
|
||||
RefreshVisibility();
|
||||
}
|
||||
|
||||
private void RefreshVisibility()
|
||||
{
|
||||
if (promptPanel == null || promptText == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!IsOwnerValid(currentOwner))
|
||||
{
|
||||
currentOwner = null;
|
||||
}
|
||||
|
||||
var shouldShow = currentOwner != null && !GameUIState.IsAnyBlockingUIOpen;
|
||||
promptPanel.SetActive(shouldShow);
|
||||
|
||||
if (shouldShow)
|
||||
{
|
||||
promptText.text = currentMessage;
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsOwnerValid(Object owner)
|
||||
{
|
||||
if (owner == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (owner is Component component)
|
||||
{
|
||||
return component.gameObject.activeInHierarchy;
|
||||
}
|
||||
|
||||
if (owner is GameObject gameObject)
|
||||
{
|
||||
return gameObject.activeInHierarchy;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user