From 2428a88a5400ca9aa5465beb5ecf06491acad3c7 Mon Sep 17 00:00:00 2001 From: Joffrey BION Date: Wed, 22 May 2019 01:41:08 +0200 Subject: Move common module declarations into api package --- .../org/luxons/sevenwonders/game/api/ApiTable.kt | 25 --------- .../org/luxons/sevenwonders/game/api/Moves.kt | 49 ++++++++++++++++ .../luxons/sevenwonders/game/api/PlayerTurnInfo.kt | 35 ------------ .../org/luxons/sevenwonders/game/api/Table.kt | 15 +++++ .../luxons/sevenwonders/game/api/boards/Boards.kt | 40 +++++++++++++ .../game/api/boards/RelativeBoardPosition.kt | 16 ++++++ .../luxons/sevenwonders/game/api/cards/Cards.kt | 65 ++++++++++++++++++++++ .../game/api/cards/HandRotationDirection.kt | 11 ++++ .../sevenwonders/game/api/resources/Resources.kt | 44 +++++++++++++++ .../sevenwonders/game/api/wonders/Wonders.kt | 32 +++++++++++ .../org/luxons/sevenwonders/game/boards/Boards.kt | 40 ------------- .../game/boards/RelativeBoardPosition.kt | 16 ------ .../org/luxons/sevenwonders/game/cards/Cards.kt | 65 ---------------------- .../game/cards/HandRotationDirection.kt | 11 ---- .../org/luxons/sevenwonders/game/moves/MoveType.kt | 9 --- .../sevenwonders/game/resources/Resources.kt | 44 --------------- .../org/luxons/sevenwonders/game/wonders/Wonder.kt | 32 ----------- 17 files changed, 272 insertions(+), 277 deletions(-) delete mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/ApiTable.kt create mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/Moves.kt delete mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/PlayerTurnInfo.kt create mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/Table.kt create mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/boards/Boards.kt create mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/boards/RelativeBoardPosition.kt create mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/cards/Cards.kt create mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/cards/HandRotationDirection.kt create mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/resources/Resources.kt create mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/wonders/Wonders.kt delete mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/boards/Boards.kt delete mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.kt delete mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/cards/Cards.kt delete mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/cards/HandRotationDirection.kt delete mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/moves/MoveType.kt delete mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/resources/Resources.kt delete mode 100644 sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/wonders/Wonder.kt (limited to 'sw-common-model') diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/ApiTable.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/ApiTable.kt deleted file mode 100644 index 595064b1..00000000 --- a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/ApiTable.kt +++ /dev/null @@ -1,25 +0,0 @@ -package org.luxons.sevenwonders.game.api - -import org.luxons.sevenwonders.game.boards.ApiBoard -import org.luxons.sevenwonders.game.cards.HandRotationDirection -import org.luxons.sevenwonders.game.cards.TableCard -import org.luxons.sevenwonders.game.moves.MoveType -import org.luxons.sevenwonders.game.resources.ResourceTransactions - -typealias Age = Int - -data class ApiTable( - val boards: List, - val currentAge: Age, - val handRotationDirection: HandRotationDirection, - val lastPlayedMoves: List -) { - val nbPlayers: Int = boards.size -} - -data class PlayedMove( - val playerIndex: Int, - val type: MoveType, - val card: TableCard, - val transactions: ResourceTransactions -) diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/Moves.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/Moves.kt new file mode 100644 index 00000000..79a238b0 --- /dev/null +++ b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/Moves.kt @@ -0,0 +1,49 @@ +package org.luxons.sevenwonders.game.api + +import org.luxons.sevenwonders.game.api.cards.HandCard +import org.luxons.sevenwonders.game.api.cards.TableCard +import org.luxons.sevenwonders.game.api.resources.ResourceTransactions +import org.luxons.sevenwonders.game.api.resources.noTransactions +import org.luxons.sevenwonders.game.api.wonders.WonderBuildability + +enum class Action(val message: String) { + PLAY("Pick the card you want to play or discard."), + PLAY_2("Pick the first card you want to play or discard. Note that you have the ability to play these 2 last cards. You will choose how to play the last one during your next turn."), + PLAY_LAST("You have the special ability to play your last card. Choose how you want to play it."), + PICK_NEIGHBOR_GUILD("Choose a Guild card (purple) that you want to copy from one of your neighbours."), + WAIT("Please wait for other players to perform extra actions.") +} + +data class PlayerTurnInfo( + val playerIndex: Int, + val table: ApiTable, + val action: Action, + val hand: List, + val preparedMove: PlayedMove?, + val neighbourGuildCards: List +) { + val currentAge: Int = table.currentAge + val message: String = action.message + val wonderBuildability: WonderBuildability = table.boards[playerIndex].wonder.buildability +} + +data class PlayedMove( + val playerIndex: Int, + val type: MoveType, + val card: TableCard, + val transactions: ResourceTransactions +) + +data class PlayerMove( + val type: MoveType, + val cardName: String, + val transactions: ResourceTransactions = noTransactions() +) + +enum class MoveType { + PLAY, + PLAY_FREE, + UPGRADE_WONDER, + DISCARD, + COPY_GUILD; +} diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/PlayerTurnInfo.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/PlayerTurnInfo.kt deleted file mode 100644 index db177fee..00000000 --- a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/PlayerTurnInfo.kt +++ /dev/null @@ -1,35 +0,0 @@ -package org.luxons.sevenwonders.game.api - -import org.luxons.sevenwonders.game.cards.HandCard -import org.luxons.sevenwonders.game.cards.TableCard -import org.luxons.sevenwonders.game.moves.MoveType -import org.luxons.sevenwonders.game.resources.ResourceTransactions -import org.luxons.sevenwonders.game.resources.noTransactions -import org.luxons.sevenwonders.game.wonders.WonderBuildability - -enum class Action(val message: String) { - PLAY("Pick the card you want to play or discard."), - PLAY_2("Pick the first card you want to play or discard. Note that you have the ability to play these 2 last cards. You will choose how to play the last one during your next turn."), - PLAY_LAST("You have the special ability to play your last card. Choose how you want to play it."), - PICK_NEIGHBOR_GUILD("Choose a Guild card (purple) that you want to copy from one of your neighbours."), - WAIT("Please wait for other players to perform extra actions.") -} - -data class PlayerTurnInfo( - val playerIndex: Int, - val table: ApiTable, - val action: Action, - val hand: List, - val preparedMove: PlayedMove?, - val neighbourGuildCards: List -) { - val currentAge: Int = table.currentAge - val message: String = action.message - val wonderBuildability: WonderBuildability = table.boards[playerIndex].wonder.buildability -} - -data class PlayerMove( - val type: MoveType, - val cardName: String, - val transactions: ResourceTransactions = noTransactions() -) diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/Table.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/Table.kt new file mode 100644 index 00000000..62f66b21 --- /dev/null +++ b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/Table.kt @@ -0,0 +1,15 @@ +package org.luxons.sevenwonders.game.api + +import org.luxons.sevenwonders.game.api.boards.ApiBoard +import org.luxons.sevenwonders.game.api.cards.HandRotationDirection + +typealias Age = Int + +data class ApiTable( + val boards: List, + val currentAge: Age, + val handRotationDirection: HandRotationDirection, + val lastPlayedMoves: List +) { + val nbPlayers: Int = boards.size +} diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/boards/Boards.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/boards/Boards.kt new file mode 100644 index 00000000..061bdcad --- /dev/null +++ b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/boards/Boards.kt @@ -0,0 +1,40 @@ +package org.luxons.sevenwonders.game.api.boards + +import org.luxons.sevenwonders.game.api.cards.TableCard +import org.luxons.sevenwonders.game.api.resources.CountedResource +import org.luxons.sevenwonders.game.api.resources.ResourceType +import org.luxons.sevenwonders.game.api.wonders.ApiWonder + +data class ApiBoard( + val playerIndex: Int, + val wonder: ApiWonder, + val production: ApiProduction, + val publicProduction: ApiProduction, + val science: ApiScience, + val military: ApiMilitary, + val playedCards: List>, + val gold: Int +) + +data class ApiRequirements( + val gold: Int = 0, + val resources: List = emptyList() +) + +data class ApiProduction( + val fixedResources: List, + val alternativeResources: Set> +) + +data class ApiMilitary( + val nbShields: Int, + val totalPoints: Int, + val nbDefeatTokens: Int +) + +data class ApiScience( + val jokers: Int, + val nbWheels: Int, + val nbCompasses: Int, + val nbTablets: Int +) diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/boards/RelativeBoardPosition.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/boards/RelativeBoardPosition.kt new file mode 100644 index 00000000..c7c3b5dc --- /dev/null +++ b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/boards/RelativeBoardPosition.kt @@ -0,0 +1,16 @@ +package org.luxons.sevenwonders.game.api.boards + +enum class RelativeBoardPosition(private val offset: Int) { + LEFT(-1), + SELF(0), + RIGHT(1); + + fun getIndexFrom(playerIndex: Int, nbPlayers: Int): Int = (playerIndex + offset) floorMod nbPlayers +} + +fun neighboursPositions() = listOf(RelativeBoardPosition.LEFT, RelativeBoardPosition.RIGHT) + +private infix fun Int.floorMod(divisor: Int): Int { + val rem = this % divisor + return if (rem >= 0) rem else rem + divisor +} diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/cards/Cards.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/cards/Cards.kt new file mode 100644 index 00000000..4ccfe23b --- /dev/null +++ b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/cards/Cards.kt @@ -0,0 +1,65 @@ +package org.luxons.sevenwonders.game.api.cards + +import org.luxons.sevenwonders.game.api.boards.ApiRequirements +import org.luxons.sevenwonders.game.api.resources.ResourceTransactions + +data class TableCard( + val name: String, + val color: Color, + val requirements: ApiRequirements, + val chainParent: String?, + val chainChildren: List, + val image: String, + val back: CardBack, + val playedDuringLastMove: Boolean +) + +/** + * A card with contextual information relative to the hand it is sitting in. The extra information is especially useful + * because it frees the client from a painful business logic implementation. + */ +data class HandCard( + val name: String, + val color: Color, + val requirements: ApiRequirements, + val chainParent: String?, + val chainChildren: List, + val image: String, + val back: CardBack, + val playability: CardPlayability +) + +data class CardBack(val image: String) + +enum class PlayabilityLevel { + CHAINABLE, + NO_REQUIREMENTS, + ENOUGH_RESOURCES, + ENOUGH_GOLD, + ENOUGH_GOLD_AND_RES, + REQUIRES_HELP, + MISSING_REQUIRED_GOLD, + MISSING_GOLD_FOR_RES, + UNAVAILABLE_RESOURCES, + INCOMPATIBLE_WITH_BOARD +} + +enum class Color(val isResource: Boolean) { + BROWN(true), + GREY(true), + YELLOW(false), + BLUE(false), + GREEN(false), + RED(false), + PURPLE(false) +} + +data class CardPlayability( + val isPlayable: Boolean, + val isChainable: Boolean = false, + val minPrice: Int = Int.MAX_VALUE, + val cheapestTransactions: Set = emptySet(), + val playabilityLevel: PlayabilityLevel +) { + val isFree: Boolean = minPrice == 0 +} diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/cards/HandRotationDirection.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/cards/HandRotationDirection.kt new file mode 100644 index 00000000..b4669fbb --- /dev/null +++ b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/cards/HandRotationDirection.kt @@ -0,0 +1,11 @@ +package org.luxons.sevenwonders.game.api.cards + +enum class HandRotationDirection { + LEFT, + RIGHT; + + companion object { + // clockwise (pass to the left) at age 1, and alternating + fun forAge(age: Int): HandRotationDirection = if (age % 2 == 0) RIGHT else LEFT + } +} diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/resources/Resources.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/resources/Resources.kt new file mode 100644 index 00000000..fcfdd634 --- /dev/null +++ b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/resources/Resources.kt @@ -0,0 +1,44 @@ +package org.luxons.sevenwonders.game.api.resources + +import org.luxons.sevenwonders.game.api.boards.RelativeBoardPosition + +enum class ResourceType(val symbol: Char) { + WOOD('W'), + STONE('S'), + ORE('O'), + CLAY('C'), + GLASS('G'), + PAPYRUS('P'), + LOOM('L'); + + companion object { + + private val typesPerSymbol = values().map { it.symbol to it }.toMap() + + fun fromSymbol(symbol: String): ResourceType { + if (symbol.length != 1) { + throw IllegalArgumentException("The given symbol must be a valid single-char resource type, got $symbol") + } + return fromSymbol(symbol[0]) + } + + fun fromSymbol(symbol: Char?): ResourceType = + typesPerSymbol[symbol] ?: throw IllegalArgumentException("Unknown resource type symbol '$symbol'") + } +} + +data class CountedResource( + val count: Int, + val type: ResourceType +) + +enum class Provider(val boardPosition: RelativeBoardPosition) { + LEFT_PLAYER(RelativeBoardPosition.LEFT), + RIGHT_PLAYER(RelativeBoardPosition.RIGHT) +} + +data class ResourceTransaction(val provider: Provider, val resources: List) + +typealias ResourceTransactions = Collection + +fun noTransactions(): ResourceTransactions = emptySet() diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/wonders/Wonders.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/wonders/Wonders.kt new file mode 100644 index 00000000..7148a924 --- /dev/null +++ b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/api/wonders/Wonders.kt @@ -0,0 +1,32 @@ +package org.luxons.sevenwonders.game.api.wonders + +import org.luxons.sevenwonders.game.api.boards.ApiRequirements +import org.luxons.sevenwonders.game.api.cards.CardBack +import org.luxons.sevenwonders.game.api.cards.PlayabilityLevel +import org.luxons.sevenwonders.game.api.resources.ResourceTransactions +import org.luxons.sevenwonders.game.api.resources.ResourceType + +data class ApiWonder( + val name: String, + val initialResource: ResourceType, + val stages: List, + val image: String, + val nbBuiltStages: Int, + val buildability: WonderBuildability +) + +data class ApiWonderStage( + val cardBack: CardBack?, + val isBuilt: Boolean, + val requirements: ApiRequirements, + val builtDuringLastMove: Boolean +) + +data class WonderBuildability( + val isBuildable: Boolean, + val minPrice: Int = Int.MAX_VALUE, + val cheapestTransactions: Set = emptySet(), + val playabilityLevel: PlayabilityLevel +) { + val isFree: Boolean = minPrice == 0 +} diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/boards/Boards.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/boards/Boards.kt deleted file mode 100644 index eb044cf2..00000000 --- a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/boards/Boards.kt +++ /dev/null @@ -1,40 +0,0 @@ -package org.luxons.sevenwonders.game.boards - -import org.luxons.sevenwonders.game.cards.TableCard -import org.luxons.sevenwonders.game.resources.CountedResource -import org.luxons.sevenwonders.game.resources.ResourceType -import org.luxons.sevenwonders.game.wonders.ApiWonder - -data class ApiBoard( - val playerIndex: Int, - val wonder: ApiWonder, - val production: ApiProduction, - val publicProduction: ApiProduction, - val science: ApiScience, - val military: ApiMilitary, - val playedCards: List>, - val gold: Int -) - -data class ApiRequirements( - val gold: Int = 0, - val resources: List = emptyList() -) - -data class ApiProduction( - val fixedResources: List, - val alternativeResources: Set> -) - -data class ApiMilitary( - val nbShields: Int, - val totalPoints: Int, - val nbDefeatTokens: Int -) - -data class ApiScience( - val jokers: Int, - val nbWheels: Int, - val nbCompasses: Int, - val nbTablets: Int -) diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.kt deleted file mode 100644 index 3a8387a3..00000000 --- a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.kt +++ /dev/null @@ -1,16 +0,0 @@ -package org.luxons.sevenwonders.game.boards - -enum class RelativeBoardPosition(private val offset: Int) { - LEFT(-1), - SELF(0), - RIGHT(1); - - fun getIndexFrom(playerIndex: Int, nbPlayers: Int): Int = (playerIndex + offset) floorMod nbPlayers -} - -fun neighboursPositions() = listOf(RelativeBoardPosition.LEFT, RelativeBoardPosition.RIGHT) - -private infix fun Int.floorMod(divisor: Int): Int { - val rem = this % divisor - return if (rem >= 0) rem else rem + divisor -} diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/cards/Cards.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/cards/Cards.kt deleted file mode 100644 index 1fc228d1..00000000 --- a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/cards/Cards.kt +++ /dev/null @@ -1,65 +0,0 @@ -package org.luxons.sevenwonders.game.cards - -import org.luxons.sevenwonders.game.boards.ApiRequirements -import org.luxons.sevenwonders.game.resources.ResourceTransactions - -data class TableCard( - val name: String, - val color: Color, - val requirements: ApiRequirements, - val chainParent: String?, - val chainChildren: List, - val image: String, - val back: CardBack, - val playedDuringLastMove: Boolean -) - -/** - * A card with contextual information relative to the hand it is sitting in. The extra information is especially useful - * because it frees the client from a painful business logic implementation. - */ -data class HandCard( - val name: String, - val color: Color, - val requirements: ApiRequirements, - val chainParent: String?, - val chainChildren: List, - val image: String, - val back: CardBack, - val playability: CardPlayability -) - -data class CardBack(val image: String) - -enum class PlayabilityLevel { - CHAINABLE, - NO_REQUIREMENTS, - ENOUGH_RESOURCES, - ENOUGH_GOLD, - ENOUGH_GOLD_AND_RES, - REQUIRES_HELP, - MISSING_REQUIRED_GOLD, - MISSING_GOLD_FOR_RES, - UNAVAILABLE_RESOURCES, - INCOMPATIBLE_WITH_BOARD -} - -enum class Color(val isResource: Boolean) { - BROWN(true), - GREY(true), - YELLOW(false), - BLUE(false), - GREEN(false), - RED(false), - PURPLE(false) -} - -data class CardPlayability( - val isPlayable: Boolean, - val isChainable: Boolean = false, - val minPrice: Int = Int.MAX_VALUE, - val cheapestTransactions: Set = emptySet(), - val playabilityLevel: PlayabilityLevel -) { - val isFree: Boolean = minPrice == 0 -} diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/cards/HandRotationDirection.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/cards/HandRotationDirection.kt deleted file mode 100644 index a10ec19f..00000000 --- a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/cards/HandRotationDirection.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.luxons.sevenwonders.game.cards - -enum class HandRotationDirection { - LEFT, - RIGHT; - - companion object { - // clockwise (pass to the left) at age 1, and alternating - fun forAge(age: Int): HandRotationDirection = if (age % 2 == 0) RIGHT else LEFT - } -} diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/moves/MoveType.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/moves/MoveType.kt deleted file mode 100644 index d982c100..00000000 --- a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/moves/MoveType.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.luxons.sevenwonders.game.moves - -enum class MoveType { - PLAY, - PLAY_FREE, - UPGRADE_WONDER, - DISCARD, - COPY_GUILD; -} diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/resources/Resources.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/resources/Resources.kt deleted file mode 100644 index 926cd570..00000000 --- a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/resources/Resources.kt +++ /dev/null @@ -1,44 +0,0 @@ -package org.luxons.sevenwonders.game.resources - -import org.luxons.sevenwonders.game.boards.RelativeBoardPosition - -enum class ResourceType(val symbol: Char) { - WOOD('W'), - STONE('S'), - ORE('O'), - CLAY('C'), - GLASS('G'), - PAPYRUS('P'), - LOOM('L'); - - companion object { - - private val typesPerSymbol = values().map { it.symbol to it }.toMap() - - fun fromSymbol(symbol: String): ResourceType { - if (symbol.length != 1) { - throw IllegalArgumentException("The given symbol must be a valid single-char resource type, got $symbol") - } - return fromSymbol(symbol[0]) - } - - fun fromSymbol(symbol: Char?): ResourceType = - typesPerSymbol[symbol] ?: throw IllegalArgumentException("Unknown resource type symbol '$symbol'") - } -} - -data class CountedResource( - val count: Int, - val type: ResourceType -) - -enum class Provider(val boardPosition: RelativeBoardPosition) { - LEFT_PLAYER(RelativeBoardPosition.LEFT), - RIGHT_PLAYER(RelativeBoardPosition.RIGHT) -} - -data class ResourceTransaction(val provider: Provider, val resources: List) - -typealias ResourceTransactions = Collection - -fun noTransactions(): ResourceTransactions = emptySet() diff --git a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/wonders/Wonder.kt b/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/wonders/Wonder.kt deleted file mode 100644 index 13fee8e2..00000000 --- a/sw-common-model/src/main/kotlin/org/luxons/sevenwonders/game/wonders/Wonder.kt +++ /dev/null @@ -1,32 +0,0 @@ -package org.luxons.sevenwonders.game.wonders - -import org.luxons.sevenwonders.game.boards.ApiRequirements -import org.luxons.sevenwonders.game.cards.CardBack -import org.luxons.sevenwonders.game.cards.PlayabilityLevel -import org.luxons.sevenwonders.game.resources.ResourceTransactions -import org.luxons.sevenwonders.game.resources.ResourceType - -data class ApiWonder( - val name: String, - val initialResource: ResourceType, - val stages: List, - val image: String, - val nbBuiltStages: Int, - val buildability: WonderBuildability -) - -data class ApiWonderStage( - val cardBack: CardBack?, - val isBuilt: Boolean, - val requirements: ApiRequirements, - val builtDuringLastMove: Boolean -) - -data class WonderBuildability( - val isBuildable: Boolean, - val minPrice: Int = Int.MAX_VALUE, - val cheapestTransactions: Set = emptySet(), - val playabilityLevel: PlayabilityLevel -) { - val isFree: Boolean = minPrice == 0 -} -- cgit