From 58f8fedaecf3a1dfe32b4c398e633bd6ba3993d8 Mon Sep 17 00:00:00 2001 From: EisiBaer Date: Fri, 14 Jul 2023 18:07:20 +0200 Subject: [PATCH] Implemented awarding multiple players for non-buzzer questions --- .../controllers/PlayerControllerMongoose.js | 23 ----------------- src/server/models/PlayerModel.js | 1 - src/server/websocket/handler.js | 2 +- src/webapp/components/pages/Game.vue | 25 +++++++++---------- src/webapp/stores/GameStore.js | 7 ++++++ 5 files changed, 20 insertions(+), 38 deletions(-) diff --git a/src/server/controllers/PlayerControllerMongoose.js b/src/server/controllers/PlayerControllerMongoose.js index b06cd64..66fd1b7 100644 --- a/src/server/controllers/PlayerControllerMongoose.js +++ b/src/server/controllers/PlayerControllerMongoose.js @@ -86,29 +86,6 @@ exports.checkPlayerAcceptAnswers = ( playerId ) => { }); } -/** - * Checks if a player is allowed to choose a BoardEntry - * @param {String} playerId - * @returns A promise which resolves with wheter the player is allowed to choose a BoardEntry or not. Rejects if an error occurs. - */ -exports.checkPlayerCanChoose = ( playerId ) => { - return new Promise((resolve, reject) => { - PlayerModel.findById( playerId ) - .then( ( player ) => { - if( player ){ - resolve( player.isChoosing ); - } else { - let playerNotFoundError = new Error(`No player found with id "${playerId}"`); - playerNotFoundError.name = "NotFoundError"; - reject(playerNotFoundError); - } - }) - .catch( ( err ) => { - reject( err ); - }) - }); -} - /** * Checks if a player is allowed to currently answer a question and sets it to the specified value * @param {String} playerId diff --git a/src/server/models/PlayerModel.js b/src/server/models/PlayerModel.js index 228cf8f..8cae5c2 100644 --- a/src/server/models/PlayerModel.js +++ b/src/server/models/PlayerModel.js @@ -6,7 +6,6 @@ const PlayerSchema = new Schema({ name: { type: String, required: true, maxLength: 100 }, points: { type: Number }, acceptAnswers: { type: Boolean, default: false }, - isChoosing: { type: Boolean, default: false }, }); // Export model diff --git a/src/server/websocket/handler.js b/src/server/websocket/handler.js index c6d7d66..c20c662 100644 --- a/src/server/websocket/handler.js +++ b/src/server/websocket/handler.js @@ -344,7 +344,7 @@ exports.handleMessage = ( gameSocketList, socket, dataRaw ) => { throw new Error("Player not found"); } else { let message = `Player ${payload.playerName} got ${payload.pointsAdjustment} points`; - let sendingData = { players: game.players, acceptAnswers: game.acceptAnswers } + let sendingData = { adjustedPlayer: game.players[playerIndex], acceptAnswers: game.acceptAnswers } sendAllPlayers( socket, gameSocketList, "pointsAdjusted", message, sendingData ); resolve(); }; diff --git a/src/webapp/components/pages/Game.vue b/src/webapp/components/pages/Game.vue index 126bc62..63f4b41 100644 --- a/src/webapp/components/pages/Game.vue +++ b/src/webapp/components/pages/Game.vue @@ -10,21 +10,21 @@ import { useGameStore } from '@/stores/GameStore'; import Board from '@/models/Board'; import BoardEntry from '@/models/BoardEntry'; -import BuzzerSound from "../../assets/sounds/buzzbuzz.mp3"; -import NoBuzzerSound from "../../assets/sounds/dingdongy.mp3"; -import CorrectAudio from "../../assets/sounds/correct.mp3"; -import WrongAudio from "../../assets/sounds/wrong.mp3"; +// import HardBuzzerSound from "../../assets/sounds/buzzbuzz.mp3"; +import BuzzerSound from "../../assets/sounds/dingdongy.mp3"; +// import CorrectAudio from "../../assets/sounds/correct.mp3"; +// import WrongAudio from "../../assets/sounds/wrong.mp3"; const gameStore = useGameStore(); const route = useRoute(); let navbarHeight = ref(0); let boardIsLoading = ref( true ); let buzzBuzz = new Audio( BuzzerSound ); -buzzBuzz.volume = 0.3 -let buzzNoBuzz = new Audio( NoBuzzerSound ); -buzzNoBuzz.volume = 0.7 -let answerCorrectAudio = new Audio( CorrectAudio ); -let answerWrongAudio = new Audio( WrongAudio ); +buzzBuzz.volume = 0.5 +// let buzzNoBuzz = new Audio( NoBuzzerSound ); +// buzzNoBuzz.volume = 0.7 +// let answerCorrectAudio = new Audio( CorrectAudio ); +// let answerWrongAudio = new Audio( WrongAudio ); let protocol = ('https:' == document.location.protocol ? 'https://' : 'http://'); @@ -98,10 +98,9 @@ function setUpListeners(){ boardSelected(); }); gameStore.addSocketListener("pointsAdjusted", ( data ) => { - gameStore.players = data.payload.players; - let self = data.payload.players.find( playerEntry => playerEntry._id === gameStore.playerId ); - if( self ){ - gameStore.acceptAnswers = data.payload.acceptAnswers && self.acceptAnswers; + gameStore.setPlayerPoints( data.payload.adjustedPlayer ); + if( gameStore.playerId === data.payload.adjustedPlayer._id ){ + gameStore.acceptAnswers = data.payload.acceptAnswers && data.payload.adjustedPlayer.acceptAnswers; } else { gameStore.acceptAnswers = data.payload.acceptAnswers; } diff --git a/src/webapp/stores/GameStore.js b/src/webapp/stores/GameStore.js index 37cb400..aa4fc82 100644 --- a/src/webapp/stores/GameStore.js +++ b/src/webapp/stores/GameStore.js @@ -28,6 +28,13 @@ export const useGameStore = defineStore('game', { } }, actions: { + setPlayerPoints( adjustedPlayer ){ + let playerToAdjustIndex = this.players.findIndex( playersEntry => playersEntry._id === adjustedPlayer._id ); + if( playerToAdjustIndex !== -1 ){ + this.players[playerToAdjustIndex].points = adjustedPlayer.points; + this.players[playerToAdjustIndex].isAnswering = false; + } + }, setPlayerOnIndexChoosing( playerId ){ let playerIndex = this.players.findIndex( playerEntry => playerEntry._id === playerId ); for( let i in this.players ){