@awesome-ecs/abstract 0.5.4 → 0.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.
Files changed (38) hide show
  1. package/LICENSE.md +201 -201
  2. package/README.md +99 -99
  3. package/dist/components/component.d.ts +17 -17
  4. package/dist/components/component.js +2 -2
  5. package/dist/components/identity-component.d.ts +19 -19
  6. package/dist/components/identity-component.js +7 -7
  7. package/dist/entities/entity-events.d.ts +37 -37
  8. package/dist/entities/entity-events.js +2 -2
  9. package/dist/entities/entity-proxy.d.ts +14 -14
  10. package/dist/entities/entity-proxy.js +2 -2
  11. package/dist/entities/entity-queue.d.ts +30 -30
  12. package/dist/entities/entity-queue.js +11 -11
  13. package/dist/entities/entity-repository.d.ts +24 -23
  14. package/dist/entities/entity-repository.js +2 -2
  15. package/dist/entities/entity-scheduler.d.ts +11 -11
  16. package/dist/entities/entity-scheduler.js +2 -2
  17. package/dist/entities/entity.d.ts +17 -17
  18. package/dist/entities/entity.js +2 -2
  19. package/dist/index.d.ts +16 -16
  20. package/dist/index.js +32 -32
  21. package/dist/pipelines/middleware.d.ts +26 -26
  22. package/dist/pipelines/middleware.js +2 -2
  23. package/dist/pipelines/pipeline.d.ts +27 -18
  24. package/dist/pipelines/pipeline.js +8 -2
  25. package/dist/pipelines/pipeline.js.map +1 -1
  26. package/dist/systems/system-middleware.d.ts +8 -8
  27. package/dist/systems/system-middleware.js +2 -2
  28. package/dist/systems/system-pipeline-context.d.ts +39 -39
  29. package/dist/systems/system-pipeline-context.js +2 -2
  30. package/dist/systems/system-pipeline-type.d.ts +6 -6
  31. package/dist/systems/system-pipeline-type.js +10 -10
  32. package/dist/systems/systems-module.d.ts +25 -21
  33. package/dist/systems/systems-module.js +2 -2
  34. package/dist/systems/systems-runtime.d.ts +26 -26
  35. package/dist/systems/systems-runtime.js +2 -2
  36. package/dist/utils/performance-timer.d.ts +11 -10
  37. package/dist/utils/performance-timer.js +2 -2
  38. package/package.json +2 -2
@@ -1,8 +1,8 @@
1
- import { IEntity } from "../entities/entity";
2
- import { IMiddleware } from "../pipelines/middleware";
3
- import { ISystemPipelineContext } from "./system-pipeline-context";
4
- /**
5
- * The SystemMiddleware is the basic System implementation that can be registered as a Middleware in a SystemPipeline.
6
- * It provides a SystemPipelineContext to it's exposed methods.
7
- */
8
- export declare type ISystemMiddleware<TEntity extends IEntity> = IMiddleware<ISystemPipelineContext<TEntity>>;
1
+ import { IEntity } from "../entities/entity";
2
+ import { IMiddleware } from "../pipelines/middleware";
3
+ import { ISystemPipelineContext } from "./system-pipeline-context";
4
+ /**
5
+ * The SystemMiddleware is the basic System implementation that can be registered as a Middleware in a SystemPipeline.
6
+ * It provides a SystemPipelineContext to it's exposed methods.
7
+ */
8
+ export declare type ISystemMiddleware<TEntity extends IEntity> = IMiddleware<ISystemPipelineContext<TEntity>>;
@@ -1,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  //# sourceMappingURL=system-middleware.js.map
@@ -1,39 +1,39 @@
1
- import { EntityTypeUid, IEntity, IEntityModel } from "../entities/entity";
2
- import { EntityEventUid, IEntityEvent, IEventData } from "../entities/entity-events";
3
- import { EntityProxy, IEntityProxy } from "../entities/entity-proxy";
4
- export interface ISystemContextRepository {
5
- addEntity(entityType: EntityTypeUid, model: IEntityModel, events?: IEntityEvent<IEventData>[]): void;
6
- getEntity<TEntity extends IEntity>(proxy: EntityProxy<TEntity>): TEntity;
7
- updateEntity(target?: IEntityProxy): void;
8
- removeEntity(target: IEntityProxy): void;
9
- }
10
- export interface ISystemContextScheduler {
11
- scheduleUpdateOnInterval(target?: IEntityProxy, intervalMs?: number): void;
12
- clearUpdateOnInterval(target?: IEntityProxy): void;
13
- }
14
- export interface ISystemContextProxies {
15
- registerProxy(proxy: IEntityProxy, cleanup?: boolean): void;
16
- registerProxies(proxies: IEntityProxy[], cleanup?: boolean): void;
17
- removeProxy(proxy: IEntityProxy): void;
18
- removeProxies(proxyEntityType?: EntityTypeUid): void;
19
- }
20
- export interface ISystemContextEvents {
21
- dispatchEvent<TEventData extends IEventData>(data: TEventData, ...targets: IEntityProxy[]): void;
22
- dispatchEvents<TEventData extends IEventData>(data: TEventData[], ...targets: IEntityProxy[]): void;
23
- getEvent<TEventData extends IEventData>(uid: EntityEventUid): IEntityEvent<TEventData>;
24
- listEvents<TEventData extends IEventData>(): IEntityEvent<TEventData>[];
25
- hasEvent(uid?: EntityEventUid): boolean;
26
- subscribeTo<TEventData extends IEventData>(uid: EntityEventUid, filter?: (event: IEntityEvent<TEventData>) => boolean): void;
27
- unsubscribeFrom(uid: EntityEventUid): void;
28
- clearSubscriptions(uid?: EntityEventUid): void;
29
- setContextEvents(events: IEntityEvent<IEventData>[]): void;
30
- setContextEvent(event: IEntityEvent<IEventData>): void;
31
- }
32
- export interface ISystemPipelineContext<TEntity extends IEntity> {
33
- readonly entity: TEntity;
34
- readonly deltaTimeMs: number;
35
- readonly repository: ISystemContextRepository;
36
- readonly scheduler: ISystemContextScheduler;
37
- readonly proxies: ISystemContextProxies;
38
- readonly events: ISystemContextEvents;
39
- }
1
+ import { EntityTypeUid, IEntity, IEntityModel } from "../entities/entity";
2
+ import { EntityEventUid, IEntityEvent, IEventData } from "../entities/entity-events";
3
+ import { EntityProxy, IEntityProxy } from "../entities/entity-proxy";
4
+ export interface ISystemContextRepository {
5
+ addEntity(entityType: EntityTypeUid, model: IEntityModel, events?: IEntityEvent<IEventData>[]): void;
6
+ getEntity<TEntity extends IEntity>(proxy: EntityProxy<TEntity>): TEntity;
7
+ updateEntity(target?: IEntityProxy): void;
8
+ removeEntity(target: IEntityProxy): void;
9
+ }
10
+ export interface ISystemContextScheduler {
11
+ scheduleUpdateOnInterval(target?: IEntityProxy, intervalMs?: number): void;
12
+ clearUpdateOnInterval(target?: IEntityProxy): void;
13
+ }
14
+ export interface ISystemContextProxies {
15
+ registerProxy(proxy: IEntityProxy, cleanup?: boolean): void;
16
+ registerProxies(proxies: IEntityProxy[], cleanup?: boolean): void;
17
+ removeProxy(proxy: IEntityProxy): void;
18
+ removeProxies(proxyEntityType?: EntityTypeUid): void;
19
+ }
20
+ export interface ISystemContextEvents {
21
+ dispatchEvent<TEventData extends IEventData>(data: TEventData, ...targets: IEntityProxy[]): void;
22
+ dispatchEvents<TEventData extends IEventData>(data: TEventData[], ...targets: IEntityProxy[]): void;
23
+ getEvent<TEventData extends IEventData>(uid: EntityEventUid): IEntityEvent<TEventData>;
24
+ listEvents<TEventData extends IEventData>(): IEntityEvent<TEventData>[];
25
+ hasEvent(uid?: EntityEventUid): boolean;
26
+ subscribeTo<TEventData extends IEventData>(uid: EntityEventUid, filter?: (event: IEntityEvent<TEventData>) => boolean): void;
27
+ unsubscribeFrom(uid: EntityEventUid): void;
28
+ clearSubscriptions(uid?: EntityEventUid): void;
29
+ setContextEvents(events: IEntityEvent<IEventData>[]): void;
30
+ setContextEvent(event: IEntityEvent<IEventData>): void;
31
+ }
32
+ export interface ISystemPipelineContext<TEntity extends IEntity> {
33
+ readonly entity: TEntity;
34
+ readonly deltaTimeMs: number;
35
+ readonly repository: ISystemContextRepository;
36
+ readonly scheduler: ISystemContextScheduler;
37
+ readonly proxies: ISystemContextProxies;
38
+ readonly events: ISystemContextEvents;
39
+ }
@@ -1,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  //# sourceMappingURL=system-pipeline-context.js.map
@@ -1,6 +1,6 @@
1
- export declare enum SystemPipelineType {
2
- initialize = "initialize",
3
- update = "update",
4
- render = "render",
5
- sync = "sync"
6
- }
1
+ export declare enum SystemPipelineType {
2
+ initialize = "initialize",
3
+ update = "update",
4
+ render = "render",
5
+ sync = "sync"
6
+ }
@@ -1,11 +1,11 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SystemPipelineType = void 0;
4
- var SystemPipelineType;
5
- (function (SystemPipelineType) {
6
- SystemPipelineType["initialize"] = "initialize";
7
- SystemPipelineType["update"] = "update";
8
- SystemPipelineType["render"] = "render";
9
- SystemPipelineType["sync"] = "sync";
10
- })(SystemPipelineType = exports.SystemPipelineType || (exports.SystemPipelineType = {}));
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SystemPipelineType = void 0;
4
+ var SystemPipelineType;
5
+ (function (SystemPipelineType) {
6
+ SystemPipelineType["initialize"] = "initialize";
7
+ SystemPipelineType["update"] = "update";
8
+ SystemPipelineType["render"] = "render";
9
+ SystemPipelineType["sync"] = "sync";
10
+ })(SystemPipelineType = exports.SystemPipelineType || (exports.SystemPipelineType = {}));
11
11
  //# sourceMappingURL=system-pipeline-type.js.map
@@ -1,21 +1,25 @@
1
- import { IEntity } from "../entities/entity";
2
- import { IEntityUpdate } from "../entities/entity-queue";
3
- import { ISystemMiddleware } from "./system-middleware";
4
- import { SystemPipelineType } from "./system-pipeline-type";
5
- /**
6
- * The SystemModule is the main way of registering and triggering the SystemMiddlewares registered for an Entity.
7
- * It can handle EntityUpdate objects and decides which SystemPipelines to trigger based on the information in the EntityUpdate.
8
- */
9
- export interface ISystemsModule {
10
- /**
11
- * The method allows triggering all registered SystemPipelines, to apply the changes from the provided EntityUpdate to an Entity instance.
12
- * @param update The EntityUpdate containing the desired changes to be applied on an Entity instance.
13
- */
14
- triggerSystems(update: IEntityUpdate): void | Promise<void>;
15
- /**
16
- * @param type The SystemPipelineType to append the provided SystemMiddlewares to.
17
- * @param systems The SystemMiddlewares will be registered in the provided SystemPipelineType in the same order as the provided array.
18
- * The SystemMiddlewares will be appended to existing Pipelines to allow easy extension of existing behaviors.
19
- */
20
- registerSystems(type: SystemPipelineType, systems: ISystemMiddleware<IEntity>[]): void;
21
- }
1
+ import { IEntity } from "../entities/entity";
2
+ import { IEntityUpdate } from "../entities/entity-queue";
3
+ import { PerformanceTimeEntry } from "../utils/performance-timer";
4
+ import { ISystemMiddleware } from "./system-middleware";
5
+ import { SystemPipelineType } from "./system-pipeline-type";
6
+ export interface ISystemsModuleRuntimeResult {
7
+ metrics: PerformanceTimeEntry[];
8
+ }
9
+ /**
10
+ * The SystemModule is the main way of registering and triggering the SystemMiddlewares registered for an Entity.
11
+ * It can handle EntityUpdate objects and decides which SystemPipelines to trigger based on the information in the EntityUpdate.
12
+ */
13
+ export interface ISystemsModule {
14
+ /**
15
+ * The method allows triggering all registered SystemPipelines, to apply the changes from the provided EntityUpdate to an Entity instance.
16
+ * @param update The EntityUpdate containing the desired changes to be applied on an Entity instance.
17
+ */
18
+ triggerSystems(update: IEntityUpdate): ISystemsModuleRuntimeResult | Promise<ISystemsModuleRuntimeResult>;
19
+ /**
20
+ * @param type The SystemPipelineType to append the provided SystemMiddlewares to.
21
+ * @param systems The SystemMiddlewares will be registered in the provided SystemPipelineType in the same order as the provided array.
22
+ * The SystemMiddlewares will be appended to existing Pipelines to allow easy extension of existing behaviors.
23
+ */
24
+ registerSystems(type: SystemPipelineType, systems: ISystemMiddleware<IEntity>[]): void;
25
+ }
@@ -1,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  //# sourceMappingURL=systems-module.js.map
@@ -1,26 +1,26 @@
1
- import { EntityTypeUid } from "../entities/entity";
2
- import { PerformanceTimeEntry } from "../utils/performance-timer";
3
- import { ISystemsModule } from "./systems-module";
4
- export interface ISystemsRuntimeTickResult {
5
- readonly remainingUpdatesCount: number;
6
- readonly metrics?: PerformanceTimeEntry[];
7
- }
8
- /**
9
- * The System Runtime allows running a loop of Ticks.
10
- *
11
- * Each RunTick can process one or more Entity Updates, from the EntityQueue.
12
- * We can have multiple implementations of a SystemRuntime, based on the use-case.
13
- * A different implementation can be chosen at runtime, based for example on performance.
14
- */
15
- export interface ISystemsRuntime {
16
- /**
17
- * Allows registering the SystemsModule that will be triggered for any EntityUpdate for the given EntityType.
18
- * @param entityType The EntityType this module will be registered for.
19
- * @param module The Module implementation that will be triggered when executing updates for the given EntityType.
20
- */
21
- registerModule(entityType: EntityTypeUid, module: ISystemsModule): void;
22
- /**
23
- * The method allows for an Unit of Work implementation, and returns the remaining quantity of items scheduled to be processed next.
24
- */
25
- runTick(): ISystemsRuntimeTickResult;
26
- }
1
+ import { EntityTypeUid } from "../entities/entity";
2
+ import { PerformanceTimeEntry } from "../utils/performance-timer";
3
+ import { ISystemsModule } from "./systems-module";
4
+ export interface ISystemsRuntimeTickResult {
5
+ readonly remainingUpdatesCount: number;
6
+ readonly metrics: PerformanceTimeEntry[];
7
+ }
8
+ /**
9
+ * The System Runtime allows running a loop of Ticks.
10
+ *
11
+ * Each RunTick can process one or more Entity Updates, from the EntityQueue.
12
+ * We can have multiple implementations of a SystemRuntime, based on the use-case.
13
+ * A different implementation can be chosen at runtime, based for example on performance.
14
+ */
15
+ export interface ISystemsRuntime {
16
+ /**
17
+ * Allows registering the SystemsModule that will be triggered for any EntityUpdate for the given EntityType.
18
+ * @param entityType The EntityType this module will be registered for.
19
+ * @param module The Module implementation that will be triggered when executing updates for the given EntityType.
20
+ */
21
+ registerModule(entityType: EntityTypeUid, module: ISystemsModule): void;
22
+ /**
23
+ * The method allows for an Unit of Work implementation, and returns the remaining quantity of items scheduled to be processed next.
24
+ */
25
+ runTick(): ISystemsRuntimeTickResult | Promise<ISystemsRuntimeTickResult>;
26
+ }
@@ -1,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  //# sourceMappingURL=systems-runtime.js.map
@@ -1,10 +1,11 @@
1
- export declare type PerformanceTimerUid = number;
2
- export interface PerformanceTimeEntry {
3
- startedAt: number;
4
- endedAt?: number;
5
- msPassed?: number;
6
- }
7
- export interface IPerformanceTimer {
8
- startTimer(name?: string): PerformanceTimerUid;
9
- endTimer(timerUid: PerformanceTimerUid): PerformanceTimeEntry;
10
- }
1
+ export declare type PerformanceTimerUid = number;
2
+ export interface PerformanceTimeEntry {
3
+ name: string;
4
+ startedAt: number;
5
+ endedAt?: number;
6
+ msPassed?: number;
7
+ }
8
+ export interface IPerformanceTimer {
9
+ startTimer(name: string): PerformanceTimerUid;
10
+ endTimer(timerUid: PerformanceTimerUid): PerformanceTimeEntry;
11
+ }
@@ -1,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  //# sourceMappingURL=performance-timer.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@awesome-ecs/abstract",
3
- "version": "0.5.4",
3
+ "version": "0.7.0",
4
4
  "description": "A comprehensive Entity-Component-System (ECS) Architecture implementation. Abstract components.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -32,5 +32,5 @@
32
32
  "url": "https://github.com/andreicojocaru/awesome-ecs/issues"
33
33
  },
34
34
  "homepage": "https://github.com/andreicojocaru/awesome-ecs#readme",
35
- "gitHead": "42e25f322e65c919497d189e34db4d897f985571"
35
+ "gitHead": "437c4702120c2fa0857a034e21096f0e683845bc"
36
36
  }