using System.Collections.Generic; using UnityEngine; // Один менеджер на все HUD-панели: открывает нужную, остальные закрывает. // Кладётся на HUD_Canvas (или создаётся автоматически через Tools -> Build HUD Panels). // Кнопки вызывают Open("Quests"), Open("Battle") и т.д. (id = имя панели). public class UIPanelManager : MonoBehaviour { public static UIPanelManager Instance { get; private set; } [System.Serializable] public class PanelEntry { public string id; // "Quests", "Battle", "Settings"... public GameObject panel; // сама панель } public List panels = new List(); private string currentId = ""; public string CurrentId { get { return currentId; } } void Awake() { Instance = this; } void Start() { CloseAll(); } void OnDestroy() { if (Instance == this) Instance = null; } // Открыть панель по id. Повторное нажатие на ту же кнопку -- закрывает. // Если панели с таким id нет (например "Home") -- просто закрываем всё: это и есть "главная". // Кнопки, которые открывают не панель, а другую сцену. "World" -- кнопка "МИР" в городе: // маленькая карта мира удалена 19.10.2026, остаётся одна большая (сцена WorldMap). public const string WorldMapId = "World"; public void Open(string id) { if (id == WorldMapId) { CloseAll(); SceneNavigator.OpenWorldMap(); return; } bool toggleOff = (currentId == id); CloseAll(); if (toggleOff) return; foreach (var p in panels) { if (p.id == id && p.panel != null) { p.panel.SetActive(true); currentId = id; return; } } } public void CloseAll() { foreach (var p in panels) if (p.panel != null) p.panel.SetActive(false); currentId = ""; } }