From ce06fa7c29ba4e3d6137f7aa74fbfe45af0e8b73 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Tue, 5 Mar 2024 22:00:04 -0700 Subject: refactor spawners --- src/engine/systems/Spawner.ts | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/engine/systems/Spawner.ts (limited to 'src/engine/systems/Spawner.ts') diff --git a/src/engine/systems/Spawner.ts b/src/engine/systems/Spawner.ts new file mode 100644 index 0000000..6a4d382 --- /dev/null +++ b/src/engine/systems/Spawner.ts @@ -0,0 +1,34 @@ +import { System, SystemNames } from "."; +import { Game } from ".."; +import { ComponentNames, Grid, GridSpawn } from "../components"; +import { FunctionBox } from "../entities"; + +export class GridSpawner extends System { + constructor() { + super(SystemNames.GridSpawner); + } + + public update(_dt: number, game: Game) { + game.forEachEntityWithComponent(ComponentNames.GridSpawn, (entity) => { + const lambdaSpawn = entity.getComponent( + ComponentNames.GridSpawn, + )!; + const hasGrid = entity.hasComponent(SystemNames.Grid); + + if (!lambdaSpawn.direction || !hasGrid) { + return; + } + + const grid = entity.getComponent(SystemNames.Grid)!; + + const lambda = new FunctionBox(grid.gridPosition, lambdaSpawn.code); + const lambdaGrid = lambda.getComponent(SystemNames.Grid)!; + lambdaGrid.movingDirection = lambdaSpawn.direction; + lambda.addComponent(lambdaGrid); + game.addEntity(lambda); + + lambdaSpawn.direction = null; + entity.addComponent(lambdaSpawn); + }); + } +} -- cgit v1.2.3-70-g09d2