GrowthRateCalculatorFactory.kt

package io.github.lishangbu.avalon.game.calculator.growthrate

import org.springframework.stereotype.Service

/**
 * 成长速率计算工厂
 *
 * 根据内部名称选择对应的成长速率计算器
 */
@Service
class GrowthRateCalculatorFactory(
    /** 计算器列表 */
    private val calculators: List<GrowthRateCalculator>,
) {
    /**
     * 计算达到指定等级所需的总经验值
     * @param internalName 成长速率内部名称
     * @param level 目标等级,必须大于0
     * @return 达到指定等级所需的总经验值,等级无效时返回0
     */
    fun calculateGrowthRate(
        internalName: String,
        level: Int,
    ): Int {
        if (level <= 0) return 0
        if (level == 1) {
            return 0
        }
        return calculators
            .firstOrNull { calculator -> calculator.support(internalName) }
            ?.calculateGrowthRate(level) ?: 0
    }
}