45 lines
1 KiB
JavaScript
45 lines
1 KiB
JavaScript
/**
|
|
* Base System class for ECS architecture
|
|
* Systems contain logic that operates on entities with specific components
|
|
*/
|
|
export class System {
|
|
constructor(name) {
|
|
this.name = name;
|
|
this.requiredComponents = [];
|
|
this.priority = 0; // Lower priority runs first
|
|
}
|
|
|
|
/**
|
|
* Check if an entity matches this system's requirements
|
|
*/
|
|
matches(entity) {
|
|
if (!entity.active) return false;
|
|
return this.requiredComponents.every(componentType =>
|
|
entity.hasComponent(componentType)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Update method - override in subclasses
|
|
*/
|
|
update(deltaTime, entities) {
|
|
// Filter entities that match this system's requirements
|
|
const matchingEntities = entities.filter(entity => this.matches(entity));
|
|
this.process(deltaTime, matchingEntities);
|
|
}
|
|
|
|
/**
|
|
* Process matching entities - override in subclasses
|
|
*/
|
|
process(_deltaTime, _entities) {
|
|
// Override in subclasses
|
|
}
|
|
|
|
/**
|
|
* Called when system is added to engine
|
|
*/
|
|
init(engine) {
|
|
this.engine = engine;
|
|
}
|
|
}
|
|
|