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
}
}