-
Notifications
You must be signed in to change notification settings - Fork 0
/
PauseMenu.js
112 lines (103 loc) · 3.47 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){
//Case 1: Show the first page of options
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: "Save",
description: "Save your progress",
handler: () => {
//We'll come back to this...
this.progress.save()
this.close()
},
},
{
label: "Close",
description: "Close the pause menu",
handler: () => {
this.close()
}
}
]
}
//Case 2: Show the options for just one pizza (id)
const unequiped = 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: `Swap for ${base.name}`,
description: base.description,
handler: () => {
playerState.swapLineUp(pageKey, id)
this.keyboardMenu.setOptions(this.getOptions("root"))
}
}
})
return [
// Swap for any unequiped pizza...
...unequiped,
{
label: "Move to front",
description: "Move this pizza to the frony of the list",
handler: () => {
playerState.moveToFront(pageKey)
this.keyboardMenu.setOptions(this.getOptions("root"))
}
},
{
label: "Back",
description: "Go back",
handler: () => {
this.keyboardMenu.setOptions(this.getOptions("root"))
}
}
]
return []
}
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()
}
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)
utils.wait(200)
this.esc = new KeyPressListener("Escape", () => {
this.close()
})
}
}