Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 1x 1x 1x 1x 1x 1x 34x 34x 34x 34x 34x 34x 34x 34x 4x 4x 34x 34x 34x 34x 34x 55x 55x 55x 55x 43x 43x 70x 37x 37x 70x 43x 43x 26x 26x 43x 55x 55x 55x 34x | import { SystemInterface, WorldInterface } from "@jga/patterns";
import { ComponentName } from "../components";
import { Entity } from "../entities";
export abstract class System implements SystemInterface {
// eslint-disable-next-line compat/compat
protected entities: Map<string, Entity> = new Map<string, Entity>();
public constructor(entities: Map<string, Entity>, filters: ComponentName[]) {
this.entities = this.filterEntities(entities, filters);
}
public getEntities(): Map<string, Entity> {
return this.entities;
}
public abstract run(world?: WorldInterface): void;
// eslint-disable-next-line class-methods-use-this,compat/compat
protected filterEntities(entities: Map<string, Entity>, filters: ComponentName[]): Map<string, Entity> {
// eslint-disable-next-line compat/compat
const filtered: Map<string, Entity> = new Map<string, Entity>();
entities.forEach((entity, key): void => {
let found = 0;
filters.forEach((filter): void => {
if (entity != null && entity.hasComponent(filter)) {
found += 1;
}
});
if (found === filters.length) {
filtered.set(key, entity);
}
});
return filtered;
}
}
|