Files
KnockOutWhist-Web/knockoutwhistweb/app/controllers/WebUI.scala

78 lines
2.5 KiB
Scala

package controllers
import controllers.sessions.SimpleSession
import de.knockoutwhist.cards.{Card, CardValue, Hand, Suit}
import de.knockoutwhist.events.*
import de.knockoutwhist.events.ERROR_STATUS.*
import de.knockoutwhist.events.GLOBAL_STATUS.*
import de.knockoutwhist.events.PLAYER_STATUS.*
import de.knockoutwhist.events.ROUND_STATUS.{PLAYERS_OUT, SHOW_START_ROUND, WON_ROUND}
import de.knockoutwhist.events.cards.{RenderHandEvent, ShowTieCardsEvent}
import de.knockoutwhist.events.round.ShowCurrentTrickEvent
import de.knockoutwhist.events.ui.GameState.{INGAME, MAIN_MENU}
import de.knockoutwhist.events.ui.{GameState, GameStateUpdateEvent}
import de.knockoutwhist.player.AbstractPlayer
import de.knockoutwhist.rounds.Match
import de.knockoutwhist.ui.UI
import de.knockoutwhist.utils.CustomThread
import de.knockoutwhist.utils.events.{EventListener, SimpleEvent}
object WebUI extends CustomThread with EventListener with UI {
setName("WebUI")
var init = false
private var internState: GameState = GameState.NO_SET
var latestOutput: String = ""
override def instance: CustomThread = WebUI
override def listen(event: SimpleEvent): Unit = {
runLater {
event match {
case event: RenderHandEvent =>
PodGameManager.transmit(event.player.id, event)
case event: ShowTieCardsEvent =>
PodGameManager.transmitAll(event)
case event: ShowGlobalStatus =>
if (event.status == TECHNICAL_MATCH_STARTED) {
val matchImpl = event.objects.head.asInstanceOf[Match]
for (player <- matchImpl.totalplayers) {
PodGameManager.addSession(SimpleSession(player.id, List()))
}
} else {
PodGameManager.transmitAll(event)
}
case event: ShowPlayerStatus =>
PodGameManager.transmit(event.player.id, event)
case event: ShowRoundStatus =>
PodGameManager.transmitAll(event)
case event: ShowErrorStatus =>
PodGameManager.transmitAll(event)
case event: ShowCurrentTrickEvent =>
PodGameManager.transmitAll(event)
case event: GameStateUpdateEvent =>
if (internState != event.gameState) {
internState = event.gameState
if (event.gameState == MAIN_MENU) {
PodGameManager.clearSessions()
}
Some(true)
}
case _ => None
}
}
}
override def initial: Boolean = {
if (init) {
return false
}
init = true
start()
true
}
}