merge: master(04edd55 硬锁v3.1/probe适配四件/出度≤2新模板/血量pct修复)并入修复批——解冲突3处(ui_click_probe三态分派取master侧+ProbeUiUtil助手统一/main.gd锁期点击缓存重放保留+排播变量以RowPacer委托面承接/row_pacer新增pump_ended注入回调承接v3.1演播完边沿重放)+修复解冲突引入的解析错误(三态分派链缩进);闸=冲烟636/0+run_all 15套+headless五探针绿+窗口化三件绿+熵增PASS;ui_click_probe budget耗尽与typed-array错误经纯master对照=1:1同源(master既有,归T17在飞批)
This commit is contained in:
commit
cd1ed95b55
14 files changed
+372
-32
No files matched your search
@@ -117,6 +117,19 @@ var _refresh_used_round := 0 # 本轮已受理刷新次数(遥测 round_r
|
||||
var _boss_active := false # Boss 遭遇变体(阶段指示附 Boss 名)
|
||||
var _was_settling := false # 结算相位上升沿检测(结算轮光带触发——演出链批)
|
||||
|
||||
var _locked_click := {} # 锁期点击缓存(T17 v3.1——最后一次;演播完边沿重放,玩家操作零丢失)
|
||||
|
||||
|
||||
# 锁期点击重放(v3.1):延迟一帧重入唯一动作通道——此刻队列空锁已解,按普通动作受理
|
||||
#(局面在演播期无变化:逻辑先行、演播只是回放——点击语义保真;_row_queue=RowPacer 委托面,
|
||||
# 排播泵本体已迁 row_pacer.gd——T3 结构段)。
|
||||
func _replay_locked_click() -> void:
|
||||
if _locked_click.is_empty() or not _row_queue.is_empty():
|
||||
return
|
||||
var click: Dictionary = _locked_click
|
||||
_locked_click = {}
|
||||
_on_board_action(click["cell"], click["kind"])
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
db = get_node("/root/ConfigDB")
|
||||
@@ -167,6 +180,7 @@ func _build_ui() -> void:
|
||||
_row_pacer.settlement_fx = settlement_fx
|
||||
_row_pacer.board_view = board_view
|
||||
_row_pacer.refresh_request = _refresh_presentations
|
||||
_row_pacer.pump_ended = _replay_locked_click # T17 v3.1——演播完边沿重放锁期点击(合并批接线)
|
||||
add_child(_row_pacer)
|
||||
# 魔法道具两步交互(T3 拆件批——迁 aux_interact_controller.gd;settlement/runner 随关卡更替,
|
||||
# 经现值回调注入——仿 identity_resolver 只读回调先例)
|
||||
@@ -1038,9 +1052,11 @@ func _on_board_action(cell: Vector2i, kind: String) -> void:
|
||||
# 结算演播期棋盘冻结(T17 用户明确令 v3——不可点/不可移/不可挖):
|
||||
# 锁面=排播队列活跃(纯队列判据;排播泵尾迹窗口不可作演播中标志——见 row_pacer._process 注)。
|
||||
# 队列排空即解锁、无状态残留;HUD 按钮不在锁面(停手/明细回看各自通路,开启前
|
||||
# _flush_row_queue 自行排空)。v1 撞收尾链的教训对策:ui_click_probe 的排播期 stall
|
||||
# 豁免随批(合法停顿态),Waiting 收尾等待期**不豁免**——probe 报卡即为真回归信号。
|
||||
# _flush_row_queue 自行排空)。
|
||||
# **点击不丢弃**(v3.1——用户实机「卡死」根因):锁期点击缓存最后一次,演播完边沿
|
||||
# (_process 泵 _was_pumping 分支)自动重放——玩家操作零丢失、体感=「演播一停动作就生效」。
|
||||
if not _row_queue.is_empty():
|
||||
_locked_click = {"cell": cell, "kind": kind}
|
||||
return
|
||||
# 魔法道具选中态劫持(迭代 7 T4——两步交互第二步):点格=使用目标拾取,不落挖格;
|
||||
# 只劫持挖掘点击(move/flag 语义不冲突——选中期玩家仍可移动/插旗)
|
||||
|
||||
@@ -23,6 +23,7 @@ var board_zone: BoardZoneView
|
||||
var settlement_fx: SettlementFxView
|
||||
var board_view: BoardView
|
||||
var refresh_request := Callable() # () → 组合根 _refresh_presentations(行尾直呼/演播完边沿 call_deferred)
|
||||
var pump_ended := Callable() # () → 组合根锁期点击重放入口(T17 v3.1——演播完边沿 call_deferred;空回调安全)
|
||||
|
||||
|
||||
# 队列只读面(探针/测试经组合根委托属性读——共享同一 Array 引用,读数即实况)
|
||||
@@ -65,6 +66,10 @@ func _process(delta: float) -> void:
|
||||
# 无核心信号驱动——此处主动刷回挖掘态(去饱和解除/明细带收起/mode=dig)。
|
||||
_was_pumping = false
|
||||
refresh_request.call_deferred()
|
||||
# 锁期点击重放(T17 v3.1——玩家操作零丢失):最后一次锁期点击延迟一帧重入
|
||||
# _on_board_action(此刻队列已空=锁已解,正常受理;重放入口由组合根注入)。
|
||||
if pump_ended.is_valid():
|
||||
pump_ended.call_deferred()
|
||||
return
|
||||
_was_pumping = true
|
||||
_pace_wait -= delta
|
||||
|
||||
@@ -393,6 +393,9 @@ func _draw_graph(canvas: Control) -> void:
|
||||
var visited: Array = _runner.visited_ids()
|
||||
var cand_ids: Array = _runner.next_candidate_ids()
|
||||
# 连线(通道)先行画(方块覆盖其上);悬停预承诺 = 所属通道再增亮(加粗)
|
||||
# T17 修复:选路停点(候选非空)非候选通道降透明——金岔路从结构网分离(干线共线重叠缺陷的
|
||||
# 视觉主因:不同源通道共用同一垂直干线,金边与石色边焊接成「整列可走」假象)
|
||||
var dim_passages: bool = not cand_ids.is_empty()
|
||||
for node in nodes:
|
||||
var from: Vector2 = pos[node]
|
||||
for tid in _out_ids(node, nodes):
|
||||
@@ -402,7 +405,7 @@ func _draw_graph(canvas: Control) -> void:
|
||||
var to: Vector2 = pos[target]
|
||||
var lit: bool = _id_of(node) == current_id and cand_ids.has(tid)
|
||||
var hovered: bool = lit and _hover_id == tid
|
||||
var col := COL_PASSAGE_LIT if lit else COL_PASSAGE
|
||||
var col := COL_PASSAGE_LIT if lit else (Color(COL_PASSAGE, 0.35) if dim_passages else COL_PASSAGE)
|
||||
var width := 4.0 if hovered else (3.0 if lit else 2.0) # 样张 v1 冻结:2/3/4(原 1.5 取整)
|
||||
_draw_passage(canvas, from, to, col, width)
|
||||
# 房间方块
|
||||
@@ -511,6 +514,9 @@ func _draw_passage(canvas: Control, from: Vector2, to: Vector2, col: Color, widt
|
||||
var b := to - Vector2(NODE_HALF.x, 0)
|
||||
if b.x < a.x:
|
||||
return
|
||||
var mid_x := (a.x + b.x) / 2.0
|
||||
# T17 修复:垂直干线 x 按源节点 y 偏移——不同源的边不再共线重叠(旧 mid_x=中点使相邻层
|
||||
# 全部通道焊成一条干系,「金岔路+整列可走」误读的直接几何根源)。同源双边仍共线(同出发
|
||||
# 点语义正确),跨源分离度 = 源行距 × 0.2(L2 行距 ~58px → 偏移 ~12px 可辨)。
|
||||
var mid_x := (a.x + b.x) / 2.0 + (a.y - b.y) * 0.2
|
||||
var pts := PackedVector2Array([a, Vector2(mid_x, a.y), Vector2(mid_x, b.y), b])
|
||||
canvas.draw_polyline(pts, col, width)
|
||||
@@ -61,7 +61,8 @@ func _build() -> void:
|
||||
box.add_child(_fs_btn)
|
||||
|
||||
# 减动效(battle.md §Transitions 承诺转正——时长减半,结算逐行兑现=信息载体不整体跳过)
|
||||
_motion_btn = UiKit.button("减动效:关(动画时长减半——运动敏感/演示用)")
|
||||
# 文案由 _sync_motion_text 按状态装配(构造串仅占位——_sync 启动即覆盖)
|
||||
_motion_btn = UiKit.button("结算演出动画")
|
||||
_motion_btn.toggle_mode = true
|
||||
_motion_btn.toggled.connect(_on_motion_toggled)
|
||||
box.add_child(_motion_btn)
|
||||
@@ -79,7 +80,16 @@ func _sync() -> void:
|
||||
_fs_btn.set_pressed_no_signal(_store.fullscreen)
|
||||
_fs_btn.text = "全屏:%s" % ("开" if _store.fullscreen else "关")
|
||||
_motion_btn.set_pressed_no_signal(_store.reduced_motion)
|
||||
_motion_btn.text = "减动效:%s(动画时长减半——运动敏感/演示用)" % ("开" if _store.reduced_motion else "关")
|
||||
_sync_motion_text()
|
||||
|
||||
|
||||
# T17 修复:文案随状态即时刷新(旧 bug=切换后文案恒「开」,玩家无法得知当前态)+语义命名
|
||||
# (「减动效」玩家读不懂——实称「结算演出动画」速度档)+操作提示内联(所见即所得)。
|
||||
func _sync_motion_text() -> void:
|
||||
if _store.reduced_motion:
|
||||
_motion_btn.text = "结算演出动画:快速(时长减半——运动敏感/演示用)· 点击改回完整"
|
||||
else:
|
||||
_motion_btn.text = "结算演出动画:完整 · 点击改为快速(时长减半——运动敏感/演示用)"
|
||||
|
||||
|
||||
func _on_volume_changed(v: float) -> void:
|
||||
@@ -99,6 +109,7 @@ func _on_motion_toggled(on: bool) -> void:
|
||||
_store.reduced_motion = on
|
||||
_store.apply()
|
||||
_store.save_settings()
|
||||
_sync_motion_text() # T17 修复:切换即时刷新文案(旧版漏刷新=状态文字恒「开」)
|
||||
|
||||
|
||||
func _emit_closed() -> void:
|
||||
|
||||
Reference in new issue
Block a user