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)
}
)
}