diff --git a/game/smoke/smoke_all.gd b/game/smoke/smoke_all.gd index 220f74bb..ee05c892 100644 --- a/game/smoke/smoke_all.gd +++ b/game/smoke/smoke_all.gd @@ -238,6 +238,14 @@ func _topmost_visible_layer(main: Node) -> Node: return best +# 渲染面可见按钮递归计数(V2d mn1/mn2 变异锚——句柄缝盲区闭合) +func _count_visible_buttons(node: Node) -> int: + var n := 1 if (node is Button and node.visible) else 0 + for c in node.get_children(): + n += _count_visible_buttons(c) + return n + + # ---- boot 链路时序后置条件(启动态六断言;只立行为可判断言,不造假时序)---- func _smoke_boot_chain() -> void: print("--- 迭代28 T2 boot 链路时序后置条件(V2:六断言)---") @@ -289,6 +297,8 @@ func _smoke_boot_chain() -> void: for old_btn in ["lvbtn", "resumebtn", "campbtn", "careerbtn"]: check(not (old_btn in main._menu_screen), "V2d 四旧钮句柄零命中·%s(彻底撤出——禁隐藏态禁置灰态残留)〔卡② mn2〕" % old_btn) + check(_count_visible_buttons(main._start_overlay) == 3, + "V2d 渲染面可见按钮计数==3(旧钮接回即红——渲染面锚,句柄缝盲区闭合)〔卡② mn1/mn2〕") # ⑤ 闲时会话(_ready 即建、永非 null、在树) check(main.run_scope != null and not main.run_scope.is_adventure and main.run_scope.is_inside_tree(), "V2e run_scope 非空且为闲时会话(is_adventure=false+is_inside_tree)〔装配生命批 V2〕")