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