using System.Collections.Generic; using Cielonos.Core.SceneManagement; using DG.Tweening; using SLSUtilities.General; using SLSUtilities.UI; using SLSUtilities.WwiseAssistance; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Serialization; using UnityEngine.UI; namespace Cielonos.MainGame.UI { /// /// 暂停界面页面。 /// /// 打开时暂停游戏(Time.timeScale = 0), /// 关闭时恢复游戏。 /// 提供三个按钮:继续游戏、打开设置、返回标题界面。 /// 返回标题界面时会弹出 二次确认。 /// /// public class PauseUIPage : UIPageBase { // ──────────────────── 按钮引用 ──────────────────── [FormerlySerializedAs("continueButton")] [Header("Buttons")] [SerializeField] private Button resumeButton; [SerializeField] private Button settingsButton; [SerializeField] private Button returnToMenuButton; // ──────────────────── 配置 ──────────────────────── [Header("Scene")] [Tooltip("标题界面的场景名称,通过 SceneBus 加载。")] [SerializeField] private string titleSceneName = "Menu"; // ──────────────────── 生命周期 ──────────────────── protected override void Start() { base.Start(); resumeButton.onClick.AddListener(OnContinueClicked); settingsButton.onClick.AddListener(OnSettingsClicked); returnToMenuButton.onClick.AddListener(OnReturnToTitleClicked); } public override void Open() { if (IsOpen) return; IsOpen = true; Time.timeScale = 0f; UIPageManager.Instance.RegisterPage(this); EventSystem.current?.SetSelectedGameObject(null); gameObject.SetActive(true); canvasGroup.interactable = true; canvasGroup.DOFade(1f, 0.3f).From(0f).SetUpdate(true) .OnComplete(() => { canvasGroup.blocksRaycasts = true; OnPageOpened(); }).Play(); } public override void Close() { if (!IsOpen) return; IsOpen = false; UIPageManager.Instance.UnregisterPage(this); canvasGroup.DOFade(0f, 0.3f).From(1f).SetUpdate(true) .OnComplete(() => { canvasGroup.interactable = false; canvasGroup.blocksRaycasts = false; OnPageClosed(); Time.timeScale = 1f; }).Play(); } // ──────────────────── 按钮回调 ──────────────────── private void OnContinueClicked() { Close(); } private void OnSettingsClicked() { PlayerCanvas.SettingsUIPage.Open(); } /// /// 点击"返回主菜单"按钮时,弹出确认弹窗而非直接切换场景。 /// private void OnReturnToTitleClicked() { ConfirmUIPage.Show(new ConfirmPageConfig { Title = "ConfirmReturnToMenu_Title".Localize("UI"), Description = "ConfirmReturnToMenu_Desc".Localize("UI"), Buttons = new List { new("Confirm".Localize("UI"), ReturnToMenu), new("Cancel".Localize("UI")) } }); } /// /// 用户确认后执行的返回主菜单逻辑。 /// private void ReturnToMenu() { Time.timeScale = 1f; AudioManager.Instance.backgroundMusicManager.TransitionToNextScene(); UIPageManager.Instance.CloseAllPages(); SceneBus.LoadScene(titleSceneName); } } }