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