UNPKG

darker-engine

Version:
59 lines (58 loc) 2.38 kB
/** * Engine */ export interface EngineType<I, C extends string | number, D> { setSystems: (...systems: SystemFunction<C>[]) => Promise<void>; getEntityList: () => EntityType<I, C, D>[]; getEntityListByType: (type: I) => EntityType<I, C, D>[]; getEntityListByComponents: (...componentList: C[]) => EntityType<I, C, D>[]; getEntity: (id: number) => EntityType<I, C, D> | undefined; addEntity: (...entities: SimpleEntityType<I, C, D>[]) => Promise<EntityType<I, C, D>[]>; removeEntity: (...idList: number[]) => Promise<void>; getSystem: (name: number) => SystemType<C> | undefined; clear: () => void; load: () => Promise<void>; hardReload: () => Promise<void>; __debug__: { swapSystem: (systemId: number, system: SystemFunction<C>) => Promise<void>; getSystem: (name: string) => SystemType<C> | undefined; }; } /** * System */ export interface SystemType<C> { id: number; name: string; components: C[]; onAdd?: (id: number) => Promise<void>; onUpdate?: (id: number, component?: C) => Promise<void>; onRemove?: (id: number) => Promise<void>; onLoad?: () => Promise<void>; onDestroy?: () => Promise<void>; } export type SystemFunction<C> = () => Promise<Omit<SystemType<C>, 'id' | 'name'>>; /** * Entity */ export interface EntityType<I, C extends string | number, D> { readonly type: I; readonly data: Partial<D>; readonly components: C[]; id: number; safe?: boolean; getData: () => Record<number, any>; getComponent: <T extends keyof D>(component: T, deepClone?: boolean) => D[T]; getComponents: <T extends keyof D>(components: T[], deepClone?: boolean) => { [K in T]: D[K]; }; getComponentTypes: () => C[]; hasComponent: (component: number) => boolean; updateComponent: <T extends keyof D>(component: T, data?: D[T]) => Promise<EntityType<I, C, D> | undefined>; removeComponent: (component: C) => Promise<void>; } export type SimpleEntityType<I, C extends string | number, D> = Omit<EntityType<I, C, D>, 'getData' | 'getComponent' | 'getComponents' | 'getComponentTypes' | 'hasComponent' | 'updateComponent' | 'removeComponent'>; export type EntityTypeFunction<I, C extends string | number, D, P> = (props: P) => SimpleEntityType<I, C, D>; export type DarkerMap<T extends string | number, S> = { [key in T]: S; };