35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
import { System, SystemNames } from ".";
|
|
import { Game } from "..";
|
|
import { ComponentNames, Grid, LambdaSpawn } from "../components";
|
|
import { FunctionBox } from "../entities";
|
|
|
|
export class LambdaFactory extends System {
|
|
constructor() {
|
|
super(SystemNames.LambdaFactory);
|
|
}
|
|
|
|
public update(_dt: number, game: Game) {
|
|
game.forEachEntityWithComponent(ComponentNames.LambdaSpawn, (entity) => {
|
|
const lambdaSpawn = entity.getComponent<LambdaSpawn>(
|
|
ComponentNames.LambdaSpawn,
|
|
)!;
|
|
const hasGrid = entity.hasComponent(SystemNames.Grid);
|
|
|
|
if (!lambdaSpawn.direction || !hasGrid) {
|
|
return;
|
|
}
|
|
|
|
const grid = entity.getComponent<Grid>(SystemNames.Grid)!;
|
|
|
|
const lambda = new FunctionBox(grid.gridPosition, lambdaSpawn.code);
|
|
const lambdaGrid = lambda.getComponent<Grid>(SystemNames.Grid)!;
|
|
lambdaGrid.movingDirection = lambdaSpawn.direction;
|
|
lambda.addComponent(lambdaGrid);
|
|
game.addEntity(lambda);
|
|
|
|
lambdaSpawn.direction = null;
|
|
entity.addComponent(lambdaSpawn);
|
|
});
|
|
}
|
|
}
|