using UnityEngine; using UnityEngine.UI; using TMPro; // Подпись над зданием -- больше не показывается: всё о здании теперь в его окне (App/BuildingWindow, тап по зданию). // Компонент оставлен, чтобы не перенастраивать префабы: при запуске он прячет свою подпись и полоску и выключается. public class BuildingUI : MonoBehaviour { [Header("Настройки")] public ResourceCollector building; public TMP_Text stokText; public Slider progressBar; float next; public static bool ShowLabels = false; // вернуть подписи над зданиями -- поставить true void Start() { if (!ShowLabels) { HideLabel(); enabled = false; return; } if (building == null) { Debug.LogError("Ошибка BuildingUI: не назначено здание (Building)!"); enabled = false; return; } UpdateUI(); } // Прячем холст с подписью и полоской. Сам объект здания не трогаем: компонент висит на его корне void HideLabel() { foreach (Component c in new Component[] { stokText, progressBar }) { if (c == null) continue; var canvas = c.GetComponentInParent(true); GameObject target = canvas != null && canvas.gameObject != gameObject ? canvas.gameObject : c.gameObject; if (target != gameObject) target.SetActive(false); } } void Update() { if (Time.unscaledTime < next) return; next = Time.unscaledTime + 0.5f; UpdateUI(); } void UpdateUI() { bool workplace = building.IsWorkplace; if (progressBar != null && progressBar.gameObject.activeSelf != workplace) progressBar.gameObject.SetActive(workplace); if (!workplace) { if (stokText != null) stokText.text = building.IsHouse ? $"Дом {building.level} ур." : $"{building.level} ур."; return; } float workers = building.GetCurrentStock(); float slots = building.GetMaxCapacity(); if (stokText != null) stokText.text = $"Рабочие {workers:0} / {slots:0}"; if (progressBar != null) progressBar.value = slots > 0 ? Mathf.Clamp01(workers / slots) : 0f; } }