From 324316bc38ad5c8a7c0f2656692d2634a34e9fc9 Mon Sep 17 00:00:00 2001 From: Ralex91 <95540504+Ralex91@users.noreply.github.com> Date: Thu, 8 Feb 2024 19:37:15 +0100 Subject: [PATCH] Add Manager Skip button on quiz --- socket/index.js | 2 ++ socket/roles/manager.js | 14 +++++++++++++- src/components/game/states/Answers.jsx | 6 ++++++ src/pages/manager.jsx | 4 ++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/socket/index.js b/socket/index.js index efa5962..3b32865 100644 --- a/socket/index.js +++ b/socket/index.js @@ -40,6 +40,8 @@ io.on("connection", (socket) => { Player.selectedAnswer(gameState, io, socket, answerKey), ) + socket.on("manager:abortQuiz", () => Manager.abortQuiz(gameState, io, socket)) + socket.on("manager:nextQuestion", () => Manager.nextQuestion(gameState, io, socket), ) diff --git a/socket/roles/manager.js b/socket/roles/manager.js index 8a933fc..8b6c700 100644 --- a/socket/roles/manager.js +++ b/socket/roles/manager.js @@ -1,7 +1,7 @@ import { GAME_STATE_INIT } from "../quizz.config.js" import { startRound } from "../utils/round.js" import generateRoomId from "../utils/generateRoomId.js" -import { cooldown, sleep } from "../utils/cooldown.js" +import { abortCooldown, cooldown, sleep } from "../utils/cooldown.js" import deepClone from "../utils/deepClone.js" const Manager = { @@ -77,6 +77,18 @@ const Manager = { startRound(game, io, socket) }, + abortQuiz: (game, io, socket) => { + if (!game.started) { + return + } + + if (socket.id !== game.manager) { + return + } + + abortCooldown(game, io, game.room) + }, + showLoaderboard: (game, io, socket) => { if (!game.questions[game.currentQuestion + 1]) { socket.emit("game:status", { diff --git a/src/components/game/states/Answers.jsx b/src/components/game/states/Answers.jsx index 6fcf1cc..2b9e9b3 100644 --- a/src/components/game/states/Answers.jsx +++ b/src/components/game/states/Answers.jsx @@ -10,6 +10,7 @@ import { SFX_RESULTS_SOUND, } from "@/constants" import useSound from "use-sound" +import { usePlayerContext } from "@/context/player" const calculatePercentages = (objectResponses) => { const keys = Object.keys(objectResponses) @@ -37,6 +38,7 @@ export default function Answers({ data: { question, answers, image, time, responses, correct }, }) { const { socket } = useSocketContext() + const { player } = usePlayerContext() const [percentages, setPercentages] = useState([]) const [cooldown, setCooldown] = useState(time) @@ -58,6 +60,10 @@ export default function Answers({ ) const handleAnswer = (answer) => { + if (!player) { + return + } + socket.emit("player:selectedAnswer", answer) sfxPop() } diff --git a/src/pages/manager.jsx b/src/pages/manager.jsx index 4d8db09..2b02ef1 100644 --- a/src/pages/manager.jsx +++ b/src/pages/manager.jsx @@ -63,6 +63,10 @@ export default function Manager() { socket.emit("manager:startGame") break + case "SELECT_ANSWER": + socket.emit("manager:abortQuiz") + break + case "SHOW_RESPONSES": socket.emit("manager:showLeaderboard") break