Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 12 additions & 28 deletions client/play/geoword/game/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,26 +50,29 @@ fetch('/api/geoword/paid/play/get-progress?' + new URLSearchParams({ packetName
});
});

async function checkGeowordAnswer (givenAnswer, questionNumber) {
async function checkGeowordAnswer (givenAnswer, questionNumber, celerity, prompts) {
return await fetch('/api/geoword/paid/play/check-answer?' + new URLSearchParams({
givenAnswer,
packetName,
questionNumber,
division
division,
celerity,
prompts
}))
.then(response => response.json())
.then(data => {
const { actualAnswer, directive, directedPrompt } = data;
return { actualAnswer, directive, directedPrompt };
const { actualAnswer, directive, directedPrompt, saved } = data;
return { actualAnswer, directive, directedPrompt, saved };
});
}

async function giveAnswer (givenAnswer) {
const { actualAnswer, directive, directedPrompt } = await checkGeowordAnswer(givenAnswer, questionNumber);
const celerity = Math.max(0, 1 - currentAudio.currentTime / currentAudio.duration);
const { actualAnswer, directive, directedPrompt, saved } = await checkGeowordAnswer(givenAnswer, questionNumber, celerity, prompts);

switch (directive) {
case 'accept':
updateScore(true, givenAnswer, actualAnswer, prompts);
updateScore(true, givenAnswer, actualAnswer, celerity, saved);
prompts = [];
break;
case 'prompt':
Expand All @@ -79,7 +82,7 @@ async function giveAnswer (givenAnswer) {
prompts.push(givenAnswer);
break;
case 'reject':
updateScore(false, givenAnswer, actualAnswer, prompts);
updateScore(false, givenAnswer, actualAnswer, celerity, saved);
prompts = [];
break;
}
Expand Down Expand Up @@ -156,24 +159,7 @@ function recordProtest (packetName, questionNumber) {
});
}

/**
* @returns {Promise<boolean>}
*/
async function recordBuzz (packetName, questionNumber, celerity, isCorrect, givenAnswer, prompts = []) {
return await fetch('/api/geoword/paid/play/record-buzz?' + new URLSearchParams({
packetName,
questionNumber,
celerity,
isCorrect,
givenAnswer,
prompts
}))
.then(response => response.ok)
.catch(() => false);
}

async function updateScore (isCorrect, givenAnswer, actualAnswer, prompts = []) {
const celerity = Math.max(0, 1 - currentAudio.currentTime / currentAudio.duration);
function updateScore (isCorrect, givenAnswer, actualAnswer, celerity, saved) {
const currentPoints = scoreBuzz(scoring, { celerity, isCorrect });

if (isCorrect) {
Expand All @@ -184,8 +170,6 @@ async function updateScore (isCorrect, givenAnswer, actualAnswer, prompts = [])
document.getElementById('protest-text').classList.remove('d-none');
}

const saved = recordBuzz(packetName, questionNumber, celerity, isCorrect, givenAnswer, prompts);

points += currentPoints;
tossupsHeard++;
totalCorrectCelerity += isCorrect ? celerity : 0;
Expand All @@ -202,7 +186,7 @@ async function updateScore (isCorrect, givenAnswer, actualAnswer, prompts = [])
document.getElementById('buzz').disabled = true;
document.getElementById('question-info').classList.remove('d-none');

if (await saved) {
if (saved) {
document.getElementById('next').disabled = false;
} else {
document.getElementById('record-buzz-error').classList.remove('d-none');
Expand Down
18 changes: 17 additions & 1 deletion routes/api/geoword/paid/play/check-answer.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import getUserId from '../../../../../database/account-info/get-user-id.js';
import getAnswer from '../../../../../database/geoword/paid/play/get-answer.js';
import logPlayEvent from '../../../../../database/geoword/paid/play/log-play-event.js';
import recordBuzz from '../../../../../database/geoword/paid/play/record-buzz.js';

import { Router } from 'express';
import checkAnswer from 'qb-answer-checker';
Expand All @@ -15,7 +16,22 @@ router.get('/', async (req, res) => {
const userId = await getUserId(req.session.username);
logPlayEvent({ type: 'check-answer', packetName, questionNumber, userId, givenAnswer, directive }).catch(console.error);

res.json({ actualAnswer: answer, directive, directedPrompt });
if (directive === 'prompt') {
return res.json({ actualAnswer: answer, directive, directedPrompt });
}

const celerity = Math.min(1, Math.max(0, parseFloat(req.query.celerity) || 0));
const prompts = req.query.prompts ? req.query.prompts.split(',') : [];

let saved = false;
try {
const isCorrect = directive === 'accept';
saved = !!(await recordBuzz({ celerity, division, givenAnswer, isCorrect, packetName, prompts, questionNumber, userId }));
} catch (error) {
console.error(error);
}

res.json({ actualAnswer: answer, directive, directedPrompt, saved });
});

export default router;
6 changes: 2 additions & 4 deletions routes/api/geoword/paid/play/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import divisionChoiceRouter from './division-choice.js';
import getInstructionsRouter from './get-instructions.js';
import getProgressRouter from './get-progress.js';
import getQuestionCountRouter from './get-question-count.js';
import recordBuzzRouter from './record-buzz.js';
import recordDivisionRouter from './record-division.js';
import recordProtestRouter from './record-protest.js';
import requireCurrentQuestion from './require-current-question.js';
Expand All @@ -14,16 +13,15 @@ import { Router } from 'express';

const router = Router();

router.use(['/audio/question.mp3', '/check-answer', '/get-instructions', '/record-buzz'], requireCurrentQuestion);
router.use(['/audio/question.mp3', '/check-answer', '/get-instructions', '/record-buzz'], useDivisionChoice);
router.use(['/audio/question.mp3', '/check-answer', '/get-instructions'], requireCurrentQuestion);
router.use(['/audio/question.mp3', '/check-answer', '/get-instructions'], useDivisionChoice);

router.use('/audio', audioRouter);
router.use('/check-answer', checkAnswerRouter);
router.use('/division-choice', divisionChoiceRouter);
router.use('/get-instructions', getInstructionsRouter);
router.use('/get-progress', getProgressRouter);
router.use('/get-question-count', getQuestionCountRouter);
router.use('/record-buzz', recordBuzzRouter);
router.use('/record-division', recordDivisionRouter);
router.use('/record-protest', recordProtestRouter);

Expand Down
27 changes: 0 additions & 27 deletions routes/api/geoword/paid/play/record-buzz.js

This file was deleted.

Loading