UNPKG

ecspresso

Version:

A minimal Entity-Component-System library for typescript and javascript.

22 lines (21 loc) 1.64 kB
import type { Entity, FilteredEntity } from "./types"; export default class EntityManager<ComponentTypes> { private nextId; private entities; private componentIndices; createEntity(): Entity<ComponentTypes>; addComponent<ComponentName extends keyof ComponentTypes>(entityOrId: number | Entity<ComponentTypes>, componentName: ComponentName, data: ComponentTypes[ComponentName]): this; /** * Add multiple components to an entity at once * @param entityOrId Entity or entity ID to add components to * @param components Object with component names as keys and component data as values */ addComponents<T extends { [K in keyof ComponentTypes]?: ComponentTypes[K]; }>(entityOrId: number | Entity<ComponentTypes>, components: T & Record<Exclude<keyof T, keyof ComponentTypes>, never>): this; removeComponent<ComponentName extends keyof ComponentTypes>(entityId: number, componentName: ComponentName): void; getComponent<ComponentName extends keyof ComponentTypes>(entityId: number, componentName: ComponentName): ComponentTypes[ComponentName] | null; getEntitiesWithComponents<WithComponents extends keyof ComponentTypes = never, WithoutComponents extends keyof ComponentTypes = never>(required?: ReadonlyArray<WithComponents>, excluded?: ReadonlyArray<WithoutComponents>): Array<FilteredEntity<ComponentTypes, WithComponents extends never ? never : WithComponents, WithoutComponents extends never ? never : WithoutComponents>>; removeEntity(entityOrId: number | Entity<ComponentTypes>): boolean; getEntity(entityId: number): Entity<ComponentTypes> | undefined; }