@daneren2005/shared-memory-ecs 1.8.0 → 1.8.2
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 +12 -0
- package/dist/entity-factory.d.ts +3 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +149 -69
- package/dist/index.js.map +1 -1
- package/dist/performance-timing.d.ts +3 -1
- package/dist/systems/entity-system.d.ts +4 -0
- package/dist/systems/entity-worker-system.d.ts +5 -1
- package/dist/systems/system.d.ts +8 -0
- package/dist/systems/worker-system.d.ts +1 -2
- package/dist/world.d.ts +1 -0
- package/package.json +6 -6
|
@@ -20,11 +20,13 @@ export interface PerformanceStats {
|
|
|
20
20
|
}
|
|
21
21
|
export interface PerformanceTimingOptions {
|
|
22
22
|
ticksBetweenUpdates?: number;
|
|
23
|
+
autoUpdate?: boolean;
|
|
23
24
|
}
|
|
24
25
|
export default class PerformanceTiming<C extends ComponentMap = ComponentMap> extends EventEmitter {
|
|
25
26
|
world: BaseWorld<ComponentDefinitionMap, C>;
|
|
26
27
|
ticksBetweenUpdates: number;
|
|
27
28
|
stats: PerformanceStats;
|
|
29
|
+
private readonly autoUpdate;
|
|
28
30
|
private ticks;
|
|
29
31
|
private updateStart;
|
|
30
32
|
private updateTimes;
|
|
@@ -40,5 +42,5 @@ export default class PerformanceTiming<C extends ComponentMap = ComponentMap> ex
|
|
|
40
42
|
private onSystemRemoved;
|
|
41
43
|
private trackSystem;
|
|
42
44
|
private untrackSystem;
|
|
43
|
-
|
|
45
|
+
flush(): PerformanceStats;
|
|
44
46
|
}
|
|
@@ -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;
|
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,6 +25,12 @@ 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;
|
|
@@ -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 {
|
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,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.8.
|
|
5
|
+
"version": "1.8.2",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"sideEffects": false,
|
|
8
8
|
"license": "MIT",
|
|
@@ -60,21 +60,21 @@
|
|
|
60
60
|
"eventemitter3": "^5.0.4"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
|
-
"@semantic-release/git": "^
|
|
63
|
+
"@semantic-release/git": "^11.0.1",
|
|
64
64
|
"@stylistic/eslint-plugin": "^5.10.0",
|
|
65
|
-
"@types/node": "^26.6.
|
|
65
|
+
"@types/node": "^26.6.2",
|
|
66
66
|
"@vitest/web-worker": "^5.0.1",
|
|
67
67
|
"cross-env": "^10.1.0",
|
|
68
68
|
"husky": "^9.1.7",
|
|
69
69
|
"lint-staged": "^17.5.1",
|
|
70
|
-
"oxlint": "^1.
|
|
71
|
-
"oxlint-tsgolint": "^7.0.
|
|
70
|
+
"oxlint": "^1.85.0",
|
|
71
|
+
"oxlint-tsgolint": "^7.0.2002",
|
|
72
72
|
"semantic-release": "^25.0.9",
|
|
73
73
|
"typescript": "^7.0.2",
|
|
74
74
|
"vite": "^8.3.0",
|
|
75
75
|
"vitest": "^5.0.1"
|
|
76
76
|
},
|
|
77
77
|
"peerDependencies": {
|
|
78
|
-
"@daneren2005/shared-memory-objects": "^1.
|
|
78
|
+
"@daneren2005/shared-memory-objects": "^1.6.0"
|
|
79
79
|
}
|
|
80
80
|
}
|