-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpause.js
More file actions
77 lines (62 loc) · 1.68 KB
/
pause.js
File metadata and controls
77 lines (62 loc) · 1.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import { setInputLock, launchGame } from './game.js';
import { logEvent } from './devMode.js';
let isPaused = false;
function setPauseState(state) {
isPaused = state;
const menu = document.getElementById('pause-menu');
if (menu) {
menu.style.display = isPaused ? 'flex' : 'none';
}
// Re-bind pause menu buttons every time menu is shown
if (isPaused) {
bindPauseMenuButtons();
}
setInputLock(isPaused);
document.body.classList.toggle('paused', isPaused);
if (isPaused) {
document.activeElement?.blur();
}
}
function resumeGame() {
logEvent('[DEBUG] Resuming game');
setPauseState(false);
}
function pauseGame() {
logEvent('[DEBUG] Pausing game');
setPauseState(true);
}
function togglePause() {
logEvent(`[DEBUG] Toggling pause: ${!isPaused}`);
setPauseState(!isPaused);
}
function bindButtonOnce(id, handler) {
const btn = document.getElementById(id);
if (btn && !btn.dataset.bound) {
btn.addEventListener('click', handler);
btn.dataset.bound = 'true';
}
}
function bindPauseMenuButtons() {
bindButtonOnce('btn-continue', () => {
logEvent('[DEBUG] Continue button clicked');
resumeGame();
});
bindButtonOnce('btn-newgame', () => {
logEvent('[DEBUG] New Game button clicked');
resumeGame();
launchGame();
});
bindButtonOnce('btn-quit', () => {
logEvent('[DEBUG] Quit button clicked');
resumeGame();
document.getElementById('app').style.display = 'none';
document.getElementById('main-menu').style.display = 'flex';
});
}
// Keyboard shortcut
document.addEventListener('keydown', e => {
if (e.key === 'Escape') {
togglePause();
}
});
export { isPaused, pauseGame, resumeGame, togglePause };