@daneren2005/shared-memory-ecs 1.5.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +222 -44
- package/dist/actions/add-component-worker.d.ts +3 -0
- package/dist/actions/build-worker-entity.d.ts +4 -2
- package/dist/actions/create-entity-worker.d.ts +2 -2
- package/dist/actions/kill-entity-worker.d.ts +2 -2
- package/dist/actions/remove-component-worker.d.ts +3 -0
- package/dist/component-definition.d.ts +2 -0
- package/dist/create-system-worker-DURlIMia.js +345 -0
- package/dist/create-system-worker-DURlIMia.js.map +1 -0
- package/dist/entity-class.d.ts +51 -0
- package/dist/entity-component.d.ts +7 -2
- package/dist/entity-factory.d.ts +21 -5
- package/dist/entity.d.ts +11 -2
- package/dist/index.d.ts +15 -8
- package/dist/index.js +379 -166
- package/dist/index.js.map +1 -1
- package/dist/systems/{component-system.d.ts → entity-worker-system.d.ts} +39 -18
- package/dist/systems/system.d.ts +1 -1
- package/dist/systems/worker-system.d.ts +22 -0
- package/dist/systems/workers/apply-query-delta.d.ts +1 -1
- package/dist/systems/workers/create-entity-system-worker.d.ts +8 -0
- package/dist/systems/workers/create-system-worker.d.ts +9 -0
- package/dist/systems/workers/entity-system-web-worker.d.ts +18 -0
- package/dist/systems/workers/{component-worker-message.d.ts → entity-system-worker-message.d.ts} +8 -4
- package/dist/worker.d.ts +10 -6
- package/dist/worker.js +2 -2
- package/dist/world.d.ts +17 -17
- package/package.json +2 -1
- package/dist/create-component-worker-BM942gjg.js +0 -288
- package/dist/create-component-worker-BM942gjg.js.map +0 -1
- package/dist/systems/workers/component-web-worker.d.ts +0 -17
- package/dist/systems/workers/create-component-worker.d.ts +0 -8
|
@@ -4,11 +4,11 @@ import type BaseEntity from '../entity';
|
|
|
4
4
|
import type { BaseComponent, ComponentDefinitionMap, ComponentMap } from '../component-definition';
|
|
5
5
|
import type { ComponentTypedArray } from '../memory-component';
|
|
6
6
|
import System, { type SystemConfig } from './system';
|
|
7
|
-
import
|
|
8
|
-
export default abstract class
|
|
7
|
+
import EntitySystemWebWorker from './workers/entity-system-web-worker';
|
|
8
|
+
export default abstract class EntityWorkerSystem<C extends ComponentMap, T extends EntityUpdateComponents<C>, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> extends System<C> {
|
|
9
9
|
entities: Map<number, BaseEntity<C>>;
|
|
10
|
-
options:
|
|
11
|
-
worker: Worker |
|
|
10
|
+
options: EntityWorkerSystemConfig<C, T, W, D>;
|
|
11
|
+
worker: Worker | EntitySystemWebWorker<C, T, W, D>;
|
|
12
12
|
isWorkerThread: boolean;
|
|
13
13
|
private initialized;
|
|
14
14
|
private initPromise;
|
|
@@ -16,10 +16,12 @@ export default abstract class ComponentSystem<C extends ComponentMap, T extends
|
|
|
16
16
|
private runCompletePromise;
|
|
17
17
|
private isRunning;
|
|
18
18
|
private generation;
|
|
19
|
-
|
|
19
|
+
protected queryEntities: {
|
|
20
|
+
[key: string]: Map<number, BaseEntity<C>>;
|
|
21
|
+
};
|
|
20
22
|
private queryDeltas;
|
|
21
23
|
addDataToWorld?(world: W): void;
|
|
22
|
-
constructor(world: BaseWorld<ComponentDefinitionMap, C>, options:
|
|
24
|
+
constructor(world: BaseWorld<ComponentDefinitionMap, C>, options: EntityWorkerSystemConfig<C, T, W, D>);
|
|
23
25
|
private initWorker;
|
|
24
26
|
init(): Promise<void> | void;
|
|
25
27
|
finishLoading(): Promise<void>;
|
|
@@ -32,11 +34,11 @@ export default abstract class ComponentSystem<C extends ComponentMap, T extends
|
|
|
32
34
|
private buildQueryDelta;
|
|
33
35
|
private buildComponents;
|
|
34
36
|
isEntityInSystem(entity: BaseEntity<C>): boolean;
|
|
35
|
-
|
|
37
|
+
protected matchesQuery(entity: BaseEntity<C>, query: EntityWorkerSystemQuery<C>): boolean;
|
|
36
38
|
private getQueryDelta;
|
|
37
39
|
private markAdded;
|
|
38
40
|
private markRemoved;
|
|
39
|
-
|
|
41
|
+
protected updateEntityList(queryName: string, list: Map<number, BaseEntity<C>>, entity: BaseEntity<C>, shouldInclude: boolean): void;
|
|
40
42
|
checkAddEntity(entity: BaseEntity<C>): boolean;
|
|
41
43
|
removeEntity(entity: BaseEntity<C>): void;
|
|
42
44
|
recheckMembership(): void;
|
|
@@ -52,15 +54,15 @@ export type EntityQueryComponents<C extends ComponentMap = ComponentMap> = {
|
|
|
52
54
|
components: EntityUpdateComponents<C>;
|
|
53
55
|
}>;
|
|
54
56
|
};
|
|
55
|
-
type EntityUpdateFunctionImpl<C extends ComponentMap, T extends EntityUpdateComponents<C>, W extends
|
|
56
|
-
export type EntityUpdateFunction<C extends ComponentMap, T extends EntityUpdateComponents<C>, W extends
|
|
57
|
+
type EntityUpdateFunctionImpl<C extends ComponentMap, T extends EntityUpdateComponents<C>, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld> = (world: W, entityId: number, components: T, queries: EntityQueryComponents<C>, callbacks: EntityWorkerSystemCallbacks<C>) => void;
|
|
58
|
+
export type EntityUpdateFunction<C extends ComponentMap, T extends EntityUpdateComponents<C>, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> = EntityUpdateFunctionImpl<C, T, W> & {
|
|
57
59
|
preRun?: EntityUpdatePreRunFunction<C, T, W>;
|
|
58
60
|
entityRemoved?: EntityRemovedFunction<C, W>;
|
|
59
61
|
init?: EntityUpdateInitFunction<W, D>;
|
|
60
62
|
};
|
|
61
|
-
export type EntityUpdateInitFunction<W extends
|
|
62
|
-
export type EntityUpdatePreRunFunction<C extends ComponentMap, T extends EntityUpdateComponents<C>, W extends
|
|
63
|
-
export type EntityRemovedFunction<C extends ComponentMap = ComponentMap, W extends
|
|
63
|
+
export type EntityUpdateInitFunction<W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> = (data: D | undefined) => Partial<W> | void;
|
|
64
|
+
export type EntityUpdatePreRunFunction<C extends ComponentMap, T extends EntityUpdateComponents<C>, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld> = (world: W, entities: Array<UpdateEntityConfigObject<T>>, queries: EntityQueryComponents<C>, callbacks: EntityWorkerSystemCallbacks<C>) => void;
|
|
65
|
+
export type EntityRemovedFunction<C extends ComponentMap = ComponentMap, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld> = (world: W, entityId: number, callbacks: EntityWorkerSystemCallbacks<C>) => void;
|
|
64
66
|
export type UpdateEntityConfig<T extends EntityUpdateComponents = EntityUpdateComponents> = number | UpdateEntityConfigObject<T>;
|
|
65
67
|
export type UpdateEntityConfigObject<T extends EntityUpdateComponents> = {
|
|
66
68
|
entityId: number;
|
|
@@ -74,48 +76,67 @@ export interface WorkerAllocator {
|
|
|
74
76
|
allocateEid(): number;
|
|
75
77
|
allocateComponentBlock(name: string, values: Array<number>): number;
|
|
76
78
|
}
|
|
77
|
-
export interface
|
|
79
|
+
export interface EntityWorkerSystemWorld {
|
|
78
80
|
gameTime: number;
|
|
79
81
|
elapsedTime: number;
|
|
80
82
|
getString(pointer: number): string;
|
|
81
83
|
heap?: MemoryHeap;
|
|
82
84
|
allocate?: WorkerAllocator;
|
|
83
85
|
buildEntityDescriptor?(config: WorkerCreateEntityConfig): WorkerCreatedEntity;
|
|
86
|
+
buildComponentDescriptor?(name: string, config: Record<string, unknown>): WorkerCreatedComponent;
|
|
84
87
|
}
|
|
85
88
|
export type WorkerCreateEntityConfig = {
|
|
86
89
|
type: string;
|
|
90
|
+
class?: never;
|
|
87
91
|
} & {
|
|
88
92
|
[key: string]: unknown;
|
|
89
93
|
};
|
|
90
94
|
export interface WorkerCreatedEntity {
|
|
91
95
|
eid: number;
|
|
92
96
|
type: string;
|
|
97
|
+
class?: string;
|
|
93
98
|
isStatic?: boolean;
|
|
94
99
|
components: {
|
|
95
100
|
[name: string]: number;
|
|
96
101
|
};
|
|
97
102
|
}
|
|
98
|
-
export interface
|
|
103
|
+
export interface WorkerCreatedComponent {
|
|
104
|
+
name: string;
|
|
105
|
+
index: number;
|
|
106
|
+
}
|
|
107
|
+
export type WorkerComponentChange = {
|
|
108
|
+
type: 'add';
|
|
109
|
+
entityId: number;
|
|
110
|
+
component: WorkerCreatedComponent;
|
|
111
|
+
} | {
|
|
112
|
+
type: 'remove';
|
|
113
|
+
entityId: number;
|
|
114
|
+
componentName: string;
|
|
115
|
+
};
|
|
116
|
+
export interface EntityWorkerSystemCallbacks<C extends ComponentMap = ComponentMap> {
|
|
99
117
|
entityComponentChanged<K extends keyof C, P extends keyof C[K]>(entityId: number, componentName: K, prop: P, value: C[K][P]): void;
|
|
100
118
|
emitEntityEvent(entityId: number, event: string, ...args: Array<unknown>): void;
|
|
101
119
|
emitSystemEvent(event: string, entityId: number): void;
|
|
102
120
|
entityDied(entityId: number): void;
|
|
103
121
|
createEntity(entity: WorkerCreatedEntity): void;
|
|
122
|
+
addComponent(entityId: number, component: WorkerCreatedComponent): void;
|
|
123
|
+
removeComponent<K extends keyof C>(entityId: number, componentName: K): void;
|
|
104
124
|
}
|
|
105
|
-
export interface
|
|
125
|
+
export interface EntityWorkerSystemQuery<C extends ComponentMap = ComponentMap> {
|
|
106
126
|
required: Array<keyof C>;
|
|
107
127
|
optional?: Array<keyof C>;
|
|
108
128
|
not?: Array<keyof C>;
|
|
109
129
|
filter?: (entity: BaseEntity<C>) => boolean;
|
|
110
130
|
}
|
|
111
|
-
export interface
|
|
131
|
+
export interface EntityWorkerSystemConfig<C extends ComponentMap, T extends EntityUpdateComponents<C>, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> extends SystemConfig, EntityWorkerSystemQuery<C> {
|
|
112
132
|
updateFunction: EntityUpdateFunction<C, T, W, D>;
|
|
113
133
|
getWorker: () => Worker;
|
|
114
134
|
forceMainThread?: boolean;
|
|
115
135
|
getInitData?: () => D;
|
|
116
136
|
createsEntities?: boolean;
|
|
137
|
+
addsComponents?: boolean;
|
|
117
138
|
queries?: {
|
|
118
|
-
[key: string]:
|
|
139
|
+
[key: string]: EntityWorkerSystemQuery<C>;
|
|
119
140
|
};
|
|
120
141
|
}
|
|
121
142
|
export type { BaseComponent };
|
package/dist/systems/system.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export interface SystemConfig {
|
|
|
28
28
|
deltaBetweenRuns?: number;
|
|
29
29
|
firstRun?: boolean;
|
|
30
30
|
}
|
|
31
|
-
export type SystemErrorPhase = 'preRun' | 'update' | 'entityRemoved' | 'run';
|
|
31
|
+
export type SystemErrorPhase = 'preRun' | 'update' | 'entityRemoved' | 'run' | 'died';
|
|
32
32
|
export interface SystemError {
|
|
33
33
|
system: string;
|
|
34
34
|
error: Error;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type BaseWorld from '../world';
|
|
2
|
+
import type BaseEntity from '../entity';
|
|
3
|
+
import type { ComponentDefinitionMap, ComponentMap } from '../component-definition';
|
|
4
|
+
import type { SystemConfig } from './system';
|
|
5
|
+
import EntityWorkerSystem, { type EntityWorkerSystemQuery, type EntityWorkerSystemWorld, type EntityUpdateComponents } from './entity-worker-system';
|
|
6
|
+
import { type WorkerSystemRunFunction } from './workers/create-system-worker';
|
|
7
|
+
export default class WorkerSystem<C extends ComponentMap, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> extends EntityWorkerSystem<C, EntityUpdateComponents<C>, W, D> {
|
|
8
|
+
constructor(world: BaseWorld<ComponentDefinitionMap, C>, options: WorkerSystemConfig<C, W, D>);
|
|
9
|
+
checkAddEntity(entity: BaseEntity<C>): boolean;
|
|
10
|
+
shouldRun(): boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface WorkerSystemConfig<C extends ComponentMap, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> extends SystemConfig {
|
|
13
|
+
updateFunction: WorkerSystemRunFunction<C, W, D>;
|
|
14
|
+
getWorker: () => Worker;
|
|
15
|
+
forceMainThread?: boolean;
|
|
16
|
+
getInitData?: () => D;
|
|
17
|
+
createsEntities?: boolean;
|
|
18
|
+
queries?: {
|
|
19
|
+
[key: string]: EntityWorkerSystemQuery<C>;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export type { WorkerSystemRunFunction };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { EntityUpdateComponents, QueryDelta, UpdateEntityConfigObject } from '../
|
|
1
|
+
import type { EntityUpdateComponents, QueryDelta, UpdateEntityConfigObject } from '../entity-worker-system';
|
|
2
2
|
export declare function applyQueryDelta<T extends EntityUpdateComponents>(list: Array<UpdateEntityConfigObject<T>>, delta: QueryDelta<T>): Array<UpdateEntityConfigObject<T>>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type EntitySystemWorkerMessage from './entity-system-worker-message';
|
|
2
|
+
import type { ComponentDefinitionMap, ComponentMap } from '../../component-definition';
|
|
3
|
+
import type { EntityWorkerSystemWorld, EntityUpdateComponents, EntityUpdateFunction } from '../entity-worker-system';
|
|
4
|
+
export interface EntitySystemWorkerScope {
|
|
5
|
+
onmessage: ((e: MessageEvent) => void) | null;
|
|
6
|
+
postMessage(message: EntitySystemWorkerMessage): void;
|
|
7
|
+
}
|
|
8
|
+
export default function createEntitySystemWorker<C extends ComponentMap, T extends EntityUpdateComponents<C>, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown>(scope: EntitySystemWorkerScope, updateFunction: EntityUpdateFunction<C, T, W, D>, definitions?: ComponentDefinitionMap): void;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type EntitySystemWorkerScope } from './create-entity-system-worker';
|
|
2
|
+
import type { ComponentDefinitionMap, ComponentMap } from '../../component-definition';
|
|
3
|
+
import type { EntityWorkerSystemCallbacks, EntityWorkerSystemWorld, EntityQueryComponents, EntityUpdateComponents, EntityUpdateFunction, EntityUpdateInitFunction, EntityRemovedFunction } from '../entity-worker-system';
|
|
4
|
+
export type WorkerSystemRunFunction<C extends ComponentMap, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> = ((world: W, queries: EntityQueryComponents<C>, callbacks: EntityWorkerSystemCallbacks<C>) => void) & {
|
|
5
|
+
init?: EntityUpdateInitFunction<W, D>;
|
|
6
|
+
entityRemoved?: EntityRemovedFunction<C, W>;
|
|
7
|
+
};
|
|
8
|
+
export declare function toEntityUpdateFunction<C extends ComponentMap, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown>(run: WorkerSystemRunFunction<C, W, D>): EntityUpdateFunction<C, EntityUpdateComponents<C>, W, D>;
|
|
9
|
+
export default function createSystemWorker<C extends ComponentMap, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown>(scope: EntitySystemWorkerScope, runFunction: WorkerSystemRunFunction<C, W, D>, definitions?: ComponentDefinitionMap): void;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import WebWorker from './web-worker';
|
|
2
|
+
import type EntitySystemWorkerMessage from './entity-system-worker-message';
|
|
3
|
+
import type BaseWorld from '../../world';
|
|
4
|
+
import type { ComponentDefinitionMap, ComponentMap } from '../../component-definition';
|
|
5
|
+
import type { EntityWorkerSystemWorld, EntityUpdateComponents, EntityUpdateFunction } from '../entity-worker-system';
|
|
6
|
+
export default class EntitySystemWebWorker<C extends ComponentMap, T extends EntityUpdateComponents<C>, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> extends WebWorker {
|
|
7
|
+
private updateFunction;
|
|
8
|
+
private entities;
|
|
9
|
+
private queryEntities;
|
|
10
|
+
private worldExtension;
|
|
11
|
+
private world;
|
|
12
|
+
private allocator;
|
|
13
|
+
private createsEntities;
|
|
14
|
+
private addsComponents;
|
|
15
|
+
constructor(updateFunction: EntityUpdateFunction<C, T, W, D>, world: BaseWorld<ComponentDefinitionMap, C>, createsEntities?: boolean, addsComponents?: boolean);
|
|
16
|
+
postMessage(message: EntitySystemWorkerMessage<W, D>): void;
|
|
17
|
+
onMessageTyped(message: EntitySystemWorkerMessage<W, D>): void;
|
|
18
|
+
}
|
package/dist/systems/workers/{component-worker-message.d.ts → entity-system-worker-message.d.ts}
RENAMED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { MemoryHeapMemory, GrowBufferData } from '@daneren2005/shared-memory-objects/memory-heap';
|
|
2
2
|
import type { WorldSharedMemory } from '../../world';
|
|
3
|
-
import type {
|
|
3
|
+
import type { EntityWorkerSystemWorld, QueryDelta, WorkerComponentChange, WorkerCreatedEntity } from '../entity-worker-system';
|
|
4
|
+
import type { WorkerEntityClassRegistry } from '../../entity-class';
|
|
4
5
|
interface InitMessage {
|
|
5
6
|
type: 'init';
|
|
6
7
|
}
|
|
@@ -15,6 +16,8 @@ interface LoadMessage<D = unknown> {
|
|
|
15
16
|
factoryConfigs?: {
|
|
16
17
|
[type: string]: Record<string, unknown>;
|
|
17
18
|
};
|
|
19
|
+
factoryClasses?: WorkerEntityClassRegistry;
|
|
20
|
+
addsComponents?: boolean;
|
|
18
21
|
}
|
|
19
22
|
interface GrowBufferMessage {
|
|
20
23
|
type: 'grow-buffer';
|
|
@@ -30,7 +33,7 @@ interface LoadedMessage {
|
|
|
30
33
|
interface ResetMessage {
|
|
31
34
|
type: 'reset';
|
|
32
35
|
}
|
|
33
|
-
interface RunUpdateMessage<W extends
|
|
36
|
+
interface RunUpdateMessage<W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld> {
|
|
34
37
|
type: 'run';
|
|
35
38
|
generation: number;
|
|
36
39
|
world: W;
|
|
@@ -59,7 +62,8 @@ interface EntityEventsMessage {
|
|
|
59
62
|
events: Array<EntityEvent>;
|
|
60
63
|
systemEvents: SystemEvents;
|
|
61
64
|
created: Array<WorkerCreatedEntity>;
|
|
65
|
+
componentChanges: Array<WorkerComponentChange>;
|
|
62
66
|
errors: Array<WorkerRunError>;
|
|
63
67
|
}
|
|
64
|
-
type
|
|
65
|
-
export default
|
|
68
|
+
type EntitySystemWorkerMessage<W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> = InitMessage | InitCompleteMessage | LoadMessage<D> | LoadedMessage | ResetMessage | GrowBufferMessage | GrowBufferFromWorkerMessage | RunUpdateMessage<W> | EntityEventsMessage;
|
|
69
|
+
export default EntitySystemWorkerMessage;
|
package/dist/worker.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
export { default as
|
|
2
|
-
export type {
|
|
1
|
+
export { default as createEntitySystemWorker } from './systems/workers/create-entity-system-worker';
|
|
2
|
+
export type { EntitySystemWorkerScope } from './systems/workers/create-entity-system-worker';
|
|
3
|
+
export { default as createSystemWorker } from './systems/workers/create-system-worker';
|
|
4
|
+
export type { WorkerSystemRunFunction } from './systems/workers/create-system-worker';
|
|
3
5
|
export { default as createEntityWorker } from './actions/create-entity-worker';
|
|
6
|
+
export { default as addComponentWorker } from './actions/add-component-worker';
|
|
7
|
+
export { default as removeComponentWorker } from './actions/remove-component-worker';
|
|
4
8
|
export { default as killEntityWorker } from './actions/kill-entity-worker';
|
|
5
|
-
export { DEAD_INDEX, TYPE_INDEX } from './entity-component';
|
|
6
|
-
export type { default as
|
|
7
|
-
export type { EntityEvent, SystemEvents } from './systems/workers/
|
|
8
|
-
export type {
|
|
9
|
+
export { CLASS_INDEX, DEAD_INDEX, TYPE_INDEX } from './entity-component';
|
|
10
|
+
export type { default as EntitySystemWorkerMessage } from './systems/workers/entity-system-worker-message';
|
|
11
|
+
export type { EntityEvent, SystemEvents } from './systems/workers/entity-system-worker-message';
|
|
12
|
+
export type { EntityWorkerSystemWorld, EntityWorkerSystemCallbacks, WorkerAllocator, WorkerCreateEntityConfig, WorkerCreatedEntity, WorkerCreatedComponent, WorkerComponentChange, EntityUpdateComponents, EntityQueryComponents, EntityUpdateFunction, EntityUpdateInitFunction, EntityUpdatePreRunFunction, EntityRemovedFunction, UpdateEntityConfigObject, } from './systems/entity-worker-system';
|
package/dist/worker.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { a as e, c as t, d as n, i as r, l as i, o as a, r as o, s, t as c } from "./create-system-worker-DURlIMia.js";
|
|
2
|
+
export { t as CLASS_INDEX, i as DEAD_INDEX, n as TYPE_INDEX, e as addComponentWorker, o as createEntitySystemWorker, a as createEntityWorker, c as createSystemWorker, s as killEntityWorker, r as removeComponentWorker };
|
package/dist/world.d.ts
CHANGED
|
@@ -5,15 +5,15 @@ import type { SharedAllocatedMemory } from '@daneren2005/shared-memory-objects/a
|
|
|
5
5
|
import type { SharedPoolMemory } from '@daneren2005/shared-memory-objects/shared-pool';
|
|
6
6
|
import MemoryComponent from './memory-component';
|
|
7
7
|
import ConstantStringCache from './constant-string-cache';
|
|
8
|
-
import BaseEntity from './entity';
|
|
8
|
+
import type BaseEntity from './entity';
|
|
9
9
|
import type System from './systems/system';
|
|
10
|
-
import type { WorkerCreatedEntity } from './systems/
|
|
10
|
+
import type { WorkerCreatedEntity } from './systems/entity-worker-system';
|
|
11
11
|
import type { ComponentDefinitionMap, ComponentMap, ComponentsOf, EntityConfigOf, RegisteredComponentDefinition, RegisteredComponentRegistry } from './component-definition';
|
|
12
12
|
import { type EntityComponent } from './entity-component';
|
|
13
13
|
import EntityFactory from './entity-factory';
|
|
14
|
-
export interface WorldOptions<C extends ComponentMap = ComponentMap, Cfg = any> {
|
|
14
|
+
export interface WorldOptions<C extends ComponentMap = ComponentMap, Cfg = any, E extends BaseEntity<C, Cfg> = BaseEntity<C, Cfg>> {
|
|
15
15
|
heapSize?: number;
|
|
16
|
-
factory?: EntityFactory<C, Cfg>;
|
|
16
|
+
factory?: EntityFactory<C, Cfg, E>;
|
|
17
17
|
}
|
|
18
18
|
export interface WorldConfig<Cfg = any> {
|
|
19
19
|
entities: Array<Cfg>;
|
|
@@ -27,15 +27,15 @@ export interface WorldSharedMemory {
|
|
|
27
27
|
};
|
|
28
28
|
eidCounter: SharedAllocatedMemory;
|
|
29
29
|
}
|
|
30
|
-
export default class BaseWorld<R extends ComponentDefinitionMap = ComponentDefinitionMap, C extends ComponentMap = ComponentsOf<R>, Cfg = EntityConfigOf<R>> extends EventEmitter {
|
|
30
|
+
export default class BaseWorld<R extends ComponentDefinitionMap = ComponentDefinitionMap, C extends ComponentMap = ComponentsOf<R>, Cfg = EntityConfigOf<R>, E extends BaseEntity<C, Cfg> = BaseEntity<C, Cfg>> extends EventEmitter {
|
|
31
31
|
heap: MemoryHeap;
|
|
32
32
|
constantStrings: ConstantStringCache;
|
|
33
33
|
private eidCounter;
|
|
34
34
|
registry: RegisteredComponentRegistry<C> & {
|
|
35
35
|
entity: RegisteredComponentDefinition<EntityComponent>;
|
|
36
36
|
};
|
|
37
|
-
factory: EntityFactory<C, Cfg>;
|
|
38
|
-
entities: Map<number,
|
|
37
|
+
factory: EntityFactory<C, Cfg, E>;
|
|
38
|
+
entities: Map<number, E>;
|
|
39
39
|
systems: Array<System<C>>;
|
|
40
40
|
gameTime: number;
|
|
41
41
|
playerTime: number;
|
|
@@ -45,21 +45,21 @@ export default class BaseWorld<R extends ComponentDefinitionMap = ComponentDefin
|
|
|
45
45
|
pristine: boolean;
|
|
46
46
|
private activeFreeBuffer;
|
|
47
47
|
private nextFreeBuffer;
|
|
48
|
-
constructor(registry: R, options?: WorldOptions<C, Cfg>);
|
|
48
|
+
constructor(registry: R, options?: WorldOptions<C, Cfg, E>);
|
|
49
49
|
allocateEid(): number;
|
|
50
50
|
getSharedComponentMemory(): WorldSharedMemory;
|
|
51
51
|
addGrownBuffer(data: GrowBufferData): void;
|
|
52
52
|
private get needsSpareBuffer();
|
|
53
53
|
init(): Promise<void>;
|
|
54
54
|
private finishLoadingSystems;
|
|
55
|
-
addEntity(entity:
|
|
56
|
-
loadEntity(config: Cfg, created?: boolean):
|
|
57
|
-
adoptEntity(descriptor: WorkerCreatedEntity):
|
|
55
|
+
addEntity(entity: E, created?: boolean): E;
|
|
56
|
+
loadEntity(config: Cfg, created?: boolean): E;
|
|
57
|
+
adoptEntity(descriptor: WorkerCreatedEntity): E;
|
|
58
58
|
load(config: WorldConfig<Cfg>): void;
|
|
59
59
|
clear(): Promise<void>;
|
|
60
|
-
removeEntity(entity:
|
|
61
|
-
onEntityDied(entity:
|
|
62
|
-
getEntityByEid(eid: number):
|
|
60
|
+
removeEntity(entity: E): void;
|
|
61
|
+
onEntityDied(entity: E): void;
|
|
62
|
+
getEntityByEid(eid: number): E | undefined;
|
|
63
63
|
deferComponentMemoryFree(memoryComponent: MemoryComponent, index: number, free?: () => void): void;
|
|
64
64
|
notifySystemRunCompleted(system: System<C>): void;
|
|
65
65
|
private processFreeBuffers;
|
|
@@ -77,8 +77,8 @@ export default class BaseWorld<R extends ComponentDefinitionMap = ComponentDefin
|
|
|
77
77
|
private runUpdate;
|
|
78
78
|
pause(): void;
|
|
79
79
|
resume(): void;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
private
|
|
80
|
+
addEntityToEntityWorkerSystem(entity: BaseEntity<C>, component: keyof C): void;
|
|
81
|
+
removeEntityFromEntityWorkerSystem(entity: BaseEntity<C>, component: keyof C): void;
|
|
82
|
+
private componentAffectsEntityWorkerSystem;
|
|
83
83
|
destroy(): void;
|
|
84
84
|
}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@daneren2005/shared-memory-ecs",
|
|
3
3
|
"description": "A small, reusable Entity/Component/System core backed by shared memory.",
|
|
4
4
|
"author": "Scott Jackson",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.7.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"sideEffects": false,
|
|
8
8
|
"repository": {
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"lint": "cross-env NODE_ENV=production oxlint .",
|
|
40
40
|
"lint:fix": "cross-env NODE_ENV=production oxlint --fix .",
|
|
41
41
|
"test": "vitest run",
|
|
42
|
+
"bench": "vitest bench --run --config vitest.benchmark.config.ts",
|
|
42
43
|
"release": "semantic-release",
|
|
43
44
|
"prepare": "husky"
|
|
44
45
|
},
|