69 lines
2.6 KiB
C#
69 lines
2.6 KiB
C#
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
using BaseGames.Core.Assets;
|
||
using BaseGames.Core.Events;
|
||
|
||
namespace BaseGames.UI
|
||
{
|
||
/// <summary>
|
||
/// 暂停菜单控制器(架构 10_UIModule §5)。
|
||
/// 挂载在 Canvas_Menu → PauseMenuPanel GameObject 上。
|
||
/// 按钮绑定在 Awake 中完成;生命周期 / 焦点由 <see cref="UIPanelBase"/> 统一处理。
|
||
/// </summary>
|
||
public class PauseMenuController : UIPanelBase
|
||
{
|
||
// UIManager 通过 ServiceLocator 解析,开启时自动获取,无需 Inspector 直接绑定具体类型
|
||
private IUIManager _uiManager;
|
||
|
||
[Header("按钮引用")]
|
||
[SerializeField] private Button _btnResume;
|
||
[SerializeField] private Button _btnSettings;
|
||
[SerializeField] private Button _btnMainMenu;
|
||
[SerializeField] private Button _btnQuit;
|
||
|
||
[Header("Event Channels")]
|
||
[SerializeField] private VoidEventChannelSO _onResumeRequested;
|
||
[SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest;
|
||
|
||
private void Awake()
|
||
{
|
||
_btnResume?.onClick.AddListener(Resume);
|
||
_btnSettings?.onClick.AddListener(OpenSettings);
|
||
_btnMainMenu?.onClick.AddListener(GoToMainMenu);
|
||
_btnQuit?.onClick.AddListener(Application.Quit);
|
||
}
|
||
|
||
// 暂停面板由 UIManager 开启,此时 ServiceLocator 已就绪
|
||
protected override void OnPanelOpen() => _uiManager = GetService<IUIManager>();
|
||
protected override void OnPanelClose() => _uiManager = null;
|
||
|
||
/// <summary>默认焦点 / 焦点恢复回到"继续"按钮(基类 FocusFirst 调用)。</summary>
|
||
protected override GameObject ResolveFirstSelected()
|
||
=> _btnResume != null ? _btnResume.gameObject : null;
|
||
|
||
// ── 按钮回调 ──────────────────────────────────────────────────────────
|
||
|
||
private void Resume()
|
||
{
|
||
_onResumeRequested?.Raise();
|
||
_uiManager?.CloseTopPanel();
|
||
}
|
||
|
||
private void OpenSettings()
|
||
{
|
||
_uiManager?.OpenPanel(PanelId.Settings);
|
||
}
|
||
|
||
private void GoToMainMenu()
|
||
{
|
||
_uiManager?.CloseTopPanel();
|
||
_onSceneLoadRequest?.Raise(new SceneLoadRequest
|
||
{
|
||
SceneName = AddressKeys.SceneMainMenu,
|
||
TransitionType = TransitionType.Scene,
|
||
ShowLoadingScreen = false,
|
||
});
|
||
}
|
||
}
|
||
}
|