@awesome-ecs/abstract 0.0.8 → 0.2.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/dist/components/component-factory.d.ts +4 -0
- package/dist/components/component-factory.js +2 -0
- package/dist/components/component-factory.js.map +1 -0
- package/dist/components/component.d.ts +2 -2
- package/dist/components/identity-component.d.ts +3 -2
- package/dist/entities/entity-model.d.ts +0 -20
- package/dist/entities/entity-model.js +1 -6
- package/dist/entities/entity-model.js.map +1 -1
- package/dist/entities/entity-proxy.d.ts +10 -2
- package/dist/entities/entity-queue.d.ts +31 -0
- package/dist/entities/entity-queue.js +9 -0
- package/dist/entities/entity-queue.js.map +1 -0
- package/dist/entities/entity-repository.d.ts +5 -2
- package/dist/entities/entity-scheduler.d.ts +5 -0
- package/dist/entities/entity-trigger.d.ts +17 -0
- package/dist/entities/entity-trigger.js +2 -0
- package/dist/entities/entity-trigger.js.map +1 -0
- package/dist/entities/entity.d.ts +13 -9
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/systems/system-pipeline-context.d.ts +26 -5
- package/dist/systems/system-pipeline.d.ts +3 -4
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-factory.js","sourceRoot":"","sources":["../../src/components/component-factory.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IComponent } from "./component";
|
|
2
|
-
import { IEntityModel } from "../entities/entity
|
|
3
|
-
import {
|
|
2
|
+
import { EntityTypeUid, IEntityModel } from "../entities/entity";
|
|
3
|
+
import { IEntityProxy } from "..";
|
|
4
4
|
export declare enum BasicComponentType {
|
|
5
5
|
identity = "identity"
|
|
6
6
|
}
|
|
@@ -8,4 +8,5 @@ export interface IdentityComponent<TModel extends IEntityModel> extends ICompone
|
|
|
8
8
|
entityType: EntityTypeUid;
|
|
9
9
|
model: TModel;
|
|
10
10
|
previousModel?: TModel;
|
|
11
|
+
proxies?: IEntityProxy[];
|
|
11
12
|
}
|
|
@@ -1,24 +1,4 @@
|
|
|
1
|
-
import { EntityTypeUid } from "./entity";
|
|
2
1
|
export declare type EntityUid = string | number;
|
|
3
|
-
export declare enum EntityChangeType {
|
|
4
|
-
added = "added",
|
|
5
|
-
removed = "removed",
|
|
6
|
-
updated = "updated"
|
|
7
|
-
}
|
|
8
2
|
export interface IEntityModel {
|
|
9
3
|
uid: EntityUid;
|
|
10
4
|
}
|
|
11
|
-
export interface IEntityModelChange {
|
|
12
|
-
changeType: EntityChangeType;
|
|
13
|
-
entityType: EntityTypeUid;
|
|
14
|
-
currentModel?: IEntityModel;
|
|
15
|
-
previousModel?: IEntityModel;
|
|
16
|
-
shouldForceUpdate?: boolean;
|
|
17
|
-
}
|
|
18
|
-
export interface IEntityUpdateQueue {
|
|
19
|
-
readonly size: number;
|
|
20
|
-
enqueue(change: IEntityModelChange): void;
|
|
21
|
-
dequeue(): IEntityModelChange;
|
|
22
|
-
peek(): IEntityModelChange;
|
|
23
|
-
clear(): void;
|
|
24
|
-
}
|
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
(function (EntityChangeType) {
|
|
3
|
-
EntityChangeType["added"] = "added";
|
|
4
|
-
EntityChangeType["removed"] = "removed";
|
|
5
|
-
EntityChangeType["updated"] = "updated";
|
|
6
|
-
})(EntityChangeType || (EntityChangeType = {}));
|
|
1
|
+
export {};
|
|
7
2
|
//# sourceMappingURL=entity-model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-model.js","sourceRoot":"","sources":["../../src/entities/entity-model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"entity-model.js","sourceRoot":"","sources":["../../src/entities/entity-model.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
import { EntityTypeUid } from "./entity";
|
|
2
|
-
|
|
1
|
+
import { EntityTypeUid, EntityUid, IEntity } from "./entity";
|
|
2
|
+
/**
|
|
3
|
+
* Represents a pointer to another Entity.
|
|
4
|
+
*/
|
|
3
5
|
export interface IEntityProxy {
|
|
4
6
|
readonly entityType: EntityTypeUid;
|
|
5
7
|
readonly entityUid: EntityUid;
|
|
6
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* A utility extension of IEntityProxy.
|
|
11
|
+
* Useful for providing Type information when using the IEntityProxy.
|
|
12
|
+
*/
|
|
13
|
+
export interface EntityProxy<TEntity extends IEntity> extends IEntityProxy {
|
|
14
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { IEntityModel } from "./entity";
|
|
2
|
+
import { IEntityProxy } from "./entity-proxy";
|
|
3
|
+
import { IEntityTrigger, ITriggerData } from "./entity-trigger";
|
|
4
|
+
/**
|
|
5
|
+
* The Entity update state for this change.
|
|
6
|
+
*/
|
|
7
|
+
export declare enum EntityUpdateType {
|
|
8
|
+
update = "update",
|
|
9
|
+
remove = "remove"
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Represents an Entity update that should be applied over an (existing) Entity.
|
|
13
|
+
*/
|
|
14
|
+
export interface IEntityUpdate {
|
|
15
|
+
type: EntityUpdateType;
|
|
16
|
+
entity: IEntityProxy;
|
|
17
|
+
model?: IEntityModel;
|
|
18
|
+
trigger?: IEntityTrigger<ITriggerData>;
|
|
19
|
+
forceUpdate?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The Entity Updates will be queued up, and can be picked up in order.
|
|
23
|
+
* The interface can be implemented using a simple queue mechanism, or perhaps, a Priority Queue.
|
|
24
|
+
*/
|
|
25
|
+
export interface IEntityUpdateQueue {
|
|
26
|
+
readonly size: number;
|
|
27
|
+
enqueue(change: IEntityUpdate): void;
|
|
28
|
+
dequeue(): IEntityUpdate;
|
|
29
|
+
peek(): IEntityUpdate;
|
|
30
|
+
clear(): void;
|
|
31
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Entity update state for this change.
|
|
3
|
+
*/
|
|
4
|
+
export var EntityUpdateType;
|
|
5
|
+
(function (EntityUpdateType) {
|
|
6
|
+
EntityUpdateType["update"] = "update";
|
|
7
|
+
EntityUpdateType["remove"] = "remove";
|
|
8
|
+
})(EntityUpdateType || (EntityUpdateType = {}));
|
|
9
|
+
//# sourceMappingURL=entity-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-queue.js","sourceRoot":"","sources":["../../src/entities/entity-queue.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;AACnB,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import { EntityTypeUid, IEntity } from "./entity";
|
|
2
|
-
|
|
1
|
+
import { EntityUid, EntityTypeUid, IEntity } from "./entity";
|
|
2
|
+
/**
|
|
3
|
+
* The Entity Repository is the main storage for keeping track of existing Entities.
|
|
4
|
+
* It provides basic CRUD functionality.
|
|
5
|
+
*/
|
|
3
6
|
export interface IEntityRepository {
|
|
4
7
|
has(type: EntityTypeUid, uid: EntityUid): boolean;
|
|
5
8
|
get<TEntity extends IEntity>(type: EntityTypeUid, uid: EntityUid): TEntity;
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { IEntityProxy } from "./entity-proxy";
|
|
2
|
+
/**
|
|
3
|
+
* The Entity Scheduler is the main way of scheduling Entity Updates on a Time Interval.
|
|
4
|
+
* It usually reads the Entities from the Entity Repository,
|
|
5
|
+
* and uses the Entity Update Queue to enqueue Entity updates.
|
|
6
|
+
*/
|
|
2
7
|
export interface IEntityScheduler {
|
|
3
8
|
schedule(entityProxy: IEntityProxy, intervalMs?: number): void;
|
|
4
9
|
remove(entityProxy: IEntityProxy): void;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { IEntityProxy } from "./entity-proxy";
|
|
2
|
+
import { EntityUpdateType } from "./entity-queue";
|
|
3
|
+
export declare type EntityTriggerUid = string | number;
|
|
4
|
+
export interface ITriggerData {
|
|
5
|
+
uid: EntityTriggerUid;
|
|
6
|
+
action?: EntityUpdateType;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Entity Triggers represent a basic inter-Entity messaging mechanism.
|
|
10
|
+
* Can be used to "trigger" actions in an Entity, from the systems of another Entity.
|
|
11
|
+
*
|
|
12
|
+
* The Triggers will be enqueued as part of an Entity Update envelope.
|
|
13
|
+
*/
|
|
14
|
+
export interface IEntityTrigger<TTriggerData extends ITriggerData> {
|
|
15
|
+
origin: IEntityProxy;
|
|
16
|
+
data: TTriggerData;
|
|
17
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-trigger.js","sourceRoot":"","sources":["../../src/entities/entity-trigger.ts"],"names":[],"mappings":""}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { IdentityComponent } from "../components/identity-component";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { ComponentUid, IComponent } from "../components/component";
|
|
3
|
+
import { EntityTriggerUid, IEntityTrigger, ITriggerData } from "./entity-trigger";
|
|
4
4
|
import { IEntityProxy } from "./entity-proxy";
|
|
5
5
|
export declare type EntityTypeUid = string | number;
|
|
6
|
+
export declare type EntityUid = string | number;
|
|
7
|
+
export interface IEntityModel {
|
|
8
|
+
uid: EntityUid;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* An Entity is a container of Components and Entity Proxies. Only Systems can manipulate the internal state of the Entity.
|
|
12
|
+
*/
|
|
6
13
|
export interface IEntity {
|
|
7
|
-
readonly
|
|
8
|
-
readonly components: Map<ComponentTypeUid, IComponent>;
|
|
14
|
+
readonly components: Map<ComponentUid, IComponent>;
|
|
9
15
|
readonly proxies: Map<EntityTypeUid, Map<EntityUid, IEntityProxy>>;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
removeProxy(proxyToRemove: IEntityProxy): void;
|
|
14
|
-
removeProxies(proxyEntityType?: EntityTypeUid): void;
|
|
16
|
+
readonly triggers: Map<EntityTriggerUid, IEntityTrigger<ITriggerData>[]>;
|
|
17
|
+
readonly identity: IdentityComponent<IEntityModel>;
|
|
18
|
+
readonly myProxy: IEntityProxy;
|
|
15
19
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export * from './components/component';
|
|
2
2
|
export * from './components/identity-component';
|
|
3
3
|
export * from './entities/entity';
|
|
4
|
-
export * from './entities/entity-model';
|
|
5
4
|
export * from './entities/entity-proxy';
|
|
5
|
+
export * from './entities/entity-queue';
|
|
6
6
|
export * from './entities/entity-repository';
|
|
7
7
|
export * from './entities/entity-scheduler';
|
|
8
|
+
export * from './entities/entity-trigger';
|
|
8
9
|
export * from './pipelines/middleware';
|
|
9
10
|
export * from './pipelines/pipeline';
|
|
10
11
|
export * from './systems/system-middleware';
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export * from './components/component';
|
|
2
2
|
export * from './components/identity-component';
|
|
3
3
|
export * from './entities/entity';
|
|
4
|
-
export * from './entities/entity-model';
|
|
5
4
|
export * from './entities/entity-proxy';
|
|
5
|
+
export * from './entities/entity-queue';
|
|
6
6
|
export * from './entities/entity-repository';
|
|
7
7
|
export * from './entities/entity-scheduler';
|
|
8
|
+
export * from './entities/entity-trigger';
|
|
8
9
|
export * from './pipelines/middleware';
|
|
9
10
|
export * from './pipelines/pipeline';
|
|
10
11
|
export * from './systems/system-middleware';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,iCAAiC,CAAA;AAE/C,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,iCAAiC,CAAA;AAE/C,cAAc,mBAAmB,CAAA;AACjC,cAAc,yBAAyB,CAAA;AACvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AAEzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AAEpC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,mCAAmC,CAAA;AACjD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AAExC,cAAc,2BAA2B,CAAA"}
|
|
@@ -1,7 +1,28 @@
|
|
|
1
|
-
import { IEntity } from "../entities/entity";
|
|
2
|
-
import {
|
|
1
|
+
import { EntityTypeUid, IEntity, IEntityModel } from "../entities/entity";
|
|
2
|
+
import { EntityProxy, IEntityProxy } from "../entities/entity-proxy";
|
|
3
|
+
import { EntityTriggerUid, IEntityTrigger, ITriggerData } from "../entities/entity-trigger";
|
|
4
|
+
export interface IEntitySchedule {
|
|
5
|
+
target: IEntityProxy;
|
|
6
|
+
intervalMs?: number;
|
|
7
|
+
}
|
|
3
8
|
export interface ISystemPipelineContext<TEntity extends IEntity> {
|
|
4
|
-
entity: TEntity;
|
|
5
|
-
|
|
6
|
-
|
|
9
|
+
readonly entity: TEntity;
|
|
10
|
+
addEntity(entityType: EntityTypeUid, model: IEntityModel): void;
|
|
11
|
+
updateEntity(target?: IEntityProxy, model?: IEntityModel): void;
|
|
12
|
+
removeEntity(target?: IEntityProxy): void;
|
|
13
|
+
scheduleUpdateOnInterval(target?: IEntityProxy, intervalMs?: number): void;
|
|
14
|
+
clearUpdateOnInterval(target?: IEntityProxy): void;
|
|
15
|
+
getEntity<TEntity extends IEntity>(proxy: EntityProxy<TEntity>): TEntity;
|
|
16
|
+
registerProxy(proxy: IEntityProxy, cleanup?: boolean): void;
|
|
17
|
+
registerProxies(proxies: IEntityProxy[], cleanup?: boolean): void;
|
|
18
|
+
removeProxies(proxyEntityType?: EntityTypeUid): void;
|
|
19
|
+
addTrigger<TTriggerData extends ITriggerData>(target: IEntityProxy, data: TTriggerData): void;
|
|
20
|
+
/**
|
|
21
|
+
* Retrieve the first Trigger of the specified type.
|
|
22
|
+
* @param uid The Trigger type.
|
|
23
|
+
*/
|
|
24
|
+
getTrigger<TTriggerData extends ITriggerData>(uid: EntityTriggerUid): IEntityTrigger<TTriggerData>;
|
|
25
|
+
getTriggers<TTriggerData extends ITriggerData>(uid: EntityTriggerUid): IEntityTrigger<TTriggerData>[];
|
|
26
|
+
hasTriggers(uid?: EntityTriggerUid): boolean;
|
|
27
|
+
removeTriggers(uid?: EntityTriggerUid): void;
|
|
7
28
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
handleEntityModelChange(entity: TEntity, modelChange: IEntityModelChange): void | Promise<void>;
|
|
1
|
+
import { IEntityUpdate } from "../entities/entity-queue";
|
|
2
|
+
export interface ISystemPipeline {
|
|
3
|
+
handleUpdate(update: IEntityUpdate): void | Promise<void>;
|
|
5
4
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@awesome-ecs/abstract",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.2.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",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"dist"
|
|
9
9
|
],
|
|
10
10
|
"devDependencies": {
|
|
11
|
-
"typescript": "^4.5.
|
|
11
|
+
"typescript": "^4.5.5"
|
|
12
12
|
},
|
|
13
13
|
"scripts": {
|
|
14
14
|
"build": "npx tsc"
|
|
@@ -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": "
|
|
35
|
+
"gitHead": "2b590e7a53a247ce7ec019b061658dafef679a35"
|
|
36
36
|
}
|