From 0771a7ad8575244d520093951574df7947abe0ba Mon Sep 17 00:00:00 2001 From: GeWuYou <95328647+GeWuYou@users.noreply.github.com> Date: Sat, 7 Feb 2026 19:49:13 +0800 Subject: [PATCH] =?UTF-8?q?refactor(ui):=20=E6=9B=B4=E6=96=B0UI=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E5=92=8C=E9=A1=B5=E9=9D=A2=E8=A1=8C=E4=B8=BA=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改HasVisibleInLayer方法签名,添加uiKey参数以精确检查特定UI可见性 - 在IUiPageBehavior接口中添加IsVisible属性用于获取页面可见状态 - 从IUiPageBehavior接口中移除RequiresMask属性 - 为ClearLayer和GetFromLayer方法添加完整的XML文档注释 - 更新CanvasItemUiPageBehavior实现以支持新的IsVisible属性 - 优化UI层级检查逻辑,提高可见性判断准确性 --- GFramework.Game.Abstractions/ui/IUiPageBehavior.cs | 10 +++++----- GFramework.Game.Abstractions/ui/IUiRouter.cs | 10 +++++++++- GFramework.Game/ui/UiRouterBase.cs | 8 ++++++-- GFramework.Godot/ui/CanvasItemUiPageBehavior.cs | 14 ++++++++------ 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/GFramework.Game.Abstractions/ui/IUiPageBehavior.cs b/GFramework.Game.Abstractions/ui/IUiPageBehavior.cs index c5ab865..a91e9df 100644 --- a/GFramework.Game.Abstractions/ui/IUiPageBehavior.cs +++ b/GFramework.Game.Abstractions/ui/IUiPageBehavior.cs @@ -23,6 +23,11 @@ public interface IUiPageBehavior /// bool IsAlive { get; } + /// + /// 获取页面是否可见 + /// + bool IsVisible { get; } + /// /// 获取页面是否为模态页面 /// @@ -33,11 +38,6 @@ public interface IUiPageBehavior /// bool BlocksInput { get; } - /// - /// 获取页面是否需要蒙版 - /// - bool RequiresMask { get; } - /// /// 页面进入时调用的方法 /// diff --git a/GFramework.Game.Abstractions/ui/IUiRouter.cs b/GFramework.Game.Abstractions/ui/IUiRouter.cs index db92195..1ca311c 100644 --- a/GFramework.Game.Abstractions/ui/IUiRouter.cs +++ b/GFramework.Game.Abstractions/ui/IUiRouter.cs @@ -171,17 +171,25 @@ public interface IUiRouter : ISystem /// /// 清空指定层级的所有UI /// + /// 要清空的UI层级。 + /// 是否销毁UI实例。如果为true,则会销毁UI实例;否则仅从层级中移除。 void ClearLayer(UiLayer layer, bool destroy = false); /// /// 从指定层级获取UI实例 /// + /// UI的唯一标识符。 + /// 要查询的UI层级。 + /// 返回与指定键关联的UI行为接口实例;如果未找到则返回null。 IUiPageBehavior? GetFromLayer(string uiKey, UiLayer layer); /// /// 判断指定层级是否存在可见UI /// - bool HasVisibleInLayer(UiLayer layer); + /// 要检查的UI的唯一标识符 + /// 要检查的UI层级 + /// 如果在指定层级中存在可见的UI,则返回true;否则返回false + bool HasVisibleInLayer(string uiKey, UiLayer layer); #endregion } \ No newline at end of file diff --git a/GFramework.Game/ui/UiRouterBase.cs b/GFramework.Game/ui/UiRouterBase.cs index d5fddb8..0449368 100644 --- a/GFramework.Game/ui/UiRouterBase.cs +++ b/GFramework.Game/ui/UiRouterBase.cs @@ -607,9 +607,13 @@ public abstract class UiRouterBase : AbstractSystem, IUiRouter /// /// 判断指定层级是否有UI显示 /// - public bool HasVisibleInLayer(UiLayer layer) + public bool HasVisibleInLayer(string uiKey, UiLayer layer) { - return _layers.TryGetValue(layer, out var layerDict) && layerDict.Count > 0; + if (!_layers.TryGetValue(layer, out var layerDict) || + !layerDict.TryGetValue(uiKey, out var page)) + return false; + + return page.IsVisible; } #endregion diff --git a/GFramework.Godot/ui/CanvasItemUiPageBehavior.cs b/GFramework.Godot/ui/CanvasItemUiPageBehavior.cs index 1b9a1ea..ff0f6ab 100644 --- a/GFramework.Godot/ui/CanvasItemUiPageBehavior.cs +++ b/GFramework.Godot/ui/CanvasItemUiPageBehavior.cs @@ -1,4 +1,4 @@ -using GFramework.Game.Abstractions.ui; +using GFramework.Game.Abstractions.ui; using GFramework.Godot.extensions; using Godot; @@ -30,8 +30,15 @@ public class CanvasItemUiPageBehavior(T owner, string key) : IUiPageBehavior /// /// 获取页面是否存活状态 /// + /// 如果页面节点有效则返回true,否则返回false public bool IsAlive => owner.IsValidNode(); + /// + /// 获取页面是否可见状态 + /// + /// 如果页面可见则返回true,否则返回false + public bool IsVisible => owner.Visible; + /// /// 页面进入时调用 /// @@ -110,9 +117,4 @@ public class CanvasItemUiPageBehavior(T owner, string key) : IUiPageBehavior /// 获取或设置页面是否阻止输入 /// public bool BlocksInput { get; set; } = true; - - /// - /// 获取或设置页面是否需要遮罩层 - /// - public bool RequiresMask { get; set; } } \ No newline at end of file