File tree Expand file tree Collapse file tree 2 files changed +12
-2
lines changed
jervis-engine/src/commonMain/kotlin/com/jervisffb/engine/actions
jervis-ui/src/commonMain/kotlin/com/jervisffb/ui/game/state Expand file tree Collapse file tree 2 files changed +12
-2
lines changed Original file line number Diff line number Diff line change @@ -4,6 +4,7 @@ import com.jervisffb.engine.GameEngineController
44import com.jervisffb.engine.actions.SelectPlayer
55import com.jervisffb.engine.fsm.ActionNode
66import com.jervisffb.engine.model.Direction
7+ import com.jervisffb.engine.model.Game
78import com.jervisffb.engine.model.Player
89import com.jervisffb.engine.model.PlayerId
910import 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 {
Original file line number Diff line number Diff line change @@ -20,6 +20,7 @@ import com.jervisffb.engine.actions.GameAction
2020import com.jervisffb.engine.actions.GameActionDescriptor
2121import com.jervisffb.engine.actions.MoveTypeSelected
2222import com.jervisffb.engine.actions.NoRerollSelected
23+ import com.jervisffb.engine.actions.PlayerSelected
2324import com.jervisffb.engine.actions.Revert
2425import com.jervisffb.engine.actions.SelectBlockType
2526import 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
You can’t perform that action at this time.
0 commit comments