Add final statistics when game ends
This commit is contained in:
parent
fa1be9485e
commit
941b25346d
32
Sources/App/Infos/GameStatistics.swift
Normal file
32
Sources/App/Infos/GameStatistics.swift
Normal file
@ -0,0 +1,32 @@
|
||||
import Foundation
|
||||
|
||||
struct GameStatistics: Codable, Equatable {
|
||||
|
||||
let leader: PlayerName
|
||||
|
||||
let coPlayers: [PlayerName]
|
||||
|
||||
let didWin: Bool
|
||||
|
||||
let game: GameId
|
||||
|
||||
let leaderPoints: Int
|
||||
|
||||
let cost: Int
|
||||
|
||||
var text: String = ""
|
||||
|
||||
init(table: FinishedTable, language: SupportedLanguage) {
|
||||
let leader = table.players.first { $0.selectedGame }!
|
||||
self.coPlayers = table.players
|
||||
.filter { $0 != leader && $0.leadsGame == leader.leadsGame }
|
||||
.map { $0.name }
|
||||
self.leader = leader.name
|
||||
self.game = table.game.id
|
||||
self.leaderPoints = table.leadingPoints
|
||||
self.didWin = table.winners.contains(player: leader.name)
|
||||
self.cost = table.game.basicCost
|
||||
// TODO: Calculate cost correctly
|
||||
}
|
||||
|
||||
}
|
@ -22,8 +22,6 @@ struct PlayerInfo: Codable, Equatable {
|
||||
|
||||
var leadsGame = false
|
||||
|
||||
var points: Int? = nil
|
||||
|
||||
var state: [PlayerStateId] = []
|
||||
|
||||
init(name: PlayerName) {
|
||||
@ -39,6 +37,5 @@ struct PlayerInfo: Codable, Equatable {
|
||||
case positionInTrick = "position"
|
||||
case numberOfDoubles = "doubles"
|
||||
case leadsGame = "leads"
|
||||
case points = "points"
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,8 @@ struct TableInfo: Codable {
|
||||
var playerSelectsGame = false
|
||||
|
||||
var game: GameId? = nil
|
||||
|
||||
var gameStats: GameStatistics?
|
||||
|
||||
init(id: TableId, name: TableName) {
|
||||
self.id = id
|
||||
|
@ -8,10 +8,13 @@ final class FinishedPlayer: Player {
|
||||
|
||||
let playedCard: Card
|
||||
|
||||
let selectedGame: Bool
|
||||
|
||||
init(player: PlayingPlayer) {
|
||||
self.points = player.wonTricks.map { $0.points }.reduce(0, +)
|
||||
self.leadsGame = player.leadsGame
|
||||
self.playedCard = player.playedCard!
|
||||
self.selectedGame = player.selectsGame
|
||||
super.init(player: player)
|
||||
}
|
||||
|
||||
@ -25,7 +28,6 @@ final class FinishedPlayer: Player {
|
||||
|
||||
override var info: PlayerInfo {
|
||||
var result = super.info
|
||||
result.points = points
|
||||
result.playedCard = playedCard.id
|
||||
return result
|
||||
}
|
||||
|
@ -84,4 +84,10 @@ final class FinishedTable: AbstractTable<FinishedPlayer> {
|
||||
let table = DealingTable(table: waiting)
|
||||
return (.success, table)
|
||||
}
|
||||
|
||||
override func tableInfo(forPlayerAt index: Int) -> TableInfo {
|
||||
var info = super.tableInfo(forPlayerAt: index)
|
||||
info.gameStats = GameStatistics(table: self, language: language)
|
||||
return info
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user