From cb403d1e51abf7d1715abdc1f8ec51dcc40c5eb9 Mon Sep 17 00:00:00 2001 From: Florian Schmid Date: Fri, 28 Apr 2023 22:13:19 +0200 Subject: [PATCH] add built files --- .gitignore | 3 +- js/WWTRA.js | 151 ++++++++++++++++++++++++++++++++++++++++++++ js/cpuRepository.js | 52 +++++++++++++++ js/game.js | 142 +++++++++++++++++++++++++++++++++++++++++ js/gst.js | 141 +++++++++++++++++++++++++++++++++++++++++ js/statistics.js | 48 ++++++++++++++ 6 files changed, 535 insertions(+), 2 deletions(-) create mode 100644 js/WWTRA.js create mode 100644 js/cpuRepository.js create mode 100644 js/game.js create mode 100644 js/gst.js create mode 100644 js/statistics.js diff --git a/.gitignore b/.gitignore index e6b1219..91dfed8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ .DS_Store -node_modules -js/ \ No newline at end of file +node_modules \ No newline at end of file diff --git a/js/WWTRA.js b/js/WWTRA.js new file mode 100644 index 0000000..7c617c9 --- /dev/null +++ b/js/WWTRA.js @@ -0,0 +1,151 @@ +import { CpuRepository } from "./cpuRepository.js"; +import { Stats } from "./statistics.js"; +class UI { + constructor() { + this.model = new ViewModel(); + let button1 = document.getElementById("btnDate1"); + let button2 = document.getElementById("btnDate2"); + let button3 = document.getElementById("btnDate3"); + let button4 = document.getElementById("btnDate4"); + this.buttons = [button1, button2, button3, button4]; + this.score = document.getElementById("score"); + this.highScore = document.getElementById("highScore"); + document.getElementById("modeSwitch").addEventListener("change", (e) => { this.switchMode(); this.nextRound(); }); + } + async init() { + await this.model.init(); + this.cpuName = document.getElementById("cpuName"); + this.nextRound(); + this.updateScores(); + this.buttons.forEach((btn) => { + btn.addEventListener("click", (e) => this.buttonClick(btn)); + }); + } + switchMode() { + this.model.switchMode(); + } + async buttonClick(btn) { + btn.setAttribute("disabled", ""); + let result = this.model.processClick(btn.innerText); + btn.style.backgroundColor = result ? "lightgreen" : "#FF4444"; + this.updateScores(); + await this.delay(1500); + if (result) { + this.nextRound(); + } + } + async delay(time) { + return new Promise(resolve => setTimeout(resolve, time)); + } + nextRound() { + this.buttons.forEach((btn) => { + btn.removeAttribute("disabled"); + btn.style.backgroundColor = "#5bc0de"; + }); + this.model.nextRound(); + this.cpuName.innerText = this.model.currentCpu.name; + this.model.Dates.forEach((value, index) => (this.buttons[index].innerText = value)); + } + updateScores() { + this.score.innerText = this.model.score.toString(); + this.highScore.innerText = this.model.highScore.toString(); + } +} +class ViewModel { + constructor() { + this.stats = new Stats("highScore_date"); + this.repo = new CpuRepository(); + this.hardmode = false; + } + async init() { + await this.repo.init(); + } + nextRound() { + this.repo.reset(); + } + incrementScore(num = 1) { + this.stats.incrementScore(num); + } + reduceScore() { + this.stats.updateScore(-1); + } + resetScore() { + this.stats.resetScore(); + } + switchMode() { + this.hardmode = !this.hardmode; + } + getDates() { + let cpuDate = this.repo.currentCpu.date; + // if date is undefined the go for recursion + if (cpuDate === undefined) { + this.repo.reset(); + return this.getDates(); + } + const dateArray = cpuDate.split("-"); + const year = Number(dateArray[0]); + let currentCpuQuartal = this.getCurrentQuartal(dateArray); + let newDates = new Array(4); + if (this.hardmode) { + for (let index = 0; index < 4; index++) { + newDates[index] = this.getRandomDate(new Date((year - 1) + "-" + "01-01"), new Date((year + 1) + "-" + "01-01")); + } + // check if the cpus quartal was randomly choosen already + if (newDates.includes(currentCpuQuartal)) { + return newDates; + } + newDates[this.getRandomInt(0, 4)] = currentCpuQuartal; + return newDates; + } + // normal Mode + for (let index = 0; index < 4; index++) { + newDates[index] = this.getRandomDate(new Date("2000-01-01"), new Date(Date.now())); + } + // check if the cpus quartal was randomly choosen already + if (newDates.includes(currentCpuQuartal)) { + return newDates; + } + newDates[this.getRandomInt(0, 4)] = currentCpuQuartal; + return newDates; + } + getRandomInt(min, max) { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min) + min); // The maximum is exclusive and the minimum is inclusive + } + getCurrentQuartal(dateArray) { + let quartal = Math.ceil(Number(dateArray[1] / 4)); + return "Q" + quartal + " " + dateArray[0]; + } + getRandomDate(startDate, endDate) { + let newYear = this.getRandomInt(startDate.getFullYear(), endDate.getFullYear() + 1); + let quartal = this.getRandomInt(1, 5); + return "Q" + quartal + " " + newYear; + } + processClick(text) { + let result = text == this.getCurrentQuartal(this.currentCpu.date.split("-")); + if (result) { + this.incrementScore(2); + } + else { + this.reduceScore(); + } + return result; + } + get currentCpu() { + return this.repo.currentCpu; + } + get score() { + return this.stats.score; + } + get highScore() { + return this.stats.highScore; + } + get Dates() { + return this.getDates(); + } +} +export async function main() { + const ui = new UI(); + await ui.init(); +} diff --git a/js/cpuRepository.js b/js/cpuRepository.js new file mode 100644 index 0000000..0a4412d --- /dev/null +++ b/js/cpuRepository.js @@ -0,0 +1,52 @@ +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _CpuRepository_instances, _CpuRepository_cpuList, _CpuRepository_currentCPU, _CpuRepository_nextCPU, _CpuRepository_getRandomInt; +export class CpuRepository { + constructor() { + _CpuRepository_instances.add(this); + _CpuRepository_cpuList.set(this, void 0); + _CpuRepository_currentCPU.set(this, void 0); + _CpuRepository_nextCPU.set(this, void 0); + } + async init() { + const fetchResult = await fetch("../data.json"); + __classPrivateFieldSet(this, _CpuRepository_cpuList, await fetchResult.json(), "f"); + this.reset(); + } + get currentCpu() { + return __classPrivateFieldGet(this, _CpuRepository_currentCPU, "f"); + } + get nextCpu() { + return __classPrivateFieldGet(this, _CpuRepository_nextCPU, "f"); + } + getRandomCpu() { + let randomIndex; + do { + randomIndex = __classPrivateFieldGet(this, _CpuRepository_instances, "m", _CpuRepository_getRandomInt).call(this, 0, __classPrivateFieldGet(this, _CpuRepository_cpuList, "f").length); + } while (__classPrivateFieldGet(this, _CpuRepository_cpuList, "f")[randomIndex]["value"] == null || __classPrivateFieldGet(this, _CpuRepository_cpuList, "f")[randomIndex]["type"] == null); + __classPrivateFieldGet(this, _CpuRepository_cpuList, "f")[randomIndex]["name"] = __classPrivateFieldGet(this, _CpuRepository_cpuList, "f")[randomIndex]["name"].split('@')[0]; + return __classPrivateFieldGet(this, _CpuRepository_cpuList, "f")[randomIndex]; + } + nextRound() { + __classPrivateFieldSet(this, _CpuRepository_currentCPU, __classPrivateFieldGet(this, _CpuRepository_nextCPU, "f"), "f"); + __classPrivateFieldSet(this, _CpuRepository_nextCPU, this.getRandomCpu(), "f"); + } + reset() { + __classPrivateFieldSet(this, _CpuRepository_currentCPU, this.getRandomCpu(), "f"); + __classPrivateFieldSet(this, _CpuRepository_nextCPU, this.getRandomCpu(), "f"); + } +} +_CpuRepository_cpuList = new WeakMap(), _CpuRepository_currentCPU = new WeakMap(), _CpuRepository_nextCPU = new WeakMap(), _CpuRepository_instances = new WeakSet(), _CpuRepository_getRandomInt = function _CpuRepository_getRandomInt(min, max) { + min = Math.ceil(min); + max = Math.floor(max); + return Math.floor(Math.random() * (max - min) + min); // The maximum is exclusive and the minimum is inclusive +}; diff --git a/js/game.js b/js/game.js new file mode 100644 index 0000000..b120f2c --- /dev/null +++ b/js/game.js @@ -0,0 +1,142 @@ +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _UI_instances, _UI_model, _UI_btnLower, _UI_btnHigher, _UI_btnScore, _UI_btnHighScore, _UI_curCpuTitle, _UI_curCpuScore, _UI_nextCpuTitle, _UI_nextCpuScore, _UI_background, _UI_showResult, _UI_delay, _UI_countUp, _ViewModel_repo, _ViewModel_localStats; +// @ts-ignore +import { CountUp } from "https://cdnjs.cloudflare.com/ajax/libs/countup.js/2.6.0/countUp.min.js"; +import { Stats } from "./statistics.js"; +import { CpuRepository } from "./cpuRepository.js"; +class UI { + constructor() { + _UI_instances.add(this); + _UI_model.set(this, void 0); + _UI_btnLower.set(this, void 0); + _UI_btnHigher.set(this, void 0); + _UI_btnScore.set(this, void 0); + _UI_btnHighScore.set(this, void 0); + _UI_curCpuTitle.set(this, void 0); + _UI_curCpuScore.set(this, void 0); + _UI_nextCpuTitle.set(this, void 0); + _UI_nextCpuScore.set(this, void 0); + _UI_background.set(this, void 0); + __classPrivateFieldSet(this, _UI_model, new ViewModel(), "f"); + } + async init() { + await __classPrivateFieldGet(this, _UI_model, "f").init(); + __classPrivateFieldSet(this, _UI_btnLower, document.getElementById("btnLower"), "f"); + __classPrivateFieldSet(this, _UI_btnHigher, document.getElementById("btnHigher"), "f"); + __classPrivateFieldSet(this, _UI_btnScore, document.getElementById("score"), "f"); + __classPrivateFieldSet(this, _UI_btnHighScore, document.getElementById("highScore"), "f"); + __classPrivateFieldSet(this, _UI_curCpuTitle, document.getElementById("currentCpuTitle"), "f"); + __classPrivateFieldSet(this, _UI_curCpuScore, document.getElementById("currentCpuScore"), "f"); + __classPrivateFieldSet(this, _UI_nextCpuTitle, document.getElementById("nextCpuTitle"), "f"); + __classPrivateFieldSet(this, _UI_nextCpuScore, document.getElementById("nextCpuScore"), "f"); + __classPrivateFieldSet(this, _UI_background, document.getElementById("col2"), "f"); + __classPrivateFieldGet(this, _UI_btnLower, "f").onclick = () => this.handleButtonLowerClick(); + __classPrivateFieldGet(this, _UI_btnHigher, "f").onclick = () => this.handleButtonHigherClick(); + this.updateLayout(); + } + updateLayout() { + __classPrivateFieldGet(this, _UI_btnHighScore, "f").innerText = __classPrivateFieldGet(this, _UI_model, "f").highScore.toString(); + __classPrivateFieldGet(this, _UI_curCpuTitle, "f").innerText = __classPrivateFieldGet(this, _UI_model, "f").currentCpu.name; + // add "." to large numbers + __classPrivateFieldGet(this, _UI_curCpuScore, "f").innerText = new Intl.NumberFormat().format(__classPrivateFieldGet(this, _UI_model, "f").currentCpu.cpuScore); + __classPrivateFieldGet(this, _UI_nextCpuTitle, "f").innerText = __classPrivateFieldGet(this, _UI_model, "f").nextCpu.name; + __classPrivateFieldGet(this, _UI_nextCpuScore, "f").innerText = "?"; + __classPrivateFieldGet(this, _UI_background, "f").style.backgroundColor = ""; + } + handleButtonLowerClick() { + let result = __classPrivateFieldGet(this, _UI_model, "f").buttonClicked("lower"); + __classPrivateFieldGet(this, _UI_instances, "m", _UI_showResult).call(this, result); + } + handleButtonHigherClick() { + let result = __classPrivateFieldGet(this, _UI_model, "f").buttonClicked("higher"); + __classPrivateFieldGet(this, _UI_instances, "m", _UI_showResult).call(this, result); + } +} +_UI_model = new WeakMap(), _UI_btnLower = new WeakMap(), _UI_btnHigher = new WeakMap(), _UI_btnScore = new WeakMap(), _UI_btnHighScore = new WeakMap(), _UI_curCpuTitle = new WeakMap(), _UI_curCpuScore = new WeakMap(), _UI_nextCpuTitle = new WeakMap(), _UI_nextCpuScore = new WeakMap(), _UI_background = new WeakMap(), _UI_instances = new WeakSet(), _UI_showResult = function _UI_showResult(isCorrect) { + __classPrivateFieldGet(this, _UI_btnHigher, "f").setAttribute("disabled", ""); + __classPrivateFieldGet(this, _UI_btnLower, "f").setAttribute("disabled", ""); + __classPrivateFieldGet(this, _UI_background, "f").style.backgroundColor = isCorrect ? "lightgreen" : "#FF4444"; + isCorrect ? __classPrivateFieldGet(this, _UI_model, "f").incrementScore() : __classPrivateFieldGet(this, _UI_model, "f").resetScore(); + __classPrivateFieldGet(this, _UI_btnHighScore, "f").innerText = __classPrivateFieldGet(this, _UI_model, "f").highScore.toString(); + __classPrivateFieldGet(this, _UI_btnScore, "f").innerText = __classPrivateFieldGet(this, _UI_model, "f").score.toString(); + __classPrivateFieldGet(this, _UI_instances, "m", _UI_countUp).call(this); +}, _UI_delay = function _UI_delay(time) { + return new Promise(resolve => setTimeout(resolve, time)); +}, _UI_countUp = async function _UI_countUp() { + const options = { + startVal: __classPrivateFieldGet(this, _UI_model, "f").nextCpu.cpuScore / 2, + separator: '.', + decimal: ',', + duration: 2 + }; + let counter = new CountUp('nextCpuScore', __classPrivateFieldGet(this, _UI_model, "f").nextCpu.cpuScore, options); + if (!counter.error) { + counter.start(); + } + else { + console.log(counter.error); + } + await __classPrivateFieldGet(this, _UI_instances, "m", _UI_delay).call(this, 2500); + __classPrivateFieldGet(this, _UI_model, "f").nextRound(); + __classPrivateFieldGet(this, _UI_btnHigher, "f").removeAttribute("disabled"); + __classPrivateFieldGet(this, _UI_btnLower, "f").removeAttribute("disabled"); + this.updateLayout(); +}; +class ViewModel { + constructor() { + _ViewModel_repo.set(this, void 0); + _ViewModel_localStats.set(this, void 0); + __classPrivateFieldSet(this, _ViewModel_repo, new CpuRepository(), "f"); + __classPrivateFieldSet(this, _ViewModel_localStats, new Stats("highScore_cpu"), "f"); + } + async init() { + await __classPrivateFieldGet(this, _ViewModel_repo, "f").init(); + } + nextRound() { + __classPrivateFieldGet(this, _ViewModel_repo, "f").nextRound(); + } + // "lower" and "higher" + buttonClicked(value) { + if (value == "higher") { + return __classPrivateFieldGet(this, _ViewModel_repo, "f").nextCpu.cpuScore > __classPrivateFieldGet(this, _ViewModel_repo, "f").currentCpu.cpuScore; + } + if (value == "lower") { + return __classPrivateFieldGet(this, _ViewModel_repo, "f").nextCpu.cpuScore < __classPrivateFieldGet(this, _ViewModel_repo, "f").currentCpu.cpuScore; + } + console.log("nothing found for '" + value + "'"); + return false; + } + incrementScore() { + __classPrivateFieldGet(this, _ViewModel_localStats, "f").incrementScore(); + } + resetScore() { + __classPrivateFieldGet(this, _ViewModel_localStats, "f").resetScore(); + } + get currentCpu() { + return __classPrivateFieldGet(this, _ViewModel_repo, "f").currentCpu; + } + get nextCpu() { + return __classPrivateFieldGet(this, _ViewModel_repo, "f").nextCpu; + } + get highScore() { + return __classPrivateFieldGet(this, _ViewModel_localStats, "f").highScore; + } + get score() { + return __classPrivateFieldGet(this, _ViewModel_localStats, "f").score; + } +} +_ViewModel_repo = new WeakMap(), _ViewModel_localStats = new WeakMap(); +export async function main() { + const ui = new UI(); + await ui.init(); +} diff --git a/js/gst.js b/js/gst.js new file mode 100644 index 0000000..7e912e6 --- /dev/null +++ b/js/gst.js @@ -0,0 +1,141 @@ +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _UI_instances, _UI_model, _UI_btnDesktop, _UI_btnLaptop, _UI_btnServer, _UI_btnMobile, _UI_btns, _UI_cpuName, _UI_score, _UI_highScore, _UI_mainCol, _UI_updateScores, _UI_delay, _UI_nextRound, _ViewModel_repo, _ViewModel_stats; +import { CpuRepository } from "./cpuRepository.js"; +import { Stats } from "./statistics.js"; +class UI { + constructor() { + _UI_instances.add(this); + _UI_model.set(this, void 0); + _UI_btnDesktop.set(this, void 0); + _UI_btnLaptop.set(this, void 0); + _UI_btnServer.set(this, void 0); + _UI_btnMobile.set(this, void 0); + _UI_btns.set(this, void 0); + _UI_cpuName.set(this, void 0); + _UI_score.set(this, void 0); + _UI_highScore.set(this, void 0); + _UI_mainCol.set(this, void 0); + __classPrivateFieldSet(this, _UI_model, new ViewModel(), "f"); + __classPrivateFieldSet(this, _UI_btnDesktop, document.getElementById("btnDesktop"), "f"); + __classPrivateFieldGet(this, _UI_btnDesktop, "f").onclick = () => this.btnClick(0); + __classPrivateFieldSet(this, _UI_btnLaptop, document.getElementById("btnLaptop"), "f"); + __classPrivateFieldGet(this, _UI_btnLaptop, "f").onclick = () => this.btnClick(1); + __classPrivateFieldSet(this, _UI_btnMobile, document.getElementById("btnMobile"), "f"); + __classPrivateFieldGet(this, _UI_btnMobile, "f").onclick = () => this.btnClick(2); + __classPrivateFieldSet(this, _UI_btnServer, document.getElementById("btnServer"), "f"); + __classPrivateFieldGet(this, _UI_btnServer, "f").onclick = () => this.btnClick(3); + __classPrivateFieldSet(this, _UI_btns, [__classPrivateFieldGet(this, _UI_btnDesktop, "f"), __classPrivateFieldGet(this, _UI_btnLaptop, "f"), __classPrivateFieldGet(this, _UI_btnMobile, "f"), __classPrivateFieldGet(this, _UI_btnServer, "f")], "f"); + __classPrivateFieldSet(this, _UI_cpuName, document.getElementById("cpuName"), "f"); + __classPrivateFieldSet(this, _UI_score, document.getElementById("score"), "f"); + __classPrivateFieldSet(this, _UI_highScore, document.getElementById("highScore"), "f"); + __classPrivateFieldSet(this, _UI_mainCol, document.getElementById("mainCol"), "f"); + } + async init() { + await __classPrivateFieldGet(this, _UI_model, "f").init(); + __classPrivateFieldGet(this, _UI_instances, "m", _UI_nextRound).call(this); + } + async btnClick(typ) { + // 0 -> Desktop + // 1 -> Laptop + // 2 -> Mobile/Embedded + // 3 -> Server + __classPrivateFieldGet(this, _UI_btns, "f").forEach((el) => { + el.setAttribute("disabled", ""); + }); + switch (typ) { + case 0: + __classPrivateFieldGet(this, _UI_btnDesktop, "f").style.backgroundColor = "#FF4444"; + break; + case 1: + __classPrivateFieldGet(this, _UI_btnLaptop, "f").style.backgroundColor = "#FF4444"; + break; + case 2: + __classPrivateFieldGet(this, _UI_btnMobile, "f").style.backgroundColor = "#FF4444"; + break; + case 3: + __classPrivateFieldGet(this, _UI_btnServer, "f").style.backgroundColor = "#FF4444"; + break; + } + const currentType = __classPrivateFieldGet(this, _UI_model, "f").currentCpu.type; + if (currentType.includes("Desktop")) { + __classPrivateFieldGet(this, _UI_btnDesktop, "f").style.backgroundColor = "lightgreen"; + } + if (currentType.includes("Laptop")) { + __classPrivateFieldGet(this, _UI_btnLaptop, "f").style.backgroundColor = "lightgreen"; + } + if (currentType.includes("Mobile/Embedded")) { + __classPrivateFieldGet(this, _UI_btnMobile, "f").style.backgroundColor = "lightgreen"; + } + if (currentType.includes("Server")) { + __classPrivateFieldGet(this, _UI_btnServer, "f").style.backgroundColor = "lightgreen"; + } + // Score + if (__classPrivateFieldGet(this, _UI_btns, "f")[typ].style.backgroundColor == "lightgreen") { + __classPrivateFieldGet(this, _UI_model, "f").incrementScore(); + } + else { + __classPrivateFieldGet(this, _UI_model, "f").resetScore(); + } + __classPrivateFieldGet(this, _UI_instances, "m", _UI_updateScores).call(this); + await __classPrivateFieldGet(this, _UI_instances, "m", _UI_delay).call(this, 1000); + __classPrivateFieldGet(this, _UI_btns, "f").forEach((el) => { + el.style.backgroundColor = "#3CC3FA"; + el.removeAttribute("disabled"); + }); + __classPrivateFieldGet(this, _UI_instances, "m", _UI_nextRound).call(this); + } +} +_UI_model = new WeakMap(), _UI_btnDesktop = new WeakMap(), _UI_btnLaptop = new WeakMap(), _UI_btnServer = new WeakMap(), _UI_btnMobile = new WeakMap(), _UI_btns = new WeakMap(), _UI_cpuName = new WeakMap(), _UI_score = new WeakMap(), _UI_highScore = new WeakMap(), _UI_mainCol = new WeakMap(), _UI_instances = new WeakSet(), _UI_updateScores = function _UI_updateScores() { + __classPrivateFieldGet(this, _UI_score, "f").innerText = __classPrivateFieldGet(this, _UI_model, "f").score.toString(); + __classPrivateFieldGet(this, _UI_highScore, "f").innerText = __classPrivateFieldGet(this, _UI_model, "f").highScore.toString(); +}, _UI_delay = async function _UI_delay(time) { + return new Promise(resolve => setTimeout(resolve, time)); +}, _UI_nextRound = function _UI_nextRound() { + __classPrivateFieldGet(this, _UI_model, "f").nextRound(); + __classPrivateFieldGet(this, _UI_cpuName, "f").innerText = __classPrivateFieldGet(this, _UI_model, "f").currentCpu.name; + __classPrivateFieldGet(this, _UI_mainCol, "f").style.backgroundColor = ""; +}; +class ViewModel { + constructor() { + _ViewModel_repo.set(this, void 0); + _ViewModel_stats.set(this, void 0); + __classPrivateFieldSet(this, _ViewModel_stats, new Stats("highScore_socket"), "f"); + __classPrivateFieldSet(this, _ViewModel_repo, new CpuRepository(), "f"); + } + async init() { + await __classPrivateFieldGet(this, _ViewModel_repo, "f").init(); + } + nextRound() { + __classPrivateFieldGet(this, _ViewModel_repo, "f").reset(); + } + incrementScore() { + __classPrivateFieldGet(this, _ViewModel_stats, "f").incrementScore(); + } + resetScore() { + __classPrivateFieldGet(this, _ViewModel_stats, "f").resetScore(); + } + get currentCpu() { + return __classPrivateFieldGet(this, _ViewModel_repo, "f").currentCpu; + } + get score() { + return __classPrivateFieldGet(this, _ViewModel_stats, "f").score; + } + get highScore() { + return __classPrivateFieldGet(this, _ViewModel_stats, "f").highScore; + } +} +_ViewModel_repo = new WeakMap(), _ViewModel_stats = new WeakMap(); +export async function main() { + const ui = new UI(); + await ui.init(); +} diff --git a/js/statistics.js b/js/statistics.js new file mode 100644 index 0000000..fbfe6ff --- /dev/null +++ b/js/statistics.js @@ -0,0 +1,48 @@ +var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; +}; +var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); +}; +var _Stats_score, _Stats_highScore, _Stats_highScoreStorageKey; +export class Stats { + constructor(highScoreStorageKey) { + var _a; + _Stats_score.set(this, void 0); + _Stats_highScore.set(this, void 0); + _Stats_highScoreStorageKey.set(this, void 0); + // used as key for localStorage + __classPrivateFieldSet(this, _Stats_highScoreStorageKey, highScoreStorageKey, "f"); + __classPrivateFieldSet(this, _Stats_score, 0, "f"); + __classPrivateFieldSet(this, _Stats_highScore, (_a = Number(localStorage.getItem(__classPrivateFieldGet(this, _Stats_highScoreStorageKey, "f")))) !== null && _a !== void 0 ? _a : 0, "f"); + } + incrementScore(value = 1) { + __classPrivateFieldSet(this, _Stats_score, __classPrivateFieldGet(this, _Stats_score, "f") + value, "f"); + this.checkHighScore; + } + resetScore() { + __classPrivateFieldSet(this, _Stats_score, 0, "f"); + } + updateScore(value) { + __classPrivateFieldSet(this, _Stats_score, __classPrivateFieldGet(this, _Stats_score, "f") + value, "f"); + this.checkHighScore; + } + checkHighScore() { + if (__classPrivateFieldGet(this, _Stats_highScore, "f") < __classPrivateFieldGet(this, _Stats_score, "f")) { + __classPrivateFieldSet(this, _Stats_highScore, __classPrivateFieldGet(this, _Stats_score, "f"), "f"); + localStorage.setItem(__classPrivateFieldGet(this, _Stats_highScoreStorageKey, "f"), __classPrivateFieldGet(this, _Stats_highScore, "f").toString()); + } + } + get highScore() { + return __classPrivateFieldGet(this, _Stats_highScore, "f"); + } + get score() { + return __classPrivateFieldGet(this, _Stats_score, "f"); + } +} +_Stats_score = new WeakMap(), _Stats_highScore = new WeakMap(), _Stats_highScoreStorageKey = new WeakMap();