BattleSessionTurnStatus.kt
package io.github.lishangbu.avalon.game.battle.engine.core.session
import io.github.lishangbu.avalon.game.battle.engine.core.model.BattleLifecycle
/**
* BattleSession 在运行阶段的回合内状态。
*
* 设计意图:
* - 把“当前是等玩家输入、等替补、还是已经可以结算”显式表达出来。
* - 保持它是运行阶段的派生状态,而不是再写回 `BattleState` 形成第二份真相。
*/
enum class BattleSessionTurnStatus {
/**
* 当前回合仍在等待各 side 提交行动。
*/
AWAITING_CHOICES,
/**
* 当前回合已经被濒死/强制换人打断,正在等待替补选择。
*/
AWAITING_REPLACEMENT,
/**
* 当前回合输入已完整,可以正式进入结算。
*/
READY_TO_RESOLVE,
;
companion object {
/**
* 根据全局生命周期和当前回合输入情况推导回合内状态。
*
* 约定:
* - 只有 battle 处于 `RUNNING` 时才存在回合内状态。
* - 只要有待处理替补请求,就优先视为 `AWAITING_REPLACEMENT`。
* - 没有替补请求且输入齐全时,视为 `READY_TO_RESOLVE`。
*/
fun from(
lifecycle: BattleLifecycle,
hasPendingReplacement: Boolean,
readyToResolve: Boolean,
): BattleSessionTurnStatus? =
when (lifecycle) {
BattleLifecycle.RUNNING -> {
when {
hasPendingReplacement -> AWAITING_REPLACEMENT
readyToResolve -> READY_TO_RESOLVE
else -> AWAITING_CHOICES
}
}
else -> {
null
}
}
}
}