DefaultBattleSessionTurnPipeline.kt
package io.github.lishangbu.avalon.game.battle.engine.core.session
/**
* 默认 battle 回合推进 pipeline。
*
* @property steps 按顺序执行的回合步骤集合。
*/
class DefaultBattleSessionTurnPipeline(
steps: List<BattleSessionTurnStep>,
private val resultRecorder: BattleSessionTurnResultRecorder = BattleSessionTurnResultRecorder(),
) : BattleSessionTurnPipeline {
private val steps: List<BattleSessionTurnStep> = steps.sortedBy(BattleSessionTurnStep::order)
/**
* 按既定顺序推进一次完整回合。
*/
override fun resolve(session: BattleSession): BattleSessionTurnResult {
val context = BattleSessionTurnContext(session)
steps.forEach { step -> step.execute(context) }
return resultRecorder.record(context)
}
companion object {
/**
* 创建 battle-engine 内置的默认回合推进 pipeline。
*
* @return 包含标准回合步骤的默认 pipeline。
*/
fun createDefault(): DefaultBattleSessionTurnPipeline =
DefaultBattleSessionTurnPipeline(
steps = BattleSessionDefaultTurnStepFactory.createDefaultSteps(),
)
}
}