@benev/archimedes 0.1.0-2 → 0.1.0-3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@benev/archimedes",
3
- "version": "0.1.0-2",
3
+ "version": "0.1.0-3",
4
4
  "description": "game ecs with auto networking",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/s/ecs/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
 
2
2
  export * from "./parts/changers.js"
3
+ export * as change from "./parts/changers.js"
3
4
  export * from "./parts/make-id.js"
4
5
  export * from "./parts/world.js"
5
6
 
@@ -1,16 +1,20 @@
1
1
 
2
2
  import {makeId} from "./make-id.js"
3
- import {Change, Components, Id} from "../types.js"
3
+ import {Assign, Components, Delta, Id, Kind, Update} from "../types.js"
4
4
 
5
- export function create<C extends Components>(components: Partial<C>): Change {
6
- return [makeId(), components]
5
+ export function create<C extends Components>(components: Partial<C>): Assign {
6
+ return [makeId(), Kind.Assign, components]
7
7
  }
8
8
 
9
- export function update<C extends Components>(id: Id, components: Partial<C>): Change {
10
- return [id, components]
9
+ export function assign<C extends Components>(id: Id, components: undefined | Partial<C>): Assign {
10
+ return [id, Kind.Assign, components]
11
11
  }
12
12
 
13
- export function del(id: Id): Change {
14
- return [id]
13
+ export function del(id: Id): Assign {
14
+ return [id, Kind.Assign]
15
+ }
16
+
17
+ export function update<C extends Components>(id: Id, delta: Delta<C>): Update {
18
+ return [id, Kind.Update, delta]
15
19
  }
16
20
 
@@ -1,6 +1,7 @@
1
1
 
2
2
  import {GMap} from "@e280/stz"
3
3
  import {Optimizer} from "../utils/optimizer.js"
4
+ import {applyChangeToEntities as applyChange} from "../utils/apply-change.js"
4
5
  import {Change, Components, Entities, Id, LifecycleCallbacks, LifecycleEnter, Select, System} from "../types.js"
5
6
 
6
7
  export class World<C extends Components> {
@@ -42,15 +43,11 @@ export class World<C extends Components> {
42
43
  }
43
44
  }
44
45
 
45
- apply([id, components]: Change) {
46
- if (components) {
47
- this.entities.set(id, components as Partial<C>)
48
- this.#optimizer.update(id, components as Partial<C>)
49
- }
50
- else {
51
- this.entities.delete(id)
52
- this.#optimizer.eliminate(id)
53
- }
46
+ apply(change: Change) {
47
+ const [id] = change
48
+ const components = applyChange<C>(this.entities, change)
49
+ if (components) this.#optimizer.update(id, components)
50
+ else this.#optimizer.eliminate(id)
54
51
  return id
55
52
  }
56
53
 
package/s/ecs/test.ts CHANGED
@@ -20,12 +20,29 @@ export default suite({
20
20
  expect(world.entities.size).is(0)
21
21
  }),
22
22
 
23
+ "partial updates": test(async() => {
24
+ const {world} = setupExampleWorld()
25
+ const id = world.apply(create({health: 100, mana: 100}))
26
+ expect(world.require(id).health).is(100)
27
+ world.apply(update(id, {health: 99}))
28
+ expect(world.require(id).health).is(99)
29
+ expect(world.require(id).mana).is(100)
30
+ }),
31
+
23
32
  "select an entity": test(async() => {
24
33
  const {world} = setupExampleWorld()
25
34
  world.apply(create({health: 100}))
26
35
  expect([...world.select("health")].length).is(1)
27
36
  }),
28
37
 
38
+ "select an entity after shape change": test(async() => {
39
+ const {world} = setupExampleWorld()
40
+ const id = world.apply(create({health: 100, mana: 100}))
41
+ expect([...world.select("health", "mana")].length).is(1)
42
+ world.apply(update(id, {health: 99, mana: null}))
43
+ expect([...world.select("health", "mana")].length).is(0)
44
+ }),
45
+
29
46
  "select two entities": test(async() => {
30
47
  const {world} = setupExampleWorld()
31
48
  world.apply(create({health: 100}))
package/s/ecs/types.ts CHANGED
@@ -5,9 +5,14 @@ export type System = () => Generator<Change>
5
5
 
6
6
  export type Id = string
7
7
  export type AsComponents<C extends Components> = C
8
- export type Change = [id: Id, components?: Partial<Components>]
9
8
  export type Select<C extends Components, K extends keyof C> = Pick<C, K> & Partial<C>
10
9
 
10
+ export enum Kind {Assign, Update}
11
+ export type Delta<C extends Components> = Partial<{[K in keyof C]: C[K] | null}>
12
+ export type Assign = [id: Id, kind: Kind, components?: Partial<Components>]
13
+ export type Update = [id: Id, kind: Kind, delta: Delta<Components>]
14
+ export type Change = Assign | Update
15
+
11
16
  export type LifecycleCallbacks<C extends Components, K extends keyof C> = {
12
17
  tick: (id: Id, components: Select<C, K>) => void
13
18
  exit: (id: Id) => void
@@ -0,0 +1,32 @@
1
+
2
+ import {GMap, is} from "@e280/stz"
3
+ import {Assign, Change, Components, Entities, Kind, Update} from "../types.js"
4
+
5
+ export function applyChangeToEntities<C extends Components>(entities: Entities<any>, change: Change) {
6
+ switch (change[1]) {
7
+ case Kind.Assign: return assign<C>(entities, <Assign>change)
8
+ case Kind.Update: return update<C>(entities, <Update>change)
9
+ default: throw new Error(`unknown change kind "${change[1]}"`)
10
+ }
11
+ }
12
+
13
+ function assign<C extends Components>(entities: Entities<Partial<C>>, [id, _kind, components]: Assign) {
14
+ if (components) {
15
+ entities.set(id, components as Partial<C>)
16
+ return components as Partial<C>
17
+ }
18
+ else {
19
+ entities.delete(id)
20
+ return undefined
21
+ }
22
+ }
23
+
24
+ function update<C extends Components>(entities: Entities<Partial<C>>, [id, _kind, fresh]: Update) {
25
+ const components = GMap.guarantee(entities, id, () => ({})) as any
26
+ for (const [key, value] of Object.entries(fresh)) {
27
+ if (!is.happy(value)) delete components[key]
28
+ else components[key] = value
29
+ }
30
+ return components as Partial<C>
31
+ }
32
+
package/x/ecs/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./parts/changers.js";
2
+ export * as change from "./parts/changers.js";
2
3
  export * from "./parts/make-id.js";
3
4
  export * from "./parts/world.js";
4
5
  export * from "./types.js";
package/x/ecs/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from "./parts/changers.js";
2
+ export * as change from "./parts/changers.js";
2
3
  export * from "./parts/make-id.js";
3
4
  export * from "./parts/world.js";
4
5
  export * from "./types.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../s/ecs/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAEhC,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../s/ecs/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAA;AAC7C,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAEhC,cAAc,YAAY,CAAA"}
@@ -1,4 +1,5 @@
1
- import { Change, Components, Id } from "../types.js";
2
- export declare function create<C extends Components>(components: Partial<C>): Change;
3
- export declare function update<C extends Components>(id: Id, components: Partial<C>): Change;
4
- export declare function del(id: Id): Change;
1
+ import { Assign, Components, Delta, Id, Update } from "../types.js";
2
+ export declare function create<C extends Components>(components: Partial<C>): Assign;
3
+ export declare function assign<C extends Components>(id: Id, components: undefined | Partial<C>): Assign;
4
+ export declare function del(id: Id): Assign;
5
+ export declare function update<C extends Components>(id: Id, delta: Delta<C>): Update;
@@ -1,11 +1,15 @@
1
1
  import { makeId } from "./make-id.js";
2
+ import { Kind } from "../types.js";
2
3
  export function create(components) {
3
- return [makeId(), components];
4
+ return [makeId(), Kind.Assign, components];
4
5
  }
5
- export function update(id, components) {
6
- return [id, components];
6
+ export function assign(id, components) {
7
+ return [id, Kind.Assign, components];
7
8
  }
8
9
  export function del(id) {
9
- return [id];
10
+ return [id, Kind.Assign];
11
+ }
12
+ export function update(id, delta) {
13
+ return [id, Kind.Update, delta];
10
14
  }
11
15
  //# sourceMappingURL=changers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"changers.js","sourceRoot":"","sources":["../../../s/ecs/parts/changers.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AAGnC,MAAM,UAAU,MAAM,CAAuB,UAAsB;IAClE,OAAO,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,UAAU,MAAM,CAAuB,EAAM,EAAE,UAAsB;IAC1E,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,EAAM;IACzB,OAAO,CAAC,EAAE,CAAC,CAAA;AACZ,CAAC"}
1
+ {"version":3,"file":"changers.js","sourceRoot":"","sources":["../../../s/ecs/parts/changers.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AACnC,OAAO,EAAgC,IAAI,EAAS,MAAM,aAAa,CAAA;AAEvE,MAAM,UAAU,MAAM,CAAuB,UAAsB;IAClE,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,MAAM,CAAuB,EAAM,EAAE,UAAkC;IACtF,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,EAAM;IACzB,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,MAAM,CAAuB,EAAM,EAAE,KAAe;IACnE,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AAChC,CAAC"}
@@ -6,6 +6,6 @@ export declare class World<C extends Components> {
6
6
  require<C2 extends Partial<C> = Partial<C>>(id: Id): C2 & Partial<C>;
7
7
  select<K extends keyof C>(...required: K[]): Generator<[id: string, components: Select<C, K>], void, unknown>;
8
8
  lifecycle<K extends keyof C>(required: K[], enter: LifecycleEnter<C, K>): () => Generator<never, void, unknown>;
9
- apply([id, components]: Change): string;
9
+ apply(change: Change): string;
10
10
  execute(systems: System[]): Change[];
11
11
  }
@@ -1,5 +1,6 @@
1
1
  import { GMap } from "@e280/stz";
2
2
  import { Optimizer } from "../utils/optimizer.js";
3
+ import { applyChangeToEntities as applyChange } from "../utils/apply-change.js";
3
4
  export class World {
4
5
  entities;
5
6
  #optimizer;
@@ -34,15 +35,13 @@ export class World {
34
35
  }
35
36
  };
36
37
  }
37
- apply([id, components]) {
38
- if (components) {
39
- this.entities.set(id, components);
38
+ apply(change) {
39
+ const [id] = change;
40
+ const components = applyChange(this.entities, change);
41
+ if (components)
40
42
  this.#optimizer.update(id, components);
41
- }
42
- else {
43
- this.entities.delete(id);
43
+ else
44
44
  this.#optimizer.eliminate(id);
45
- }
46
45
  return id;
47
46
  }
48
47
  execute(systems) {
@@ -1 +1 @@
1
- {"version":3,"file":"world.js","sourceRoot":"","sources":["../../../s/ecs/parts/world.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAA;AAG/C,MAAM,OAAO,KAAK;IAGE;IAFnB,UAAU,CAAA;IAEV,YAAmB,WAAiC,IAAI,GAAG,EAAE;QAA1C,aAAQ,GAAR,QAAQ,CAAkC;QAC5D,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAI,QAAQ,CAAC,CAAA;IAC7C,CAAC;IAED,OAAO,CAAqC,EAAM;QACjD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAoB,CAAA;IAC1D,CAAC;IAED,CAAC,MAAM,CAAoB,GAAG,QAAa;QAC1C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvD,MAAM,CAAC,EAAC,UAAU,CAAC,GAAG,MAAM,CAAA;YAC5B,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,UAAU,CAAC;gBACvC,MAAM,MAA4C,CAAA;QACpD,CAAC;IACF,CAAC;IAED,SAAS,CAAoB,QAAa,EAAE,KAA2B;QACtE,MAAM,KAAK,GAAG,IAAI,IAAI,EAAgC,CAAA;QACtD,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAA;QAE1C,OAAO,QAAQ,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;YAE9B,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;gBACrC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAQ;gBAC7B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBAChB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACnB,CAAC;YAED,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAA;gBAClE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;YAC/B,CAAC;QACF,CAAC,CAAA;IACF,CAAC;IAED,KAAK,CAAC,CAAC,EAAE,EAAE,UAAU,CAAS;QAC7B,IAAI,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,UAAwB,CAAC,CAAA;YAC/C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,UAAwB,CAAC,CAAA;QACrD,CAAC;aACI,CAAC;YACL,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACxB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAC9B,CAAC;QACD,OAAO,EAAE,CAAA;IACV,CAAC;IAED,OAAO,CAAC,OAAiB;QACxB,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBAClB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACrB,CAAC;QACF,CAAC;QACD,OAAO,OAAO,CAAA;IACf,CAAC;CACD"}
1
+ {"version":3,"file":"world.js","sourceRoot":"","sources":["../../../s/ecs/parts/world.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAC,qBAAqB,IAAI,WAAW,EAAC,MAAM,0BAA0B,CAAA;AAG7E,MAAM,OAAO,KAAK;IAGE;IAFnB,UAAU,CAAA;IAEV,YAAmB,WAAiC,IAAI,GAAG,EAAE;QAA1C,aAAQ,GAAR,QAAQ,CAAkC;QAC5D,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAI,QAAQ,CAAC,CAAA;IAC7C,CAAC;IAED,OAAO,CAAqC,EAAM;QACjD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAoB,CAAA;IAC1D,CAAC;IAED,CAAC,MAAM,CAAoB,GAAG,QAAa;QAC1C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvD,MAAM,CAAC,EAAC,UAAU,CAAC,GAAG,MAAM,CAAA;YAC5B,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,UAAU,CAAC;gBACvC,MAAM,MAA4C,CAAA;QACpD,CAAC;IACF,CAAC;IAED,SAAS,CAAoB,QAAa,EAAE,KAA2B;QACtE,MAAM,KAAK,GAAG,IAAI,IAAI,EAAgC,CAAA;QACtD,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAA;QAE1C,OAAO,QAAQ,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;YAE9B,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC;gBACrC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,SAAQ;gBAC7B,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBAChB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACnB,CAAC;YAED,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAA;gBAClE,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;YAC/B,CAAC;QACF,CAAC,CAAA;IACF,CAAC;IAED,KAAK,CAAC,MAAc;QACnB,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAA;QACnB,MAAM,UAAU,GAAG,WAAW,CAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QACxD,IAAI,UAAU;YAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;;YACjD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAClC,OAAO,EAAE,CAAA;IACV,CAAC;IAED,OAAO,CAAC,OAAiB;QACxB,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC9B,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBAClB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACrB,CAAC;QACF,CAAC;QACD,OAAO,OAAO,CAAA;IACf,CAAC;CACD"}
@@ -6,5 +6,5 @@ export declare function setupExampleWorld(): {
6
6
  mana: number;
7
7
  manaRegen: number;
8
8
  }>;
9
- systems: (() => Generator<import("../types.js").Change, void, unknown>)[];
9
+ systems: (() => Generator<import("../types.js").Assign, void, unknown>)[];
10
10
  };
package/x/ecs/test.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  declare const _default: {
2
2
  "create an entity": import("@e280/science").Test;
3
3
  "delete an entity": import("@e280/science").Test;
4
+ "partial updates": import("@e280/science").Test;
4
5
  "select an entity": import("@e280/science").Test;
6
+ "select an entity after shape change": import("@e280/science").Test;
5
7
  "select two entities": import("@e280/science").Test;
6
8
  "select with no component keys selects all": import("@e280/science").Test;
7
9
  "select doesn't include non-match": import("@e280/science").Test;
package/x/ecs/test.js CHANGED
@@ -16,11 +16,26 @@ export default suite({
16
16
  world.apply(del(id));
17
17
  expect(world.entities.size).is(0);
18
18
  }),
19
+ "partial updates": test(async () => {
20
+ const { world } = setupExampleWorld();
21
+ const id = world.apply(create({ health: 100, mana: 100 }));
22
+ expect(world.require(id).health).is(100);
23
+ world.apply(update(id, { health: 99 }));
24
+ expect(world.require(id).health).is(99);
25
+ expect(world.require(id).mana).is(100);
26
+ }),
19
27
  "select an entity": test(async () => {
20
28
  const { world } = setupExampleWorld();
21
29
  world.apply(create({ health: 100 }));
22
30
  expect([...world.select("health")].length).is(1);
23
31
  }),
32
+ "select an entity after shape change": test(async () => {
33
+ const { world } = setupExampleWorld();
34
+ const id = world.apply(create({ health: 100, mana: 100 }));
35
+ expect([...world.select("health", "mana")].length).is(1);
36
+ world.apply(update(id, { health: 99, mana: null }));
37
+ expect([...world.select("health", "mana")].length).is(0);
38
+ }),
24
39
  "select two entities": test(async () => {
25
40
  const { world } = setupExampleWorld();
26
41
  world.apply(create({ health: 100 }));
package/x/ecs/test.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../../s/ecs/test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../s/ecs/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AACjD,OAAO,EAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAC,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAC,iBAAiB,EAAC,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAC,oBAAoB,EAAC,MAAM,kCAAkC,CAAA;AAErE,eAAe,KAAK,CAAC;IACpB,kBAAkB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAClC,MAAM,EAAC,KAAK,EAAC,GAAG,iBAAiB,EAAE,CAAA;QACnC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACjC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAClC,CAAC,CAAC;IAEF,kBAAkB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAClC,MAAM,EAAC,KAAK,EAAC,GAAG,iBAAiB,EAAE,CAAA;QACnC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QAC7C,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACjC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QACpB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAClC,CAAC,CAAC;IAEF,iBAAiB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACjC,MAAM,EAAC,KAAK,EAAC,GAAG,iBAAiB,EAAE,CAAA;QACnC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QACxD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;QACxC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAC,MAAM,EAAE,EAAE,EAAC,CAAC,CAAC,CAAA;QACrC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACvC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IACvC,CAAC,CAAC;IAEF,kBAAkB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAClC,MAAM,EAAC,KAAK,EAAC,GAAG,iBAAiB,EAAE,CAAA;QACnC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC,CAAC;IAEF,qCAAqC,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACrD,MAAM,EAAC,KAAK,EAAC,GAAG,iBAAiB,EAAE,CAAA;QACnC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QACxD,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACxD,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC,CAAA;QACjD,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACzD,CAAC,CAAC;IAEF,qBAAqB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACrC,MAAM,EAAC,KAAK,EAAC,GAAG,iBAAiB,EAAE,CAAA;QACnC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QAClC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC,CAAC;IAEF,2CAA2C,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC3D,MAAM,EAAC,KAAK,EAAC,GAAG,iBAAiB,EAAE,CAAA;QACnC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QAClC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACzC,CAAC,CAAC;IAEF,kCAAkC,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAClD,MAAM,EAAC,KAAK,EAAC,GAAG,iBAAiB,EAAE,CAAA;QACnC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC/C,CAAC,CAAC;IAEF,gDAAgD,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAChE,MAAM,EAAC,KAAK,EAAC,GAAG,iBAAiB,EAAE,CAAA;QACnC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QAC7C,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC,CAAC;IAEF,oBAAoB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACpC,MAAM,EAAC,KAAK,EAAE,OAAO,EAAC,GAAG,iBAAiB,EAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAC,CAAC,CAAC,CAAA;QAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACtC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IAC5C,CAAC,CAAC;IAEF,mBAAmB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACnC,MAAM,EAAC,KAAK,EAAE,OAAO,EAAC,GAAG,iBAAiB,EAAE,CAAA;QAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC,CAAA;QAC3D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACtB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC5C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IAC/C,CAAC,CAAC;IAEF,YAAY,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC5B,MAAM,EAAC,KAAK,EAAC,GAAG,iBAAiB,EAAE,CAAA;QACnC,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAA;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE;YAC/C,MAAM,CAAC,MAAM,EAAE,CAAA;YACf,OAAO;gBACN,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE;gBAC/B,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE;aAC/B,CAAA;QACF,CAAC,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAEtB,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAC,CAAC,CAAC,CAAA;QAC7D,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QACvB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAEtB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QACvB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAEtB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QACvB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAClC,CAAC,CAAC;CACF,CAAC,CAAA"}
package/x/ecs/types.d.ts CHANGED
@@ -3,8 +3,17 @@ export type Components = Record<string, unknown>;
3
3
  export type System = () => Generator<Change>;
4
4
  export type Id = string;
5
5
  export type AsComponents<C extends Components> = C;
6
- export type Change = [id: Id, components?: Partial<Components>];
7
6
  export type Select<C extends Components, K extends keyof C> = Pick<C, K> & Partial<C>;
7
+ export declare enum Kind {
8
+ Assign = 0,
9
+ Update = 1
10
+ }
11
+ export type Delta<C extends Components> = Partial<{
12
+ [K in keyof C]: C[K] | null;
13
+ }>;
14
+ export type Assign = [id: Id, kind: Kind, components?: Partial<Components>];
15
+ export type Update = [id: Id, kind: Kind, delta: Delta<Components>];
16
+ export type Change = Assign | Update;
8
17
  export type LifecycleCallbacks<C extends Components, K extends keyof C> = {
9
18
  tick: (id: Id, components: Select<C, K>) => void;
10
19
  exit: (id: Id) => void;
package/x/ecs/types.js CHANGED
@@ -1,2 +1,6 @@
1
- export {};
1
+ export var Kind;
2
+ (function (Kind) {
3
+ Kind[Kind["Assign"] = 0] = "Assign";
4
+ Kind[Kind["Update"] = 1] = "Update";
5
+ })(Kind || (Kind = {}));
2
6
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../s/ecs/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../s/ecs/types.ts"],"names":[],"mappings":"AASA,MAAM,CAAN,IAAY,IAAqB;AAAjC,WAAY,IAAI;IAAE,mCAAM,CAAA;IAAE,mCAAM,CAAA;AAAA,CAAC,EAArB,IAAI,KAAJ,IAAI,QAAiB"}
@@ -0,0 +1,2 @@
1
+ import { Change, Components, Entities } from "../types.js";
2
+ export declare function applyChangeToEntities<C extends Components>(entities: Entities<any>, change: Change): Partial<C> | undefined;
@@ -0,0 +1,30 @@
1
+ import { GMap, is } from "@e280/stz";
2
+ import { Kind } from "../types.js";
3
+ export function applyChangeToEntities(entities, change) {
4
+ switch (change[1]) {
5
+ case Kind.Assign: return assign(entities, change);
6
+ case Kind.Update: return update(entities, change);
7
+ default: throw new Error(`unknown change kind "${change[1]}"`);
8
+ }
9
+ }
10
+ function assign(entities, [id, _kind, components]) {
11
+ if (components) {
12
+ entities.set(id, components);
13
+ return components;
14
+ }
15
+ else {
16
+ entities.delete(id);
17
+ return undefined;
18
+ }
19
+ }
20
+ function update(entities, [id, _kind, fresh]) {
21
+ const components = GMap.guarantee(entities, id, () => ({}));
22
+ for (const [key, value] of Object.entries(fresh)) {
23
+ if (!is.happy(value))
24
+ delete components[key];
25
+ else
26
+ components[key] = value;
27
+ }
28
+ return components;
29
+ }
30
+ //# sourceMappingURL=apply-change.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-change.js","sourceRoot":"","sources":["../../../s/ecs/utils/apply-change.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAE,EAAE,EAAC,MAAM,WAAW,CAAA;AAClC,OAAO,EAAuC,IAAI,EAAS,MAAM,aAAa,CAAA;AAE9E,MAAM,UAAU,qBAAqB,CAAuB,QAAuB,EAAE,MAAc;IAClG,QAAQ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACnB,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,CAAI,QAAQ,EAAU,MAAM,CAAC,CAAA;QAC5D,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,CAAI,QAAQ,EAAU,MAAM,CAAC,CAAA;QAC5D,OAAO,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IAC/D,CAAC;AACF,CAAC;AAED,SAAS,MAAM,CAAuB,QAA8B,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,CAAS;IACpG,IAAI,UAAU,EAAE,CAAC;QAChB,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,UAAwB,CAAC,CAAA;QAC1C,OAAO,UAAwB,CAAA;IAChC,CAAC;SACI,CAAC;QACL,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACnB,OAAO,SAAS,CAAA;IACjB,CAAC;AACF,CAAC;AAED,SAAS,MAAM,CAAuB,QAA8B,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAS;IAC/F,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAQ,CAAA;IAClE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAA;;YACvC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IAC7B,CAAC;IACD,OAAO,UAAwB,CAAA;AAChC,CAAC"}