@daneren2005/shared-memory-ecs 1.8.0 → 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.
@@ -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;
@@ -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
- checkAddEntity(entity: BaseEntity<C>): boolean;
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.0",
5
+ "version": "1.8.1",
6
6
  "type": "module",
7
7
  "sideEffects": false,
8
8
  "license": "MIT",