iter49-卡2:模态句柄分域批(句柄册三域化):UiModals 14→3纯字段容器+run/menu两新子容器+ModalFlow升格注册面直驻+全仓寻址换代+V1结构断言
This commit is contained in:
1 parent
11beb4fc59
commit
240f1a1769
28 files changed
+552
-513
No files matched your search
@@ -1,6 +1,7 @@
|
||||
## 界面注册面:呈现层界面元素清单的唯一事实源——哪些层、什么序、地址在哪。
|
||||
## 持有三域容器(screens/battle/modals)、LAYER_CONTRACT 合同表、node(key) 合同寻址、
|
||||
## apply_layer_contract(root) 唯一落位口(全仓唯一 move_child 点)。
|
||||
## 持有三域容器(screens/battle/modals)+模态编排件 ModalFlow 直驻(自 UiModals 升格——构造时点
|
||||
## 与今等价:注册面构造点先于装配)、模态登记唯一口 register_layer(随登记职责迁驻)、
|
||||
## LAYER_CONTRACT 合同表、node(key) 合同寻址、apply_layer_contract(root) 唯一落位口(全仓唯一 move_child 点)。
|
||||
## RefCounted 不挂树:零信号连接、零会话期引用、零核心写调用——组合根单点装配不变。
|
||||
class_name UiRegistry
|
||||
extends RefCounted
|
||||
@@ -42,12 +43,23 @@ const LAYER_CONTRACT: Array[Dictionary] = [
|
||||
var screens: UiScreens
|
||||
var battle: UiBattle
|
||||
var modals: UiModals
|
||||
var flow: ModalFlow # 模态编排件直驻注册面(升格自 UiModals——查询/钩子 Callable 由 _build_modal_flow 注入,注入时点不变)
|
||||
|
||||
|
||||
func _init() -> void:
|
||||
screens = UiScreens.new()
|
||||
battle = UiBattle.new()
|
||||
modals = UiModals.new()
|
||||
flow = ModalFlow.new()
|
||||
|
||||
|
||||
# 模态登记唯一口(自 ui_modals.gd 逐字迁驻——登记职责随编排域归注册面单点)
|
||||
func register_layer(m: Control, tags: Array = []) -> void:
|
||||
# 撑满宿主(Control 默认锚 = 0×0——全屏变暗层与居中布局整体失效;route 选路层预览截图实证后
|
||||
# 统一收口:六个模态同病,探针经信号直发绕过真实点击从未暴露。anchors_and_offsets 而非 anchors
|
||||
# ——后者会把控件重置回最小内容尺寸,ui_assembler 头注同款纪律)
|
||||
m.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||||
flow.register(m, tags) # 排除组随层登记(non_locking=调试浮窗/screen_state=关卡地图屏)
|
||||
|
||||
|
||||
# 合同层寻址(key→节点;纯查表不含层序语义——层序唯一事实源=LAYER_CONTRACT)
|
||||
@@ -56,12 +68,12 @@ func node(key: String) -> Node:
|
||||
"adventure_screen": return screens.adventure_screen
|
||||
"menu_screen": return screens.menu_screen
|
||||
"row_pacer": return screens.row_pacer
|
||||
"legend_overlay": return modals.legend_overlay
|
||||
"node_overlay": return modals.node_overlay
|
||||
"level_screen": return modals.level_screen
|
||||
"curio_overlay": return modals.curio_overlay
|
||||
"end_overlay": return modals.end_overlay
|
||||
"shop_overlay": return modals.shop_overlay
|
||||
"legend_overlay": return modals.run.legend_overlay
|
||||
"node_overlay": return modals.run.node_overlay
|
||||
"level_screen": return modals.run.level_screen
|
||||
"curio_overlay": return modals.run.curio_overlay
|
||||
"end_overlay": return modals.run.end_overlay
|
||||
"shop_overlay": return modals.menu.shop_overlay
|
||||
"camp_screen": return screens.camp_screen
|
||||
"camp_scene": return modals.camp.scene
|
||||
"forge_view": return modals.camp.forge
|
||||
@@ -69,13 +81,13 @@ func node(key: String) -> Node:
|
||||
"tree_view": return modals.camp.tree
|
||||
"codex_view": return modals.camp.codex
|
||||
"camp_esc_overlay": return modals.camp.esc_overlay
|
||||
"settings_overlay": return modals.settings_overlay
|
||||
"status_panel": return modals.status_panel
|
||||
"career_overlay": return modals.career_overlay
|
||||
"save_select_overlay": return modals.save_select_overlay
|
||||
"settings_overlay": return modals.menu.settings_overlay
|
||||
"status_panel": return modals.run.status_panel
|
||||
"career_overlay": return modals.menu.career_overlay
|
||||
"save_select_overlay": return modals.menu.save_select_overlay
|
||||
"inter_overlay": return screens.inter_overlay
|
||||
"confirm_dialog": return modals.confirm_dialog
|
||||
"debug_overlay": return modals.debug_overlay
|
||||
"confirm_dialog": return modals.menu.confirm_dialog
|
||||
"debug_overlay": return modals.menu.debug_overlay
|
||||
"debug_badge": return screens.debug_badge
|
||||
return null
|
||||
|
||||
@@ -94,7 +106,7 @@ func apply_layer_contract(root: Control) -> void:
|
||||
root.move_child(shell, slot)
|
||||
slot += 1
|
||||
if member != null:
|
||||
modals.register_layer(member as Control, tags)
|
||||
register_layer(member as Control, tags)
|
||||
else:
|
||||
push_error("[合同装配] 层缺失: %s" % String(entry["key"]))
|
||||
continue
|
||||
@@ -103,9 +115,9 @@ func apply_layer_contract(root: Control) -> void:
|
||||
push_error("[合同装配] 层缺失: %s" % String(entry["key"]))
|
||||
continue
|
||||
if entry.has("host"):
|
||||
modals.register_layer(layer as Control, tags)
|
||||
register_layer(layer as Control, tags)
|
||||
continue
|
||||
root.move_child(layer, slot)
|
||||
slot += 1
|
||||
if String(entry["kind"]) == "modal":
|
||||
modals.register_layer(layer as Control, tags)
|
||||
register_layer(layer as Control, tags)
|
||||
Reference in new issue
Block a user