diff options
Diffstat (limited to 'src/engine/levels/ChurchNumeralsOne.ts')
-rw-r--r-- | src/engine/levels/ChurchNumeralsOne.ts | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/engine/levels/ChurchNumeralsOne.ts b/src/engine/levels/ChurchNumeralsOne.ts new file mode 100644 index 0000000..2dbb6b5 --- /dev/null +++ b/src/engine/levels/ChurchNumeralsOne.ts @@ -0,0 +1,45 @@ +import { FunctionApplication, Grass, LambdaFactory, Player } from "../entities"; +import { Game } from "../Game"; +import { Grid, SystemNames } from "../systems"; +import { normalRandom } from "../utils"; +import { Level } from "./Level"; +import { LevelNames } from "./LevelNames"; + +export class ChurchNumeralsOne extends Level { + constructor() { + super(LevelNames.ChurchNumeralsOne); + } + + public init(game: Game) { + const grid = game.getSystem<Grid>(SystemNames.Grid); + const dimensions = grid.getGridDimensions(); + + const grasses = 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), + ), + }); + }); + + [ + ...grasses, + new LambdaFactory({ x: 1, y: 1 }, "(\\ (f) . (\\ (x) . (f f x)))", 1), + new FunctionApplication( + { x: 2, y: 2 }, + "(_INPUT ((_SPAWN _RIGHT) _KEY))", + ), + new FunctionApplication( + { x: 3, y: 3 }, + "(_INPUT _EMPTY)", + ), + new Player({ x: 0, y: 0 }), + ].forEach((e) => game.addEntity(e)); + } +} |