WildBattleAiChoiceProvider.kt
package io.github.lishangbu.avalon.game.battle.engine.application.ai
import io.github.lishangbu.avalon.game.battle.engine.core.constant.BattleStatIds
import io.github.lishangbu.avalon.game.battle.engine.core.model.BattleType
import io.github.lishangbu.avalon.game.battle.engine.core.runtime.support.BattleStatAliasResolver
import io.github.lishangbu.avalon.game.battle.engine.core.session.BattleSessionChoice
import io.github.lishangbu.avalon.game.battle.engine.core.session.BattleSessionQuery
import io.github.lishangbu.avalon.game.battle.engine.core.session.WaitChoice
import io.github.lishangbu.avalon.game.battle.engine.spi.ai.BattleAiChoiceProvider
import org.springframework.stereotype.Component
@Component
class WildBattleAiChoiceProvider : BattleAiChoiceProvider {
override fun supports(battleKind: BattleType): Boolean = battleKind == BattleType.WILD
override fun provide(session: BattleSessionQuery): List<BattleSessionChoice> {
val capturableSideId = session.snapshot.battle.capturableSideId ?: return emptyList()
return session.choiceStatuses
.filter { status -> status.sideId == capturableSideId }
.flatMap { status -> status.missingUnitIds }
.map { unitId ->
val speed =
session.snapshot.units[unitId]
?.stats
?.let { stats -> BattleStatAliasResolver.readValue(stats, BattleStatIds.SPEED) }
?: 0
WaitChoice(unitId = unitId, speed = speed)
}
}
}