summaryrefslogtreecommitdiff
path: root/src/engine/systems
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/systems')
-rw-r--r--src/engine/systems/GridSpawner.ts39
-rw-r--r--src/engine/systems/Spawner.ts (renamed from src/engine/systems/LambdaFactory.ts)12
-rw-r--r--src/engine/systems/SystemNames.ts2
-rw-r--r--src/engine/systems/index.ts2
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";