diff options
Diffstat (limited to 'src/engine/systems')
-rw-r--r-- | src/engine/systems/GridSpawner.ts | 39 | ||||
-rw-r--r-- | src/engine/systems/Spawner.ts (renamed from src/engine/systems/LambdaFactory.ts) | 12 | ||||
-rw-r--r-- | src/engine/systems/SystemNames.ts | 2 | ||||
-rw-r--r-- | src/engine/systems/index.ts | 2 |
4 files changed, 47 insertions, 8 deletions
diff --git a/src/engine/systems/GridSpawner.ts b/src/engine/systems/GridSpawner.ts new file mode 100644 index 0000000..c566444 --- /dev/null +++ b/src/engine/systems/GridSpawner.ts @@ -0,0 +1,39 @@ +import { System, SystemNames } from "."; +import { Game } from ".."; +import { ComponentNames, Grid, GridSpawn } from "../components"; +import { Direction } from "../interfaces"; + +export class GridSpawner extends System { + constructor() { + super(SystemNames.GridSpawner); + } + + public update(_dt: number, game: Game) { + game.forEachEntityWithComponent(ComponentNames.GridSpawn, (entity) => { + const spawn = entity.getComponent<GridSpawn>(ComponentNames.GridSpawn)!; + const hasGrid = entity.hasComponent(SystemNames.Grid); + + if (spawn.direction === Direction.NONE || !hasGrid) { + return; + } + + const grid = entity.getComponent<Grid>(SystemNames.Grid)!; + + const direction = spawn.direction; + const spawned = spawn.spawner(); + if (!spawned) { + return; + } + spawn.direction = Direction.NONE; + entity.addComponent(spawn); + + const spawnedGrid = spawned.getComponent<Grid>(SystemNames.Grid)!; + spawnedGrid.gridPosition = grid.gridPosition; + spawnedGrid.movingDirection = direction; + spawned.addComponent(spawnedGrid); + + game.addEntity(spawned); + entity.addComponent(spawned); + }); + } +} diff --git a/src/engine/systems/LambdaFactory.ts b/src/engine/systems/Spawner.ts index 1263eae..6a4d382 100644 --- a/src/engine/systems/LambdaFactory.ts +++ b/src/engine/systems/Spawner.ts @@ -1,17 +1,17 @@ import { System, SystemNames } from "."; import { Game } from ".."; -import { ComponentNames, Grid, LambdaSpawn } from "../components"; +import { ComponentNames, Grid, GridSpawn } from "../components"; import { FunctionBox } from "../entities"; -export class LambdaFactory extends System { +export class GridSpawner extends System { constructor() { - super(SystemNames.LambdaFactory); + super(SystemNames.GridSpawner); } public update(_dt: number, game: Game) { - game.forEachEntityWithComponent(ComponentNames.LambdaSpawn, (entity) => { - const lambdaSpawn = entity.getComponent<LambdaSpawn>( - ComponentNames.LambdaSpawn, + game.forEachEntityWithComponent(ComponentNames.GridSpawn, (entity) => { + const lambdaSpawn = entity.getComponent<GridSpawn>( + ComponentNames.GridSpawn, )!; const hasGrid = entity.hasComponent(SystemNames.Grid); diff --git a/src/engine/systems/SystemNames.ts b/src/engine/systems/SystemNames.ts index c96dc48..555746c 100644 --- a/src/engine/systems/SystemNames.ts +++ b/src/engine/systems/SystemNames.ts @@ -3,6 +3,6 @@ export namespace SystemNames { export const Input = "Input"; export const FacingDirection = "FacingDirection"; export const Grid = "Grid"; - export const LambdaFactory = "LambdaFactory"; + export const GridSpawner = "GridSpawner"; export const Collision = "Collision"; } diff --git a/src/engine/systems/index.ts b/src/engine/systems/index.ts index 6ee5392..34b369c 100644 --- a/src/engine/systems/index.ts +++ b/src/engine/systems/index.ts @@ -4,5 +4,5 @@ export * from "./Render"; export * from "./Input"; export * from "./FacingDirection"; export * from "./Grid"; -export * from "./LambdaFactory"; +export * from "./GridSpawner"; export * from "./Collision"; |