summaryrefslogtreecommitdiff
path: root/src/engine/levels/ChurchNumeralsOne.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/levels/ChurchNumeralsOne.ts')
-rw-r--r--src/engine/levels/ChurchNumeralsOne.ts45
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));
+ }
+}