回合制战斗的核心是**状态流转**，一个清晰的状态机比一堆 if-else 可靠得多。

## 状态划分

战斗场景拆成 6 个状态：

```gdscript
enum BattleState {
    INTRO,      # 入场演出
    PLAYER_TURN, # 玩家回合
    ENEMY_TURN, # 敌人回合
    RESOLVE,    # 结算伤害
    CHECK_END,  # 检查胜负
    VICTORY,    # 胜利演出
    DEFEAT,     # 失败演出
}
```

## 状态机核心

```gdscript
class BattleFSM:
    var current: BattleState = BattleState.INTRO

    func transition(next: BattleState) -> void:
        _exit_state(current)
        current = next
        _enter_state(current)
```

## 关键点

*   **单一出口**：每回合只能通过 CHECK\_END 结束
    
*   **事件驱动**：动画播放完成才发信号推进状态，不靠定时器猜
    

> 状态机不怕状态多，怕的是状态之间互相偷渡。

## 下一步

接入角色技能系统和 buff 结算。