diff options
author | Joffrey Bion <joffrey.bion@booking.com> | 2020-05-28 12:47:00 +0200 |
---|---|---|
committer | Joffrey Bion <joffrey.bion@booking.com> | 2020-05-28 13:34:57 +0200 |
commit | a4da60fa4a816e3b8428eaffd2bd605dc0aed031 (patch) | |
tree | 18fcef04d9826fb94854c1a38584460659d8a3dd /sw-engine | |
parent | Add server-side support for PLAY_FREE_DISCARDED special ability (diff) | |
download | seven-wonders-a4da60fa4a816e3b8428eaffd2bd605dc0aed031.tar.gz seven-wonders-a4da60fa4a816e3b8428eaffd2bd605dc0aed031.tar.bz2 seven-wonders-a4da60fa4a816e3b8428eaffd2bd605dc0aed031.zip |
Add UI support for playing discarded cards
Resolves:
https://github.com/joffrey-bion/seven-wonders/issues/25
Resolves:
https://github.com/joffrey-bion/seven-wonders/issues/26
Diffstat (limited to 'sw-engine')
4 files changed, 9 insertions, 5 deletions
diff --git a/sw-engine/src/main/kotlin/org/luxons/sevenwonders/engine/converters/Boards.kt b/sw-engine/src/main/kotlin/org/luxons/sevenwonders/engine/converters/Boards.kt index c974c25f..7ff870cf 100644 --- a/sw-engine/src/main/kotlin/org/luxons/sevenwonders/engine/converters/Boards.kt +++ b/sw-engine/src/main/kotlin/org/luxons/sevenwonders/engine/converters/Boards.kt @@ -5,6 +5,7 @@ import org.luxons.sevenwonders.engine.boards.ScienceType import org.luxons.sevenwonders.engine.effects.RawPointsIncrease import org.luxons.sevenwonders.engine.moves.Move import org.luxons.sevenwonders.engine.resources.Resources +import org.luxons.sevenwonders.model.Age import org.luxons.sevenwonders.model.MoveType import org.luxons.sevenwonders.model.cards.Color import org.luxons.sevenwonders.model.cards.TableCard @@ -24,7 +25,7 @@ import org.luxons.sevenwonders.model.boards.Science as ApiScience import org.luxons.sevenwonders.model.wonders.ApiWonder as ApiWonder import org.luxons.sevenwonders.model.wonders.ApiWonderStage as ApiWonderStage -internal fun InternalBoard.toApiBoard(player: Player, lastMove: Move?): ApiBoard = +internal fun InternalBoard.toApiBoard(player: Player, lastMove: Move?, currentAge: Age): ApiBoard = ApiBoard( playerIndex = playerIndex, wonder = wonder.toApiWonder(player, lastMove), @@ -37,7 +38,8 @@ internal fun InternalBoard.toApiBoard(player: Player, lastMove: Move?): ApiBoard bluePoints = getPlayedCards() .filter { it.color == Color.BLUE } .flatMap { it.effects.filterIsInstance<RawPointsIncrease>() } - .sumBy { it.points } + .sumBy { it.points }, + canPlayAnyCardForFree = canPlayFreeCard(currentAge) ) internal fun List<TableCard>.toColumns(): List<List<TableCard>> { diff --git a/sw-engine/src/main/kotlin/org/luxons/sevenwonders/engine/converters/Table.kt b/sw-engine/src/main/kotlin/org/luxons/sevenwonders/engine/converters/Table.kt index 290b3dc9..ccb73cc1 100644 --- a/sw-engine/src/main/kotlin/org/luxons/sevenwonders/engine/converters/Table.kt +++ b/sw-engine/src/main/kotlin/org/luxons/sevenwonders/engine/converters/Table.kt @@ -7,7 +7,7 @@ import org.luxons.sevenwonders.engine.boards.Table import org.luxons.sevenwonders.model.TableState internal fun Table.toTableState(): TableState = TableState( - boards = boards.mapIndexed { i, b -> b.toApiBoard(SimplePlayer(i, this), lastPlayedMoves.getOrNull(i)) }, + boards = boards.mapIndexed { i, b -> b.toApiBoard(SimplePlayer(i, this), lastPlayedMoves.getOrNull(i), currentAge) }, currentAge = currentAge, handRotationDirection = handRotationDirection, lastPlayedMoves = lastPlayedMoves.map { it.toPlayedMove() } diff --git a/sw-engine/src/main/kotlin/org/luxons/sevenwonders/engine/wonders/Wonder.kt b/sw-engine/src/main/kotlin/org/luxons/sevenwonders/engine/wonders/Wonder.kt index 2fd369ee..0e1b37f0 100644 --- a/sw-engine/src/main/kotlin/org/luxons/sevenwonders/engine/wonders/Wonder.kt +++ b/sw-engine/src/main/kotlin/org/luxons/sevenwonders/engine/wonders/Wonder.kt @@ -52,6 +52,8 @@ private object Buildability { fun alreadyBuilt() = WonderBuildability( isBuildable = false, + minPrice = Int.MAX_VALUE, + cheapestTransactions = emptySet(), playabilityLevel = PlayabilityLevel.INCOMPATIBLE_WITH_BOARD ) diff --git a/sw-engine/src/test/kotlin/org/luxons/sevenwonders/engine/GameTest.kt b/sw-engine/src/test/kotlin/org/luxons/sevenwonders/engine/GameTest.kt index e1a1b4a7..51a6376a 100644 --- a/sw-engine/src/test/kotlin/org/luxons/sevenwonders/engine/GameTest.kt +++ b/sw-engine/src/test/kotlin/org/luxons/sevenwonders/engine/GameTest.kt @@ -77,7 +77,7 @@ class GameTest { private fun PlayerTurnInfo.firstAvailableMove(): MoveExpectation? = when (action) { Action.PLAY, Action.PLAY_2, Action.PLAY_LAST -> createPlayCardMove(this) - Action.PLAY_FREE_DISCARDED -> createPlayFreeDiscardedMove(this) + Action.PLAY_FREE_DISCARDED -> createPlayFreeDiscardedCardMove(this) Action.PICK_NEIGHBOR_GUILD -> createPickGuildMove(this) Action.WAIT, Action.SAY_READY -> null Action.WATCH_SCORE -> fail("should not have WATCH_SCORE action before end of game") @@ -97,7 +97,7 @@ class GameTest { } } - private fun createPlayFreeDiscardedMove(turn: PlayerTurnInfo): MoveExpectation { + private fun createPlayFreeDiscardedCardMove(turn: PlayerTurnInfo): MoveExpectation { val card = turn.discardedCards?.random() ?: error("No discarded card to play") return MoveExpectation( turn.playerIndex, |