@daneren2005/shared-memory-ecs 1.7.2 → 1.8.1
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 +25 -3
- package/dist/component-definition.d.ts +1 -1
- package/dist/{create-system-worker-CDQmmww7.js → create-system-worker-C4aS3-3R.js} +14 -3
- package/dist/{create-system-worker-CDQmmww7.js.map → create-system-worker-C4aS3-3R.js.map} +1 -1
- package/dist/entity-factory.d.ts +3 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +159 -69
- package/dist/index.js.map +1 -1
- package/dist/systems/entity-system.d.ts +4 -0
- package/dist/systems/entity-worker-system.d.ts +7 -1
- package/dist/systems/system.d.ts +9 -1
- package/dist/systems/worker-system.d.ts +1 -2
- package/dist/systems/workers/create-system-worker.d.ts +2 -1
- package/dist/systems/workers/entity-system-worker-message.d.ts +1 -1
- package/dist/worker.d.ts +1 -1
- package/dist/worker.js +1 -1
- package/dist/world.d.ts +1 -0
- package/package.json +10 -9
|
@@ -2,6 +2,7 @@ import type BaseWorld from '../world';
|
|
|
2
2
|
import type BaseEntity from '../entity';
|
|
3
3
|
import type { ComponentDefinitionMap, ComponentMap } from '../component-definition';
|
|
4
4
|
import IterableSystem, { type IterableSystemConfig } from './iterable-system';
|
|
5
|
+
import { type EntityBatch } from './system';
|
|
5
6
|
export default abstract class EntitySystem<C extends ComponentMap, T extends BaseEntity<C> = BaseEntity<C>> extends IterableSystem<C, T> {
|
|
6
7
|
entities: Map<number, T>;
|
|
7
8
|
options: EntitySystemConfig<C>;
|
|
@@ -12,6 +13,9 @@ export default abstract class EntitySystem<C extends ComponentMap, T extends Bas
|
|
|
12
13
|
protected getIterableEntityId(entity: T): number;
|
|
13
14
|
isEntityInSystem(entity: BaseEntity<C>): boolean;
|
|
14
15
|
abstract updateEntity(entity: T, elapsedTime: number): void;
|
|
16
|
+
private onEntityAdded;
|
|
17
|
+
addEntities(batch: EntityBatch<C>): void;
|
|
18
|
+
private hasComponents;
|
|
15
19
|
checkAddEntity(entity: BaseEntity<C>): boolean;
|
|
16
20
|
removeEntity(entity: BaseEntity<C>): void;
|
|
17
21
|
shouldRun(): boolean;
|
|
@@ -3,7 +3,7 @@ import type BaseWorld from '../world';
|
|
|
3
3
|
import type BaseEntity from '../entity';
|
|
4
4
|
import type { BaseComponent, ComponentDefinitionMap, ComponentMap } from '../component-definition';
|
|
5
5
|
import type { ComponentTypedArray } from '../memory-component';
|
|
6
|
-
import System, { type SystemConfig } from './system';
|
|
6
|
+
import System, { type EntityBatch, type SystemConfig } from './system';
|
|
7
7
|
import EntitySystemWebWorker from './workers/entity-system-web-worker';
|
|
8
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>>;
|
|
@@ -35,11 +35,15 @@ export default abstract class EntityWorkerSystem<C extends ComponentMap, T exten
|
|
|
35
35
|
private buildComponents;
|
|
36
36
|
isEntityInSystem(entity: BaseEntity<C>): boolean;
|
|
37
37
|
protected matchesQuery(entity: BaseEntity<C>, query: EntityWorkerSystemQuery<C>): boolean;
|
|
38
|
+
private matchesComponents;
|
|
38
39
|
private getQueryDelta;
|
|
39
40
|
private markAdded;
|
|
40
41
|
private markRemoved;
|
|
41
42
|
protected updateEntityList(queryName: string, list: Map<number, BaseEntity<C>>, entity: BaseEntity<C>, shouldInclude: boolean): void;
|
|
43
|
+
protected get tracksMainQuery(): boolean;
|
|
42
44
|
checkAddEntity(entity: BaseEntity<C>): boolean;
|
|
45
|
+
addEntities(batch: EntityBatch<C>): void;
|
|
46
|
+
private addBatchToQuery;
|
|
43
47
|
removeEntity(entity: BaseEntity<C>): void;
|
|
44
48
|
recheckMembership(): void;
|
|
45
49
|
shouldRun(): boolean;
|
|
@@ -56,12 +60,14 @@ export type EntityQueryComponents<C extends ComponentMap = ComponentMap> = {
|
|
|
56
60
|
};
|
|
57
61
|
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
62
|
export type EntityUpdateFunction<C extends ComponentMap, T extends EntityUpdateComponents<C>, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> = EntityUpdateFunctionImpl<C, T, W> & {
|
|
63
|
+
queryChanged?: EntityQueryChangedFunction<C, W>;
|
|
59
64
|
preRun?: EntityUpdatePreRunFunction<C, T, W>;
|
|
60
65
|
entityRemoved?: EntityRemovedFunction<C, W>;
|
|
61
66
|
init?: EntityUpdateInitFunction<W, D>;
|
|
62
67
|
};
|
|
63
68
|
export type EntityUpdateInitFunction<W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> = (data: D | undefined) => Partial<W> | void;
|
|
64
69
|
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;
|
|
70
|
+
export type EntityQueryChangedFunction<C extends ComponentMap = ComponentMap, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld> = (world: W, queryName: string, delta: QueryDelta<EntityUpdateComponents<C>>, callbacks: EntityWorkerSystemCallbacks<C>) => void;
|
|
65
71
|
export type EntityRemovedFunction<C extends ComponentMap = ComponentMap, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld> = (world: W, entityId: number, callbacks: EntityWorkerSystemCallbacks<C>) => void;
|
|
66
72
|
export type UpdateEntityConfig<T extends EntityUpdateComponents = EntityUpdateComponents> = number | UpdateEntityConfigObject<T>;
|
|
67
73
|
export type UpdateEntityConfigObject<T extends EntityUpdateComponents> = {
|
package/dist/systems/system.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from 'eventemitter3';
|
|
2
2
|
import type BaseWorld from '../world';
|
|
3
|
+
import type BaseEntity from '../entity';
|
|
3
4
|
import type { ComponentDefinitionMap, ComponentMap } from '../component-definition';
|
|
4
5
|
export default abstract class System<C extends ComponentMap = ComponentMap> extends EventEmitter {
|
|
5
6
|
world: BaseWorld<ComponentDefinitionMap, C>;
|
|
@@ -11,6 +12,7 @@ export default abstract class System<C extends ComponentMap = ComponentMap> exte
|
|
|
11
12
|
init(): void | Promise<void>;
|
|
12
13
|
clear(): void;
|
|
13
14
|
finishLoading(): void | Promise<void>;
|
|
15
|
+
addEntities(batch: EntityBatch<C>): void;
|
|
14
16
|
update(elapsedTime: number): boolean;
|
|
15
17
|
abstract run(elapsedTime: number): void;
|
|
16
18
|
protected onError(error: Error, context?: {
|
|
@@ -23,12 +25,18 @@ export default abstract class System<C extends ComponentMap = ComponentMap> exte
|
|
|
23
25
|
shouldRun(): boolean;
|
|
24
26
|
destroy(): void;
|
|
25
27
|
}
|
|
28
|
+
export interface EntityBatch<C extends ComponentMap = ComponentMap> {
|
|
29
|
+
entities: Array<BaseEntity<C>>;
|
|
30
|
+
groupIndexes: Array<number>;
|
|
31
|
+
groups: Array<BaseEntity<C>>;
|
|
32
|
+
}
|
|
33
|
+
export declare function forEachInMatchingGroups<C extends ComponentMap>(batch: EntityBatch<C>, matchesGroup: (representative: BaseEntity<C>) => boolean, callback: (entity: BaseEntity<C>) => void): void;
|
|
26
34
|
export interface SystemConfig {
|
|
27
35
|
name: string;
|
|
28
36
|
deltaBetweenRuns?: number;
|
|
29
37
|
firstRun?: boolean;
|
|
30
38
|
}
|
|
31
|
-
export type SystemErrorPhase = 'preRun' | 'update' | 'entityRemoved' | 'run' | 'died';
|
|
39
|
+
export type SystemErrorPhase = 'queryChanged' | 'preRun' | 'update' | 'entityRemoved' | 'run' | 'died';
|
|
32
40
|
export interface SystemError {
|
|
33
41
|
system: string;
|
|
34
42
|
error: Error;
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import type BaseWorld from '../world';
|
|
2
|
-
import type BaseEntity from '../entity';
|
|
3
2
|
import type { ComponentDefinitionMap, ComponentMap } from '../component-definition';
|
|
4
3
|
import type { SystemConfig } from './system';
|
|
5
4
|
import EntityWorkerSystem, { type EntityWorkerSystemQuery, type EntityWorkerSystemWorld, type EntityUpdateComponents } from './entity-worker-system';
|
|
6
5
|
import { type WorkerSystemRunFunction } from './workers/create-system-worker';
|
|
7
6
|
export default class WorkerSystem<C extends ComponentMap, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> extends EntityWorkerSystem<C, EntityUpdateComponents<C>, W, D> {
|
|
8
7
|
constructor(world: BaseWorld<ComponentDefinitionMap, C>, options: WorkerSystemConfig<C, W, D>);
|
|
9
|
-
|
|
8
|
+
protected get tracksMainQuery(): boolean;
|
|
10
9
|
shouldRun(): boolean;
|
|
11
10
|
}
|
|
12
11
|
export interface WorkerSystemConfig<C extends ComponentMap, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> extends SystemConfig {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { type EntitySystemWorkerScope } from './create-entity-system-worker';
|
|
2
2
|
import type { ComponentDefinitionMap, ComponentMap } from '../../component-definition';
|
|
3
|
-
import type { EntityWorkerSystemCallbacks, EntityWorkerSystemWorld, EntityQueryComponents, EntityUpdateComponents, EntityUpdateFunction, EntityUpdateInitFunction, EntityRemovedFunction } from '../entity-worker-system';
|
|
3
|
+
import type { EntityWorkerSystemCallbacks, EntityWorkerSystemWorld, EntityQueryComponents, EntityUpdateComponents, EntityUpdateFunction, EntityUpdateInitFunction, EntityRemovedFunction, EntityQueryChangedFunction } from '../entity-worker-system';
|
|
4
4
|
export type WorkerSystemRunFunction<C extends ComponentMap, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown> = ((world: W, queries: EntityQueryComponents<C>, callbacks: EntityWorkerSystemCallbacks<C>) => void) & {
|
|
5
5
|
init?: EntityUpdateInitFunction<W, D>;
|
|
6
|
+
queryChanged?: EntityQueryChangedFunction<C, W>;
|
|
6
7
|
entityRemoved?: EntityRemovedFunction<C, W>;
|
|
7
8
|
};
|
|
8
9
|
export declare function toEntityUpdateFunction<C extends ComponentMap, W extends EntityWorkerSystemWorld = EntityWorkerSystemWorld, D = unknown>(run: WorkerSystemRunFunction<C, W, D>): EntityUpdateFunction<C, EntityUpdateComponents<C>, W, D>;
|
|
@@ -49,7 +49,7 @@ export interface EntityEvent {
|
|
|
49
49
|
}
|
|
50
50
|
export interface WorkerRunError {
|
|
51
51
|
error: Error;
|
|
52
|
-
phase: 'preRun' | 'update' | 'entityRemoved';
|
|
52
|
+
phase: 'queryChanged' | 'preRun' | 'update' | 'entityRemoved';
|
|
53
53
|
entityId?: number;
|
|
54
54
|
}
|
|
55
55
|
export type SystemEvents = {
|
package/dist/worker.d.ts
CHANGED
|
@@ -9,4 +9,4 @@ export { default as killEntityWorker } from './actions/kill-entity-worker';
|
|
|
9
9
|
export { CLASS_INDEX, DEAD_INDEX, TYPE_INDEX } from './entity-component';
|
|
10
10
|
export type { default as EntitySystemWorkerMessage } from './systems/workers/entity-system-worker-message';
|
|
11
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';
|
|
12
|
+
export type { EntityWorkerSystemWorld, EntityWorkerSystemCallbacks, WorkerAllocator, WorkerCreateEntityConfig, WorkerCreatedEntity, WorkerCreatedComponent, WorkerComponentChange, EntityUpdateComponents, EntityQueryComponents, EntityUpdateFunction, EntityUpdateInitFunction, EntityUpdatePreRunFunction, EntityQueryChangedFunction, QueryDelta, EntityRemovedFunction, UpdateEntityConfigObject, } from './systems/entity-worker-system';
|
package/dist/worker.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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-
|
|
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-C4aS3-3R.js";
|
|
2
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
|
@@ -43,6 +43,7 @@ export default class BaseWorld<R extends ComponentDefinitionMap = ComponentDefin
|
|
|
43
43
|
paused: boolean;
|
|
44
44
|
destroyed: boolean;
|
|
45
45
|
pristine: boolean;
|
|
46
|
+
isBulkLoading: boolean;
|
|
46
47
|
private activeFreeBuffer;
|
|
47
48
|
private nextFreeBuffer;
|
|
48
49
|
constructor(registry: R, options?: WorldOptions<C, Cfg, E>);
|
package/package.json
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
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.8.1",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"sideEffects": false,
|
|
8
|
+
"license": "MIT",
|
|
8
9
|
"repository": {
|
|
9
10
|
"type": "git",
|
|
10
11
|
"url": "git+https://github.com/daneren2005/shared-memory-ecs.git"
|
|
@@ -61,17 +62,17 @@
|
|
|
61
62
|
"devDependencies": {
|
|
62
63
|
"@semantic-release/git": "^10.0.1",
|
|
63
64
|
"@stylistic/eslint-plugin": "^5.10.0",
|
|
64
|
-
"@types/node": "^26.
|
|
65
|
-
"@vitest/web-worker": "^
|
|
65
|
+
"@types/node": "^26.6.1",
|
|
66
|
+
"@vitest/web-worker": "^5.0.1",
|
|
66
67
|
"cross-env": "^10.1.0",
|
|
67
68
|
"husky": "^9.1.7",
|
|
68
|
-
"lint-staged": "^17.
|
|
69
|
-
"oxlint": "^1.
|
|
70
|
-
"oxlint-tsgolint": "^0.
|
|
71
|
-
"semantic-release": "^25.0.
|
|
69
|
+
"lint-staged": "^17.5.1",
|
|
70
|
+
"oxlint": "^1.83.0",
|
|
71
|
+
"oxlint-tsgolint": "^7.0.2001",
|
|
72
|
+
"semantic-release": "^25.0.9",
|
|
72
73
|
"typescript": "^7.0.2",
|
|
73
|
-
"vite": "^8.
|
|
74
|
-
"vitest": "^
|
|
74
|
+
"vite": "^8.3.0",
|
|
75
|
+
"vitest": "^5.0.1"
|
|
75
76
|
},
|
|
76
77
|
"peerDependencies": {
|
|
77
78
|
"@daneren2005/shared-memory-objects": "^1.5.2"
|