From 039152438b5bf1c411d8b70c459f0ebcb2cf9ee0 Mon Sep 17 00:00:00 2001 From: GeWuYou <95328647+GeWuYou@users.noreply.github.com> Date: Tue, 20 Jan 2026 12:56:34 +0800 Subject: [PATCH] =?UTF-8?q?refactor(ui):=20=E9=87=8D=E6=9E=84GodotUiRoot?= =?UTF-8?q?=E7=B1=BB=E6=9E=84=E9=80=A0=E5=87=BD=E6=95=B0=E5=92=8C=E5=B1=82?= =?UTF-8?q?=E7=BA=A7=E7=AE=A1=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将层级Z轴顺序映射表作为构造函数参数注入 - 移除静态字段LayerZOrderMap,改用实例字段_layerZOrderMap - 为层级映射表添加详细的XML文档注释和默认值说明 - 修改GetBaseZOrder方法为实例方法并更新内部字段引用 - 优化代码结构和可读性 --- GFramework.Godot/ui/GodotUiRoot.cs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/GFramework.Godot/ui/GodotUiRoot.cs b/GFramework.Godot/ui/GodotUiRoot.cs index 86411d2..4e3a238 100644 --- a/GFramework.Godot/ui/GodotUiRoot.cs +++ b/GFramework.Godot/ui/GodotUiRoot.cs @@ -8,7 +8,7 @@ namespace GFramework.Godot.ui; /// Godot平台的UI根节点实现 /// 用于管理UI页面的添加、移除和层级排序 /// -public partial class GodotUiRoot : Node, IUiRoot +public partial class GodotUiRoot(IReadOnlyDictionary? layerZOrderMap) : Node, IUiRoot { /// /// UI节点的父容器,所有UI页面都添加到这个节点下 @@ -19,7 +19,19 @@ public partial class GodotUiRoot : Node, IUiRoot /// UI页面的追踪字典,记录每个页面的节点 /// private readonly Dictionary _pageNodes = new(); - private static readonly IReadOnlyDictionary LayerZOrderMap = + + /// + /// UI层级与Z轴顺序的映射表,定义了不同UI层的渲染优先级 + /// + /// + /// 默认层级映射关系: + /// - Page: 0 (基础页面层) + /// - Overlay: 100 (覆盖层) + /// - Modal: 200 (模态窗口层) + /// - Toast: 300 (提示消息层) + /// - Topmost: 400 (最顶层) + /// + private readonly IReadOnlyDictionary _layerZOrderMap =layerZOrderMap ?? new Dictionary { { UiLayer.Page, 0 }, @@ -29,6 +41,7 @@ public partial class GodotUiRoot : Node, IUiRoot { UiLayer.Topmost, 400 }, }; + public override void _Ready() { // 创建UI容器节点 @@ -121,8 +134,8 @@ public partial class GodotUiRoot : Node, IUiRoot { return page.View as Node; } - private static int GetBaseZOrder(UiLayer layer) + private int GetBaseZOrder(UiLayer layer) { - return !LayerZOrderMap.TryGetValue(layer, out var z) ? throw new ArgumentOutOfRangeException(nameof(layer), layer, null) : z; + return !_layerZOrderMap.TryGetValue(layer, out var z) ? throw new ArgumentOutOfRangeException(nameof(layer), layer, null) : z; } }