iswhoa/public/scripts/controllers/gamestate.js
Leon Mika 0b20017408 Finished the remaining screens
I think it's good to ship
2025-06-23 13:50:50 +02:00

67 lines
1.8 KiB
JavaScript

const GAME_STATE_KEY = "gameState";
const MAX_QUESTIONS = 10;
class GameState {
getQuestionChoice(qId) {
let savedItem = this._readGameState();
if (qId in savedItem) {
return savedItem[qId];
}
return null;
}
setQuestionChoice(qId, cId, isRight) {
let savedItem = this._readGameState();
savedItem[qId] = {cId: cId, isRight: isRight};
localStorage.setItem(GAME_STATE_KEY, JSON.stringify(savedItem));
}
clearChoices() {
localStorage.removeItem(GAME_STATE_KEY);
}
getMaxQuestions() {
return MAX_QUESTIONS;
}
getSummary() {
let savedItem = this._readGameState();
let summary = { totalAnswered: 0, totalRight: 0 };
for (let k in savedItem) {
summary.totalAnswered++;
if (savedItem[k].isRight) {
summary.totalRight++;
}
}
if (summary.totalAnswered != MAX_QUESTIONS) {
summary.rank = "Incompletionist";
} else if (summary.totalRight <= 2) {
summary.rank = "Developer";
} else if (summary.totalRight <= 5) {
summary.rank = "Senior Developer";
} else if (summary.totalRight <= 7) {
summary.rank = "Standard Enthusiast";
} else if (summary.totalRight <= 9) {
summary.rank = "Standard Maker";
} else if (summary.totalRight == 10) {
summary.rank = "ISO President";
} else {
summary.rank = "Beta Tester";
}
return summary;
}
_readGameState() {
let savedItem = localStorage.getItem(GAME_STATE_KEY);
if (savedItem === null) {
return {};
} else {
return JSON.parse(savedItem);
}
}
}
export let gameState = new GameState();