diff --git a/knockoutwhist b/knockoutwhist index c5dd02a..d833932 160000 --- a/knockoutwhist +++ b/knockoutwhist @@ -1 +1 @@ -Subproject commit c5dd02a5e826eaa6a6fa07c0847f94f9868709a6 +Subproject commit d833932f1652554db5a49d77033d3016051d23f9 diff --git a/knockoutwhistweb/app/assets/stylesheets/main.less b/knockoutwhistweb/app/assets/stylesheets/main.less index b321c74..83f8431 100644 --- a/knockoutwhistweb/app/assets/stylesheets/main.less +++ b/knockoutwhistweb/app/assets/stylesheets/main.less @@ -219,10 +219,10 @@ body { } -#nextPlayers { +#next-players-container { display: flex; flex-direction: column; - align-items: center; + align-items: flex-start; height: 0; p { @@ -231,10 +231,6 @@ body { } } -#invisible { - visibility: hidden; -} - #selecttrumpsuit { display: flex; flex-direction: column; diff --git a/knockoutwhistweb/app/model/sessions/UserSession.scala b/knockoutwhistweb/app/model/sessions/UserSession.scala index 1547826..0c1608f 100644 --- a/knockoutwhistweb/app/model/sessions/UserSession.scala +++ b/knockoutwhistweb/app/model/sessions/UserSession.scala @@ -41,21 +41,21 @@ class UserSession(val user: User, val host: Boolean, val gameLobby: GameLobby) e lock.lock() val result = Try { eventType match { - case "Ping" => + case "ping" => // No action needed for Ping () - case "Start Game" => + case "StartGame" => gameLobby.startGame(user) - case "play Card" => - val maybeCardIndex: Option[Int] = (data \ "cardindex").asOpt[Int] + case "PlayCard" => + val maybeCardIndex: Option[String] = (data \ "cardindex").asOpt[String] maybeCardIndex match { case Some(index) => val session = gameLobby.getUserSession(user.id) - gameLobby.playCard(session, index) + gameLobby.playCard(session, index.toInt) case None => println("Card Index not found or is not a number.") } - case "Picked Trumpsuit" => + case "PickTrumpsuit" => val maybeSuitIndex: Option[Int] = (data \ "suitIndex").asOpt[Int] maybeSuitIndex match { case Some(index) => diff --git a/knockoutwhistweb/app/views/ingame/ingame.scala.html b/knockoutwhistweb/app/views/ingame/ingame.scala.html index 8d437e7..45fe957 100644 --- a/knockoutwhistweb/app/views/ingame/ingame.scala.html +++ b/knockoutwhistweb/app/views/ingame/ingame.scala.html @@ -15,16 +15,21 @@ }else {
---
} -@nextplayer @if(nextplayer.isInDogLife) { 🐶 }
} - } -${playerName}
`; + nextPlayersHtml += `${playerName}
`; }); nextPlayersContainer.html(nextPlayersHtml); } diff --git a/knockoutwhistweb/public/javascripts/interact.js b/knockoutwhistweb/public/javascripts/interact.js index 84ec6aa..16eb2b6 100644 --- a/knockoutwhistweb/public/javascripts/interact.js +++ b/knockoutwhistweb/public/javascripts/interact.js @@ -1,37 +1,57 @@ -function handlePlayCard(cardIndex, dog) { +function handlePlayCard(card, dog) { + + if(!canPlayCard) return + canPlayCard = false; + + const cardId = card.dataset.cardId; + + console.debug(`Playing card ${cardId} from hand`) + + const wiggleKeyframes = [ + { transform: 'translateX(0)' }, + { transform: 'translateX(-5px)' }, + { transform: 'translateX(5px)' }, + { transform: 'translateX(-5px)' }, + { transform: 'translateX(0)' } + ]; + + const wiggleTiming = { + duration: 400, + iterations: 1, + easing: 'ease-in-out', + fill: 'forwards' + }; + + const cardslide = $('#card-slide') - cardslide.addClass("inactive") const payload = { - cardindex: cardIndex, + cardindex: cardId, isDog: dog } - sendEventAndWait("play Card", payload).then( + sendEventAndWait("PlayCard", payload).then( () => { - console.debug("play card successful") - const datacardid = $(`#${cardIndex}`) - datacardid.parent('.handcard').remove(); + card.parentElement.remove(); cardslide.find('.handcard').each(function(newIndex) { const $innerButton = $(this).find('.btn'); - - $innerButton.attr('id', newIndex); $innerButton.attr('data-card-id', newIndex); const isInDogLife = $innerButton.attr('onclick').includes("'true'") ? 'true' : 'false'; - $innerButton.attr('onclick', `handlePlayCard(${newIndex}, '${isInDogLife}')`); + $innerButton.attr('onclick', `handlePlayCard(this, '${isInDogLife}')`); console.debug(`Re-indexed card: Old index was ${$innerButton.attr('data-card-id')}, New index is ${newIndex}`); }); + + cardslide.addClass("inactive") } ).catch( (err) => { + canPlayCard = true; const cardslide = $('#card-slide') - console.warn("play card was not successful") - if (err.message === "You can't play this card!") { - cardslide.removeClass("inactive") - } - alertMessage("You aren't allowed to play this card") + cardslide.removeClass("inactive") + card.parentElement.animate(wiggleKeyframes, wiggleTiming); + alertMessage(err.message) } ) } @@ -40,7 +60,7 @@ function handleSkipDogLife(button) { // TODO needs implementation } function startGame() { - sendEvent("Start Game") + sendEvent("StartGame") } function handleTrumpSelection(object) { @@ -49,8 +69,7 @@ function handleTrumpSelection(object) { const payload = { suitIndex: trumpIndex } - console.log("SENDING TRUMP SUIT SELECTION:", payload); - sendEvent("Picked Trumpsuit", payload) + sendEvent("PickTrumpsuit", payload) } function handleKickPlayer(playerId) {