iter44-卡1:卡①(组合根注册面批): ui_registry+三域容器建件·main.gd 49→15·全消费面改址main.ui.*·四闸主证行为零变化
This commit is contained in:
1 parent
14054d9dfb
commit
d2b36e59cb
41 files changed
+1073
-1070
No files matched your search
+41
-39
@@ -43,35 +43,35 @@ func _ready() -> void:
|
||||
# ① 全局浮层角标开窗(调试入口=UI 最顶层浮层,任何 UI 不遮挡——
|
||||
# main 直接子层、LAYER_CONTRACT 末位 float 类;boot 菜单优先不开浮窗,角标真实点击路径开窗;
|
||||
# 悬浮于菜单之上——开始层不隐藏;树序新基准=登记册末位(确认弹窗之后=绘制序最上))
|
||||
main.debug_badge.pressed.emit()
|
||||
main.ui.screens.debug_badge.pressed.emit()
|
||||
await get_tree().process_frame
|
||||
if not main.debug_overlay.visible:
|
||||
if not main.ui.modals.debug_overlay.visible:
|
||||
problems.append("调试浮层角标点击后浮窗未开(全局浮层入口失守)")
|
||||
if not main._start_overlay.visible:
|
||||
if not main.ui.screens.start_overlay.visible:
|
||||
problems.append("开始覆盖层被隐藏——浮窗应悬浮于菜单之上(14.5 形态失守)")
|
||||
if main.debug_overlay.get_index() < main.confirm_dialog.get_index():
|
||||
if main.ui.modals.debug_overlay.get_index() < main.ui.modals.confirm_dialog.get_index():
|
||||
problems.append("调试浮窗树序不在确认弹窗之后——登记册末位失守")
|
||||
# ② 滑条 → 生效预览联动
|
||||
main.debug_overlay.set_sliders(100, 50)
|
||||
if str(boosted_atk) not in main.debug_overlay.effect_text() or str(boosted_hp) not in main.debug_overlay.effect_text():
|
||||
problems.append("生效预览未联动(%s)" % main.debug_overlay.effect_text())
|
||||
main.ui.modals.debug_overlay.set_sliders(100, 50)
|
||||
if str(boosted_atk) not in main.ui.modals.debug_overlay.effect_text() or str(boosted_hp) not in main.ui.modals.debug_overlay.effect_text():
|
||||
problems.append("生效预览未联动(%s)" % main.ui.modals.debug_overlay.effect_text())
|
||||
# ③ 应用(真实信号路径:apply_requested → 组合根)——E4 后加成零表写,生效断言移至 ⑧ 战斗快照
|
||||
main.debug_overlay.press_apply_for_probe()
|
||||
main.ui.modals.debug_overlay.press_apply_for_probe()
|
||||
# ④ 重置(重开浮窗 → 重置按钮真实路径;面板百分比归零——下一场战斗生效值回到基线)
|
||||
main._show_debug_overlay()
|
||||
main.debug_overlay.press_reset_for_probe()
|
||||
main.ui.modals.debug_overlay.press_reset_for_probe()
|
||||
# ⑤ 批量模拟全链路(N=10——走 level_autoplay 与 headless 扫描同口径;表基线由组合根复位;
|
||||
# 菜单态上下文未锁定=按钮可点,is_running 语义=模拟在跑〔18卡⑦ 与对局禁用态拆分〕)
|
||||
main.debug_overlay.set_sliders(100, 0)
|
||||
main.debug_overlay.set_sim_count(10)
|
||||
main.debug_overlay.press_simulate_for_probe()
|
||||
main.ui.modals.debug_overlay.set_sliders(100, 0)
|
||||
main.ui.modals.debug_overlay.set_sim_count(10)
|
||||
main.ui.modals.debug_overlay.press_simulate_for_probe()
|
||||
var guard := SIM_GUARD_FRAMES
|
||||
while main.debug_overlay.is_running() and guard > 0:
|
||||
while main.ui.modals.debug_overlay.is_running() and guard > 0:
|
||||
guard -= 1
|
||||
await get_tree().process_frame
|
||||
if main.debug_overlay.is_running():
|
||||
if main.ui.modals.debug_overlay.is_running():
|
||||
problems.append("模拟未在预算帧内完成(疑似挂死)")
|
||||
var out: String = main.debug_overlay.output_text()
|
||||
var out: String = main.ui.modals.debug_overlay.output_text()
|
||||
if not out.contains("关卡完成率"):
|
||||
problems.append("模拟输出缺关卡完成率")
|
||||
# 口径换代 V7:胜局统计行措辞钉子(atk+100% 加成档 10 局必有胜局——hp_left_win 非空路径恒出)
|
||||
@@ -83,7 +83,7 @@ func _ready() -> void:
|
||||
problems.append("模拟输出 N 标注错误(%s)" % out.substr(0, 40))
|
||||
# ⑥ 关闭 → 浮窗收起、开始层全程在屏
|
||||
main._close_debug_overlay()
|
||||
if main.debug_overlay.visible or not main._start_overlay.visible:
|
||||
if main.ui.modals.debug_overlay.visible or not main.ui.screens.start_overlay.visible:
|
||||
problems.append("关闭后层级状态错误")
|
||||
# ⑦ hero 表运行期不可变(E4 收口回归断言:任何代码 reintroduce 表写在此被抓获——原"表值残留"断言语义升级)
|
||||
if int(main.db.combat.hero.atk) != base_atk or int(main.db.combat.hero.max_hp) != base_hp:
|
||||
@@ -93,20 +93,20 @@ func _ready() -> void:
|
||||
# 存档隔离(停点断点写盘随 main.save_manager;探针禁碰真实档,同族探针隔离纪律;
|
||||
# isolate_save 先删后建——上次运行的残留断点会触发互斥确认早退)
|
||||
ProbeUiUtil.isolate_save(main, "smoke_tune_probe_save", true, false, true) # 末参=swap_save(卡②签名换代——断点写盘经 autoload 落隔离档)
|
||||
main.debug_overlay.set_sliders(100, 50)
|
||||
main.debug_overlay.press_apply_for_probe()
|
||||
main.debug_overlay.seed_edit.text = "42" # 种子钉死(18卡⑦审计🔴——空框=非首局随机,显式优先经真实路径断言 master_seed)
|
||||
main.ui.modals.debug_overlay.set_sliders(100, 50)
|
||||
main.ui.modals.debug_overlay.press_apply_for_probe()
|
||||
main.ui.modals.debug_overlay.seed_edit.text = "42" # 种子钉死(18卡⑦审计🔴——空框=非首局随机,显式优先经真实路径断言 master_seed)
|
||||
main._start_adventure_from_menu() # 完整冒险路径(唯一试玩入口;_start_single 按语义清零滑条 = 恒基线,不承载加成断言)
|
||||
await get_tree().process_frame
|
||||
await get_tree().process_frame
|
||||
# ⑧b 开冒险路径显式关浮窗(18卡⑦ T2 防护——调试会话默认开态下开局不带窗,对局中经角标再开)
|
||||
if main.debug_overlay.visible:
|
||||
if main.ui.modals.debug_overlay.visible:
|
||||
problems.append("开冒险路径未显式关浮窗(T2 防护失守)")
|
||||
if int(main.run_scope.adventure.master_seed) != 42:
|
||||
problems.append("显式种子未达冒险(master_seed=%s ≠ 42——真实路径显式优先失守)" % str(main.run_scope.adventure.master_seed))
|
||||
# 关卡开始 = 入口选路停点——真实按钮路径选入口候选进首战再读呈现快照
|
||||
if main.level_screen.visible:
|
||||
main.level_screen.press_candidate(0)
|
||||
if main.ui.modals.level_screen.visible:
|
||||
main.ui.modals.level_screen.press_candidate(0)
|
||||
await get_tree().process_frame
|
||||
await get_tree().process_frame
|
||||
var hero: Dictionary = main.run_scope.settlement.presentation_snapshot().hero
|
||||
@@ -116,23 +116,23 @@ func _ready() -> void:
|
||||
# ⑨ 对局中可开(18卡⑦ P2 甲/T2 防护——S1+ 停机点回归闸):战斗屏角标真实信号路径开窗;
|
||||
# 棋盘输入不锁、状态角标不置灰(「默认开×遮挡复活」下必锁死的破约回归面);
|
||||
# 对局中批量模拟/两层调试两钮禁用;当局数据六项与只读访问器逐项一致;关闭钮真实路径收窗恢复
|
||||
var dbg_badge: Button = main.debug_badge
|
||||
var dbg_badge: Button = main.ui.screens.debug_badge
|
||||
if dbg_badge == null or dbg_badge.visible:
|
||||
problems.append("对局中调试浮层角标非恒隐(发布态语义失守——卡⑦ 删写死行批)")
|
||||
else:
|
||||
main._show_debug_overlay() # 对局中开浮窗回归经直调承载(:61 既有直调先例——发布态角标恒隐,按钮信号路径退役)
|
||||
if not main.debug_overlay.visible:
|
||||
if not main.ui.modals.debug_overlay.visible:
|
||||
problems.append("对局中角标开浮窗失败(P2 甲对局中可达失守)")
|
||||
if main._input_locked():
|
||||
if main.ui.modals.flow.locks_input():
|
||||
problems.append("对局中开浮窗后棋盘输入锁死(T2 防护失守——S1+ 停机点)")
|
||||
if main.board_zone.status_badge.disabled:
|
||||
if main.ui.battle.board_zone.status_badge.disabled:
|
||||
problems.append("对局中开浮窗后状态角标置灰(T2 防护失守——S1+ 停机点)")
|
||||
if main.debug_overlay.is_running():
|
||||
if main.ui.modals.debug_overlay.is_running():
|
||||
problems.append("对局中上下文锁定误判为模拟在跑(is_running 语义互扰)")
|
||||
if not main.debug_overlay._sim_btn.disabled or not main.debug_overlay._dbg_btn.disabled:
|
||||
if not main.ui.modals.debug_overlay._sim_btn.disabled or not main.ui.modals.debug_overlay._dbg_btn.disabled:
|
||||
problems.append("对局中批量模拟/两层调试按钮未禁用(T2 并存态不开放失守)")
|
||||
# 当局数据六项值对(T3——数值与只读访问器逐项一致;种子=adventure.master_seed 现值非 _seed_value 重算)
|
||||
var rd: Dictionary = main.debug_overlay.run_data_probe()
|
||||
var rd: Dictionary = main.ui.modals.debug_overlay.run_data_probe()
|
||||
var r = main.run_scope.adventure.runner()
|
||||
if String(rd.get("seed", "")) != "42":
|
||||
problems.append("当局数据种子 ≠ master_seed 现值(%s)" % str(rd.get("seed")))
|
||||
@@ -146,27 +146,27 @@ func _ready() -> void:
|
||||
problems.append("当局数据 GP 失对(%s ≠ %s)" % [str(rd.get("gp")), str(r.gp)])
|
||||
if int(rd.get("keystone", -1)) != main.run_scope.adventure.journal().keystone_gained():
|
||||
problems.append("当局数据钥石失对(%s ≠ %s)" % [str(rd.get("keystone")), str(main.run_scope.adventure.journal().keystone_gained())])
|
||||
var close_btn: Button = ProbeUiUtil.find_button(main.debug_overlay, "关闭", "prefix")
|
||||
var close_btn: Button = ProbeUiUtil.find_button(main.ui.modals.debug_overlay, "关闭", "prefix")
|
||||
if close_btn == null:
|
||||
problems.append("浮窗关闭钮缺失(真实收窗路径中断)")
|
||||
else:
|
||||
close_btn.pressed.emit()
|
||||
if main.debug_overlay.visible or main._input_locked():
|
||||
if main.ui.modals.debug_overlay.visible or main.ui.modals.flow.locks_input():
|
||||
problems.append("对局中关闭浮窗后态失守(visible=%s locked=%s)"
|
||||
% [str(main.debug_overlay.visible), str(main._input_locked())])
|
||||
% [str(main.ui.modals.debug_overlay.visible), str(main.ui.modals.flow.locks_input())])
|
||||
# ⑨b 只读巡检(17卡③形制)+零动效契约(17卡③ R5——零 AnimationPlayer+源码零 tween)
|
||||
_overlay_readonly_contract(main, problems)
|
||||
_overlay_zero_motion_contract(main, problems)
|
||||
# ⑩ 种子三分单点断言(18卡⑦ C1——判定只落 _seed_value() 单点;对局态不影响本判定面):
|
||||
# 显式合法整数全场景优先(含首局)→ 首局(存档布尔 false)恒 42 → 非首局空框引擎熵连抽不全等 42
|
||||
main.debug_overlay.seed_edit.text = "777"
|
||||
main.ui.modals.debug_overlay.seed_edit.text = "777"
|
||||
if main._seed_value() != 777:
|
||||
problems.append("显式种子输入未优先(_seed_value != 777——C1 ①失守)")
|
||||
# SaveManager 是 autoload 单例——换注走原地 attach(首局态挂载+恢复隔离档);
|
||||
# --script 模式无裸 autoload 标识符——经 main 节点路径解析
|
||||
var sm = main.get_node("/root/SaveManager")
|
||||
sm.slots.attach_path("user://smoke_tune_probe_seed.json") # 全新空档——first_adventure_done=false(首局态;新档缺省面)
|
||||
main.debug_overlay.seed_edit.text = ""
|
||||
main.ui.modals.debug_overlay.seed_edit.text = ""
|
||||
if main._seed_value() != 42:
|
||||
problems.append("首局空框种子 != 42(P5 甲失守——教学态可复现破约)")
|
||||
sm.slots.attach_path("user://smoke_tune_probe_save.json") # 恢复隔离档(非首局态——isolate_save 已建档置位)
|
||||
@@ -181,7 +181,7 @@ func _ready() -> void:
|
||||
all42 = false
|
||||
if all42:
|
||||
problems.append("非首局空框连抽 4 次全等 42(随机化失守——C1 ③)")
|
||||
main.debug_overlay.seed_edit.text = "42" # 钉回显式值(现场整洁)
|
||||
main.ui.modals.debug_overlay.seed_edit.text = "42" # 钉回显式值(现场整洁)
|
||||
for f0 in ["user://smoke_tune_probe_seed.json", "user://smoke_tune_probe_seed.json.tmp"]:
|
||||
if FileAccess.file_exists(f0):
|
||||
DirAccess.remove_absolute(f0)
|
||||
@@ -196,10 +196,11 @@ func _ready() -> void:
|
||||
|
||||
|
||||
# 只读巡检(18卡⑦ T3——17卡③「白名单外零连接」形制沿用):浮窗子树全控件 × 游戏语义信号名清单
|
||||
# 全连接巡检——白名单={视图自身八方法 + 组合根 _on_modal_closed(closed 外发消费)};
|
||||
# 全连接巡检——白名单={视图自身八方法 + 注册面模态编排口 ui.modals.flow.close(closed 外发消费——
|
||||
# 注册面批把该连接目标从组合根转发壳改为 flow 真方法,机检白名单随批登记同一连接)};
|
||||
# 当局数据区块=纯标签零连接在此被一并约束(新增任何连接=红须入册审查)。
|
||||
func _overlay_readonly_contract(main: Node, problems: Array) -> void:
|
||||
var overlay: Control = main.debug_overlay
|
||||
var overlay: Control = main.ui.modals.debug_overlay
|
||||
var stack: Array = [overlay]
|
||||
var conn_count := 0
|
||||
while not stack.is_empty():
|
||||
@@ -210,8 +211,9 @@ func _overlay_readonly_contract(main: Node, problems: Array) -> void:
|
||||
var cb: Callable = conn["callable"]
|
||||
var host: Object = cb.get_object()
|
||||
var m := String(cb.get_method())
|
||||
var flow_host: Object = main.ui.modals.flow # 注册面模态编排口(closed 外发消费白名单宿主)
|
||||
var ok := (host == overlay and m in _OVERLAY_VIEW_METHODS) \
|
||||
or (host == main and m == "_on_modal_closed") \
|
||||
or (host == flow_host and m == "close") \
|
||||
or (host is VScrollBar or host is HScrollBar) # 引擎滚动机构内部 drag 接线(RichTextLabel 自动滚动条——17卡③布局生命线同类豁免,零游戏写通路)
|
||||
if not ok:
|
||||
problems.append("[readonly] 非法信号连接 %s.%s → %s.%s(白名单外零连接巡检——18卡⑦ T3)"
|
||||
@@ -224,7 +226,7 @@ func _overlay_readonly_contract(main: Node, problems: Array) -> void:
|
||||
|
||||
# 零动效契约(17卡③ R5 形制——子树零 AnimationPlayer + 视图源码零 tween/动效包装调用)
|
||||
func _overlay_zero_motion_contract(main: Node, problems: Array) -> void:
|
||||
var overlay: Control = main.debug_overlay
|
||||
var overlay: Control = main.ui.modals.debug_overlay
|
||||
var stack: Array = [overlay]
|
||||
while not stack.is_empty():
|
||||
var n: Node = stack.pop_back()
|
||||
|
||||
Reference in new issue
Block a user