elics
Version:
lightweight, flexible ECS for web games
67 lines • 2.91 kB
TypeScript
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