-
Notifications
You must be signed in to change notification settings - Fork 0
/
PauseMenu.js
112 lines (102 loc) · 3.43 KB
/
PauseMenu.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
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
class PauseMenu {
constructor({ progress, onComplete }) {
this.progress = progress;
this.onComplete = onComplete;
}
getOptions(pageKey){
//Caso 1: Muestra la primera pagina de opciones
if (pageKey === "root") {
const lineupPizzas = playerState.lineup.map(id => {
const {pizzaId} = playerState.pizzas[id];
const base = Pizzas[pizzaId];
return {
label: base.name,
description: base.description,
handler: () => {
this.keyboardMenu.setOptions( this.getOptions(id) )
}
}
})
return [
...lineupPizzas,
{
label: "Guardar",
description: "Guarda tu progreso",
handler: () => {
this.progress.save();
this.close();
}
},
{
label: "Cerrar",
description: "Cierra el menu",
handler: () => {
this.close();
}
}
]
}
//Caso 2: muestra las opciones de solo una pizza (por id)
const unequipped = Object.keys(playerState.pizzas).filter(id => {
return playerState.lineup.indexOf(id) === -1;
}).map(id => {
const {pizzaId} = playerState.pizzas[id];
const base = Pizzas[pizzaId];
return {
label: `Cambiar por ${base.name}`,
description: base.description,
handler: () => {
playerState.swapLineup(pageKey, id);
this.keyboardMenu.setOptions( this.getOptions("root") );
}
}
})
return[
...unequipped,
{
label: "Mover al frente",
description: "Mueve esta pizza al principio de la lista",
handler: () => {
playerState.moveToFront(pageKey);
this.keyboardMenu.setOptions( this.getOptions("root") );
}
},
{
label: "Volver",
description: "Vuelve al menu principal",
handler: () => {
this.keyboardMenu.setOptions( this.getOptions("root") )
}
}
];
}
createElement() {
this.element = document.createElement("div");
this.element.classList.add("PauseMenu");
this.element.classList.add("overlayMenu");
this.element.innerHTML = (`
<h2>Pause Menu</h2>
`)
}
close(){
this.esc?.unbind();
this.keyboardMenu.end();
this.element.remove();
this.onComplete();
}
async init(container) {
this.createElement();
this.keyboardMenu = new KeyboardMenu({
descriptionContainer: container
})
this.keyboardMenu.init(this.element);
this.keyboardMenu.setOptions(this.getOptions("root"));
container.appendChild(this.element);
//Espera para que no se cierre accidentalmente el menu
utils.wait(200);
//Keybinding para cerrar el menu
this.esc = new KeyPressListener("Escape", () => {
this.close();
})
}
}