diff --git a/game/smoke/ui_input_probe.gd b/game/smoke/ui_input_probe.gd index ab7c26bc..dc31e3c5 100644 --- a/game/smoke/ui_input_probe.gd +++ b/game/smoke/ui_input_probe.gd @@ -57,16 +57,21 @@ func _ready() -> void: _pre_fail("case⑱ 雾面节点选取失败(boss=%d fog=%d)" % [boss_id, fog_id]) return if not bool(disp[boss_id]["boss_border"]): - _pre_fail("case⑱ Boss 节点未带描边标记(id=%d)" % boss_id) + _pre_fail("case⑱ Boss 节点未带描边标记(id=%d)〔fv3〕" % boss_id) return if not bool(disp[int(cands[0])]["draw_icon"]): - _pre_fail("case⑱ 候选节点类型未出示(id=%d——下一跳恒可见)" % int(cands[0])) + _pre_fail("case⑱ 候选节点类型未出示(id=%d——下一跳恒可见)〔fv4〕" % int(cands[0])) return var fog_node := {} for n in nds_vis: if main.run_scope.runner.node_id_of(n) == fog_id: fog_node = n var fog_pos: Vector2 = ro.canvas_probe()["origin"] + ro.layout_probe(nds_vis)[fog_node] + # 零提交判据直接绑 route_chosen 发射:终态会被雾下节点类型(奖励/恢复/商店保持本屏、 + # 战斗/Boss 出屏)与运行器候选校验兜底,单看终态测不出命中面穿透——信号面才是提交面 + var submitted: Array = [] + var on_route := func(nid: int) -> void: submitted.append(nid) + ro.route_chosen.connect(on_route) var evf := InputEventMouseButton.new() evf.button_index = MOUSE_BUTTON_LEFT evf.pressed = true @@ -75,9 +80,10 @@ func _ready() -> void: main.get_viewport().push_input(evf, true) await get_tree().process_frame await get_tree().process_frame - if not main.level_screen.visible or not main.run_scope.runner.awaiting_choice(): - _pre_fail("case⑱ 雾下节点点击产生提交(visible=%s 选路态=%s——雾不扩大可点域)" - % [str(main.level_screen.visible), str(main.run_scope.runner.awaiting_choice())]) + ro.route_chosen.disconnect(on_route) + if not submitted.is_empty() or not main.level_screen.visible or not main.run_scope.runner.awaiting_choice(): + _pre_fail("case⑱ 雾下节点点击产生提交(提交=%s visible=%s 选路态=%s——雾不扩大可点域)〔fv9〕" + % [str(submitted), str(main.level_screen.visible), str(main.run_scope.runner.awaiting_choice())]) return var nds: Array = main.run_scope.runner.nodes() var tgt := {}