Files

67 lines
2.3 KiB
C#
Raw Permalink Normal View History

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<PanelEntry> panels = new List<PanelEntry>();
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 = "";
}
}