StatCalculatorFactory.kt
package io.github.lishangbu.avalon.game.calculator.stat
import org.springframework.stereotype.Service
/**
* 能力值计算工厂
*
* 根据能力内部名称选择对应的能力值计算器。
*/
@Service
class StatCalculatorFactory(
/** 计算器列表 */
private val calculators: List<StatCalculator>,
) {
/**
* 按第三世代后的公式计算指定能力项的能力值
*
* @param internalName 能力内部名称,例如 hp、attack、special-attack
* @param base 种族值
* @param dv 个体值(IV)
* @param stateExp 努力值(EV)
* @param level 等级
* @param nature 性格修正百分比,提升为110,普通为100,下降为90
* @return 计算结果;能力项未知或等级无效时返回0
*/
fun calculateStat(
internalName: String,
base: Int,
dv: Int,
stateExp: Int,
level: Int,
nature: Int,
): Int {
if (level <= 0) {
return 0
}
return calculators
.firstOrNull { calculator -> calculator.support(internalName) }
?.calculateStat(base, dv, stateExp, level, nature) ?: 0
}
}