From 27fa6357a699771ade4ed5bf8c3fb32d7e73f4d4 Mon Sep 17 00:00:00 2001 From: Logan Hunt Date: Tue, 12 Apr 2022 22:22:33 -0600 Subject: Add menuing system with level select and control changing --- src/systems/menu.js | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 src/systems/menu.js (limited to 'src/systems/menu.js') diff --git a/src/systems/menu.js b/src/systems/menu.js new file mode 100644 index 0000000..17153d0 --- /dev/null +++ b/src/systems/menu.js @@ -0,0 +1,107 @@ +game.system.Menu = () => { + let state; + + const menuElement = document.getElementById("menu"); + + const escapeEventListener = (e) => { + if (e.key == "Escape") { + setState('main'); + } + } + + const setState = (newState) => { + state = newState; + draw(); + } + + const bringUpMenu = () => { + game.running = false; + window.addEventListener("keydown", escapeEventListener); + setState("main"); + } + + const hide = () => { + menuElement.style.display = "none"; + game.startLoop(); + } + + const listenFor = (action, elementId) => { + const element = document.getElementById(elementId); + element.innerHTML = "Listening..."; + const handleKey = (event) => { + window.removeEventListener("keydown", handleKey); + if (event.key == "Escape") { + element.innerHTML = menu.controls[action]; + return; + } + game.controls[action] = event.key; + localStorage.setItem("controls", JSON.stringify(game.controls)); + element.innerHTML = event.key; + } + window.addEventListener("keydown", handleKey); + } + + const setLevel = (index) => { + game.loadLevelIndex(index); + hide(); + } + + const draw = () => { + menuElement.style.display = "block"; + menuElement.innerHTML = `

Big Blue Is You

`; + if (state == "main") { + menuElement.innerHTML += ` + + + + `; + } + else if (state == "controls") { + menuElement.innerHTML += ` +
+

+ Move left: +
+ Move right: +
+ Move up: +
+ Move down: +
+ Undo: +
+ Reset: +

+
+ ` + } else if (state == "credits") { + menuElement.innerHTML += ` +
+

+ Sprites from Baba Is You, as hosted here, and a few custom ones. +
+ Background is from PinImg. +
+ Developed by Logan Hunt, Ethan Payne +

+
+ ` + } else if (state == "levelSelect") { + menuElement.innerHTML += ` +
+

Select a level to play:

+ ${ + game.levels.map((level, index) => { + return `` + }).join("") + } + `; + } + menuElement.innerHTML += "" + if (state !== "main") { + menuElement.innerHTML += "" + } + } + + return { bringUpMenu, setState, listenFor, hide, setLevel, state }; +} \ No newline at end of file -- cgit v1.2.3-70-g09d2