From 6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6 Mon Sep 17 00:00:00 2001 From: Elizabeth Alexander Hunt Date: Thu, 2 Jul 2026 11:55:17 -0700 Subject: Init --- Homework/cs5410/bbiy/src/game.js | 72 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Homework/cs5410/bbiy/src/game.js (limited to 'Homework/cs5410/bbiy/src/game.js') diff --git a/Homework/cs5410/bbiy/src/game.js b/Homework/cs5410/bbiy/src/game.js new file mode 100644 index 0000000..5a7e391 --- /dev/null +++ b/Homework/cs5410/bbiy/src/game.js @@ -0,0 +1,72 @@ +game.loop = (timeStamp) => { + if (!game.running) { + return; + } + + let elapsedTime = timeStamp - game.lastTimeStamp; + game.lastTimeStamp = timeStamp; + + const changedIds = new Set(); + game.systemOrder.map((i) => { + game.systems[i] + .update(elapsedTime, game.entities, changedIds) + .forEach((id) => changedIds.add(id)); + }); + + for (let id in game.entities) { + if (game.entities[id].hasComponent("particles") && !game.entities[id].hasComponent("alive")) { + delete game.entities[id]; + } + } + + requestAnimationFrame(game.loop); +}; + +game.toggleRunning = () => { + game.running = !game.running; +}; + +game.startLoop = () => { + game.running = true; + game.lastTimeStamp = performance.now(); + game.assets.music.play(); + if (game.assets.music.paused) { + alert("Failed to start background music; please allow autoplay in your browser settings."); + } + requestAnimationFrame(game.loop); +}; + +game.loadSystems = () => { + game.systemOrder = ["grid", "collision", "physics", "keyboardInput", "particle", "logic", "undo", "render"]; + game.systems = { }; + game.systems.physics = game.system.Physics(), + 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.particle = game.system.Particle(game.canvas.context); + game.systems.keyboardInput = game.system.KeyboardInput(); + game.systems.logic = game.system.Logic(game.entitiesGrid); + game.systems.undo = game.system.Undo(game.entitiesGrid, game.systems.logic, game.systems.grid); + game.systems.menu = game.system.Menu(); +}; + +game.loadLevelIndex = (level) => { + game.win = false; + + 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.assets.music.addEventListener('ended', function() { + this.currentTime = 0; + this.play(); + }, false); + + game.loadLevelIndex(0); + game.startLoop(); +}; -- cgit v1.3