summaryrefslogtreecommitdiff
path: root/Homework/cs5410/bbiy/src/game.js
diff options
context:
space:
mode:
authorElizabeth Alexander Hunt <me@liz.coffee>2026-07-02 11:55:17 -0700
committerElizabeth Alexander Hunt <me@liz.coffee>2026-07-02 11:55:17 -0700
commit6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6 (patch)
treeed97e39ec77c5231ffd2c394493e68d00ddac5a4 /Homework/cs5410/bbiy/src/game.js
downloadmisc-undergrad-main.tar.gz
misc-undergrad-main.zip
Diffstat (limited to 'Homework/cs5410/bbiy/src/game.js')
-rw-r--r--Homework/cs5410/bbiy/src/game.js72
1 files changed, 72 insertions, 0 deletions
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();
+};