summaryrefslogtreecommitdiff
path: root/Homework/cs5410/bbiy/src/utils
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/utils
downloadmisc-undergrad-main.tar.gz
misc-undergrad-main.zip
Diffstat (limited to 'Homework/cs5410/bbiy/src/utils')
-rw-r--r--Homework/cs5410/bbiy/src/utils/clamp.js6
-rw-r--r--Homework/cs5410/bbiy/src/utils/loadLevel.js87
-rw-r--r--Homework/cs5410/bbiy/src/utils/objectEquivalence.js14
-rw-r--r--Homework/cs5410/bbiy/src/utils/randInRange.js4
-rw-r--r--Homework/cs5410/bbiy/src/utils/unitizeVector.js11
5 files changed, 122 insertions, 0 deletions
diff --git a/Homework/cs5410/bbiy/src/utils/clamp.js b/Homework/cs5410/bbiy/src/utils/clamp.js
new file mode 100644
index 0000000..b0da861
--- /dev/null
+++ b/Homework/cs5410/bbiy/src/utils/clamp.js
@@ -0,0 +1,6 @@
+const clamp = (vector, maxX, maxY) => {
+ const newVector = {...vector};
+ newVector.x = Math.max(0, Math.min(maxX, vector.x));
+ newVector.y = Math.max(0, Math.min(maxY, vector.y));
+ return newVector;
+};
diff --git a/Homework/cs5410/bbiy/src/utils/loadLevel.js b/Homework/cs5410/bbiy/src/utils/loadLevel.js
new file mode 100644
index 0000000..3bd86d9
--- /dev/null
+++ b/Homework/cs5410/bbiy/src/utils/loadLevel.js
@@ -0,0 +1,87 @@
+game.loadLevel = (level) => {
+ const entities = {};
+ const config = {...level.gridSize};
+ for (let y = 0; y < level.gridSize.yDim; y++) {
+ for (let x = 0; x < level.gridSize.xDim; x++) {
+ const cell = level.level[y][x];
+ cell.forEach((letter) => {
+ let entity;
+ switch (letter) {
+ case 'b':
+ entity = game.createBigBlue();
+ break;
+ case 'h':
+ entity = game.createHedge();
+ break;
+ case 'r':
+ entity = game.createRock();
+ break;
+ case 'f':
+ entity = game.createFlag();
+ break;
+ case 'g':
+ entity = game.createGrass();
+ break;
+ case 'l':
+ entity = game.createFloor();
+ break;
+ case 'w':
+ entity = game.createWall();
+ break;
+ case 'a':
+ entity = game.createWater();
+ break;
+ case 'A':
+ entity = game.createWordWater();
+ break;
+ case 'N':
+ entity = game.createWordSink();
+ break;
+ case 'V':
+ entity = game.createWordLava();
+ break;
+ case 'v':
+ entity = game.createLava();
+ break;
+ case 'K':
+ entity = game.createWordKill();
+ break;
+ case 'W':
+ entity = game.createWordWall();
+ break;
+ case 'I':
+ entity = game.createWordIs();
+ break;
+ case 'S':
+ entity = game.createWordStop();
+ break;
+ case 'R':
+ entity = game.createWordRock();
+ break;
+ case 'P':
+ entity = game.createWordPush();
+ break;
+ case 'B':
+ entity = game.createWordBigBlue();
+ break;
+ case 'Y':
+ entity = game.createWordYou();
+ break;
+ case 'F':
+ entity = game.createWordFlag();
+ break;
+ case 'X':
+ entity = game.createWordWin();
+ break;
+ default:
+ break;
+ }
+ if (entity) {
+ entity.addComponent(game.components.GridPosition({x, y}));
+ entities[entity.id] = entity;
+ }
+ });
+ }
+ }
+ return [entities, config];
+}; \ No newline at end of file
diff --git a/Homework/cs5410/bbiy/src/utils/objectEquivalence.js b/Homework/cs5410/bbiy/src/utils/objectEquivalence.js
new file mode 100644
index 0000000..e33dd76
--- /dev/null
+++ b/Homework/cs5410/bbiy/src/utils/objectEquivalence.js
@@ -0,0 +1,14 @@
+const equivalence = (obj1, obj2) => {
+ if (obj1 === null) {
+ return obj1 === null;
+ }
+ return Object.keys(obj1).every(key => {
+ if (obj2[key] === undefined) {
+ return false;
+ }
+ if (typeof obj1[key] === 'object') {
+ return equivalence(obj1[key], obj2[key]);
+ }
+ return obj1[key] === obj2[key];
+ });
+};
diff --git a/Homework/cs5410/bbiy/src/utils/randInRange.js b/Homework/cs5410/bbiy/src/utils/randInRange.js
new file mode 100644
index 0000000..528221a
--- /dev/null
+++ b/Homework/cs5410/bbiy/src/utils/randInRange.js
@@ -0,0 +1,4 @@
+const randomInRange = (min, max) => {
+ // min <= random number <= max
+ return Math.floor(Math.random() * (max - min + 1)) + min;
+} \ No newline at end of file
diff --git a/Homework/cs5410/bbiy/src/utils/unitizeVector.js b/Homework/cs5410/bbiy/src/utils/unitizeVector.js
new file mode 100644
index 0000000..6297ca8
--- /dev/null
+++ b/Homework/cs5410/bbiy/src/utils/unitizeVector.js
@@ -0,0 +1,11 @@
+const unitize = (vector) => {
+ // Not *technically* a unit vector, but has x,y components of |magnitude| = 1
+ Object.keys(vector).forEach((key) => {
+ if (typeof vector[key] === 'object') {
+ vector[key] = vector[key].unitize();
+ } else if (typeof vector[key] === 'number') {
+ vector[key] = (vector[key] === 0 ? 0 : vector[key] / Math.abs(vector[key]));
+ }
+ });
+ return vector;
+} \ No newline at end of file