pex-renderer
Version:
Physically Based Renderer (PBR) and scene graph designed as ECS for PEX: define entities to be rendered as collections of components with their update orchestrated by systems.
44 lines (39 loc) • 1.05 kB
JavaScript
export default ({ entities = [], systems = [] } = {}) => {
let prevTime = performance.now();
return {
entities,
systems,
add(entity) {
this.entities.push(entity);
return entity;
},
addSystem(system) {
this.systems.push(system);
return system;
},
update(deltaTime) {
if (deltaTime == undefined) {
const now = performance.now();
deltaTime = (now - prevTime) / 1000;
prevTime = now;
}
for (let i = 0; i < this.systems.length; i++) {
this.systems[i].update(this.entities, { deltaTime });
}
},
dispose(entities) {
const entitiesToDispose = entities
? Array.isArray(entities)
? entities
: [entities]
: this.entities;
for (let i = 0; i < this.systems.length; i++) {
this.systems[i].dispose?.(entitiesToDispose);
}
this.entities = this.entities.filter(
(entity) => !entitiesToDispose.includes(entity),
);
entitiesToDispose.length = 0;
},
};
};