diff --git a/docs/technical/boss_design.md b/docs/technical/boss_design.md index a7d1679..287b52d 100644 --- a/docs/technical/boss_design.md +++ b/docs/technical/boss_design.md @@ -6,6 +6,8 @@ --- > **⚠️ 实现现状 (2026-07-20 审计)**:本文档描述的整套 Boss 架构(`BossManager` Autoload、`BossDef`/`BossPhaseDef`/`.tres` 资源、`BossAttackRegistry` 攻击模式注册表、场地机制如冰墙/场地收缩、多阶段弹幕、状态机 `BossInstance`)**均为设计蓝图,代码 0% 实现**。现状 Boss 只是 `EnemyManager` SoA 中 `type=4`(Mini Boss,Wave 8)/`type=5`(Final Boss,Wave 20)的普通厚血实体;唯一的"阶段行为"是当血量跨越 66% / 33% 阈值时召唤一批 `FAST` 杂兵援军(`wave_manager.gd:94-117`)。以下 `BossManager`/`.tres`/攻击模式注册表/场地机制全部尚未落地,保留作为未来实现的目标设计。详见 [审计报告](../../docs_dev/doc_code_audit_2026-07-20.md)。 +> +> **✅ 更新 (2026-07-22)**:阶段状态机 + 7 种攻击模式(ring/spread/aimed/spiral/dash/charge_up/melee)+ 敌方子弹(`EnemyBulletManager`)+ `BOSS_PHASE_CHANGED=29`/`BOSS_KILLED=30` 事件已实现(`BossManager` autoload + `data/bosses.json` + 设计器 Boss 分页)。Boss 仍留在 EnemyManager SoA,移动由 BossManager 接管(非本文档 §2 的完全解耦方案)。仍未实现:场地机制(冰墙/收缩)、通关演出/`GAME_CLEARED`、`.tres`(本工程纯 JSON)。 --- diff --git a/scenes/main/combat_s2.gd b/scenes/main/combat_s2.gd index fdb7fa0..d39a96a 100644 --- a/scenes/main/combat_s2.gd +++ b/scenes/main/combat_s2.gd @@ -218,6 +218,7 @@ func _subscribe_events() -> void: EventBus.subscribe(EventID.SPELL_DEPTH_EXCEEDED, _on_spell_depth_exceeded) EventBus.subscribe(EventID.CHARGE_STATE_CHANGED, _on_charge_state_changed) EventBus.subscribe(EventID.CHARGE_FIRED, _on_charge_fired) + EventBus.subscribe(EventID.BOSS_PHASE_CHANGED, _on_boss_phase_changed) PlayerStats.stats_changed.connect(_on_stats_changed) func _setup_hud() -> void: @@ -741,6 +742,10 @@ func _on_charge_fired(_payload: Dictionary) -> void: _lbl_charge.text = tr("UI_CHARGE_DONE") _lbl_status.text = tr("STATUS_CHARGE_FIRED") +func _on_boss_phase_changed(payload: Dictionary) -> void: + if _lbl_status: + _lbl_status.text = "Boss 阶段 %d!" % int(payload.get("phase", 0)) + func _on_spell_depth_exceeded(_payload: Dictionary) -> void: _lbl_status.text = tr("STATUS_DEPTH") % SpellEvaluator.MAX_TRIGGER_DEPTH _lbl_status.modulate = Color.YELLOW