BattleMoveAfterMovePhaseStep.kt
package io.github.lishangbu.avalon.game.battle.engine.core.runtime.flow
import io.github.lishangbu.avalon.game.battle.engine.core.constant.BattleAttributeKeys
import io.github.lishangbu.avalon.game.battle.engine.core.event.StandardHookNames
import io.github.lishangbu.avalon.game.battle.engine.core.runtime.support.BattleMoveDataReader
/**
* 出招收尾 hook phase step。
*
* @property phaseProcessor battle hook phase 处理器。
*/
class BattleMoveAfterMovePhaseStep(
private val phaseProcessor: BattleFlowPhaseProcessor,
) : BattleMoveResolutionStep {
override val order: Int = 500
override fun execute(context: BattleMoveResolutionContext) {
val moveType = BattleMoveDataReader.readType(context.moveEffect.data)
val damageClass = BattleMoveDataReader.readDamageClass(context.moveEffect.data)
val result =
phaseProcessor.processPhase(
snapshot = context.snapshot,
hookName = StandardHookNames.ON_AFTER_MOVE.value,
moveEffect = context.moveEffect,
selfId = context.attackerId,
targetId = context.targetId,
sourceId = context.sourceId,
relay = null,
attributes =
context.attributes +
mapOf(
BattleAttributeKeys.MOVE_TYPE to moveType,
BattleAttributeKeys.DAMAGE_CLASS to damageClass,
BattleAttributeKeys.CRITICAL_HIT to context.criticalHit,
BattleAttributeKeys.HIT_SUCCESSFUL to context.hitSuccessful,
BattleAttributeKeys.DAMAGE to context.damage,
BattleAttributeKeys.BASE_POWER to context.basePower,
),
)
context.snapshot = result.snapshot
}
}