Add game summary on client side
This commit is contained in:
@ -2,7 +2,7 @@ import Foundation
|
||||
|
||||
struct EnglishGameSummarizer: GameSummarizer {
|
||||
|
||||
let game: GameStatistics
|
||||
let game: GameSummary
|
||||
|
||||
private var winText: String {
|
||||
game.didWin ? "won" : "lost"
|
||||
|
@ -2,7 +2,7 @@ import Foundation
|
||||
|
||||
protocol GameSummarizer {
|
||||
|
||||
init(game: GameStatistics)
|
||||
init(game: GameSummary)
|
||||
|
||||
var text: String { get }
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ import Foundation
|
||||
|
||||
struct GermanGameSummarizer: GameSummarizer {
|
||||
|
||||
let game: GameStatistics
|
||||
let game: GameSummary
|
||||
|
||||
var winText: String {
|
||||
game.didWin ? "gewinnt" : "verliert"
|
||||
@ -56,7 +56,7 @@ struct GermanGameSummarizer: GameSummarizer {
|
||||
}
|
||||
|
||||
var text: String {
|
||||
"\(game.leader) \(winText) \(gameText)\(coPlayerNames) mit \(game.leaderPoints) points. " +
|
||||
"\(game.leader) \(winText) \(gameText)\(coPlayerNames) mit \(game.leaderPoints) Punkten. " +
|
||||
"Das Spiel kostet \(costText)."
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
import Foundation
|
||||
|
||||
struct GameStatistics: Codable, Equatable {
|
||||
struct GameSummary: Codable, Equatable {
|
||||
|
||||
let leader: PlayerName
|
||||
|
||||
@ -27,6 +27,7 @@ struct GameStatistics: Codable, Equatable {
|
||||
self.didWin = table.winners.contains(player: leader.name)
|
||||
self.cost = table.game.basicCost
|
||||
// TODO: Calculate cost correctly
|
||||
self.text = language.gameSummarizer.init(game: self).text
|
||||
}
|
||||
|
||||
}
|
@ -26,7 +26,7 @@ struct TableInfo: Codable {
|
||||
|
||||
var game: GameId? = nil
|
||||
|
||||
var gameStats: GameStatistics?
|
||||
var summary: GameSummary?
|
||||
|
||||
init(id: TableId, name: TableName) {
|
||||
self.id = id
|
||||
|
@ -42,9 +42,9 @@ final class PlayingPlayer: CardHoldingPlayer {
|
||||
guard canStillRaise else {
|
||||
return []
|
||||
}
|
||||
if isUnknownCallee && leadsGame {
|
||||
guard !isUnknownCallee else {
|
||||
// Player belongs to caller, but other side has raised
|
||||
return [.doubleDuringGame]
|
||||
return leadsGame ? [.doubleDuringGame] : []
|
||||
}
|
||||
guard !leadsGame else {
|
||||
return []
|
||||
@ -54,6 +54,7 @@ final class PlayingPlayer: CardHoldingPlayer {
|
||||
|
||||
func play(card: Card) {
|
||||
playedCard = card
|
||||
canStillRaise = false
|
||||
cards = cards.filter { $0 != card }
|
||||
if card == isCalledWithAce {
|
||||
leadsGame.toggle()
|
||||
|
@ -19,7 +19,7 @@ final class DealingTable: AbstractTable<DealingPlayer> {
|
||||
|
||||
/// At least one player placed a bid
|
||||
var hasDouble: Bool {
|
||||
players.contains { $0.didDouble == true }
|
||||
players.contains { $0.didDouble }
|
||||
}
|
||||
|
||||
override func perform(action: PlayerAction, forPlayer name: PlayerName) -> (result: PlayerActionResult, table: ManageableTable?) {
|
||||
@ -46,6 +46,7 @@ final class DealingTable: AbstractTable<DealingPlayer> {
|
||||
return (.tableStateInvalid, nil)
|
||||
}
|
||||
player.didDouble = double
|
||||
player.didDecide = true
|
||||
guard allPlayersActed else {
|
||||
return (.success, nil)
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ final class FinishedTable: AbstractTable<FinishedPlayer> {
|
||||
|
||||
override func tableInfo(forPlayerAt index: Int) -> TableInfo {
|
||||
var info = super.tableInfo(forPlayerAt: index)
|
||||
info.gameStats = GameStatistics(table: self, language: language)
|
||||
info.summary = GameSummary(table: self, language: language)
|
||||
return info
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user