UNPKG

elics

Version:

lightweight, flexible ECS for web games

67 lines 2.91 kB
export type DataType = 'Int8' | 'Int16' | 'Entity' | 'Float32' | 'Float64' | 'Boolean' | 'String' | 'Object' | 'Vec2' | 'Vec3' | 'Vec4' | 'Enum'; export declare enum Types { Int8 = "Int8", Int16 = "Int16", Entity = "Entity", Float32 = "Float32", Float64 = "Float64", Boolean = "Boolean", String = "String", Object = "Object", Vec2 = "Vec2", Vec3 = "Vec3", Vec4 = "Vec4", Enum = "Enum" } export type TypedArray = Int8Array | Int16Array | Int32Array | Float32Array | Float64Array | Uint8Array; export type TypedArrayConstructor = Int8ArrayConstructor | Int16ArrayConstructor | Int32ArrayConstructor | Float32ArrayConstructor | Float64ArrayConstructor | Uint8ArrayConstructor; export declare const TypedArrayMap: { [key in DataType]: { arrayConstructor: TypedArrayConstructor | ArrayConstructor; length: number; }; }; export type TypeValueToType<T extends DataType> = T extends 'Int8' | 'Int16' | 'Float32' | 'Float64' ? number : T extends 'Boolean' ? boolean : T extends 'String' | 'Enum' ? string : T extends 'Vec2' ? [number, number] : T extends 'Vec3' ? [number, number, number] : T extends 'Vec4' ? [number, number, number, number] : T extends 'Entity' ? import('./entity.js').Entity | null : T extends 'Object' ? unknown : never; export type DataArrayToType<T extends DataType> = T extends 'Int8' | 'Int16' | 'Entity' | 'Float32' | 'Float64' | 'Boolean' | 'Vec2' | 'Vec3' | 'Vec4' ? TypedArray : T extends 'String' | 'Enum' ? Array<string> : T extends 'Object' ? Array<unknown> : never; export type EnumType = { [key: string]: string; }; export type SchemaField<T extends DataType> = T extends 'Enum' ? { type: T; default: TypeValueToType<T>; enum: EnumType; } : T extends 'Int8' | 'Int16' | 'Float32' | 'Float64' ? { type: T; default: TypeValueToType<T>; min?: number; max?: number; } : T extends 'Entity' ? { type: T; default: import('./entity.js').Entity | null; } : T extends 'Object' ? { type: T; default: unknown; } : T extends 'Boolean' ? { type: T; default: boolean; } : T extends 'String' ? { type: T; default: string; } : T extends 'Vec2' ? { type: T; default: [number, number]; } : T extends 'Vec3' ? { type: T; default: [number, number, number]; } : T extends 'Vec4' ? { type: T; default: [number, number, number, number]; } : never; export type TypedSchema<T extends DataType> = Record<string, SchemaField<T>>; export type AnySchema = TypedSchema<DataType>; export type AnyComponent = import('./component.js').Component<AnySchema>; export type AnySystem = import('./system.js').System<import('./system.js').SystemSchema, import('./system.js').SystemQueries>; export type ComponentInitialData<C extends AnyComponent> = Partial<{ [K in keyof C['schema']]: TypeValueToType<C['schema'][K]['type']>; }>; //# sourceMappingURL=types.d.ts.map