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/utils/clamp.js | 6 ++ Homework/cs5410/bbiy/src/utils/loadLevel.js | 87 ++++++++++++++++++++++ .../cs5410/bbiy/src/utils/objectEquivalence.js | 14 ++++ Homework/cs5410/bbiy/src/utils/randInRange.js | 4 + Homework/cs5410/bbiy/src/utils/unitizeVector.js | 11 +++ 5 files changed, 122 insertions(+) create mode 100644 Homework/cs5410/bbiy/src/utils/clamp.js create mode 100644 Homework/cs5410/bbiy/src/utils/loadLevel.js create mode 100644 Homework/cs5410/bbiy/src/utils/objectEquivalence.js create mode 100644 Homework/cs5410/bbiy/src/utils/randInRange.js create mode 100644 Homework/cs5410/bbiy/src/utils/unitizeVector.js (limited to 'Homework/cs5410/bbiy/src/utils') 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 -- cgit v1.3