- удалены WorldSystem, WorldMapPanel, WorldData, WorldLine и окно Panel_World из сцены города
- кнопка «МИР» в городе открывает большую карту (сцена WorldMap) через UIPanelManager.Open("World")
- перенос сохранений: солдаты из походов старой карты возвращаются в город при загрузке
(отправленные, а если отряд шёл назад — выжившие); добыча таких походов не переносится
- ArmyBridge.TroopsInMarches: панель «Войска» показывает воинов в походах большой карты
- HUDPanelsBuilder: кнопка «МИР» без отдельной панели
- документы World, Army, README обновлены
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
67 lines
2.3 KiB
C#
67 lines
2.3 KiB
C#
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 = "";
|
|
}
|
|
}
|