181 lines
4.6 KiB
JavaScript
181 lines
4.6 KiB
JavaScript
/*
|
|
0 -> Game
|
|
1 -> Paused
|
|
2 -> Settings
|
|
*/
|
|
let escState = 1;
|
|
|
|
window.onresize = () => {
|
|
manager.callAll('rescale', []);
|
|
};
|
|
|
|
document.addEventListener('keyup', (event) => {
|
|
console.log(event.key);
|
|
if (event.key === ' ') {
|
|
if (firstRun) {
|
|
initGame();
|
|
} else {
|
|
escState = escState === 0 ? 1 : 0;
|
|
toggleMenu();
|
|
}
|
|
} else if (event.keyCode === 27) {
|
|
escState++;
|
|
if (firstRun && escState % 3 === 0) {
|
|
escState++;
|
|
}
|
|
escState = escState % 3;
|
|
toggleMenu();
|
|
}
|
|
});
|
|
|
|
document.getElementById('game-play').addEventListener('click', () => {
|
|
if (firstRun) {
|
|
initGame();
|
|
} else {
|
|
hideMenu();
|
|
}
|
|
});
|
|
|
|
document.getElementById('game-reset').addEventListener('click', () => {
|
|
firstRun = true;
|
|
game.clearScreen();
|
|
hideMenu();
|
|
switchLang(currentLang);
|
|
showMenu();
|
|
});
|
|
|
|
document.getElementsByName('theme').forEach((el) => {
|
|
el.addEventListener('change', (e) => {
|
|
const themeName = e.target.getAttribute('data-theme');
|
|
const theme = themes[themeName];
|
|
manager.callAll(instance => {
|
|
instance.g.theme = theme;
|
|
instance.redrawScreen();
|
|
});
|
|
});
|
|
});
|
|
|
|
let isActive = false;
|
|
const menuButton = document.getElementById('menu-opener');
|
|
|
|
menuButton.addEventListener('click', () => {
|
|
toggleSettings();
|
|
});
|
|
|
|
function toggleSettings() {
|
|
if (isActive) {
|
|
escState = 1;
|
|
menuButton.classList.remove('active');
|
|
document.body.classList.remove('menu-open');
|
|
} else {
|
|
escState = 2;
|
|
menuButton.classList.add('active');
|
|
document.body.classList.add('menu-open');
|
|
}
|
|
isActive = !isActive;
|
|
}
|
|
|
|
function toggleMenu() {
|
|
if (escState === 0) {
|
|
document.body.classList.remove('menu-open');
|
|
menuButton.classList.remove('active');
|
|
hideMenu();
|
|
} else if (escState === 1) {
|
|
document.body.classList.remove('menu-open');
|
|
menuButton.classList.remove('active');
|
|
showMenu();
|
|
} else {
|
|
document.body.classList.add('menu-open');
|
|
menuButton.classList.add('active');
|
|
}
|
|
}
|
|
|
|
function fadeBlurIn() {
|
|
const blurEl = document.getElementById('f1').children[0];
|
|
const finalVal = 15;
|
|
let currentVal = 0;
|
|
|
|
const interval = 1000 / 60;
|
|
const id = setInterval(frame, interval);
|
|
|
|
function frame() {
|
|
if (currentVal >= finalVal) {
|
|
clearInterval(id);
|
|
} else {
|
|
currentVal += 0.5;
|
|
blurEl.setAttribute('stdDeviation', currentVal);
|
|
}
|
|
}
|
|
|
|
setTimeout(() => {
|
|
if (currentVal < finalVal) {
|
|
blurEl.setAttribute('stdDeviation', finalVal);
|
|
clearInterval(id);
|
|
console.log('Performance Issues: system couldn\'t hold up');
|
|
}
|
|
}, 1000);
|
|
}
|
|
|
|
function fadeBlurOut() {
|
|
const blurEl = document.getElementById('f1').children[0];
|
|
const finalVal = 0;
|
|
let currentVal = 15;
|
|
|
|
const interval = 1000 / 60;
|
|
const id = setInterval(frame, interval);
|
|
|
|
function frame() {
|
|
if (currentVal <= finalVal) {
|
|
clearInterval(id);
|
|
} else {
|
|
currentVal -= 0.5;
|
|
blurEl.setAttribute('stdDeviation', currentVal);
|
|
}
|
|
}
|
|
|
|
setTimeout(() => {
|
|
blurEl.setAttribute('stdDeviation', finalVal);
|
|
clearInterval(id);
|
|
if (currentVal < finalVal) {
|
|
console.log('Performance Issues: system couldn\'t hold up');
|
|
}
|
|
}, 1000);
|
|
}
|
|
|
|
function showMenu() {
|
|
manager.pause();
|
|
escState = 1;
|
|
document.getElementById('game-title').style.display = 'block';
|
|
document.getElementById('game-play').style.display = 'block';
|
|
document.getElementById('game-reset').style.display = 'block';
|
|
|
|
document.getElementById('game-title').style.opacity = '1';
|
|
document.getElementById('game-play').style.opacity = '1';
|
|
fadeBlurIn();
|
|
if (!firstRun) {
|
|
document.getElementById('game-reset').style.opacity = '1';
|
|
}
|
|
}
|
|
|
|
function hideMenu() {
|
|
manager.resume();
|
|
escState = 0;
|
|
document.getElementById('game-title').style.opacity = '0';
|
|
document.getElementById('game-play').style.opacity = '0';
|
|
document.getElementById('game-reset').style.opacity = '0';
|
|
setTimeout(() => {
|
|
document.getElementById('game-title').style.display = 'none';
|
|
document.getElementById('game-play').style.display = 'none';
|
|
document.getElementById('game-reset').style.display = 'none';
|
|
}, 500);
|
|
fadeBlurOut();
|
|
}
|
|
|
|
function initGame() {
|
|
hideMenu();
|
|
startGame();
|
|
firstRun = false;
|
|
switchLang(currentLang);
|
|
|
|
}
|