-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfsm.js
44 lines (42 loc) · 967 Bytes
/
fsm.js
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
import { resetState } from './state.js';
import {
showGameOver,
showCanvas,
showMenu,
showLevelSelect,
handleTick,
} from './game.js';
let gameClock;
const fsm = StateMachine({
init: 'configuring',
transitions: [
{ name: 'levelSelect', from: 'configuring', to: 'levelSelect' },
{ name: 'start', from: 'levelSelect', to: 'playing' },
{ name: 'end', from: 'playing', to: 'end' },
{ name: 'restart', from: 'end', to: 'configuring' },
],
methods: {
onLevelSelect() {
showLevelSelect();
},
onStart() {
// Show Canvas
showCanvas();
// Start clock
gameClock = setInterval(() => {
document.dispatchEvent(new Event('tick'));
}, 50);
document.addEventListener('tick', handleTick);
},
onEnterEnd() {
clearInterval(gameClock);
showGameOver();
},
onRestart() {
// Hide Menu
resetState();
showMenu();
},
},
});
export default fsm;