BattleLifecycle.kt
package io.github.lishangbu.avalon.game.battle.engine.core.model
/**
* 战斗会话的全局生命周期。
*
* 设计意图:
* - 用一个显式阶段描述整场 battle 目前处于“初始化、运行、已结束待结算、已结算”中的哪一段;
* - 让上层不再通过 `started / ended / settled` 三个布尔字段自行拼装阶段语义;
* - 为 session API 的调用边界提供统一判定依据。
*
* 这里刻意只表达“全局稳定阶段”,不把 `RESOLVING_TURN` 这类同步瞬时过程态持久化进 state,
* 避免状态恢复时引入额外复杂度。
*/
enum class BattleLifecycle {
/**
* 会话已创建,但仍处于 side/unit 注册与业务配置阶段。
*/
INITIALIZING,
/**
* 战斗已经正式开始,允许进入回合循环。
*/
RUNNING,
/**
* 胜负或结束原因已经确定,但战后资源、副作用尚未统一结算。
*/
ENDED_UNSETTLED,
/**
* 战后副作用已经全部完成,整场 battle 生命周期彻底结束。
*/
SETTLED,
;
/**
* 当前 battle 是否仍处于建局阶段。
*/
fun isInitializing(): Boolean = this == INITIALIZING
/**
* 当前 battle 是否正处于回合循环阶段。
*/
fun isRunning(): Boolean = this == RUNNING
/**
* 当前 battle 是否已经结束。
*
* 说明:
* - 只要进入 `ENDED_UNSETTLED` 或 `SETTLED`,都视为战斗结果已经确定;
* - 结算完成与否只影响后置副作用,不影响“是否已终局”。
*/
fun isEnded(): Boolean = this == ENDED_UNSETTLED || this == SETTLED
/**
* 当前 battle 是否已经完成最终结算。
*/
fun isSettled(): Boolean = this == SETTLED
}