Skip to content

Commit 1e73b9f

Browse files
committed
Prefer Players with Kick skill when automatically selecting the player to kick the ball
1 parent c4b3fa5 commit 1e73b9f

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

modules/jervis-engine/src/commonMain/kotlin/com/jervisffb/engine/actions/GameActionDescriptor.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.jervisffb.engine.GameEngineController
44
import com.jervisffb.engine.actions.SelectPlayer
55
import com.jervisffb.engine.fsm.ActionNode
66
import com.jervisffb.engine.model.Direction
7+
import com.jervisffb.engine.model.Game
78
import com.jervisffb.engine.model.Player
89
import com.jervisffb.engine.model.PlayerId
910
import com.jervisffb.engine.model.SkillId
@@ -354,6 +355,8 @@ data class SelectPlayer private constructor(
354355
}
355356
override fun createAll(): List<GameAction> = players.map { PlayerSelected(it) }
356357

358+
fun getPlayers(state: Game): List<Player> = players.map { state.getPlayerById(it) }
359+
357360
companion object {
358361
fun single(player: Player): SelectPlayer = SelectPlayer(listOf(player.id))
359362
fun fromPlayers(players: List<Player>): SelectPlayer {

modules/jervis-ui/src/commonMain/kotlin/com/jervisffb/ui/game/state/ManualActionProvider.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import com.jervisffb.engine.actions.GameAction
2020
import com.jervisffb.engine.actions.GameActionDescriptor
2121
import com.jervisffb.engine.actions.MoveTypeSelected
2222
import com.jervisffb.engine.actions.NoRerollSelected
23+
import com.jervisffb.engine.actions.PlayerSelected
2324
import com.jervisffb.engine.actions.Revert
2425
import com.jervisffb.engine.actions.SelectBlockType
2526
import com.jervisffb.engine.actions.SelectDicePoolResult
@@ -426,15 +427,21 @@ open class ManualActionProvider(
426427
}
427428

428429
// Randomly select a kicking player
429-
// TODO Should only do this if no-one has kick
430430
val currentNode = controller.currentProcedure()?.currentNode()
431431
if (currentNode == TheKickOff.NominateKickingPlayer && menuViewModel.isFeatureEnabled(
432432
Feature.SELECT_KICKING_PLAYER
433433
)) {
434434
return (currentNode as ActionNode).getAvailableActions(controller.state, controller.rules)
435435
.filterIsInstance<SelectPlayer>()
436436
.single()
437-
.createRandom()
437+
.getPlayers(game.state).let {
438+
val playersWithKick = it.filter { it.isSkillAvailable(SkillType.KICK) }
439+
if (playersWithKick.isNotEmpty()) {
440+
PlayerSelected(playersWithKick.first())
441+
} else {
442+
PlayerSelected(it.random())
443+
}
444+
}
438445
}
439446

440447
// If a player action can only end, just end it immediately

0 commit comments

Comments
 (0)