diff --git a/knockoutwhistweb/app/model/sessions/UserSession.scala b/knockoutwhistweb/app/model/sessions/UserSession.scala index c8a09bd..0c1608f 100644 --- a/knockoutwhistweb/app/model/sessions/UserSession.scala +++ b/knockoutwhistweb/app/model/sessions/UserSession.scala @@ -47,11 +47,11 @@ class UserSession(val user: User, val host: Boolean, val gameLobby: GameLobby) e case "StartGame" => gameLobby.startGame(user) case "PlayCard" => - val maybeCardIndex: Option[Int] = (data \ "cardindex").asOpt[Int] + 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.") } @@ -69,7 +69,6 @@ class UserSession(val user: User, val host: Boolean, val gameLobby: GameLobby) e lock.unlock() if (result.isFailure) { val throwable = result.failed.get - throwable.printStackTrace() throw throwable } } diff --git a/knockoutwhistweb/app/views/ingame/ingame.scala.html b/knockoutwhistweb/app/views/ingame/ingame.scala.html index ddecd8a..45fe957 100644 --- a/knockoutwhistweb/app/views/ingame/ingame.scala.html +++ b/knockoutwhistweb/app/views/ingame/ingame.scala.html @@ -112,7 +112,7 @@ } else { @for(i <- player.currentHand().get.cards.indices) {
-
+
@util.WebUIUtils.cardtoImage(player.currentHand().get.cards(i)) width="120px" style="border-radius: 6px"/>
@if(player.isInDogLife) { @@ -130,16 +130,17 @@
diff --git a/knockoutwhistweb/public/javascripts/events.js b/knockoutwhistweb/public/javascripts/events.js index 54c5ce8..ea88b70 100644 --- a/knockoutwhistweb/public/javascripts/events.js +++ b/knockoutwhistweb/public/javascripts/events.js @@ -1,3 +1,5 @@ +var canPlayCard = false; + function alertMessage(message) { let newHtml = ''; const alertId = `alert-${Date.now()}`; @@ -38,7 +40,7 @@ function receiveHandEvent(eventData) { //Build Hand Container hand.forEach((card) => { //Data - const idx = card.idx + const idx = card.idx; const cardS = card.card; const cardHtml = ` @@ -157,6 +159,7 @@ function requestCardEvent(eventData) { const player = eventData.player; const handElement = $('#card-slide') handElement.removeClass('inactive'); + canPlayCard = true; } diff --git a/knockoutwhistweb/public/javascripts/interact.js b/knockoutwhistweb/public/javascripts/interact.js index e2052fc..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("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) } ) }