refactor(改名批): 暂停层/暂停角标→状态面板/状态角标——用户令全量改名(文案4处+标识符全套PauseOverlay→StatusPanel/pause_overlay.gd→status_panel.gd/成员方法族+探针快照键+注释与探针消息86处清零;行为契约四件零动——只读R4/模态遮罩P2甲/输入锁R3/零动效P4甲)+render_gate截图键shot_pause→shot_status同步+文档六面(元进度v1.19/07/生涯/06条/architecture json+html;camp零命中;08-Alpha版本标准untracked禁碰留置)——冒烟938/0+run_all24套+probe --click/--full+render_gate全绿;rg 暂停|pause game/归零

This commit is contained in:
DKChan committed 2026-10-13 05:41:59 +08:00
1 parent 187632f75d
commit c5a09fd90c
23 files changed
+212 -211

No files matched your search

+43 -43
View File
@@ -119,7 +119,7 @@ var shop_overlay: ShopOverlay # 商店覆盖层(GP+商店房实施
var camp_overlay: CampOverlay # 营地覆盖层(元进度实现批——主菜单营地入口兑付呈现)
var settings_store # 系统级设置独立存储(迭代 8 卡④——音量/全屏/减动效)
var settings_overlay: SettingsOverlay # 设置覆盖层(迭代 8 卡④——最小设置面)
var pause_overlay: PauseOverlay # 局内暂停层·只读(迭代 17 卡③——钥石余额+营地三柜台进度查看;登记设置层同档)
var status_panel: StatusPanel # 局内状态面板·只读(迭代 17 卡③——钥石余额+营地三柜台进度查看;登记设置层同档)
var career_overlay: CareerOverlay # 生涯页·只读全屏页(迭代 18 卡④——跨局汇总六类九项;登记营地同档〔设置层旁、确认弹窗之前〕)
var debug_overlay: DebugOverlay # 调试浮窗(迭代 14.5 调试整合批——种子/数值调整/批量模拟/两层调试入口收一)
@@ -230,7 +230,7 @@ func _build_ui() -> void:
func() -> Variant: return settlement, func() -> Variant: return runner)
board_zone.action_requested.connect(_on_board_action)
board_zone.pause_badge.pressed.connect(_on_pause_badge_pressed) # 暂停层入口(迭代 17 卡③——战斗屏 HUD 角标)
board_zone.status_badge.pressed.connect(_on_status_badge_pressed) # 状态面板入口(迭代 17 卡③——战斗屏 HUD 角标)
board_zone.debug_badge.pressed.connect(_on_debug_badge_pressed) # 调试浮窗入口(迭代 18 卡⑦ P2 甲——战斗屏 HUD 角标)
info_panel.treasure_slot_clicked.connect(_treasure_ui.on_slot_clicked) # 迭代 7 T4——两步交互第一步
board_zone.stop_pressed.connect(_on_stop_pressed)
@@ -249,7 +249,7 @@ func _build_ui() -> void:
logger.ap_per_round = int(db.action_economy.ap_per_round)
# 模态覆盖层(登记序 = 树序 = z 遮挡序:图例 < 明细回看 < 节点 < 关卡画面 < 三选一 < 终局
# < 商店 < 营地 < 设置 < 暂停(只读) < 生涯页(只读·迭代 18 卡④) < 确认弹窗 < 调试浮窗)
# < 商店 < 营地 < 设置 < 状态面板(只读) < 生涯页(只读·迭代 18 卡④) < 确认弹窗 < 调试浮窗)
var overlays: Dictionary = UiAssembler.build_overlays(self, db)
legend_overlay = overlays.legend_overlay
node_overlay = overlays.node_overlay
@@ -264,18 +264,18 @@ func _build_ui() -> void:
legend_overlay.closed.connect(_on_modal_closed.bind(legend_overlay))
node_overlay.continue_pressed.connect(_on_node_continue)
level_screen.route_chosen.connect(_on_route_chosen)
level_screen.pause_badge.pressed.connect(_on_pause_badge_pressed) # 暂停层入口(迭代 17 卡③——地图屏顶栏角标)
level_screen.status_badge.pressed.connect(_on_status_badge_pressed) # 状态面板入口(迭代 17 卡③——地图屏顶栏角标)
level_screen.debug_badge.pressed.connect(_on_debug_badge_pressed) # 调试浮窗入口(迭代 18 卡⑦ P2 甲——地图屏顶栏角标)
level_screen.abandon_requested.connect(_on_abandon_requested) # 放弃入口(2026-09-21 用户拍板——台账 119)
_end_overlay.continue_pressed.connect(_on_battle_end_continue)
settings_overlay = SettingsOverlay.new(settings_store) # 迭代 8 卡④——最小设置面(音量/全屏/减动效)
add_child(settings_overlay)
settings_overlay.closed.connect(_on_settings_closed)
# 局内暂停层·只读(迭代 17 卡③——P2 甲:登记设置层同档带 dim 遮罩,确认弹窗之前;
# 局内状态面板·只读(迭代 17 卡③——P2 甲:登记设置层同档带 dim 遮罩,确认弹窗之前;
# 数据=组合根开层实时读 MetaProgression 访问器喂入(R4),本层零写通路)
pause_overlay = PauseOverlay.new()
add_child(pause_overlay)
pause_overlay.closed.connect(_on_pause_closed)
status_panel = StatusPanel.new()
add_child(status_panel)
status_panel.closed.connect(_on_status_closed)
# 生涯页·只读全屏页(迭代 18 卡④——P3 甲:登记序=营地同档,设置层旁、确认弹窗之前;
# 树序同步=addChild 同位(登记序=树序=z 序纪律);数据=组合根开层实时读 SaveManager 计数
# 访问器+MetaProgression 访问器喂入,本层零写通路零跳转;入口=开始层「营地与系统」组生涯钮)
@@ -354,9 +354,9 @@ func _build_ui() -> void:
debug_overlay.debug_levels_requested.connect(_start_debug_levels)
# 模态登记(缺陷⑤纪律——登记序 = 树序:含 move_child 调位后的关卡画面/三选一终位;
# 暂停层设置层同档、确认弹窗之前——P2 甲;生涯页同档随暂停层之后(迭代 18 卡④ P3 甲))
# 状态面板设置层同档、确认弹窗之前——P2 甲;生涯页同档随状态面板之后(迭代 18 卡④ P3 甲))
_modals = ModalStack.new()
for m: Control in [legend_overlay, node_overlay, level_screen, curio_overlay, _end_overlay, shop_overlay, camp_overlay, settings_overlay, pause_overlay, career_overlay, confirm_dialog, debug_overlay]:
for m: Control in [legend_overlay, node_overlay, level_screen, curio_overlay, _end_overlay, shop_overlay, camp_overlay, settings_overlay, status_panel, career_overlay, confirm_dialog, debug_overlay]:
_register_modal(m)
_tune_sim = TuneSimController.new(db, debug_overlay, int(db.hero.max_hp))
@@ -387,13 +387,13 @@ func _open_modal(m: Control) -> void:
# 打开时显式隐藏树序在其上方的可见层(遮挡物隐藏),关闭恢复——单一模态栈
_flush_row_queue() # 卡⑦——任何覆盖层开启前排空排播队列(明细带恒完整,回看/停点面不缺行)
_modals.open(m)
_sync_pause_entry() # 迭代 17 卡③——暂停层入口角标可见性/置灰随开态同步
_sync_status_entry() # 迭代 17 卡③——状态面板入口角标可见性/置灰随开态同步
_sync_debug_overlay() # 迭代 18 卡⑦——浮窗当局数据/按钮态随开态同步(T3 刷新=模态开合信号驱动)
func _close_modal(m: Control) -> void:
_modals.close(m)
_sync_pause_entry() # 迭代 17 卡③——关闭恢复角标可点态(无残留——R3 同源口径)
_sync_status_entry() # 迭代 17 卡③——关闭恢复角标可点态(无残留——R3 同源口径)
_sync_debug_overlay() # 迭代 18 卡⑦——他层关闭复活浮窗时同步刷新(P1 甲关后自动恢复语义配套)
@@ -463,7 +463,7 @@ func _resume_from_menu() -> void:
_start_overlay.visible = false
_wire_adventure()
_level_active = true
_sync_pause_entry() # 迭代 17 卡③——续玩恢复点亮暂停入口角标
_sync_status_entry() # 迭代 17 卡③——续玩恢复点亮状态面板入口角标
level_screen.set_abandon_available(true)
_reset_run_scope()
log_view.clear()
@@ -521,7 +521,7 @@ func _start_adventure() -> void:
_close_modal(debug_overlay) # 开冒险路径显式关浮窗(迭代 18 卡⑦ T2 防护——DS_DEBUG 默认开态下开局不带窗;对局中经角标再开)
_wire_adventure()
_level_active = true
_sync_pause_entry() # 迭代 17 卡③——进对局点亮暂停入口角标
_sync_status_entry() # 迭代 17 卡③——进对局点亮状态面板入口角标
level_screen.set_abandon_available(true) # 放弃入口挂选路停点(天然非战斗期——2026-09-21 用户拍板)
_reset_run_scope()
log_view.clear()
@@ -605,7 +605,7 @@ func _on_adventure_finished(summary: Dictionary) -> void:
var result: String = String(summary.get("result", ""))
settlement = null
_exit_level_screen() # 终局兜底:独立屏在开态(放弃入口)也先回战斗屏呈现摘要——屏级互斥单一出口
_sync_pause_entry() # 迭代 17 卡③——离局熄灭暂停入口角标(防菜单误现)
_sync_status_entry() # 迭代 17 卡③——离局熄灭状态面板入口角标(防菜单误现)
_sync_settlement_visuals() # → 全关
HudPresenter.battle_end_feedback(stage, ap_bar, false) # 灰化/idle 回正/状态全清——HUD 单通道(T3 收口批)
# 存档入账(元进度实现批):settle = Boss 两档入账 + 工坊解锁 + 摘要入档 + 写盘(唯一写档点不变——
@@ -979,7 +979,7 @@ func _enter_level_screen() -> void:
_level_screen_active = true
_battle_root.visible = false
_open_modal(level_screen)
_sync_pause_entry() # 迭代 17 卡③——屏级互斥切换同步(_open_modal 单口不识屏级状态)
_sync_status_entry() # 迭代 17 卡③——屏级互斥切换同步(_open_modal 单口不识屏级状态)
func _exit_level_screen() -> void:
@@ -987,7 +987,7 @@ func _exit_level_screen() -> void:
_battle_root.visible = true
if level_screen.visible:
_close_modal(level_screen)
_sync_pause_entry() # 迭代 17 卡③——同上
_sync_status_entry() # 迭代 17 卡③——同上
func _on_abandon_requested() -> void:
@@ -1016,12 +1016,12 @@ func _on_settings_closed() -> void:
_refresh_resume_button()
# ---- 局内暂停层·只读(迭代 17 卡③——入口角标在两屏装配段〔组 B〕;开合与数据喂入归组合根)----
# ---- 局内状态面板·只读(迭代 17 卡③——入口角标在两屏装配段〔组 B〕;开合与数据喂入归组合根)----
# 暂停层快照投影(R4 数据只读同源:每次开层实时读 MetaProgression 访问器现值拼装——
# 快照仅服务单次开层生命周期(open_pause 重建各行),跨开层零持有;零写调用。
# 属性锻造三行投影已删——迭代 21 柜台退役连带〔暂停层锻造段同步删除〕)
func _pause_data() -> Dictionary:
# 状态面板快照投影(R4 数据只读同源:每次开层实时读 MetaProgression 访问器现值拼装——
# 快照仅服务单次开层生命周期(open_status 重建各行),跨开层零持有;零写调用。
# 属性锻造三行投影已删——迭代 21 柜台退役连带〔状态面板锻造段同步删除〕)
func _status_data() -> Dictionary:
return {
"balance": meta.keystone_balance(),
"workshop": meta.treasure_shop_status(), # 迭代 22 T2——秘宝匣 12 件解锁投影(旧工坊面退役)
@@ -1030,13 +1030,13 @@ func _pause_data() -> Dictionary:
}
func _open_pause_layer() -> void:
_open_modal(pause_overlay) # 模态栈单口(开层前排空排播队列——既有层同款行为,目检确认项)
pause_overlay.open_pause(_pause_data())
func _open_status_panel() -> void:
_open_modal(status_panel) # 模态栈单口(开层前排空排播队列——既有层同款行为,目检确认项)
status_panel.open_status(_status_data())
func _on_pause_closed() -> void:
_close_modal(pause_overlay) # 模态栈单口
func _on_status_closed() -> void:
_close_modal(status_panel) # 模态栈单口
# ---- 生涯页·只读(迭代 18 卡④——入口=开始层生涯钮;开合仿设置面先例:开始层互斥;
@@ -1055,7 +1055,7 @@ func _on_career_closed() -> void:
# 生涯页快照投影(只读同源——每次开层实时读 SaveManager 计数访问器 + MetaProgression 访问器
# 现值拼装(暂停层 _pause_data 同构);快照仅服务单次开层生命周期,跨开层零持有;零写调用。
# 现值拼装(状态面板 _status_data 同构);快照仅服务单次开层生命周期,跨开层零持有;零写调用。
# 账号成长态三投影已删〔forge_levels_total/workshop/tree——2026-10-12 用户裁:生涯页不统计
# 天赋树与账号成长态,只统计终身计数〕)
func _career_data() -> Dictionary:
@@ -1080,35 +1080,35 @@ func _career_data() -> Dictionary:
# 入口角标点击(两屏同款处理器):P1 守卫兜底——其他模态开着即拒开(常态防线=角标置灰,
# 探针 pressed.emit 绕过 disabled 时由此兜住;地图屏自身的登记开态不计——has_open_excluding)
func _on_pause_badge_pressed() -> void:
func _on_status_badge_pressed() -> void:
var map_on: bool = level_screen != null and level_screen.visible
# P1 守卫兜底——其他模态开着即拒开(常态防线=角标置灰,探针 pressed.emit 绕过 disabled 时由此兜住;
# 地图屏自身的登记开态不计;迭代 18 卡⑦ T2——判据排除调试浮窗:对局中浮窗开着时暂停角标仍可点)
# 地图屏自身的登记开态不计;迭代 18 卡⑦ T2——判据排除调试浮窗:对局中浮窗开着时状态角标仍可点)
if _modals == null or (map_on and _modals.has_open_excluding_any([level_screen, debug_overlay])) \
or (not map_on and _modals.has_open_excluding(debug_overlay)):
return
_open_pause_layer()
_open_status_panel()
# 入口角标可见性/置灰同步(P1 丁+守卫——单一同步点):战斗屏角标=对局内且地图屏未激活;
# 地图屏角标=随屏;置灰=登记册上除地图屏自身外任一层开着(防「看得见点不着」态)。
# 调用面=模态开合单口与屏级互斥口(凡影响开态/屏态的路径必经其一)。
func _sync_pause_entry() -> void:
if pause_overlay == null or _modals == null or board_zone == null or level_screen == null:
func _sync_status_entry() -> void:
if status_panel == null or _modals == null or board_zone == null or level_screen == null:
return
var map_on: bool = level_screen.visible
var battle_live: bool = _level_active or settlement != null # 调试两层无 _level_active——settlement 判据补位(迭代 18 卡⑦)
board_zone.pause_badge.visible = _level_active and not map_on
level_screen.pause_badge.visible = map_on
board_zone.status_badge.visible = _level_active and not map_on
level_screen.status_badge.visible = map_on
# 置灰判据改排除式(迭代 18 卡⑦ T2——调试浮窗开态不计入:对局中浮窗开着时角标仍可点)
board_zone.pause_badge.disabled = _modals.has_open_excluding(debug_overlay)
level_screen.pause_badge.disabled = _modals.has_open_excluding_any([level_screen, debug_overlay])
# 调试浮窗角标(迭代 18 卡⑦ P2 甲——迁宿主两屏,DS_DEBUG 门控;17卡③暂停角标同形制同守卫):
board_zone.status_badge.disabled = _modals.has_open_excluding(debug_overlay)
level_screen.status_badge.disabled = _modals.has_open_excluding_any([level_screen, debug_overlay])
# 调试浮窗角标(迭代 18 卡⑦ P2 甲——迁宿主两屏,DS_DEBUG 门控;17卡③状态角标同形制同守卫):
# 战斗屏=对局内(冒险或调试两层)且地图屏未激活;地图屏=随屏;开始菜单零角标(DS_DEBUG=1 启动即开)
board_zone.debug_badge.visible = _debug_entry and not map_on and battle_live
level_screen.debug_badge.visible = _debug_entry and map_on
board_zone.debug_badge.disabled = board_zone.pause_badge.disabled
level_screen.debug_badge.disabled = level_screen.pause_badge.disabled
board_zone.debug_badge.disabled = board_zone.status_badge.disabled
level_screen.debug_badge.disabled = level_screen.status_badge.disabled
# ---- 探针缝保缝(T4/D4 拆件——click/ui_probe 营地段直呼组合根面;实现归 camp_shop_presenter.gd)----
@@ -1303,7 +1303,7 @@ func _on_diagnose_pressed() -> void:
func _show_debug_overlay() -> void:
# 门禁改向(迭代 18 卡⑦ P2/P3 甲——对局中可开;本函数仍是唯一开窗入口 C6,门禁逻辑收函数内):
# 旧「仅开始菜单可开」门随入口迁宿主退役——棋盘输入锁/暂停角标判据已排除浮窗(T2 防护),
# 旧「仅开始菜单可开」门随入口迁宿主退役——棋盘输入锁/状态角标判据已排除浮窗(T2 防护),
# 遮挡语义=P1 甲 ModalStack 登记制(他模态开时暂隐、关后自动恢复),此处零场景限制
if debug_overlay == null:
return
@@ -1311,7 +1311,7 @@ func _show_debug_overlay() -> void:
_sync_debug_overlay()
# 调试浮窗角标点击(两屏同款处理器——17卡③暂停角标同形制守卫;C6:仍收口 _show_debug_overlay 单口)
# 调试浮窗角标点击(两屏同款处理器——17卡③状态角标同形制守卫;C6:仍收口 _show_debug_overlay 单口)
func _on_debug_badge_pressed() -> void:
var map_on: bool = level_screen != null and level_screen.visible
if _modals == null or (map_on and _modals.has_open_excluding_any([level_screen, debug_overlay])) \
@@ -1321,7 +1321,7 @@ func _on_debug_badge_pressed() -> void:
# 浮窗上下文同步(迭代 18 卡⑦——当局数据刷新+对局中按钮禁用单点):调用面=开窗口与模态开合
# 单口(凡影响开态/对局态的路径必经其一——与 _sync_pause_entry 同款纪律)
# 单口(凡影响开态/对局态的路径必经其一——与 _sync_status_entry 同款纪律)
func _sync_debug_overlay() -> void:
if debug_overlay == null:
return