<script lang="ts">
import ToggleButton from "../hud/components/ToggleButton.svelte";
import socketManager from "../network/socketManager";
import { IColyseusMessage, IDeviceChange } from "../types";
import { playerId } from "../stores";
let { transportType } = socketManager;
let questions = []
let answerDeviceId: string | null = null;
let currentQuestionId: string | null = null;
let questionIdList: string[] = [];
let currentQuestionIndex: number = -1;
$: enabled = $transportType == "colyseus" ?
questions.length > 0 && currentQuestionId != null && answerDeviceId != null :
questionIdList.length > 0 && questions.length > 0 && currentQuestionIndex != -1;
function answerQuestion() {
if($transportType === 'colyseus') {
if(currentQuestionId == null) return;
// find the correct question
let question = questions.find(q => q._id == currentQuestionId);
if(!question) return;
let packet: any = {
key: 'answered',
deviceId: answerDeviceId,
data: {}
}
// create a packet to send to the server
if(question.type == 'text') {
packet.data.answer = question.answers[0].text;
} else {
let correctAnswerId = question.answers.find((a: any) => a.correct)._id
packet.data.answer = correctAnswerId
}
socketManager.sendMessage("MESSAGE_FOR_DEVICE", packet);
} else {
let questionId = questionIdList[currentQuestionIndex]
let question = questions.find(q => q._id == questionId)
if(!question) return;
let answer: string;
if(question.type == 'mc') {
answer = question.answers.find((a: any) => a.correct)._id
} else {
answer = question.answers[0].text
}
socketManager.sendMessage("QUESTION_ANSWERED", {
answer,
questionId: questionId
})
}
}
let answerInterval: number; // should probably be a number but I don't care
function toggleAutoAnswer(event: CustomEvent<boolean>) {
if(event.detail) {
answerInterval = setInterval(answerQuestion, 1000) as any;
} else {
clearInterval(answerInterval);
}
}
socketManager.addEventListener("deviceChanges", (event: CustomEvent<IDeviceChange[]>) => {
for(let { id, data } of event.detail) {
for(let key in data) {
if(key == "GLOBAL_questions") {
questions = JSON.parse(data[key]);
console.log("Got questions", questions);
answerDeviceId = id;
}
if(key == `PLAYER_${$playerId}_currentQuestionId`) {
currentQuestionId = data[key];
}
}
}
})
socketManager.addEventListener("blueboatMessage", (event: CustomEvent<any>) => {
if(event.detail?.key != "STATE_UPDATE") return;
switch(event.detail.data.type) {
case "GAME_QUESTIONS":
questions = event.detail.data.value;
break;
case "PLAYER_QUESTION_LIST":
questionIdList = event.detail.data.value.questionList;
currentQuestionIndex = event.detail.data.value.questionIndex;
break;
case "PLAYER_QUESTION_LIST_INDEX":
currentQuestionIndex = event.detail.data.value;
break;
}
})
</script>
<ToggleButton on:click={toggleAutoAnswer} disabled={!enabled} disabledMsg="Questions haven't loaded yet"
onText="Stop auto answering" offText="Start auto answering" enabled={false} hotkeyId="autoAnswer" />