diff --git a/src/main/kotlin/sc/gui/view/StatusView.kt b/src/main/kotlin/sc/gui/view/StatusView.kt index 1a35ba88..32f132d8 100644 --- a/src/main/kotlin/sc/gui/view/StatusView.kt +++ b/src/main/kotlin/sc/gui/view/StatusView.kt @@ -3,10 +3,13 @@ package sc.gui.view import javafx.beans.binding.StringBinding import javafx.geometry.Pos import javafx.scene.control.Label +import sc.api.plugins.ITeam import sc.gui.AppStyle import sc.gui.controller.GameController import sc.plugin2021.Color import sc.plugin2021.Team +import sc.shared.GameResult +import sc.shared.ScoreCause import tornadofx.* class StatusBinding(private val game: GameController) : StringBinding() { @@ -25,17 +28,39 @@ class StatusBinding(private val game: GameController) : StringBinding() { Color.YELLOW -> "Gelb" Color.BLUE -> "Blau" } + } + + fun winner(gameResult: GameResult): String = gameResult.winners?.firstOrNull()?.let { player -> + player.displayName + " (Farben " + + (player.color as Team).colors.joinToString(", ", transform = ::translateColor) + + ") hat gewonnen!" + } ?: "Unentschieden!" + fun irregularities(gameResult: GameResult): String { + loop@ for (score in gameResult.scores) { + when(score.cause) { + ScoreCause.REGULAR -> continue@loop + ScoreCause.LEFT -> return "Grund: Vorzeitiges Verlassen des Spiels" + ScoreCause.RULE_VIOLATION -> return "Grund: Regelverletzung" + ScoreCause.SOFT_TIMEOUT -> return "Grund: Überschreitung des Zeitlimits" + ScoreCause.HARD_TIMEOUT -> return "Grund: Keine Antwort auf Zuganfrage" + ScoreCause.UNKNOWN -> return "Grund: Kommunikationsfehler" + } + } + return "" } - + override fun computeValue(): String { if(game.currentTurn.get() > 0) { - return game.gameResult.get()?.run { - "Spiel ist beendet, Gewinner: " + this.winners?.first()?.displayName + return game.gameResult.get()?.let { gameResult -> """ + Spiel ist beendet + ${winner(gameResult)} + ${irregularities(gameResult)} + """.trimIndent() } ?: when(game.currentTeam.get()) { Team.ONE -> "Erstes Team" Team.TWO -> "Zweites Team" - } + "Farbe " + translateColor(game.currentColor.get()) + " ist dran (Zug ${game.currentTurn.get()})" + } + ", Farbe " + translateColor(game.currentColor.get()) + " ist dran (Zug ${game.currentTurn.get()})" } return "Drücke auf Start" }