ecspresso
Version:
A minimal Entity-Component-System library for typescript and javascript.
22 lines (21 loc) • 1.64 kB
TypeScript
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;
}