DefaultBattleMoveResolutionPipeline.kt

package io.github.lishangbu.avalon.game.battle.engine.core.runtime.flow

/**
 * 默认单次出招主流程 pipeline。
 *
 * @property steps 按顺序执行的 move resolution step 集合。
 */
class DefaultBattleMoveResolutionPipeline(
    steps: List<BattleMoveResolutionStep>,
) : BattleMoveResolutionPipeline {
    private val steps: List<BattleMoveResolutionStep> = steps.sortedBy(BattleMoveResolutionStep::order)

    /**
     * 按既定顺序推进一次完整的 move resolution。
     */
    override fun resolve(context: BattleMoveResolutionContext): MoveResolutionResult {
        steps.forEach { step ->
            if (context.cancelled) {
                return@forEach
            }
            step.execute(context)
        }
        return context.toResult()
    }
}