1 | import { Entity } from '.';
|
2 | declare type NonFunctionPropertyNames<T> = {
|
3 | [K in keyof T]: T[K] extends (args: unknown) => void ? never : K;
|
4 | }[keyof T];
|
5 | export declare type NonFunctionProperties<T> = Pick<T, NonFunctionPropertyNames<T>>;
|
6 | export declare type ComponentClassType<P> = new (data: Partial<NonFunctionProperties<P>>) => Component<P> & P;
|
7 | export declare abstract class Component<P> {
|
8 | constructor(data?: Partial<NonFunctionProperties<P>>);
|
9 | }
|
10 | /**
|
11 | * 管理某一类 Component,尽可能做到 AoS 而非 SoA
|
12 | * @see https://wickedengine.net/2019/09/29/entity-component-system/
|
13 | * @see https://github.com/turanszkij/WickedEngine/blob/master/WickedEngine/wiECS.h
|
14 | */
|
15 | export declare class ComponentManager<P> {
|
16 | private clazz;
|
17 | private components;
|
18 | private entities;
|
19 | |
20 |
|
21 |
|
22 | private lookup;
|
23 | constructor(clazz: ComponentClassType<P>);
|
24 | clear(): void;
|
25 | contains(entity: Entity): boolean;
|
26 | create(entity: Entity, data?: Partial<NonFunctionProperties<P>>): Component<P> & P;
|
27 | remove(entity: Entity): void;
|
28 | removeKeepSorted(entity: Entity): void;
|
29 | moveItem(srcIndex: number, destIndex: number): void;
|
30 | getEntity(index: number): number;
|
31 | /**
|
32 | * 由于缺少类似 C++ 的重载操作符,没法通过 [下标] 直接访问。因此只能增加该方法用于遍历。
|
33 | */
|
34 | getComponent(index: number): Component<P> & P;
|
35 | getComponentByEntity(entity: Entity): (Component<P> & P) | null;
|
36 | getCount(): number;
|
37 | getEntityByComponentIndex(componentIdx: number): number;
|
38 | find(callback: (component: Component<P> & P, i: number) => boolean): (Component<P> & P) | null;
|
39 | findIndex(callback: (component: Component<P> & P, i: number) => boolean): number;
|
40 | forEach(callback: (entity: Entity, component: Component<P> & P) => void): void;
|
41 | forEachAsync(callback: (entity: Entity, component: Component<P> & P) => Promise<void>): Promise<void>;
|
42 | map(callback: (entity: Entity, component: Component<P> & P) => void): void[];
|
43 | }
|
44 | export {};
|