T3(D3): ArmedTimer helper——三处武装确认计时机制收口(P4乙:缝零动+视觉零变化)

新件 game/presentation/armed_timer.gd(RefCounted):武装/回落/超时/减动效档四能力
(motion_still 档判单点;elapsed 相位取数——1Hz 连续呼吸视觉零变化;窗口<=0=挂起语义)。
三处迁移:
①AP 条弃图刷新(ap_bar_view):tween 秒表(4.0s)→ArmedTimer;三探针缝
  press_refresh_for_probe/confirm_visible/press_confirm_for_probe 语义等价零动
  (click 探针 :513-515 弃图确认链断言全绿实证);字面量 4.0 升 REFRESH_CONFIRM_WINDOW_S。
②选路放弃钮(level_map_screen):_process 帧驱动倒计时+1Hz 呼吸→timer.tick+elapsed 相位;
  减动效静态半透变体语义零变化(档判据归 motion_still);真实二击路径零改。
③战斗总结结算框(main):_settlement_stop_pending 裸布尔→ArmedTimer 挂起态属性化
  (窗口 0;读=armed/写=arm/disarm——探针与冒烟直读写接缝语义零变化;main 无 _process
  无需 tick 线)。
闸:click 三种子绿(7/9191、11/7343、23/6026 帧)+冒烟 718/0+run_all 15+ui_probe 绿。
This commit is contained in:
DKChan committed 2026-10-04 07:10:00 +08:00
1 parent 22417783db
commit fec30644bd
5 files changed
+84 -26

No files matched your search

+14 -15
View File
@@ -61,14 +61,14 @@ var _cand_ids: Array[int] = [] # 本停点候选 id 集(图上命
var _content_size := Vector2(620, 240) # 图内容包络(open_choices 按图拟合——画布 min 尺寸随它)
var _hover_id := -1 # 悬停预承诺候选(-1 = 无)
var abandon_btn: Button # 放弃入口(可见性归组合根 set_abandon_available——只在冒险模式开)
var _abandon_armed := false # 二次确认态(首击置位、二击提交、超时/重开回落)
var _confirm_left := 0.0 # 确认态剩余秒数(_process 倒计时+脉冲驱动)
var _abandon_timer := ArmedTimer.new() # 放弃确认窗(T3/D3 P4 乙——_process 帧驱动倒计时机制收口;窗口=CONFIRM_WINDOW_S)
var _node_icons := {} # 节点图标贴图(load_tex 守卫——缺位 null → 字形回退,冒烟/无素材检出安全)
var _noise_rect: TextureRect # 屏底石纹(换层色板渐变承载面——null = 纯色回退无挂点)
var _tint_level := 0 # 当前已应用 tint 的层号(0 = 未应用)
func _init() -> void:
_abandon_timer.expired.connect(_reset_abandon_confirm)
# 节点图标贴图装载(样张 v1 冻结形制——load_tex 守卫,缺位回退现行字形)
for t in TEX_NODE_ICONS:
_node_icons[t] = UiKit.load_tex(TEX_NODE_ICONS[t])
@@ -201,34 +201,33 @@ func set_abandon_available(v: bool) -> void:
# 放弃二次确认(布局决策 3):首击转确认态(文案+危险红脉冲约 3 秒超时回落),二击才提交。
# 单击不提交——ui_probe 战斗中 pressed.emit() 单击路径保持「未受理」语义(战斗中拒绝归组合根)。
func _on_abandon_pressed() -> void:
if not _abandon_armed:
_abandon_armed = true
_confirm_left = CONFIRM_WINDOW_S
if not _abandon_timer.is_armed():
_abandon_timer.arm(CONFIRM_WINDOW_S)
abandon_btn.text = "再点一次确认放弃——不可逆"
if ArmedTimer.motion_still():
abandon_btn.modulate = Color(1, 1, 1, 0.75) # 减动效静态基色(脉冲层不再驱动)
return
_reset_abandon_confirm()
abandon_requested.emit()
func _reset_abandon_confirm() -> void:
_abandon_armed = false
_confirm_left = 0.0
_abandon_timer.disarm()
abandon_btn.modulate = Color(1, 1, 1, 1)
abandon_btn.text = "放弃" # 打磨包 2026-09-29——文案收敛 level-map 4 字上限(确认态转义面见 _on_abandon_pressed)
func _process(delta: float) -> void:
if not _abandon_armed:
if not _abandon_timer.is_armed():
return
_confirm_left -= delta
if _confirm_left <= 0.0:
_reset_abandon_confirm()
return
# 危险红边框脉冲(单段呼吸约 1Hz——闪烁基线 ≤3 次/秒内;减动效 = 静态半透不闪)
if UiKit.motion_scale < 1.0:
_abandon_timer.tick(delta)
if not _abandon_timer.is_armed():
return # 窗口到点回落(expired 信号已驱动 _reset_abandon_confirm)
# 危险红边框脉冲(单段呼吸约 1Hz——闪烁基线 ≤3 次/秒内;减动效 = 静态半透不闪——档判据单点 motion_still)
if ArmedTimer.motion_still():
abandon_btn.modulate = Color(1, 1, 1, 0.75)
else:
var k := 0.5 + 0.5 * sin(_confirm_left * TAU)
var k := 0.5 + 0.5 * sin(_abandon_timer.elapsed * TAU)
abandon_btn.modulate = Color(1, 1, 1, 0.65 + 0.35 * k)