UI 系统
This commit is contained in:
@@ -21,6 +21,8 @@ namespace BaseGames.UI
|
||||
CharmPanel,
|
||||
SpellSelect,
|
||||
Inventory,
|
||||
FormSkills, // 形态技能一览(FormSkillPanel)
|
||||
Abilities, // 能力解锁总览(DataDrivenAbilityPanel)
|
||||
}
|
||||
|
||||
[DefaultExecutionOrder(+50)]
|
||||
@@ -53,6 +55,8 @@ namespace BaseGames.UI
|
||||
[SerializeField] private VoidEventChannelSO _onSpellSelectOpen;
|
||||
[Tooltip("打开统一背包菜单(InventoryHub)。对应 EVT_InventoryOpen。")]
|
||||
[SerializeField] private VoidEventChannelSO _onInventoryOpen;
|
||||
[Tooltip("快速直达:打开统一屏并定位到地图 Tab。对应 EVT_QuickOpenMap。")]
|
||||
[SerializeField] private VoidEventChannelSO _onQuickOpenMap;
|
||||
|
||||
// ── 面板栈:委托给统一的 UINavigator(不再自管栈)─────────────────────
|
||||
private IUINavigator _navigator;
|
||||
@@ -119,6 +123,7 @@ namespace BaseGames.UI
|
||||
_onCharmPanelOpen?.Subscribe(OpenCharmPanel).AddTo(_subs);
|
||||
_onSpellSelectOpen?.Subscribe(OpenSpellSelect).AddTo(_subs);
|
||||
_onInventoryOpen?.Subscribe(OpenInventory).AddTo(_subs);
|
||||
_onQuickOpenMap?.Subscribe(() => OpenInventoryAt("Content_Map")).AddTo(_subs);
|
||||
// 取消键(ESC / 手柄 B)由 UINavigator 统一消费,UIManager 不再订阅。
|
||||
}
|
||||
|
||||
@@ -278,7 +283,32 @@ namespace BaseGames.UI
|
||||
private void OpenMap() => OpenPanel(PanelId.Map);
|
||||
private void OpenCharmPanel() => OpenPanel(PanelId.CharmPanel);
|
||||
private void OpenSpellSelect() => OpenPanel(PanelId.SpellSelect);
|
||||
private void OpenInventory() => OpenPanel(PanelId.Inventory);
|
||||
|
||||
/// <summary>背包键 toggle:若统一背包屏正位于栈顶则关闭,否则打开(同键开/关)。</summary>
|
||||
private void OpenInventory()
|
||||
{
|
||||
if (_panelRegistry.TryGetValue(PanelId.Inventory, out var inv)
|
||||
&& Navigator?.Top != null && Navigator.Top.gameObject == inv)
|
||||
Navigator.Pop();
|
||||
else
|
||||
OpenPanel(PanelId.Inventory);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 快速直达:确保统一背包屏打开,并定位到指定内容根名对应的 Tab(如 "Content_Map")。
|
||||
/// 已打开则只切 Tab(不关闭),未打开则打开后切。按名定位,与 Tab 顺序解耦。
|
||||
/// </summary>
|
||||
private void OpenInventoryAt(string contentName)
|
||||
{
|
||||
if (!_panelRegistry.TryGetValue(PanelId.Inventory, out var inv) || inv == null)
|
||||
{
|
||||
Debug.LogWarning("[UIManager] 统一背包屏(PanelId.Inventory)未注册,快速直达失败。", this);
|
||||
return;
|
||||
}
|
||||
bool hubTop = Navigator?.Top != null && Navigator.Top.gameObject == inv;
|
||||
if (!hubTop) OpenPanel(PanelId.Inventory); // 激活时 OnEnable 同步运行
|
||||
inv.GetComponent<Inventory.InventoryHubPanel>()?.SelectTabByContentName(contentName);
|
||||
}
|
||||
|
||||
// ── 编辑器工具 ────────────────────────────────────────────────────────
|
||||
[ContextMenu("验证面板注册表")]
|
||||
|
||||
Reference in New Issue
Block a user