diff --git a/src/server/websocket/handler.js b/src/server/websocket/handler.js index 8c40bd7..4a164cf 100644 --- a/src/server/websocket/handler.js +++ b/src/server/websocket/handler.js @@ -452,6 +452,22 @@ exports.handleMessage = ( gameSocketList, socket, dataRaw ) => { reject( new Error("No playerId found for connection") ); } break; + case "startTimer": + if( socket.locals.isHost ){ + sendAllPlayers( socket, gameSocketList, "timerStarted", "A timer has been started", { timerAmount: payload }); + resolve(); + } else { + reject( new Error("No playerId found for connection") ); + } + break; + case "stopTimer": + if( socket.locals.isHost ){ + sendAllPlayers( socket, gameSocketList, "timerStopped", "The timer has been stopped", {}); + resolve(); + } else { + reject( new Error("No playerId found for connection") ); + } + break; } }); } diff --git a/src/webapp/assets/scss/styles.scss b/src/webapp/assets/scss/styles.scss index f512bc5..7c5b4db 100644 --- a/src/webapp/assets/scss/styles.scss +++ b/src/webapp/assets/scss/styles.scss @@ -204,4 +204,8 @@ $utilities: map-merge( .placeholder-dark::placeholder { color: $gray-600; opacity: 1; +} + +.fs-sm { + font-size: .75em; } \ No newline at end of file diff --git a/src/webapp/components/pages/Game.vue b/src/webapp/components/pages/Game.vue index 6f222bd..fe2a8fc 100644 --- a/src/webapp/components/pages/Game.vue +++ b/src/webapp/components/pages/Game.vue @@ -44,7 +44,6 @@ let audioInstance = ref(null); let showingAnswer = ref( false ); let showingQuestion = ref( false ); - const isBoardSelected = computed( () => { return selectedObject.value instanceof Board; }); @@ -153,8 +152,10 @@ function setUpListeners(){ }); gameStore.addSocketListener("questionLocked", ( _data ) => { gameStore.acceptAnswers = false; - for( let i in gameStore.players ){ - gameStore.players[i].isAnswering = true; + if( isFreeTextAnswerType.value ){ + for( let i in gameStore.players ){ + gameStore.players[i].isAnswering = true; + } } }); gameStore.addSocketListener("playerAnswersRevealed", ( data ) => { @@ -206,10 +207,18 @@ function setUpListeners(){ gameStore.addSocketListener("questionLayerSelected", ( data ) => { questionIndex.value = Number( data.payload.questionIndex ); }); + gameStore.addSocketListener("timerStarted", ( data ) => { + gameStore.setUpTimer(Number( data.payload.timerAmount )); + }); + gameStore.addSocketListener("timerStopped", ( data ) => { + gameStore.clearTimer(); + }); } function playerBuzzered( data ){ gameStore.acceptAnswers = false; + gameStore.clearTimer(); + if( gameStore.playerId === data.payload.playerId ){ buzzBuzz.play(); } @@ -314,7 +323,8 @@ function questionAnsweredRevert( cIndex, bEIndex ){ gameStore.sendEvent("questionAnsweredRevert", payload ); } -function manualPointsAdjustment( playerId, playerName, points ){ +function manualPointsAdjustment( playerId, playerName, arePointsAdded ){ + let points = ( arePointsAdded ? gameStore.hostData.manualAdjustmentValue : -1 * gameStore.hostData.manualAdjustmentValue ); let payload = { reopenQuestion: gameStore.acceptAnswers, playerId: playerId, @@ -369,6 +379,17 @@ function revealPlayerAnswers( playerIds ){ gameStore.sendEvent("revealPlayerAnswers", payload); } +function startTimer( timerAmount ){ + if( gameStore.isHost ){ + gameStore.sendEvent("startTimer", timerAmount ); + } +} +function stopTimer(){ + if( gameStore.isHost ){ + gameStore.sendEvent("stopTimer", {}); + } +} + gameStore.getBoardToGame( route.params.gameId ) .then( () => { selectedObject.value = gameStore.board; @@ -402,8 +423,11 @@ onBeforeRouteLeave((to, from) => { } }); +const isFreeTextAnswerType = computed(() => { + return gameStore.board.categories[categoryIndex.value].boardEntries[boardEntryIndex.value].answer.answerInteraction === 'freeTextInteraction'; +}) + //TODO List: -// -Profile Pic // -More Question Types // -Height of Category Headers (on Multiline) @@ -489,6 +513,8 @@ onBeforeRouteLeave((to, from) => { @questionAnswered="questionAnswered" @questionAnsweredRevert="questionAnsweredRevert" @letNextPlayerChoose="letNextPlayerChoose" + @startTimer="startTimer" + @stopTimer="stopTimer" /> diff --git a/src/webapp/components/views/BoardEntryView.vue b/src/webapp/components/views/BoardEntryView.vue index fa7b9ef..f5e0eec 100644 --- a/src/webapp/components/views/BoardEntryView.vue +++ b/src/webapp/components/views/BoardEntryView.vue @@ -1,8 +1,9 @@ - + +
+
+
+
+
- - diff --git a/src/webapp/components/views/HostInteractionView.vue b/src/webapp/components/views/HostInteractionView.vue index d7befc7..2b0c26a 100644 --- a/src/webapp/components/views/HostInteractionView.vue +++ b/src/webapp/components/views/HostInteractionView.vue @@ -1,6 +1,8 @@