import type { EcsType } from '../built-in-types/EcsType' import { SdkComponents } from '../components' import { Transport } from '../systems/crdt/transports/types' import { ComponentDefinition as CompDef } from './component' import { Entity } from './entity' import { Update } from './systems' import type { DeepReadonly } from './utils' /** * @public */ export type Unpacked = T extends (infer U)[] ? U : T /** * @public */ export type ComponentEcsType = { [K in keyof T]: T[K] extends CompDef ? ReturnType : never } /** * @public */ export type IEngine = { addEntity(dynamic?: boolean): Entity addDynamicEntity(): Entity removeEntity(entity: Entity): void addSystem(system: Update, priority?: number, name?: string): void removeSystem(selector: string | Update): boolean defineComponent(componentId: number, spec: T): CompDef mutableGroupOf( ...components: T ): Iterable<[Entity, ...ComponentEcsType]> groupOf( ...components: T ): Iterable<[Entity, ...DeepReadonly>]> getComponent(componentId: number): CompDef update(dt: number): void baseComponents: SdkComponents } /** * @public */ export type IEngineParams = { transports?: Transport[] }