diff --git a/knockoutwhist b/knockoutwhist index afa6bc1..c5dd02a 160000 --- a/knockoutwhist +++ b/knockoutwhist @@ -1 +1 @@ -Subproject commit afa6bc1406e2a0a09b510f3882fe7bf12d2909f5 +Subproject commit c5dd02a5e826eaa6a6fa07c0847f94f9868709a6 diff --git a/knockoutwhistweb/app/util/WebsocketEventMapper.scala b/knockoutwhistweb/app/util/WebsocketEventMapper.scala index f668d29..45030d9 100644 --- a/knockoutwhistweb/app/util/WebsocketEventMapper.scala +++ b/knockoutwhistweb/app/util/WebsocketEventMapper.scala @@ -6,7 +6,7 @@ import model.sessions.UserSession import play.api.libs.json.{JsValue, Json} import tools.jackson.databind.json.JsonMapper import tools.jackson.module.scala.ScalaModule -import util.mapper.{GameStateEventMapper, ReceivedHandEventMapper, SimpleEventMapper} +import util.mapper.{CardPlayedEventMapper, GameStateEventMapper, ReceivedHandEventMapper, SimpleEventMapper} object WebsocketEventMapper { @@ -26,6 +26,7 @@ object WebsocketEventMapper { // Register all custom mappers here registerCustomMapper(ReceivedHandEventMapper) registerCustomMapper(GameStateEventMapper) + registerCustomMapper(CardPlayedEventMapper) def toJson(obj: SimpleEvent, session: UserSession): JsValue = { val data: Option[JsValue] = if (customMappers.contains(obj.id)) { diff --git a/knockoutwhistweb/app/util/mapper/CardPlayedEventMapper.scala b/knockoutwhistweb/app/util/mapper/CardPlayedEventMapper.scala new file mode 100644 index 0000000..07c69e1 --- /dev/null +++ b/knockoutwhistweb/app/util/mapper/CardPlayedEventMapper.scala @@ -0,0 +1,20 @@ +package util.mapper + +import de.knockoutwhist.events.global.CardPlayedEvent +import model.sessions.UserSession +import play.api.libs.json.{JsArray, JsObject, Json} +import util.WebUIUtils + +object CardPlayedEventMapper extends SimpleEventMapper[CardPlayedEvent]{ + + override def id: String = "CardPlayedEvent" + + override def toJson(event: CardPlayedEvent, session: UserSession): JsObject = { + Json.obj( + "firstCard" -> (if (event.trick.firstCard.isDefined) WebUIUtils.cardtoString(event.trick.firstCard.get) else "BLANK"), + "playedCards" -> JsArray(event.trick.cards.map { case (card, player) => + Json.obj("cardId" -> WebUIUtils.cardtoString(card), "player" -> player.name) + }.toList) + ) + } +} diff --git a/knockoutwhistweb/public/javascripts/events.js b/knockoutwhistweb/public/javascripts/events.js index 8937a91..1ca2df2 100644 --- a/knockoutwhistweb/public/javascripts/events.js +++ b/knockoutwhistweb/public/javascripts/events.js @@ -45,6 +45,45 @@ function receiveGameStateChange(eventData) { exchangeBody(content, title); } +function receiveCardPlayedEvent(eventData) { + const firstCard = eventData.firstCard; + const playedCards = eventData.playedCards; + const trickCardsContainer = $('#trick-cards-container'); + const firstCardContainer = $('#first-card-container') + + let trickHTML = ''; + playedCards.forEach(cardCombo => { + trickHTML += ` +
+
+
+ ${cardCombo.cardId} +
+
+ ${cardCombo.player} +
+
+
+ `; + }); + trickCardsContainer.html(trickHTML); + + let altText; + let imageSrc; + if (firstCard === "BLANK") { + imageSrc = "/assets/images/cards/1B.png"; + altText = "Blank Card"; + } else { + imageSrc = `/assets/images/cards/${firstCard}.png`; + altText = `Card ${firstCard}`; + } + + const newFirstCardHTML = ` + ${altText} + `; + firstCardContainer.html(newFirstCardHTML); +} onEvent("ReceivedHandEvent", receiveHandEvent) -onEvent("GameStateChangeEvent", receiveGameStateChange) \ No newline at end of file +onEvent("GameStateChangeEvent", receiveGameStateChange) +onEvent("CardPlayedEvent", receiveCardPlayedEvent) \ No newline at end of file