BattleMoveSpecialHitPhaseStep.kt

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

/**
 * 特殊命中规则 phase step。
 *
 * 设计意图:
 * - 在常规命中判定前收口高优先级命中规则与特殊公式;
 * - 避免把 `alwaysHit / lock-on / no-guard / OHKO` 这类逻辑硬塞进通用命中率公式;
 * - 让天气必中与天气命中率改写继续通过 move data 配置扩展。
 */
class BattleMoveSpecialHitPhaseStep(
    private val specialHitRuleResolver: BattleMoveSpecialHitRuleResolver,
) : BattleMoveResolutionStep {
    /**
     * 当前步骤在 pipeline 中的执行顺序。
     */
    override val order: Int = 50

    /**
     * 在标准命中策略执行前,尝试收口本次特殊命中规则。
     */
    override fun execute(context: BattleMoveResolutionContext) {
        val resolution = specialHitRuleResolver.resolve(context)
        resolution.resolvedAccuracy?.let { resolvedAccuracy ->
            context.accuracy = resolvedAccuracy
        }
        context.forcedHitSuccessful = resolution.forcedHitSuccessful
        context.skipAccuracyEvasionModifiers = resolution.skipAccuracyEvasionModifiers
    }
}