/** * 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()); } }