Files
tetris.js/js/menu.js
Marcel 06a2e582fd Major rework of basic game code - pre-work for multiplayer
Includes automatic generation of required HTML elements and better responsiveness
2019-07-18 11:49:06 +02:00

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);
}