fix(iter37①): T2 呈现/组合根缺陷修——蓄力档分档·庆祝句柄·互斥四口·模态 fail-fast·站桩按 id 解析

- d2 蓄力档 `_intent_charge` 布尔分档(颜色相等判据退役,深浅金同值不再误判);d4 庆祝浮动 tween 句柄 kill 纪律(close 必杀)
- d5/d6/d7/d8 互斥四口:调试钮判据并入 `_sync_sim_button` 单点、组合根两守卫补模拟态/冒险态、`is_running()` 运行态查询面
- d9 ModalStack open/close fail-fast+遮挡账合并非覆盖(重复 open 不再吞旧账);d12 target_id 产发(damage_controller 四处)+站桩两口 id 先名兜底;d17 await 后实例守卫;d18 参数类型注解
- 断言:standee_fx_sweep_test(新增,18 项)/modal_flow_test V6-5(5 项 wd9,V6-1~4 原样同绿)/damage_controller_test target_id/pacing_queue_test 排播 target_id/system_test wd6+wd7
- 代拍板:d18 卡片字面 `lumas_out: Array[Variant] = null` 在 Godot 4.7 解析报错(typed array 不可默认 null),改用 `Variant = null`——唯一合法注法,零行为变化,随代拍板追认单留痕
This commit is contained in:
DKChan committed 2026-10-25 03:49:05 +08:00
1 parent 1b9736f065
commit 0529e1691c
19 files changed
+348 -21

No files matched your search

@@ -7,9 +7,35 @@
# 运行:godot --headless --path game --script res://tests/unit/presentation/pacing_queue_test.gd(expect 0)
extends SceneTree
const RowPacerScript := preload("res://presentation/row_pacer.gd")
var _problems: Array = []
# 记参假站桩(d12 排播半):继承真类以过类型面,只记解析入参
class FakeStage extends BattleStageView:
var calls: Array = []
func enemy_standee_center(target_id: String, display_name: String) -> Variant:
calls.append([target_id, display_name])
return Vector2(10, 10)
# 记参假演出层(同上——play_* 全部只记不演)
class FakeFx extends SettlementFxView:
var calls: Array = []
func play_projectile(_from: Vector2, _to: Vector2, _glyph: String, _col: Color, _crit: bool = false) -> void:
calls.append(["projectile", _to])
func play_damage_number(_pos: Vector2, _text: String, _col: Color, _crit: bool = false) -> void:
calls.append(["mark", _pos])
func play_status_pulse(_pos: Vector2, _col: Color) -> void:
calls.append(["pulse", _pos])
func check(cond: bool, msg: String) -> void:
if not cond:
_problems.append(msg)
@@ -98,6 +124,21 @@ func _init() -> void:
UiKit.motion_scale = 0.5
check(main.pace_delay_for("damage", "heal") == 0.0, "减动效段间延迟归零(行不跳过——同帧直落快路)")
UiKit.motion_scale = 1.0
# ---- 断言④:排播两处取用按行 target_id 解析站桩(d12 排播半——假 stage 记参)----
var rp = RowPacerScript.new()
var fstage := FakeStage.new(null)
var ffx := FakeFx.new()
rp.stage = fstage
rp.board_view = main.board_view
rp.settlement_fx = ffx
rp._play_settlement_mark({"type": "damage", "target": "哥布林", "target_id": "goblin_b", "value": 3})
check(fstage.calls.size() == 1 and fstage.calls[0] == ["goblin_b", "哥布林"],
"结算标出按行 target_id 解析站桩(id 与名同传——d12)")
rp._play_cross_zone_fx({"type": "damage", "target": "哥布林", "target_id": "goblin_b", "value": 3})
check(fstage.calls.size() == 2 and fstage.calls[1] == ["goblin_b", "哥布林"],
"跨区弹道按行 target_id 解析站桩(id 与名同传——d12)")
check(ffx.calls.size() == 2, "两路解析成功后演出层各接一拍(记参面非空)")
rp.free()
_finish()