From 07f508365f619d6bfe0a074dcf98c5ae8db17f08 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sat, 1 Mar 2025 15:31:27 -0700 Subject: add carcadr level --- src/engine/levels/LevelSelection.ts | 47 +++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 12 deletions(-) (limited to 'src/engine/levels/LevelSelection.ts') 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(SystemNames.Grid); const center = gridSystem.getCenterGrid(); + const dimensions = gridSystem.getGridDimensions(); const levelSystem = game.getSystem(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)); } } -- cgit v1.2.3-70-g09d2