{"mappings":"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","sources":["","assets/js/game.js"],"sourcesContent":["// session id\nvar ulid = \"\";\nvar highScore = \"\";\nvar fetchedHighscore = 0;\n// This is all for module counting\nvar buttonPresses = 0;\nvar timerTicks = 0;\nfunction resetModCounter() {\n fetchedHighscore = 0;\n buttonPresses = 0;\n timerTicks = 0;\n}\n// start screen\ndocument.querySelectorAll(\".modal-button\").forEach(function(el) {\n el.addEventListener(\"click\", function() {\n var target = document.querySelector(el.getAttribute(\"data-target\"));\n target.classList.add(\"is-active\");\n target.querySelector(\".modal-trigger-close\").addEventListener(\"click\", function() {\n target.classList.remove(\"is-active\");\n });\n });\n});\nfunction setScoreboard() {\n // get results from /scoreboard?ulid=${ulid}\n fetch(`/score?ulid=${ulid}`).then((response)=>response.json()).then((data)=>{\n $(\"#scoreTotal\").text(data.total);\n $(\"#scoreFinal\").text(data.total);\n });\n}\nfunction isHighscore() {\n fetch(\"/highscore\", {\n method: \"POST\",\n body: JSON.stringify({\n \"score\": parseInt($(\"#scoreFinal\").text()),\n \"ulid\": ulid,\n \"username\": \"\"\n })\n }).then((response)=>response.json()).then((data)=>{\n fetchedHighscore++;\n console.log(data);\n highScore = data.high_score_table;\n if (data.is_high_score) {\n console.log(\"It's a highscore\");\n showHighscores();\n $(\"#promptName\").show();\n } else {\n console.log(\"It's not a highscore\");\n showHighscores();\n }\n });\n}\nfunction showHighscores() {\n document.getElementById(\"highScoresList\").textContent = \"\";\n highScore.forEach((element)=>{\n console.log(element);\n var dt = document.createElement(\"dt\");\n if (element.ulid === ulid && element.username !== \"\") {\n dt.style.fontWeight = \"bold\";\n dt.style.background = \"#FFFFFF\";\n dt.style.color = \"#1A2A60\";\n }\n dt.innerHTML = element.username;\n var dd = document.createElement(\"dd\");\n if (element.ulid == ulid) {\n dd.style.fontWeight = \"bold\";\n dd.style.background = \"#FFFFFF\";\n dd.style.color = \"#1A2A60\";\n }\n dd.innerHTML = element.score;\n document.getElementById(\"highScoresList\").appendChild(dt);\n document.getElementById(\"highScoresList\").appendChild(dd);\n });\n}\n$(\"#submitName\").on(\"click\", function() {\n fetch(\"/highscore\", {\n method: \"POST\",\n body: JSON.stringify({\n \"score\": parseInt($(\"#scoreFinal\").text()),\n \"ulid\": ulid,\n \"username\": $(\"#yourName\").val()\n })\n }).then((response)=>response.json()).then((data)=>{\n console.log(data);\n highScore = data.high_score_table;\n showHighscores();\n $(\"#promptName\").hide();\n });\n});\nfunction gameEnd() {\n console.log(\"Game over\");\n // get results from /scoreboard?ulid=${ulid}\n setScoreboard();\n // check highscores\n isHighscore();\n function introReset() {\n $(\".intro-one\").hide();\n $(\".intro-two\").hide();\n $(\".pet\").show();\n }\n introReset();\n $(\"#gameOver\").click();\n $(\"#highScores\").show();\n $(\".cat-bubble\").hide();\n}\n// starting the game\nfunction setup() {\n // Let's make sure all highscore data and UI is gone\n $(\"#highScores\").hide();\n document.getElementById(\"highScoresList\").textContent = \"\";\n highScore = \"\";\n resetModCounter();\n // get the data\n // https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch\n fetch(\"/session\").then((response)=>response.json()).then((data)=>{\n console.log(data);\n displayMorsels(data);\n setScoreboard();\n });\n // game timer\n var timeLeft = 30;\n var isPaused = false;\n var textLeft = document.getElementById(\"gameTime\");\n var progressLeft = document.getElementById(\"progressBar\");\n var timerId = setInterval(gameCountdown, 1000);\n function gameCountdown() {\n timerTicks++;\n countWasmModules();\n if (timeLeft == -1 || isPaused == true) {\n // if (timeLeft == -1) {\n clearTimeout(timerId);\n gameEnd();\n $(\"#whiskerStage\").addClass(\"waiting\").removeClass(\"gametime\").removeClass(\"choose-ninja\").removeClass(\"choose-slats\");\n } else {\n textLeft.innerHTML = timeLeft;\n progressLeft.setAttribute(\"value\", timeLeft);\n timeLeft--;\n $(\".cat-bubble\").show();\n $(\"#whiskerStage\").addClass(\"gametime\").removeClass(\"waiting\");\n setScoreboard();\n }\n $();\n }\n $(\".intro-two\").hide();\n gameCountdown();\n console.log(\"Game has started!\");\n}\n// Count how many Wasm modules were executed\nfunction countWasmModules() {\n var score = parseInt($(\"#scoreTotal\").text());\n // Hard coded count\n var staticAssetCount = 25;\n var mods = score + buttonPresses + timerTicks + staticAssetCount + fetchedHighscore;\n console.log(\"counted wasm modules\");\n $(\"#modCount\").text(mods);\n}\n// render the data\n// https://w3collective.com/fetch-display-api-data-javascript/\nfunction displayMorsels(data) {\n ulid = data.id;\n data.menu.forEach(function(morsel) {\n const morselName = morsel.demand;\n const morselTime = morsel.offset;\n setTimeout(function() {\n console.log(morselName + \" demand! for \" + morselTime + \" milliseconds.\");\n $(\"#whiskerStage\").removeClass(\"beef chicken fish veg\");\n $(\"#whiskerStage\").addClass(morselName);\n // remove correct class from all buttons\n $(\"nav > .button.correct\").removeClass(\"correct\");\n // set class to correct on button\n $(`nav > .button.${morselName}`).addClass(\"correct\");\n }, morselTime);\n });\n}\n// food is chosen\n$(\"nav > .button\").on(\"click\", function(i, e) {\n buttonPresses++;\n console.log(\"button pressed\");\n food = $(this).attr(\"id\");\n if ($(this).hasClass(\"correct\")) {\n fetch(`/tally?ulid=${ulid}&food=${food}&correct=true`).then((response)=>console.log(response));\n var nYum = '';\n $(this).append(nYum);\n $(\".slats-head\").removeClass(\"slats-eating slats-eating2 slats-huh\");\n $(\".slats-head\").addClass(\"slats-eating2\").delay(100).queue(function() {\n $(this).removeClass(\"slats-eating2\");\n $(this).dequeue();\n });\n } else {\n fetch(`/tally?ulid=${ulid}&food=${food}&correct=false`).then((response)=>console.log(response));\n var nNope = '';\n $(this).append(nNope);\n $(\".slats-head\").removeClass(\"slats-eating slats-eating2 slats-huh\");\n $(\".slats-head\").addClass(\"slats-huh\").delay(100).queue(function() {\n $(this).removeClass(\"slats-huh\");\n $(this).dequeue();\n });\n }\n});\n// Food is chosen by key-press\nwindow.onkeydown = function(event) {\n console.log(event.keyCode);\n switch(event.keyCode){\n case 68:\n food = \"beef\";\n console.log(\"beef pressed\");\n break;\n case 87:\n food = \"fish\";\n console.log(\"fish pressed\");\n break;\n case 65:\n food = \"veg\";\n console.log(\"veg pressed\");\n break;\n case 83:\n food = \"chicken\";\n console.log(\"chicken pressed\");\n break;\n default:\n console.log(\"Useless key pressed...\");\n }\n if ($(`#${food}`).hasClass(\"correct\")) {\n fetch(`/tally?ulid=${ulid}&food=${food}&correct=true`).then((response)=>console.log(response));\n $(\".slats-head\").removeClass(\"slats-eating slats-eating2 slats-huh\");\n $(\".slats-head\").addClass(\"slats-eating2\").delay(100).queue(function() {\n $(this).removeClass(\"slats-eating2\");\n $(this).dequeue();\n });\n } else {\n fetch(`/tally?ulid=${ulid}&food=${food}&correct=false`).then((response)=>console.log(response));\n $(\".slats-head\").removeClass(\"slats-eating slats-eating2 slats-huh\");\n $(\".slats-head\").addClass(\"slats-huh\").delay(100).queue(function() {\n $(this).removeClass(\"slats-huh\");\n $(this).dequeue();\n });\n }\n};\n$(document).ready(function() {\n // open start screen on load\n $(\"#whiskerStage\").addClass(\"waiting\");\n $(\"#gameInit\").click();\n $(\"#highScores\").hide();\n $(\".start-game\").on(\"click\", function() {\n setup();\n if ($(this).hasClass(\"start-slats\")) $(\"#whiskerStage\").addClass(\"choose-slats\");\n if ($(this).hasClass(\"start-ninja\")) $(\"#whiskerStage\").addClass(\"choose-ninja\");\n });\n $(\"#startOver\").on(\"click\", function() {\n $(\"#gameInit\").click();\n $(\".intro-one\").hide();\n $(\".intro-two\").show();\n $(\".pet\").show();\n });\n $(\"#introOne\").on(\"click\", function() {\n $(\".intro-one\").hide();\n $(\".intro-two\").show();\n $(\".pet\").show();\n });\n // blinking\n setInterval(function() {\n if ($(\"#whiskerStage\").hasClass(\"waiting\")) {\n $(\"#hiSlats > .slats-head\").addClass(\"slats-blink\");\n $(\"#hiSlats > .slats-head\").removeClass(\"slats-resting\");\n setTimeout(function() {\n $(\"#hiSlats > .slats-head\").addClass(\"slats-resting\");\n $(\"#hiSlats > .slats-head\").removeClass(\"slats-blink\");\n }, 500);\n }\n }, 3000);\n countWasmModules();\n});\n\n//# sourceMappingURL=index.c8814646.js.map\n","// session id\nvar ulid = \"\";\nvar highScore = \"\";\nvar fetchedHighscore = 0;\n\n// This is all for module counting\nvar buttonPresses = 0;\nvar timerTicks = 0;\n\nfunction resetModCounter() {\n fetchedHighscore = 0;\n buttonPresses = 0;\n timerTicks = 0;\n}\n\n// start screen\ndocument.querySelectorAll('.modal-button').forEach(function (el) {\n el.addEventListener('click', function () {\n var target = document.querySelector(el.getAttribute('data-target'));\n\n target.classList.add('is-active');\n target.querySelector('.modal-trigger-close').addEventListener('click', function () {\n target.classList.remove('is-active');\n });\n });\n});\n\nfunction setScoreboard() {\n // get results from /scoreboard?ulid=${ulid}\n fetch(`/score?ulid=${ulid}`).then(\n response => response.json()\n ).then(data => {\n $(\"#scoreTotal\").text(data.total);\n $(\"#scoreFinal\").text(data.total);\n })\n}\n\nfunction isHighscore() {\n fetch('/highscore', {\n method: 'POST',\n body: JSON.stringify({\n \"score\": parseInt($(\"#scoreFinal\").text()),\n \"ulid\": ulid,\n \"username\": \"\"\n })\n }).then(\n response => response.json()\n ).then(data => {\n fetchedHighscore++;\n console.log(data);\n highScore = data.high_score_table;\n if (data.is_high_score) {\n console.log(\"It's a highscore\")\n showHighscores();\n $(\"#promptName\").show();\n } else {\n console.log(\"It's not a highscore\")\n showHighscores();\n }\n })\n}\n\nfunction showHighscores() {\n document.getElementById(\"highScoresList\").textContent = ''\n highScore.forEach(element => {\n console.log(element)\n var dt = document.createElement(\"dt\")\n if (element.ulid === ulid && element.username !== '') {\n dt.style.fontWeight = 'bold'\n dt.style.background = '#FFFFFF'\n dt.style.color = '#1A2A60'\n }\n dt.innerHTML = element.username\n var dd = document.createElement(\"dd\")\n if (element.ulid == ulid) {\n dd.style.fontWeight = 'bold'\n dd.style.background = '#FFFFFF'\n dd.style.color = '#1A2A60'\n }\n dd.innerHTML = element.score\n document.getElementById(\"highScoresList\").appendChild(dt)\n document.getElementById(\"highScoresList\").appendChild(dd)\n });\n}\n\n$(\"#submitName\").on('click', function () {\n fetch('/highscore', {\n method: 'POST',\n body: JSON.stringify({\n \"score\": parseInt($(\"#scoreFinal\").text()),\n \"ulid\": ulid,\n \"username\": $(\"#yourName\").val()\n })\n }).then(\n response => response.json()\n ).then(data => {\n console.log(data);\n highScore = data.high_score_table;\n showHighscores();\n $(\"#promptName\").hide();\n })\n})\n\nfunction gameEnd() {\n console.log('Game over');\n\n // get results from /scoreboard?ulid=${ulid}\n setScoreboard();\n\n // check highscores\n isHighscore()\n\n function introReset() {\n $(\".intro-one\").hide();\n $(\".intro-two\").hide();\n $(\".pet\").show();\n };\n\n introReset();\n\n $(\"#gameOver\").click();\n $(\"#highScores\").show();\n $(\".cat-bubble\").hide();\n};\n\n// starting the game\nfunction setup() {\n // Let's make sure all highscore data and UI is gone\n $(\"#highScores\").hide();\n document.getElementById(\"highScoresList\").textContent = ''\n highScore = \"\"\n resetModCounter()\n // get the data\n // https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch\n fetch('/session').then(\n response => response.json()\n ).then(data => {\n console.log(data);\n displayMorsels(data);\n setScoreboard();\n })\n\n // game timer\n var timeLeft = 30;\n var isPaused = false;\n var textLeft = document.getElementById('gameTime');\n var progressLeft = document.getElementById(\"progressBar\");\n var timerId = setInterval(gameCountdown, 1000);\n function gameCountdown() {\n timerTicks++;\n countWasmModules();\n if (timeLeft == -1 || isPaused == true) {\n // if (timeLeft == -1) {\n clearTimeout(timerId);\n gameEnd();\n $(\"#whiskerStage\").addClass('waiting').removeClass('gametime').removeClass('choose-ninja').removeClass('choose-slats')\n } else {\n textLeft.innerHTML = timeLeft;\n progressLeft.setAttribute(\"value\", timeLeft);\n timeLeft--;\n $(\".cat-bubble\").show();\n $(\"#whiskerStage\").addClass('gametime').removeClass('waiting');\n setScoreboard();\n }\n $()\n }\n\n $(\".intro-two\").hide();\n\n gameCountdown();\n console.log('Game has started!');\n};\n\n// Count how many Wasm modules were executed\nfunction countWasmModules() {\n var score = parseInt($(\"#scoreTotal\").text());\n // Hard coded count\n var staticAssetCount = 25;\n\n var mods = score + buttonPresses + timerTicks + staticAssetCount + fetchedHighscore;\n console.log(\"counted wasm modules\");\n $(\"#modCount\").text(mods);\n\n}\n\n// render the data\n// https://w3collective.com/fetch-display-api-data-javascript/\nfunction displayMorsels(data) {\n ulid = data.id\n\n data.menu.forEach(function (morsel) {\n const morselName = morsel.demand;\n const morselTime = morsel.offset;\n\n setTimeout(function () {\n console.log(morselName + \" demand! for \" + morselTime + \" milliseconds.\");\n\n $(\"#whiskerStage\").removeClass(\"beef chicken fish veg\");\n $(\"#whiskerStage\").addClass(morselName);\n\n // remove correct class from all buttons\n $(\"nav > .button.correct\").removeClass('correct');\n\n // set class to correct on button\n $(`nav > .button.${morselName}`).addClass('correct');\n\n }, morselTime);\n });\n}\n\n// food is chosen\n$(\"nav > .button\").on('click', function (i, e) {\n buttonPresses++;\n console.log(\"button pressed\");\n food = $(this).attr('id');\n\n if ($(this).hasClass('correct')) {\n fetch(`/tally?ulid=${ulid}&food=${food}&correct=true`).then(\n response => console.log(response)\n\n );\n\n var nYum = '';\n $(this).append(nYum);\n\n $(\".slats-head\").removeClass(\"slats-eating slats-eating2 slats-huh\");\n $(\".slats-head\").addClass(\"slats-eating2\").delay(100).queue(function () {\n $(this).removeClass(\"slats-eating2\");\n $(this).dequeue();\n });\n\n\n } else {\n\n fetch(`/tally?ulid=${ulid}&food=${food}&correct=false`).then(\n response => console.log(response)\n );\n\n var nNope = '';\n $(this).append(nNope);\n\n $(\".slats-head\").removeClass(\"slats-eating slats-eating2 slats-huh\");\n $(\".slats-head\").addClass(\"slats-huh\").delay(100).queue(function () {\n $(this).removeClass(\"slats-huh\");\n $(this).dequeue();\n });\n\n };\n\n});\n\n// Food is chosen by key-press\nwindow.onkeydown = function (event) {\n console.log(event.keyCode)\n switch (event.keyCode) {\n case 68: // D key\n food = 'beef'\n console.log('beef pressed')\n break;\n case 87: // W key\n food = 'fish'\n console.log('fish pressed')\n break;\n case 65: // A key\n food = 'veg'\n console.log('veg pressed')\n break;\n case 83: // S key\n food = 'chicken'\n console.log('chicken pressed')\n break;\n default:\n console.log(\"Useless key pressed...\")\n }\n\n if ($(`#${food}`).hasClass('correct')) {\n fetch(`/tally?ulid=${ulid}&food=${food}&correct=true`).then(\n response => console.log(response)\n );\n\n $(\".slats-head\").removeClass(\"slats-eating slats-eating2 slats-huh\");\n $(\".slats-head\").addClass(\"slats-eating2\").delay(100).queue(function () {\n $(this).removeClass(\"slats-eating2\");\n $(this).dequeue();\n });\n } else {\n\n fetch(`/tally?ulid=${ulid}&food=${food}&correct=false`).then(\n response => console.log(response)\n );\n\n $(\".slats-head\").removeClass(\"slats-eating slats-eating2 slats-huh\");\n $(\".slats-head\").addClass(\"slats-huh\").delay(100).queue(function () {\n $(this).removeClass(\"slats-huh\");\n $(this).dequeue();\n });\n\n };\n};\n\n$(document).ready(function () {\n\n // open start screen on load\n $(\"#whiskerStage\").addClass('waiting');\n $(\"#gameInit\").click();\n $(\"#highScores\").hide();\n\n $(\".start-game\").on('click', function () {\n setup();\n\n if ($(this).hasClass('start-slats')) {\n $(\"#whiskerStage\").addClass('choose-slats');\n };\n if ($(this).hasClass('start-ninja')) {\n $(\"#whiskerStage\").addClass('choose-ninja');\n };\n });\n\n $(\"#startOver\").on('click', function () {\n $(\"#gameInit\").click();\n $(\".intro-one\").hide();\n $(\".intro-two\").show();\n $(\".pet\").show();\n });\n\n $(\"#introOne\").on('click', function () {\n $(\".intro-one\").hide();\n $(\".intro-two\").show();\n $(\".pet\").show();\n });\n\n\n // blinking\n setInterval(function () {\n if ($(\"#whiskerStage\").hasClass(\"waiting\")) {\n $(\"#hiSlats > .slats-head\").addClass(\"slats-blink\");\n $(\"#hiSlats > .slats-head\").removeClass(\"slats-resting\");\n\n setTimeout(function () {\n $(\"#hiSlats > .slats-head\").addClass(\"slats-resting\");\n $(\"#hiSlats > .slats-head\").removeClass(\"slats-blink\");\n }, 500);\n };\n }, 3000);\n\n countWasmModules();\n\n});\n"],"names":["ulid","highScore","fetchedHighscore","buttonPresses","timerTicks","setScoreboard","fetch","then","response","json","data","$","text","total","showHighscores","document","getElementById","textContent","forEach","element","console","log","dt","createElement","username","style","fontWeight","background","color","innerHTML","dd","score","appendChild","countWasmModules","mods","parseInt","querySelectorAll","el","addEventListener","target","querySelector","getAttribute","classList","add","remove","on","method","body","JSON","stringify","val","high_score_table","hide","i","e","food","attr","hasClass","append","removeClass","addClass","delay","queue","dequeue","window","onkeydown","event","keyCode","ready","click","setup","id","menu","morsel","morselName","demand","morselTime","offset","setTimeout","timeLeft","textLeft","progressLeft","timerId","setInterval","gameCountdown","clearTimeout","is_high_score","show","setAttribute"],"version":3,"file":"index.c8814646.js.map"}