Files
Cielonos/Assets/Scripts/SLSUtilities/UI/UIPageBase.cs
2026-05-10 11:47:55 -04:00

70 lines
2.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using Sirenix.OdinInspector;
using UnityEngine;
namespace SLSUtilities.UI
{
/// <summary>
/// 覆盖式 UI 页面基类(机械台、物流中心、地图、结算等)。
/// 继承自 UIElementBase额外提供 Open/Close 生命周期和 UIPageManager 注册。
/// 页面打开时自动阻塞游戏输入,关闭时恢复。
/// </summary>
[RequireComponent(typeof(CanvasGroup))]
public class UIPageBase : UIElementBase
{
[Title("Page Settings")]
[SerializeField] protected bool closeOnEsc = true;
/// <summary>当前页面是否处于打开状态。</summary>
public bool IsOpen { get; private set; }
/// <summary>是否允许按 ESC 关闭此页面。</summary>
public bool CloseOnEsc => closeOnEsc;
/// <summary>页面打开后触发。</summary>
public event Action PageOpened;
/// <summary>页面关闭后触发。</summary>
public event Action PageClosed;
protected virtual void Start()
{
Hide();
}
/// <summary>
/// 打开页面:显示 UI注册到 UIPageManager 栈,触发生命周期回调。
/// 若已打开则忽略。
/// </summary>
public virtual void Open()
{
if (IsOpen) return;
IsOpen = true;
Show();
UIPageManager.Instance.RegisterPage(this);
OnPageOpened();
PageOpened?.Invoke();
}
/// <summary>
/// 关闭页面:从 UIPageManager 栈中移除,隐藏 UI触发生命周期回调。
/// 若未打开则忽略。
/// </summary>
public virtual void Close()
{
if (!IsOpen) return;
IsOpen = false;
UIPageManager.Instance.UnregisterPage(this);
Hide();
OnPageClosed();
PageClosed?.Invoke();
}
/// <summary>页面打开后的可覆盖回调。</summary>
protected virtual void OnPageOpened() { }
/// <summary>页面关闭后的可覆盖回调。</summary>
protected virtual void OnPageClosed() { }
}
}