Kursach_StealthAction/Assets/Scripts/CodeHUDTracker.cs

82 lines
2.6 KiB
C#

using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// Отображает текущий статус найденных цифр кода лифта на игровом экране (HUD).
/// Например: "КОД ЛИФТА: [ 7 ] [ ? ] [ 1 ] [ ? ]"
/// </summary>
public class CodeHUDTracker : MonoBehaviour
{
private static CodeHUDTracker _instance;
public static CodeHUDTracker Instance
{
get
{
if (_instance == null)
{
_instance = Object.FindAnyObjectByType<CodeHUDTracker>(FindObjectsInactive.Include);
}
return _instance;
}
}
[Header("Слоты для цифр")]
[SerializeField] private Text[] digitSlotTexts = new Text[4];
[SerializeField] private Image[] digitSlotBorders = new Image[4];
[Header("Цвета")]
public Color discoveredTextColor = new Color(1.0f, 0.85f, 0.1f, 1.0f); // Ярко-золотой
public Color undiscoveredTextColor = new Color(0.45f, 0.45f, 0.45f, 0.7f); // Серый
public Color discoveredBorderColor = new Color(1.0f, 0.85f, 0.1f, 0.8f);
public Color undiscoveredBorderColor = new Color(0.3f, 0.3f, 0.3f, 0.4f);
private void Awake()
{
_instance = this;
}
private void Start()
{
if (LevelCodeManager.Instance != null)
{
LevelCodeManager.Instance.OnDigitDiscovered += HandleDigitDiscovered;
}
RefreshDisplay();
}
private void OnDestroy()
{
if (LevelCodeManager.Instance != null)
{
LevelCodeManager.Instance.OnDigitDiscovered -= HandleDigitDiscovered;
}
}
private void HandleDigitDiscovered(int pos, int val)
{
RefreshDisplay();
}
public void RefreshDisplay()
{
if (LevelCodeManager.Instance == null) return;
for (int i = 0; i < 4; i++)
{
bool isDiscovered = LevelCodeManager.Instance.IsDigitDiscovered(i);
int digit = LevelCodeManager.Instance.GetDigit(i);
if (digitSlotTexts != null && i < digitSlotTexts.Length && digitSlotTexts[i] != null)
{
digitSlotTexts[i].text = isDiscovered ? digit.ToString() : "?";
digitSlotTexts[i].color = isDiscovered ? discoveredTextColor : undiscoveredTextColor;
}
if (digitSlotBorders != null && i < digitSlotBorders.Length && digitSlotBorders[i] != null)
{
digitSlotBorders[i].color = isDiscovered ? discoveredBorderColor : undiscoveredBorderColor;
}
}
}
}