UNPKG

elics

Version:

lightweight, flexible ECS for web games

77 lines 2.2 kB
import { Query, QueryConfig } from './query.js'; import { Signal } from '@preact/signals-core'; import { Entity } from './entity.js'; import { QueryManager } from './query-manager.js'; import { TypeValueToType } from './types.js'; import { World } from './world.js'; export type SystemSchemaField = { type: 'Int8'; default: number; } | { type: 'Int16'; default: number; } | { type: 'Float32'; default: number; } | { type: 'Float64'; default: number; } | { type: 'Boolean'; default: boolean; } | { type: 'String'; default: string; } | { type: 'Vec2'; default: [number, number]; } | { type: 'Vec3'; default: [number, number, number]; } | { type: 'Vec4'; default: [number, number, number, number]; } | { type: 'Entity'; default: import('./entity.js').Entity | null; } | { type: 'Object'; default: unknown; } | { type: 'Enum'; default: string; }; export type SystemSchema = Record<string, SystemSchemaField>; export type SystemQueries = Record<string, QueryConfig>; type SystemConfigSignals<S extends SystemSchema> = { [K in keyof S]: Signal<TypeValueToType<S[K]['type']>>; }; export interface System<S extends SystemSchema, Q extends SystemQueries> { isPaused: boolean; config: SystemConfigSignals<S>; queries: Record<keyof Q, Query>; world: World; queryManager: QueryManager; priority: number; globals: { [key: string]: unknown; }; init(): void; update(delta: number, time: number): void; destroy(): void; play(): void; stop(): void; createEntity(): Entity; } export interface SpecialSystem<S extends SystemSchema, Q extends SystemQueries> extends System<S, Q> { specialProp: boolean; } export interface SystemConstructor<S extends SystemSchema, Q extends SystemQueries, W extends World = World, Sys extends System<S, Q> = System<S, Q>> { schema: S; isSystem: boolean; queries: Q; new (_w: W, _qm: QueryManager, _p: number): Sys; } export declare function createSystem<S extends SystemSchema, Q extends SystemQueries>(queries?: Q, schema?: S): SystemConstructor<S, Q>; export {}; //# sourceMappingURL=system.d.ts.map