summaryrefslogtreecommitdiff
path: root/src/engine/levels/LevelSelection.ts
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth@simponic.xyz>2025-03-01 15:31:27 -0700
committerElizabeth Hunt <elizabeth@simponic.xyz>2025-03-01 15:31:27 -0700
commit07f508365f619d6bfe0a074dcf98c5ae8db17f08 (patch)
tree16b2a072998452ad72529e3d617f5c4a2df63c0c /src/engine/levels/LevelSelection.ts
parent309ed20627ed798c464a9f97d9c32ceb1a314595 (diff)
downloadthe-abstraction-engine-07f508365f619d6bfe0a074dcf98c5ae8db17f08.tar.gz
the-abstraction-engine-07f508365f619d6bfe0a074dcf98c5ae8db17f08.zip
add carcadr level
Diffstat (limited to 'src/engine/levels/LevelSelection.ts')
-rw-r--r--src/engine/levels/LevelSelection.ts47
1 files changed, 35 insertions, 12 deletions
diff --git a/src/engine/levels/LevelSelection.ts b/src/engine/levels/LevelSelection.ts
index a970d9c..9e46274 100644
--- a/src/engine/levels/LevelSelection.ts
+++ b/src/engine/levels/LevelSelection.ts
@@ -1,9 +1,12 @@
import { LEVELS, Level, LevelNames } from ".";
import { Game } from "..";
-import { Player, Portal } from "../entities";
+import { Grass, Player, Portal } from "../entities";
import { Grid, Level as LevelSystem, SystemNames } from "../systems";
+import { normalRandom } from "../utils";
export class LevelSelection extends Level {
+ public static RADIUS = 5;
+
constructor() {
super(LevelNames.LevelSelection);
}
@@ -11,23 +14,43 @@ export class LevelSelection extends Level {
public init(game: Game): void {
const gridSystem = game.getSystem<Grid>(SystemNames.Grid);
const center = gridSystem.getCenterGrid();
+ const dimensions = gridSystem.getGridDimensions();
const levelSystem = game.getSystem<LevelSystem>(SystemNames.Level);
const unlocked = levelSystem.getUnlockedLevels();
- LEVELS.forEach((level, i) => {
- if (
- !unlocked.has(level.name) ||
- level.name === LevelNames.LevelSelection
- ) {
- return;
- }
-
- const portal = new Portal(level.name, { x: i, y: 7 });
- game.addEntity(portal);
- });
+ const renderableLevels = LEVELS.filter(
+ ({ name }) => name !== LevelNames.LevelSelection
+ );
+ const radiansPerLevel = (2 * Math.PI) / renderableLevels.length;
+ renderableLevels
+ .filter(({ name }) => unlocked.has(name))
+ .map((level, i) => {
+ const radians = i * radiansPerLevel;
+ const coords = {
+ x: Math.floor(Math.cos(radians) * LevelSelection.RADIUS + center.x),
+ y: Math.floor(Math.sin(radians) * LevelSelection.RADIUS + center.y),
+ };
+ return new Portal(level.name, coords);
+ })
+ .forEach((e) => game.addEntity(e));
const player = new Player(center);
game.addEntity(player);
+
+ Array.from({ length: dimensions.width })
+ .fill(0)
+ .map(() => {
+ // random grass
+ return new Grass({
+ x: Math.floor(
+ normalRandom(dimensions.width / 2, dimensions.width / 4, 1.5)
+ ),
+ y: Math.floor(
+ normalRandom(dimensions.height / 2, dimensions.height / 4, 1.5)
+ ),
+ });
+ })
+ .forEach((e) => game.addEntity(e));
}
}