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:
1 parent
22417783db
commit
fec30644bd
5 files changed
+84
-26
No files matched your search
@@ -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)
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user