DefaultBattleTypeEffectivenessResolver.kt

package io.github.lishangbu.avalon.game.battle.adapter

import io.github.lishangbu.avalon.dataset.api.service.TypeEffectivenessService
import io.github.lishangbu.avalon.game.battle.engine.core.model.UnitState
import io.github.lishangbu.avalon.game.battle.engine.core.runtime.flow.BattleTypeEffectivenessResolver
import org.springframework.stereotype.Component

/**
 * 基于 dataset 类型相性服务的 battle-engine 属性克制适配器。
 *
 * 这里属于 game 对引擎 SPI 的真实数据注入,不再放进 battle 核心编排包。
 */
@Component
class DefaultBattleTypeEffectivenessResolver(
    private val typeEffectivenessService: TypeEffectivenessService,
) : BattleTypeEffectivenessResolver {
    override fun resolve(
        moveType: String?,
        attacker: UnitState?,
        target: UnitState?,
    ): Double {
        if (moveType == null || target == null || target.typeIds.isEmpty()) {
            return 1.0
        }
        return typeEffectivenessService.calculate(moveType, target.typeIds.toList()).finalMultiplier?.toDouble() ?: 1.0
    }
}