@benev/archimedes 0.1.0-4 → 0.1.0-6

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 (50) hide show
  1. package/README.md +24 -23
  2. package/package.json +2 -2
  3. package/s/ecs/index.ts +2 -2
  4. package/s/ecs/parts/apply-delta.ts +37 -0
  5. package/s/ecs/parts/change.ts +24 -12
  6. package/s/ecs/parts/entities.ts +1 -1
  7. package/s/ecs/parts/execute.ts +29 -0
  8. package/s/ecs/parts/lifecycle.ts +10 -9
  9. package/s/ecs/parts/types.ts +9 -8
  10. package/s/ecs/test/setup-example.ts +29 -24
  11. package/s/ecs/test/setup-lifecycle-counts.ts +9 -4
  12. package/s/ecs/test.ts +114 -61
  13. package/x/ecs/index.d.ts +2 -2
  14. package/x/ecs/index.js +2 -2
  15. package/x/ecs/index.js.map +1 -1
  16. package/x/ecs/parts/apply-delta.d.ts +3 -0
  17. package/x/ecs/parts/apply-delta.js +34 -0
  18. package/x/ecs/parts/apply-delta.js.map +1 -0
  19. package/x/ecs/parts/change.d.ts +10 -8
  20. package/x/ecs/parts/change.js +28 -8
  21. package/x/ecs/parts/change.js.map +1 -1
  22. package/x/ecs/parts/entities.d.ts +1 -1
  23. package/x/ecs/parts/entities.js +1 -1
  24. package/x/ecs/parts/entities.js.map +1 -1
  25. package/x/ecs/parts/execute.d.ts +3 -0
  26. package/x/ecs/parts/execute.js +18 -0
  27. package/x/ecs/parts/execute.js.map +1 -0
  28. package/x/ecs/parts/lifecycle.d.ts +1 -1
  29. package/x/ecs/parts/lifecycle.js +9 -8
  30. package/x/ecs/parts/lifecycle.js.map +1 -1
  31. package/x/ecs/parts/types.d.ts +8 -8
  32. package/x/ecs/parts/types.js +7 -8
  33. package/x/ecs/parts/types.js.map +1 -1
  34. package/x/ecs/test/setup-example.d.ts +11 -12
  35. package/x/ecs/test/setup-example.js +33 -25
  36. package/x/ecs/test/setup-example.js.map +1 -1
  37. package/x/ecs/test/setup-lifecycle-counts.d.ts +5 -1
  38. package/x/ecs/test/setup-lifecycle-counts.js +7 -4
  39. package/x/ecs/test/setup-lifecycle-counts.js.map +1 -1
  40. package/x/ecs/test.d.ts +4 -0
  41. package/x/ecs/test.js +107 -58
  42. package/x/ecs/test.js.map +1 -1
  43. package/s/ecs/parts/apply-change.ts +0 -33
  44. package/s/ecs/parts/execute-systems.ts +0 -18
  45. package/x/ecs/parts/apply-change.d.ts +0 -3
  46. package/x/ecs/parts/apply-change.js +0 -30
  47. package/x/ecs/parts/apply-change.js.map +0 -1
  48. package/x/ecs/parts/execute-systems.d.ts +0 -3
  49. package/x/ecs/parts/execute-systems.js +0 -12
  50. package/x/ecs/parts/execute-systems.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../s/ecs/index.ts"],"names":[],"mappings":"AACA,cAAc,yBAAyB,CAAA;AACvC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../s/ecs/index.ts"],"names":[],"mappings":"AACA,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Entities } from "./entities.js";
2
+ import { Delta, Components } from "./types.js";
3
+ export declare function applyDelta<C extends Components>(entities: Entities<C>, delta: Delta<C>): string;
@@ -0,0 +1,34 @@
1
+ import { DeltaKind } from "./types.js";
2
+ export function applyDelta(entities, delta) {
3
+ switch (delta[0]) {
4
+ case DeltaKind.Set: return applySet(entities, delta);
5
+ case DeltaKind.Merge: return applyMerge(entities, delta);
6
+ case DeltaKind.Drop: return applyDrop(entities, delta);
7
+ default: throw new Error(`unknown delta kind "${delta[0]}"`);
8
+ }
9
+ }
10
+ function applySet(entities, [, id, components]) {
11
+ if (components)
12
+ entities.set(id, components);
13
+ else
14
+ entities.delete(id);
15
+ return id;
16
+ }
17
+ function applyMerge(entities, [, id, patch]) {
18
+ const components = entities.get(id);
19
+ if (!components)
20
+ return id;
21
+ Object.assign(components, patch);
22
+ entities.set(id, components);
23
+ return id;
24
+ }
25
+ function applyDrop(entities, [, id, keys]) {
26
+ const components = entities.get(id);
27
+ if (!components)
28
+ return id;
29
+ for (const key of keys)
30
+ delete components[key];
31
+ entities.set(id, components);
32
+ return id;
33
+ }
34
+ //# sourceMappingURL=apply-delta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-delta.js","sourceRoot":"","sources":["../../../s/ecs/parts/apply-delta.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,SAAS,EAAwB,MAAM,YAAY,CAAA;AAExF,MAAM,UAAU,UAAU,CAAuB,QAAqB,EAAE,KAAe;IACtF,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAClB,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,QAAQ,CAAI,QAAQ,EAAe,KAAK,CAAC,CAAA;QACpE,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,UAAU,CAAI,QAAQ,EAAiB,KAAK,CAAC,CAAA;QAC1E,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,SAAS,CAAI,QAAQ,EAAgB,KAAK,CAAC,CAAA;QACvE,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC7D,CAAC;AACF,CAAC;AAED,SAAS,QAAQ,CAAuB,QAAqB,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,CAAc;IAC7F,IAAI,UAAU;QAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,UAAwB,CAAC,CAAA;;QACrD,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACxB,OAAO,EAAE,CAAA;AACV,CAAC;AAED,SAAS,UAAU,CAAuB,QAAqB,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,CAAgB;IAC5F,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACnC,IAAI,CAAC,UAAU;QACd,OAAO,EAAE,CAAA;IACV,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAChC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;IAC5B,OAAO,EAAE,CAAA;AACV,CAAC;AAED,SAAS,SAAS,CAAuB,QAAqB,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,CAAe;IACzF,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACnC,IAAI,CAAC,UAAU;QACd,OAAO,EAAE,CAAA;IACV,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAA;IAC9C,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;IAC5B,OAAO,EAAE,CAAA;AACV,CAAC"}
@@ -1,13 +1,15 @@
1
- import { Components, ChangeSet, ChangeMerge, Id, ChangeDrop } from "./types.js";
2
- export declare const change: {
1
+ import { Components, Id, Delta } from "./types.js";
2
+ export declare class Change<C extends Components> {
3
+ private commit;
4
+ constructor(commit: (delta: Delta<C>) => void);
3
5
  /** create a new entity with the given components */
4
- create: (components: Partial<Components>) => ChangeSet<Components>;
6
+ create(components: Partial<C>): string;
5
7
  /** overwrite a whole entity to the given components */
6
- set: (id: Id, components: Partial<Components>) => ChangeSet<Components>;
8
+ set(id: Id, components: Partial<C>): string;
7
9
  /** remove the entity */
8
- delete: (id: Id) => ChangeSet<Components>;
10
+ delete(id: Id): string;
9
11
  /** update or add the given components onto the entity */
10
- merge: (id: Id, components: Partial<Components>) => ChangeMerge<Components>;
12
+ merge(id: Id, components: Partial<C>): string;
11
13
  /** delete specific components off the entity */
12
- drop: <C extends Components>(id: Id, ...keys: (keyof C)[]) => ChangeDrop<C>;
13
- };
14
+ drop(id: Id, ...keys: (keyof C)[]): string;
15
+ }
@@ -1,15 +1,35 @@
1
1
  import { makeId } from "./make-id.js";
2
- import { ChangeKind } from "./types.js";
3
- export const change = {
2
+ import { DeltaKind } from "./types.js";
3
+ export class Change {
4
+ commit;
5
+ constructor(commit) {
6
+ this.commit = commit;
7
+ }
4
8
  /** create a new entity with the given components */
5
- create: (components) => [ChangeKind.Set, makeId(), components],
9
+ create(components) {
10
+ const id = makeId();
11
+ this.commit([DeltaKind.Set, id, components]);
12
+ return id;
13
+ }
6
14
  /** overwrite a whole entity to the given components */
7
- set: (id, components) => [ChangeKind.Set, id, components],
15
+ set(id, components) {
16
+ this.commit([DeltaKind.Set, id, components]);
17
+ return id;
18
+ }
8
19
  /** remove the entity */
9
- delete: (id) => [ChangeKind.Set, id],
20
+ delete(id) {
21
+ this.commit([DeltaKind.Set, id]);
22
+ return id;
23
+ }
10
24
  /** update or add the given components onto the entity */
11
- merge: (id, components) => [ChangeKind.Merge, id, components],
25
+ merge(id, components) {
26
+ this.commit([DeltaKind.Merge, id, components]);
27
+ return id;
28
+ }
12
29
  /** delete specific components off the entity */
13
- drop: (id, ...keys) => [ChangeKind.Drop, id, keys],
14
- };
30
+ drop(id, ...keys) {
31
+ this.commit([DeltaKind.Drop, id, keys]);
32
+ return id;
33
+ }
34
+ }
15
35
  //# sourceMappingURL=change.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"change.js","sourceRoot":"","sources":["../../../s/ecs/parts/change.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AACnC,OAAO,EAAyC,UAAU,EAAa,MAAM,YAAY,CAAA;AAEzF,MAAM,CAAC,MAAM,MAAM,GAAG;IAErB,oDAAoD;IACpD,MAAM,EAAE,CAAC,UAA+B,EAAyB,EAAE,CAClE,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC;IAEvC,uDAAuD;IACvD,GAAG,EAAE,CAAC,EAAM,EAAE,UAA+B,EAAyB,EAAE,CACvE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC;IAEjC,wBAAwB;IACxB,MAAM,EAAE,CAAC,EAAM,EAAyB,EAAE,CACzC,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC;IAErB,yDAAyD;IACzD,KAAK,EAAE,CAAC,EAAM,EAAE,UAA+B,EAA2B,EAAE,CAC3E,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC;IAEnC,gDAAgD;IAChD,IAAI,EAAE,CAAuB,EAAM,EAAE,GAAG,IAAiB,EAAiB,EAAE,CAC3E,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC;CAC5B,CAAA"}
1
+ {"version":3,"file":"change.js","sourceRoot":"","sources":["../../../s/ecs/parts/change.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AACnC,OAAO,EAAiB,SAAS,EAAQ,MAAM,YAAY,CAAA;AAE3D,MAAM,OAAO,MAAM;IACE;IAApB,YAAoB,MAAiC;QAAjC,WAAM,GAAN,MAAM,CAA2B;IAAG,CAAC;IAEzD,oDAAoD;IACpD,MAAM,CAAC,UAAsB;QAC5B,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;QACnB,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,CAAA;QAC5C,OAAO,EAAE,CAAA;IACV,CAAC;IAED,uDAAuD;IACvD,GAAG,CAAC,EAAM,EAAE,UAAsB;QACjC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,CAAA;QAC5C,OAAO,EAAE,CAAA;IACV,CAAC;IAED,wBAAwB;IACxB,MAAM,CAAC,EAAM;QACZ,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;QAChC,OAAO,EAAE,CAAA;IACV,CAAC;IAED,yDAAyD;IACzD,KAAK,CAAC,EAAM,EAAE,UAAsB;QACnC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC,CAAA;QAC9C,OAAO,EAAE,CAAA;IACV,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC,EAAM,EAAE,GAAG,IAAiB;QAChC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAA;QACvC,OAAO,EAAE,CAAA;IACV,CAAC;CACD"}
@@ -6,6 +6,6 @@ export declare class Entities<C extends Components> extends GMap<Id, Partial<C>>
6
6
  delete(id: Id): boolean;
7
7
  clear(): void;
8
8
  select<K extends keyof C>(...componentKeys: K[]): Iterable<[Id, Select<C, K>]>;
9
- readonly(): EntitiesReadonly<C>;
9
+ get readonly(): EntitiesReadonly<C>;
10
10
  }
11
11
  export type EntitiesReadonly<C extends Components> = Pick<Entities<Readonly<C>>, ("has" | "get" | "require" | "keys" | "values" | "entries" | "select" | typeof Symbol.iterator)>;
@@ -31,7 +31,7 @@ export class Entities extends GMap {
31
31
  else
32
32
  yield* this.#makeCache(componentKeys);
33
33
  }
34
- readonly() {
34
+ get readonly() {
35
35
  return this;
36
36
  }
37
37
  #getCache(componentKeys) {
@@ -1 +1 @@
1
- {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../../s/ecs/parts/entities.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAG9B,MAAM,OAAO,QAA+B,SAAQ,IAAoB;IACvE,MAAM,GAAG,IAAI,IAAI,EAAsC,CAAA;IAEvD,GAAG,CAAC,EAAM,EAAE,UAAsB;QACjC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC3C,IAAI,oBAAoB,CAAC,UAAU,EAAE,GAAG,CAAC;gBACxC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;;gBAE5B,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACrB,CAAC;QACD,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,CAAC,EAAM;QACZ,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAClC,IAAI,CAAC,SAAS;YACb,OAAO,KAAK,CAAA;QAEb,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAEpB,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,KAAK;QACJ,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAC1C,QAAQ,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC;IAED,CAAC,MAAM,CAAoB,GAAG,aAAkB;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QAC5C,IAAI,MAAM;YACT,KAAK,CAAC,CAAC,MAAM,CAAA;;YAEb,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;IACvC,CAAC;IAED,QAAQ;QACP,OAAO,IAA2B,CAAA;IACnC,CAAC;IAED,SAAS,CAAoB,aAAkB;QAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,uBAAuB,CAAC,GAAG,EAAE,aAAa,CAAC;gBAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAA2B,CAAA;QAC3D,CAAC;IACF,CAAC;IAED,CAAC,UAAU,CAAoB,aAAkB;QAChD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAA;QAClC,MAAM,QAAQ,GAAG,IAAI,IAAI,EAAkB,CAAA;QAC3C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QAE9B,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE,CAAC;YAC3B,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,GAAG,MAAM,CAAA;YAE/B,IAAI,qBAAqB,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC;gBACtD,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;gBAC5B,MAAM,MAA4B,CAAA;YACnC,CAAC;QACF,CAAC;IACF,CAAC;CACD;AAaD,SAAS,oBAAoB,CAAC,UAAsB,EAAE,GAAqB;IAC1E,KAAK,MAAM,GAAG,IAAI,GAAG;QACpB,IAAI,CAAC,CAAC,GAAG,IAAI,UAAU,CAAC;YACvB,OAAO,KAAK,CAAA;IACd,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAiB,EAAE,IAAe;IAClE,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM;QAC3B,OAAO,KAAK,CAAA;IACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AACvC,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAkB,EAAE,IAAmB;IACrE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,UAAU,CAAC,CAAA;AAC5C,CAAC"}
1
+ {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../../s/ecs/parts/entities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Entities } from "./entities.js";
2
+ import { Delta, Components, Systems } from "./types.js";
3
+ export declare function makeExecute<C extends Components>(entities: Entities<C>, systems: Systems<C>): () => Delta<C>[];
@@ -0,0 +1,18 @@
1
+ import { Change } from "./change.js";
2
+ import { applyDelta } from "./apply-delta.js";
3
+ export function makeExecute(entities, systems) {
4
+ let deltas = [];
5
+ const change = new Change(delta => {
6
+ applyDelta(entities, delta);
7
+ deltas.push(delta);
8
+ });
9
+ const fns = systems(change);
10
+ return () => {
11
+ for (const fn of fns)
12
+ fn();
13
+ const ret = deltas;
14
+ deltas = [];
15
+ return ret;
16
+ };
17
+ }
18
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../s/ecs/parts/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAElC,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAG3C,MAAM,UAAU,WAAW,CACzB,QAAqB,EACrB,OAAmB;IAGpB,IAAI,MAAM,GAAe,EAAE,CAAA;IAE3B,MAAM,MAAM,GAAG,IAAI,MAAM,CAAI,KAAK,CAAC,EAAE;QACpC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QAC3B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAE3B,OAAO,GAAG,EAAE;QACX,KAAK,MAAM,EAAE,IAAI,GAAG;YACnB,EAAE,EAAE,CAAA;QACL,MAAM,GAAG,GAAG,MAAM,CAAA;QAClB,MAAM,GAAG,EAAE,CAAA;QACX,OAAO,GAAG,CAAA;IACX,CAAC,CAAA;AACF,CAAC"}
@@ -1,3 +1,3 @@
1
1
  import { EntitiesReadonly } from "./entities.js";
2
2
  import { Components, LifecycleEnter } from "./types.js";
3
- export declare function lifecycle<C extends Components, K extends keyof C>(entities: EntitiesReadonly<C>, componentKeys: K[], enter: LifecycleEnter<C, K>): () => Generator<never, void, unknown>;
3
+ export declare function lifecycle<C extends Components, K extends keyof C>(entities: EntitiesReadonly<C>, componentKeys: K[], enter: LifecycleEnter<C, K>): () => void;
@@ -1,19 +1,20 @@
1
1
  import { GMap } from "@e280/stz";
2
2
  export function lifecycle(entities, componentKeys, enter) {
3
3
  const alive = new GMap();
4
- const sel = () => entities.select(...componentKeys);
5
- return function* () {
6
- const current = new Map(sel());
4
+ return () => {
5
+ // add fresh entities
6
+ for (const [id, components] of entities.select(...componentKeys)) {
7
+ const callbacks = alive.guarantee(id, () => enter(id, components));
8
+ callbacks.tick(id, components);
9
+ }
10
+ // delete stale entities
11
+ const currentIds = new Set([...entities.select(...componentKeys)].map(([id]) => id));
7
12
  for (const [id, callbacks] of alive) {
8
- if (current.has(id))
13
+ if (currentIds.has(id))
9
14
  continue;
10
15
  alive.delete(id);
11
16
  callbacks.exit(id);
12
17
  }
13
- for (const [id, components] of current) {
14
- const callbacks = alive.guarantee(id, () => enter(id, components));
15
- callbacks.tick(id, components);
16
- }
17
18
  };
18
19
  }
19
20
  //# sourceMappingURL=lifecycle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../s/ecs/parts/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAI9B,MAAM,UAAU,SAAS,CACvB,QAA6B,EAC7B,aAAkB,EAClB,KAA2B;IAG5B,MAAM,KAAK,GAAG,IAAI,IAAI,EAAgC,CAAA;IACtD,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAA;IAEnD,OAAO,QAAQ,CAAC;QACf,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;QAE9B,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;YACrC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAQ;YAC7B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAChB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC;QAED,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAA;YAClE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;QAC/B,CAAC;IACF,CAAC,CAAA;AACF,CAAC"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../s/ecs/parts/lifecycle.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAI9B,MAAM,UAAU,SAAS,CACvB,QAA6B,EAC7B,aAAkB,EAClB,KAA2B;IAG5B,MAAM,KAAK,GAAG,IAAI,IAAI,EAAgC,CAAA;IAEtD,OAAO,GAAG,EAAE;QAEX,qBAAqB;QACrB,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC;YAClE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAA;YAClE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;QAC/B,CAAC;QAED,wBAAwB;QACxB,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACpF,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;YACrC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAQ;YAChC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAChB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC;IACF,CAAC,CAAA;AACF,CAAC"}
@@ -1,19 +1,19 @@
1
+ import { Change } from "./change.js";
1
2
  export type Id = string;
2
3
  export type Components = Record<string, unknown>;
3
4
  export type AsComponents<C extends Components> = C;
4
5
  export type Select<C extends Components, K extends keyof C> = Pick<C, K> & Partial<C>;
5
- export type System<C extends Components> = () => Generator<Change<C>>;
6
- export declare const asSystem: <C extends Components>(system: System<C>) => System<C>;
7
- export declare const asSystems: <C extends Components>(...systems: System<C>[]) => System<C>[];
8
- export declare enum ChangeKind {
6
+ export declare enum DeltaKind {
9
7
  Set = 0,
10
8
  Merge = 1,
11
9
  Drop = 2
12
10
  }
13
- export type ChangeSet<C extends Components> = [kind: ChangeKind.Set, id: Id, components?: Partial<C>];
14
- export type ChangeMerge<C extends Components> = [kind: ChangeKind.Merge, id: Id, patch: Partial<C>];
15
- export type ChangeDrop<C extends Components> = [kind: ChangeKind.Drop, id: Id, keys: (keyof C)[]];
16
- export type Change<C extends Components> = ChangeSet<C> | ChangeMerge<C> | ChangeDrop<C>;
11
+ export type DeltaSet<C extends Components> = [kind: DeltaKind.Set, id: Id, components?: Partial<C>];
12
+ export type DeltaMerge<C extends Components> = [kind: DeltaKind.Merge, id: Id, patch: Partial<C>];
13
+ export type DeltaDrop<C extends Components> = [kind: DeltaKind.Drop, id: Id, keys: (keyof C)[]];
14
+ export type Delta<C extends Components> = DeltaSet<C> | DeltaMerge<C> | DeltaDrop<C>;
15
+ export type Systems<C extends Components> = (change: Change<C>) => (() => void)[];
16
+ export declare const asSystems: <C extends Components>(systems: Systems<C>) => Systems<C>;
17
17
  export type LifecycleCallbacks<C extends Components, K extends keyof C> = {
18
18
  tick: (id: Id, components: Select<C, K>) => void;
19
19
  exit: (id: Id) => void;
@@ -1,9 +1,8 @@
1
- export const asSystem = (system) => system;
2
- export const asSystems = (...systems) => systems;
3
- export var ChangeKind;
4
- (function (ChangeKind) {
5
- ChangeKind[ChangeKind["Set"] = 0] = "Set";
6
- ChangeKind[ChangeKind["Merge"] = 1] = "Merge";
7
- ChangeKind[ChangeKind["Drop"] = 2] = "Drop";
8
- })(ChangeKind || (ChangeKind = {}));
1
+ export var DeltaKind;
2
+ (function (DeltaKind) {
3
+ DeltaKind[DeltaKind["Set"] = 0] = "Set";
4
+ DeltaKind[DeltaKind["Merge"] = 1] = "Merge";
5
+ DeltaKind[DeltaKind["Drop"] = 2] = "Drop";
6
+ })(DeltaKind || (DeltaKind = {}));
7
+ export const asSystems = (systems) => systems;
9
8
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../s/ecs/parts/types.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAuB,MAAiB,EAAE,EAAE,CAAC,MAAM,CAAA;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAuB,GAAG,OAAoB,EAAE,EAAE,CAAC,OAAO,CAAA;AAEnF,MAAM,CAAN,IAAY,UAA6B;AAAzC,WAAY,UAAU;IAAE,yCAAG,CAAA;IAAE,6CAAK,CAAA;IAAE,2CAAI,CAAA;AAAA,CAAC,EAA7B,UAAU,KAAV,UAAU,QAAmB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../s/ecs/parts/types.ts"],"names":[],"mappings":"AAQA,MAAM,CAAN,IAAY,SAA4B;AAAxC,WAAY,SAAS;IAAE,uCAAG,CAAA;IAAE,2CAAK,CAAA;IAAE,yCAAI,CAAA;AAAA,CAAC,EAA5B,SAAS,KAAT,SAAS,QAAmB;AAOxC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAuB,OAAmB,EAAE,EAAE,CAAC,OAAO,CAAA"}
@@ -1,15 +1,14 @@
1
+ import { Change } from "../parts/change.js";
1
2
  import { Entities } from "../parts/entities.js";
3
+ export type ExampleComponents = {
4
+ health: number;
5
+ bleed: number;
6
+ mana: number;
7
+ manaRegen: number;
8
+ };
2
9
  export declare function setupExample(): {
3
- entities: Entities<{
4
- health: number;
5
- bleed: number;
6
- mana: number;
7
- manaRegen: number;
8
- }>;
9
- systems: import("../parts/types.js").System<{
10
- health: number;
11
- bleed: number;
12
- mana: number;
13
- manaRegen: number;
14
- }>[];
10
+ systems: import("../parts/types.js").Systems<ExampleComponents>;
11
+ entities: Entities<ExampleComponents>;
12
+ change: Change<ExampleComponents>;
13
+ execute: () => import("../parts/types.js").Delta<ExampleComponents>[];
15
14
  };
@@ -1,32 +1,40 @@
1
- import { change } from "../parts/change.js";
1
+ import { Change } from "../parts/change.js";
2
2
  import { asSystems } from "../parts/types.js";
3
3
  import { Entities } from "../parts/entities.js";
4
+ import { makeExecute } from "../parts/execute.js";
5
+ import { applyDelta } from "../parts/apply-delta.js";
4
6
  export function setupExample() {
5
- const writableEntities = new Entities();
6
- const entities = writableEntities.readonly();
7
- const systems = asSystems(function* manaRegen() {
8
- for (const [id, components] of entities.select("mana", "manaRegen")) {
9
- if (components.manaRegen !== 0) {
10
- const mana = components.mana + components.manaRegen;
11
- yield change.merge(id, { mana });
7
+ const entities = new Entities();
8
+ const rentities = entities.readonly;
9
+ const systems = asSystems(change => [
10
+ function manaRegen() {
11
+ for (const [id, components] of rentities.select("mana", "manaRegen")) {
12
+ if (components.manaRegen !== 0) {
13
+ const mana = components.mana + components.manaRegen;
14
+ change.merge(id, { mana });
15
+ }
12
16
  }
13
- }
14
- }, function* bleeding() {
15
- for (const [id, components] of entities.select("health", "bleed")) {
16
- if (components.bleed >= 0) {
17
- const health = components.health - components.bleed;
18
- const bleed = components.bleed - 1;
19
- yield change.merge(id, { health, bleed });
17
+ },
18
+ function bleeding() {
19
+ for (const [id, components] of rentities.select("health", "bleed")) {
20
+ if (components.bleed >= 0) {
21
+ const health = components.health - components.bleed;
22
+ const bleed = components.bleed - 1;
23
+ change.merge(id, { health, bleed });
24
+ }
25
+ if (components.bleed <= 0)
26
+ change.drop(id, "bleed");
20
27
  }
21
- if (components.bleed <= 0)
22
- yield change.drop(id, "bleed");
23
- }
24
- }, function* death() {
25
- for (const [id, components] of entities.select("health")) {
26
- if (components.health <= 0)
27
- yield change.delete(id);
28
- }
29
- });
30
- return { entities: writableEntities, systems };
28
+ },
29
+ function death() {
30
+ for (const [id, components] of rentities.select("health")) {
31
+ if (components.health <= 0)
32
+ change.delete(id);
33
+ }
34
+ },
35
+ ]);
36
+ const change = new Change(delta => applyDelta(entities, delta));
37
+ const execute = makeExecute(entities, systems);
38
+ return { systems, entities, change, execute };
31
39
  }
32
40
  //# sourceMappingURL=setup-example.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup-example.js","sourceRoot":"","sources":["../../../s/ecs/test/setup-example.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAA;AAE7C,MAAM,UAAU,YAAY;IAQ3B,MAAM,gBAAgB,GAAG,IAAI,QAAQ,EAAgB,CAAA;IACrD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAA;IAE5C,MAAM,OAAO,GAAG,SAAS,CACxB,QAAQ,CAAC,CAAC,SAAS;QAClB,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC;YACrE,IAAI,UAAU,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAA;gBACnD,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAC,IAAI,EAAC,CAAC,CAAA;YAC/B,CAAC;QACF,CAAC;IACF,CAAC,EAED,QAAQ,CAAC,CAAC,QAAQ;QACjB,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;YACnE,IAAI,UAAU,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAA;gBACnD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAA;gBAClC,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC,CAAC,CAAA;YACxC,CAAC;YACD,IAAI,UAAU,CAAC,KAAK,IAAI,CAAC;gBACxB,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QAChC,CAAC;IACF,CAAC,EAED,QAAQ,CAAC,CAAC,KAAK;QACd,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1D,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;gBACzB,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACzB,CAAC;IACF,CAAC,CACD,CAAA;IAED,OAAO,EAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAC,CAAA;AAC7C,CAAC"}
1
+ {"version":3,"file":"setup-example.js","sourceRoot":"","sources":["../../../s/ecs/test/setup-example.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAC,QAAQ,EAAC,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAC,WAAW,EAAC,MAAM,qBAAqB,CAAA;AAC/C,OAAO,EAAC,UAAU,EAAC,MAAM,yBAAyB,CAAA;AASlD,MAAM,UAAU,YAAY;IAC3B,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAqB,CAAA;IAClD,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAA;IAEnC,MAAM,OAAO,GAAG,SAAS,CAAoB,MAAM,CAAC,EAAE,CAAC;QACtD,SAAS,SAAS;YACjB,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC;gBACtE,IAAI,UAAU,CAAC,SAAS,KAAK,CAAC,EAAE,CAAC;oBAChC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,SAAS,CAAA;oBACnD,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAC,IAAI,EAAC,CAAC,CAAA;gBACzB,CAAC;YACF,CAAC;QACF,CAAC;QAED,SAAS,QAAQ;YAChB,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;gBACpE,IAAI,UAAU,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAA;oBACnD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAA;oBAClC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC,CAAC,CAAA;gBAClC,CAAC;gBACD,IAAI,UAAU,CAAC,KAAK,IAAI,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;YAC1B,CAAC;QACF,CAAC;QAED,SAAS,KAAK;YACb,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3D,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;oBACzB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACnB,CAAC;QACF,CAAC;KACD,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAoB,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IAClF,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAE9C,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAC,CAAA;AAC5C,CAAC"}
@@ -2,5 +2,9 @@ export declare function setupLifecycleCounts(): {
2
2
  enters: number;
3
3
  ticks: number;
4
4
  exits: number;
5
- expect: (enters: number, ticks: number, exits: number) => void;
5
+ expect: (e: {
6
+ enters: number;
7
+ ticks: number;
8
+ exits: number;
9
+ }) => void;
6
10
  };
@@ -4,10 +4,13 @@ export function setupLifecycleCounts() {
4
4
  enters: 0,
5
5
  ticks: 0,
6
6
  exits: 0,
7
- expect: (enters, ticks, exits) => {
8
- expect(counts.enters).is(enters);
9
- expect(counts.ticks).is(ticks);
10
- expect(counts.exits).is(exits);
7
+ expect: (e) => {
8
+ expect(counts.enters, `enters, expected ${e.enters}, got ${counts.enters}`)
9
+ .is(e.enters);
10
+ expect(counts.ticks, `ticks, expected ${e.ticks}, got ${counts.ticks}`)
11
+ .is(e.ticks);
12
+ expect(counts.exits, `exits, expected ${e.exits}, got ${counts.exits}`)
13
+ .is(e.exits);
11
14
  },
12
15
  };
13
16
  return counts;
@@ -1 +1 @@
1
- {"version":3,"file":"setup-lifecycle-counts.js","sourceRoot":"","sources":["../../../s/ecs/test/setup-lifecycle-counts.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAA;AAEpC,MAAM,UAAU,oBAAoB;IACnC,MAAM,MAAM,GAAG;QACd,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC,MAAc,EAAE,KAAa,EAAE,KAAa,EAAE,EAAE;YACxD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;YAChC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;YAC9B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;QAC/B,CAAC;KACD,CAAA;IACD,OAAO,MAAM,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"setup-lifecycle-counts.js","sourceRoot":"","sources":["../../../s/ecs/test/setup-lifecycle-counts.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,eAAe,CAAA;AAEpC,MAAM,UAAU,oBAAoB;IACnC,MAAM,MAAM,GAAG;QACd,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC,CAAiD,EAAE,EAAE;YAC7D,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC;iBACzE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YAEd,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,KAAK,SAAS,MAAM,CAAC,KAAK,EAAE,CAAC;iBACrE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YAEb,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,KAAK,SAAS,MAAM,CAAC,KAAK,EAAE,CAAC;iBACrE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QACd,CAAC;KACD,CAAA;IACD,OAAO,MAAM,CAAA;AACd,CAAC"}
package/x/ecs/test.d.ts CHANGED
@@ -2,6 +2,8 @@ declare const _default: {
2
2
  "create an entity": import("@e280/science").Test;
3
3
  "delete an entity": import("@e280/science").Test;
4
4
  "merge components into entity": import("@e280/science").Test;
5
+ "ignore merge after delete": import("@e280/science").Test;
6
+ "ignore drop after delete": import("@e280/science").Test;
5
7
  "select an entity": import("@e280/science").Test;
6
8
  "drop components from entity": import("@e280/science").Test;
7
9
  "select two entities": import("@e280/science").Test;
@@ -11,5 +13,7 @@ declare const _default: {
11
13
  "wizard regens mana": import("@e280/science").Test;
12
14
  "death by bleeding": import("@e280/science").Test;
13
15
  lifecycles: import("@e280/science").Test;
16
+ "lifecycle can commit changes": import("@e280/science").Test;
17
+ "lifecycle self-deletion immediate cleanup": import("@e280/science").Test;
14
18
  };
15
19
  export default _default;