using GFramework.Game.Abstractions.ui; using GFramework.Godot.extensions; using Godot; namespace GFramework.Godot.ui; /// /// 控制 UI 页面行为的泛型行为类, /// 支持所有继承自 CanvasItem 的节点 /// /// CanvasItem 类型的视图节点 public class CanvasItemUiPageBehavior(T owner, string key) : IUiPageBehavior where T : CanvasItem { private readonly IUiPage? _page = owner as IUiPage; /// /// 获取页面视图对象 /// /// 返回与当前实例关联的视图对象 public object View => owner; /// /// 获取当前实例的键值标识符 /// /// 返回用于标识当前实例的键字符串 public string Key => key; /// /// 获取页面是否存活状态 /// public bool IsAlive => owner.IsValidNode(); /// /// 页面进入时调用 /// /// 页面进入参数 public void OnEnter(IUiPageEnterParam? param) { _page?.OnEnter(param); } /// /// 页面退出时调用 /// public void OnExit() { _page?.OnExit(); owner.QueueFreeX(); } /// /// 页面暂停时调用 /// public void OnPause() { _page?.OnPause(); // 暂停节点的处理、物理处理和输入处理 owner.SetProcess(false); owner.SetPhysicsProcess(false); owner.SetProcessInput(false); } /// /// 页面恢复时调用 /// public void OnResume() { _page?.OnResume(); // 恢复节点的处理、物理处理和输入处理 owner.SetProcess(true); owner.SetPhysicsProcess(true); owner.SetProcessInput(true); } /// /// 页面隐藏时调用 /// public void OnHide() { _page?.OnHide(); owner.Hide(); } /// /// 页面显示时调用 /// public void OnShow() { _page?.OnShow(); owner.Show(); OnResume(); } /// /// 获取或设置页面是否为模态对话框 /// public bool IsModal { get; set; } /// /// 获取或设置页面是否阻止输入 /// public bool BlocksInput { get; set; } = true; /// /// 获取或设置页面是否需要遮罩层 /// public bool RequiresMask { get; set; } }