-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplayer.js
More file actions
52 lines (45 loc) · 1.07 KB
/
player.js
File metadata and controls
52 lines (45 loc) · 1.07 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
/**
* @typedef {Object} Player
* @property {(moves: (import("./cube").Move)[], preMoves: (() => void) | undefined, postMoves: (() => void) | undefined) => void} playMoves
* @property {() => void} stop
*/
/**
* @param {import("./cube").Cube} cube
*
* @returns {Player}
*/
export function cretePlayer(cube) {
let currentInterval;
return {
playMoves(moves, preMoves, postMoves) {
if (!moves?.length) {
return;
}
if (typeof preMoves === 'function') {
preMoves();
}
let index = 0;
const handler = () => {
if (index < moves.length) {
cube.move(moves[index]);
index += 1;
} else {
clearInterval(currentInterval);
if (typeof postMoves === 'function') {
postMoves();
}
}
};
handler();
currentInterval = setInterval(() => {
handler();
}, cube.moveDuration + 100);
},
stop() {
if (!!currentInterval) {
clearInterval(currentInterval);
currentInterval = undefined;
}
},
};
}