87 lines
1.5 KiB
JavaScript
87 lines
1.5 KiB
JavaScript
|
|
import Query from './query.js';
|
|
|
|
export default class System {
|
|
|
|
active = false;
|
|
|
|
destroying = [];
|
|
|
|
ecs;
|
|
|
|
queries = {};
|
|
|
|
constructor(ecs) {
|
|
this.ecs = ecs;
|
|
const queries = this.constructor.queries();
|
|
for (const i in queries) {
|
|
this.queries[i] = new Query(queries[i], ecs.Components);
|
|
}
|
|
this.reindex(ecs.entities);
|
|
}
|
|
|
|
createEntity(components) {
|
|
return this.ecs.create(components);
|
|
}
|
|
|
|
createManyEntities(componentsList) {
|
|
return this.ecs.createMany(componentsList);
|
|
}
|
|
|
|
deindex(entityIds) {
|
|
for (const i in this.queries) {
|
|
this.queries[i].deindex(entityIds);
|
|
}
|
|
}
|
|
|
|
destroyEntity(entityId) {
|
|
this.destroyManyEntities([entityId]);
|
|
}
|
|
|
|
destroyManyEntities(entityIds) {
|
|
for (let i = 0; i < entityIds.length; i++) {
|
|
this.destroying.push(entityIds[i]);
|
|
}
|
|
}
|
|
|
|
finalize() {}
|
|
|
|
insertComponents(entityId, components) {
|
|
this.ecs.insert(entityId, components);
|
|
}
|
|
|
|
insertManyComponents(components) {
|
|
this.ecs.insertMany(components);
|
|
}
|
|
|
|
static queries() {
|
|
return {};
|
|
}
|
|
|
|
reindex(entityIds) {
|
|
for (const i in this.queries) {
|
|
this.queries[i].reindex(entityIds);
|
|
}
|
|
}
|
|
|
|
removeComponents(entityId, components) {
|
|
this.ecs.remove(entityId, components);
|
|
}
|
|
|
|
removeManyComponents(entityIds) {
|
|
this.ecs.removeMany(entityIds);
|
|
}
|
|
|
|
select(query) {
|
|
return this.queries[query].select();
|
|
}
|
|
|
|
tickDestruction() {
|
|
this.deindex(this.destroying);
|
|
this.destroying = [];
|
|
}
|
|
|
|
tick() {}
|
|
|
|
}
|