diff --git a/knockoutwhistweb/app/controllers/HomeController.scala b/knockoutwhistweb/app/controllers/HomeController.scala
index ff8281f..f053c49 100644
--- a/knockoutwhistweb/app/controllers/HomeController.scala
+++ b/knockoutwhistweb/app/controllers/HomeController.scala
@@ -1,11 +1,13 @@
package controllers
-import controllers.sessions.SimpleSession
+import controllers.sessions.AdvancedSession
import com.google.inject.{Guice, Injector}
import de.knockoutwhist.KnockOutWhist
import de.knockoutwhist.components.Configuration
+import de.knockoutwhist.control.GameState.{InGame, Lobby, SelectTrump, TieBreak}
+import de.knockoutwhist.control.controllerBaseImpl.BaseGameLogic
import di.KnockOutWebConfigurationModule
-import play.api.*
+import play.api.{controllers, *}
import play.api.mvc.*
import play.twirl.api.Html
@@ -49,15 +51,39 @@ class HomeController @Inject()(val controllerComponents: ControllerComponents) e
def ingame(id: String): Action[AnyContent] = {
val uuid: UUID = UUID.fromString(id)
if (PodGameManager.identify(uuid).isEmpty) {
- Action { implicit request =>
+ return Action { implicit request =>
NotFound(views.html.tui.apply(List(Html(s"
Session with id $id not found!
"))))
}
} else {
val session = PodGameManager.identify(uuid).get
- Action { implicit request =>
- Ok(views.html.tui.apply(session.asInstanceOf[SimpleSession].get()))
+ val player = session.asInstanceOf[AdvancedSession].player
+ val logic = WebUI.logic.get.asInstanceOf[BaseGameLogic]
+ if (logic.getCurrentState == Lobby) {
+
+ } else if (logic.getCurrentState == InGame) {
+ return Action { implicit request =>
+ Ok(views.html.ingame.apply(player, logic))
+ }
+ } else if (logic.getCurrentState == SelectTrump) {
+ return Action { implicit request =>
+ Ok(views.html.selecttrump.apply(player, logic))
+ }
+ } else if (logic.getCurrentState == TieBreak) {
+ return Action { implicit request =>
+ Ok(views.html.tie.apply(player, logic))
+ }
}
}
+ Action { implicit request =>
+ InternalServerError("Oops")
+ }
+ //if (logic.getCurrentState == Lobby) {
+ //Action { implicit request =>
+ //Ok(views.html.tui.apply(player, logic))
+ //}
+ //} else {
+ //Action { implicit request =>
+ //Ok(views.html.tui.apply(player, logic))
+ //}
}
-
}
\ No newline at end of file
diff --git a/knockoutwhistweb/app/controllers/sessions/AdvancedSession.scala b/knockoutwhistweb/app/controllers/sessions/AdvancedSession.scala
new file mode 100644
index 0000000..cc9dbaf
--- /dev/null
+++ b/knockoutwhistweb/app/controllers/sessions/AdvancedSession.scala
@@ -0,0 +1 @@
+case class AdvancedSession
\ No newline at end of file
diff --git a/knockoutwhistweb/app/controllers/sessions/SimpleSession.scala b/knockoutwhistweb/app/controllers/sessions/SimpleSession.scala
index 815dab2..fa7bd76 100644
--- a/knockoutwhistweb/app/controllers/sessions/SimpleSession.scala
+++ b/knockoutwhistweb/app/controllers/sessions/SimpleSession.scala
@@ -15,239 +15,5 @@ case class SimpleSession(id: UUID, private var output: List[Html]) extends Playe
}
override def updatePlayer(event: SimpleEvent): Unit = {
- event match {
- case event: RenderHandEvent =>
- renderHand(event)
- case event: ShowTieCardsEvent =>
- showtiecardseventmethod(event)
- case event: ShowGlobalStatus =>
- showglobalstatusmethod(event)
- case event: ShowPlayerStatus =>
- showplayerstatusmethod(event)
- case event: ShowRoundStatus =>
- showroundstatusmethod(event)
- case event: ShowErrorStatus =>
- showerrstatmet(event)
- case event: ShowCurrentTrickEvent =>
- showcurtrevmet(event)
- }
- }
-
- private def clear(): Unit = {
- output = List()
- }
-
- private def renderHand(event: RenderHandEvent): Unit = {
- output = output :++ WebUICards.renderHandEvent(event.hand)
- output = output :+ Html("
")
- }
-
- private def showtiecardseventmethod(event: ShowTieCardsEvent): Option[Boolean] = {
- var l = List[Html]()
- for ((player, card) <- event.card) {
- l = l :+ Html(s"${player.name}:
")
- l = l :+ WebUIUtils.cardtoImage(card)
- l = l :+ Html("
")
- }
- output = output :++ l
- output = output :+ Html("
")
- Some(true)
- }
-
- private def showglobalstatusmethod(event: ShowGlobalStatus): Option[Boolean] = {
- event.status match {
- case SHOW_TIE =>
- println("It's a tie! Let's cut to determine the winner.")
- Some(true)
- case SHOW_TIE_WINNER =>
- if (event.objects.length != 1 || !event.objects.head.isInstanceOf[AbstractPlayer]) {
- None
- } else {
- println(s"${event.objects.head.asInstanceOf[AbstractPlayer].name} wins the cut!")
- Some(true)
- }
- case SHOW_TIE_TIE =>
- println("It's a tie again! Let's cut again.")
- Some(true)
- case SHOW_START_MATCH =>
- clear()
- println("Starting a new match...")
- output = output :+ Html("
")
- Some(true)
- case SHOW_TYPE_PLAYERS =>
- println("Please enter the names of the players, separated by a comma.")
- Some(true)
- case SHOW_FINISHED_MATCH =>
- if (event.objects.length != 1 || !event.objects.head.isInstanceOf[AbstractPlayer]) {
- None
- } else {
- clear()
- println(s"The match is over. The winner is ${event.objects.head.asInstanceOf[AbstractPlayer]}")
- Some(true)
- }
- }
- }
-
- private def showplayerstatusmethod(event: ShowPlayerStatus): Option[Boolean] = {
- val player = event.player
- event.status match {
- case SHOW_PLAY_CARD =>
- println("Which card do you want to play?")
- Some(true)
- case SHOW_DOG_PLAY_CARD =>
- if (event.objects.length != 1 || !event.objects.head.isInstanceOf[Boolean]) {
- None
- } else {
- println("You are using your dog life. Do you want to play your final card now?")
- if (event.objects.head.asInstanceOf[Boolean]) {
- println("You have to play your final card this round!")
- println("Please enter y to play your final card.")
- Some(true)
- } else {
- println("Please enter y/n to play your final card.")
- Some(true)
- }
- }
- case SHOW_TIE_NUMBERS =>
- if (event.objects.length != 1 || !event.objects.head.isInstanceOf[Int]) {
- None
- } else {
- println(s"${player.name} enter a number between 1 and ${event.objects.head.asInstanceOf[Int]}.")
- Some(true)
- }
- case SHOW_TRUMPSUIT_OPTIONS =>
- println("Which suit do you want to pick as the next trump suit?")
- println("1: Hearts")
- println("2: Diamonds")
- println("3: Clubs")
- println("4: Spades")
- println()
- Some(true)
- case SHOW_NOT_PLAYED =>
- println(s"Player ${event.player} decided to not play his card")
- Some(true)
- case SHOW_WON_PLAYER_TRICK =>
- println(s"${event.player.name} won the trick.")
- output = output :+ Html("
")
- Some(true)
- }
- }
-
- private def showroundstatusmethod(event: ShowRoundStatus): Option[Boolean] = {
- event.status match {
- case SHOW_TURN =>
- if (event.objects.length != 1 || !event.objects.head.isInstanceOf[AbstractPlayer]) {
- None
- } else {
- println(s"It's ${event.objects.head.asInstanceOf[AbstractPlayer].name} turn.")
- Some(true)
- }
- case SHOW_START_ROUND =>
- clear()
- println(s"Starting a new round. The trump suit is ${event.currentRound.trumpSuit}.")
- output = output :+ Html("
")
- Some(true)
- case WON_ROUND =>
- if (event.objects.length != 1 || !event.objects.head.isInstanceOf[AbstractPlayer]) {
- None
- } else {
- println(s"${event.objects.head.asInstanceOf[AbstractPlayer].name} won the round.")
- Some(true)
- }
- case PLAYERS_OUT =>
- println("The following players are out of the game:")
- event.currentRound.playersout.foreach(p => {
- println(p.name)
- })
- Some(true)
- }
- }
-
- private def showerrstatmet(event: ShowErrorStatus): Option[Boolean] = {
- event.status match {
- case INVALID_NUMBER =>
- println("Please enter a valid number.")
- Some(true)
- case NOT_A_NUMBER =>
- println("Please enter a number.")
- Some(true)
- case INVALID_INPUT =>
- println("Please enter a valid input")
- Some(true)
- case INVALID_NUMBER_OF_PLAYERS =>
- println("Please enter at least two names.")
- Some(true)
- case IDENTICAL_NAMES =>
- println("Please enter unique names.")
- Some(true)
- case INVALID_NAME_FORMAT =>
- println("Please enter valid names. Those can not be empty, shorter than 2 or longer then 10 characters.")
- Some(true)
- case WRONG_CARD =>
- if (event.objects.length != 1 || !event.objects.head.isInstanceOf[Card]) {
- None
- } else {
- println(f"You have to play a card of suit: ${event.objects.head.asInstanceOf[Card].suit}\n")
- Some(true)
- }
- }
- }
-
- private def showcurtrevmet(event: ShowCurrentTrickEvent): Option[Boolean] = {
- clear()
- val sb = new StringBuilder()
- sb.append("Current Trick:\n")
- sb.append("Trump-Suit: " + event.round.trumpSuit + "\n")
- if (event.trick.firstCard.isDefined) {
- sb.append(s"Suit to play: ${event.trick.firstCard.get.suit}\n")
- }
- for ((card, player) <- event.trick.cards) {
- sb.append(s"${player.name} played ${card.toString}\n")
- }
- println(sb.toString())
- Some(true)
- }
-
- private def println(s: String): Unit = {
- var html = List[Html]()
- for (line <- s.split("\n")) {
- html = html :+ Html(line)
- html = html :+ Html("
")
- }
- output = output :++ html
- }
-
- private def println(): Unit = {
- output = output :+ Html("
")
- }
-
- object WebUICards {
- def renderCardAsString(card: Card): Vector[String] = {
- val lines = "│ │"
- if (card.cardValue == CardValue.Ten) {
- return Vector(
- s"┌─────────┐",
- s"│${card.cardValue.cardType()} │",
- lines,
- s"│ ${card.suit.cardType()} │",
- lines,
- s"│ ${card.cardValue.cardType()}│",
- s"└─────────┘"
- )
- }
- Vector(
- s"┌─────────┐",
- s"│${card.cardValue.cardType()} │",
- lines,
- s"│ ${card.suit.cardType()} │",
- lines,
- s"│ ${card.cardValue.cardType()}│",
- s"└─────────┘"
- )
- }
-
- def renderHandEvent(hand: Hand): List[Html] = {
- hand.cards.map(WebUIUtils.cardtoImage)
- }
}
}
\ No newline at end of file
diff --git a/knockoutwhistweb/app/views/ingame.scala.html b/knockoutwhistweb/app/views/ingame.scala.html
new file mode 100644
index 0000000..e69de29
diff --git a/knockoutwhistweb/app/views/selecttrump.scala.html b/knockoutwhistweb/app/views/selecttrump.scala.html
new file mode 100644
index 0000000..e69de29
diff --git a/knockoutwhistweb/app/views/tie.scala.html b/knockoutwhistweb/app/views/tie.scala.html
new file mode 100644
index 0000000..e69de29
diff --git a/knockoutwhistweb/public/images/background.png b/knockoutwhistweb/public/images/background.png
new file mode 100644
index 0000000..e69de29