58 lines
1 KiB
JavaScript
58 lines
1 KiB
JavaScript
/**
|
|
* Entity class - represents a game object with a unique ID
|
|
* Entities are just containers for components
|
|
*/
|
|
export class Entity {
|
|
static nextId = 0;
|
|
|
|
constructor() {
|
|
this.id = Entity.nextId++;
|
|
this.components = new Map();
|
|
this.active = true;
|
|
}
|
|
|
|
/**
|
|
* Add a component to this entity
|
|
*/
|
|
addComponent(component) {
|
|
this.components.set(component.type, component);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Get a component by type
|
|
*/
|
|
getComponent(type) {
|
|
return this.components.get(type);
|
|
}
|
|
|
|
/**
|
|
* Check if entity has a component
|
|
*/
|
|
hasComponent(type) {
|
|
return this.components.has(type);
|
|
}
|
|
|
|
/**
|
|
* Check if entity has all specified components
|
|
*/
|
|
hasComponents(...types) {
|
|
return types.every(type => this.components.has(type));
|
|
}
|
|
|
|
/**
|
|
* Remove a component
|
|
*/
|
|
removeComponent(type) {
|
|
this.components.delete(type);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Get all components
|
|
*/
|
|
getAllComponents() {
|
|
return Array.from(this.components.values());
|
|
}
|
|
}
|
|
|