fixed duplicate games (closes #20)

This commit is contained in:
Nathan DECHER 2020-04-06 12:02:22 +02:00
parent 6edd23f25f
commit db655feedb

View file

@ -25,7 +25,7 @@
let currentGame=null;
// forward-declare functions
let resizeCanvas, getLevel, startGame, handleWin, handleDeath, menu, help, restart;
let resizeCanvas, getLevel, startGame, stopGame, handleWin, handleDeath, menu, help, settings, restart;
// handle window resize and fullscreen
resizeCanvas=() => {
@ -92,15 +92,31 @@
});
});
// stop a running game
stopGame=() => {
if(currentGame) {
// stop the actual game
currentGame.playing=false;
// setup the DOM
nav.classList.remove('hidden');
canvas.classList.add('hidden');
hud.classList.add('hidden');
}
};
// start a new game
startGame=async (category, levelId, filename) => {
// stop any running games
if(currentGame) currentGame.playing=false;
stopGame();
// load rules and level from cache or server
const rules=levelList[category].rules || {};
const level=await levels.get(filename);
// stop any running games again
stopGame();
// create the game and attach the callbacks and config
const snek=currentGame=new SnekGame(level, canvas, rules);
snek.callback=evt => {
@ -135,13 +151,7 @@
// return to the menu
menu=() => {
// stop any running games
if(currentGame) currentGame.playing=false;
// setup the DOM
nav.classList.remove('hidden');
canvas.classList.add('hidden');
hud.classList.add('hidden');
stopGame();
};
// display the win popup
@ -238,6 +248,7 @@
if(hash=='' || hash=='menu') return menu();
else if(hash=='help') return help();
else if(hash=='settings') return settings();
const [_, category, levelId, filename]=location.hash.match(/([a-zA-Z0-9_-]+?)\/([a-zA-Z0-9_-]+?)\/(.+)/);
startGame(category, levelId, filename);