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/game.js | 45 ++++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) (limited to 'src/game.js') diff --git a/src/game.js b/src/game.js index 705d3e0..b48ef19 100644 --- a/src/game.js +++ b/src/game.js @@ -1,8 +1,10 @@ -let lastTimeStamp; game.loop = (timeStamp) => { - let elapsedTime = timeStamp - lastTimeStamp; - lastTimeStamp = timeStamp; + if (!game.running) { + return; + } + let elapsedTime = timeStamp - game.lastTimeStamp; + game.lastTimeStamp = timeStamp; const changedIds = new Set(); game.systemOrder.map((i) => { @@ -20,22 +22,39 @@ game.loop = (timeStamp) => { requestAnimationFrame(game.loop); } -game.initialize = () => { - [game.entities, game.config] = game.loadLevel(game.levels[4]); +game.toggleRunning = () => { + game.running = !game.running; +} - // Maintained by gridSystem as a side-effect - game.entitiesGrid = Array(game.config.yDim).fill(null).map(() => Array(game.config.xDim).fill(null).map(() => new Map())); +game.startLoop = () => { + game.running = true; + game.lastTimeStamp = performance.now(); + requestAnimationFrame(game.loop); +} - game.systemOrder = ["gridSystem", "collisionSystem", "physics", "keyboardInput", "undo", "particle", "render"]; +game.loadSystems = () => { + game.systemOrder = ["grid", "collision", "physics", "keyboardInput", "undo", "particle", "render"]; game.systems = { }; game.systems.physics = game.system.Physics(), - game.systems.gridSystem = game.system.Grid(game.entitiesGrid); - game.systems.collisionSystem = game.system.Collision(game.entitiesGrid); + game.systems.grid = game.system.Grid(game.entitiesGrid); + game.systems.collision = game.system.Collision(game.entitiesGrid); game.systems.render = game.system.Render(game.graphics); game.systems.undo = game.system.Undo(game.entitiesGrid); - game.systems.keyboardInput = game.system.KeyboardInput(game.systems.undo); game.systems.particle = game.system.Particle(game.canvas.context); + game.systems.keyboardInput = game.system.KeyboardInput(); + game.systems.menu = game.system.Menu(); +} - lastTimeStamp = performance.now() - requestAnimationFrame(game.loop); +game.loadLevelIndex = (level) => { + game.level = level; + [game.entities, game.config] = game.loadLevel(game.levels[game.level]); + + // Maintained by grid system as a side-effect + game.entitiesGrid = Array(game.config.yDim).fill(null).map(() => Array(game.config.xDim).fill(null).map(() => new Map())); + game.loadSystems(); +} + +game.initialize = () => { + game.loadLevelIndex(0); + game.startLoop(); } -- cgit v1.2.3-70-g09d2