@benev/archimedes 0.1.0-5 → 0.1.0-7

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/README.md +17 -10
  2. package/package.json +2 -3
  3. package/s/ecs/index.ts +1 -1
  4. package/s/ecs/parts/entities.ts +1 -1
  5. package/s/ecs/parts/execute.ts +29 -0
  6. package/s/ecs/parts/lifecycle.ts +8 -6
  7. package/s/ecs/parts/types.ts +5 -7
  8. package/s/ecs/test/setup-example.ts +22 -18
  9. package/s/ecs/test/setup-lifecycle-counts.ts +9 -4
  10. package/s/ecs/test.ts +47 -37
  11. package/x/ecs/index.d.ts +1 -1
  12. package/x/ecs/index.js +1 -1
  13. package/x/ecs/index.js.map +1 -1
  14. package/x/ecs/parts/entities.d.ts +1 -1
  15. package/x/ecs/parts/entities.js +1 -1
  16. package/x/ecs/parts/entities.js.map +1 -1
  17. package/x/ecs/parts/execute.d.ts +3 -0
  18. package/x/ecs/parts/execute.js +18 -0
  19. package/x/ecs/parts/execute.js.map +1 -0
  20. package/x/ecs/parts/lifecycle.d.ts +3 -2
  21. package/x/ecs/parts/lifecycle.js +5 -5
  22. package/x/ecs/parts/lifecycle.js.map +1 -1
  23. package/x/ecs/parts/types.d.ts +5 -7
  24. package/x/ecs/parts/types.js +1 -2
  25. package/x/ecs/parts/types.js.map +1 -1
  26. package/x/ecs/test/setup-example.d.ts +10 -18
  27. package/x/ecs/test/setup-example.js +30 -23
  28. package/x/ecs/test/setup-example.js.map +1 -1
  29. package/x/ecs/test/setup-lifecycle-counts.d.ts +5 -1
  30. package/x/ecs/test/setup-lifecycle-counts.js +7 -4
  31. package/x/ecs/test/setup-lifecycle-counts.js.map +1 -1
  32. package/x/ecs/test.d.ts +1 -1
  33. package/x/ecs/test.js +47 -37
  34. package/x/ecs/test.js.map +1 -1
  35. package/s/ecs/parts/execute-systems.ts +0 -21
  36. package/x/ecs/parts/execute-systems.d.ts +0 -3
  37. package/x/ecs/parts/execute-systems.js +0 -14
  38. package/x/ecs/parts/execute-systems.js.map +0 -1
package/README.md CHANGED
@@ -21,7 +21,7 @@ npm install @benev/archimedes
21
21
  ## 🧩 ecs — entities, components, systems
22
22
 
23
23
  ```ts
24
- import {Entities, asSystems, makeId, executeSystems} from "@benev/archimedes"
24
+ import {Entities, Change, makeId, makeExecute} from "@benev/archimedes"
25
25
  ```
26
26
 
27
27
  1. ***define components.*** json-friendly data that entities could have.
@@ -35,11 +35,15 @@ import {Entities, asSystems, makeId, executeSystems} from "@benev/archimedes"
35
35
  ```ts
36
36
  export const entities = new Entities<MyComponents>()
37
37
  ```
38
- 1. ***define systems.*** select entities by components. formal changes.
38
+ 1. ***readonly entities.*** recommended to use this in your systems.
39
39
  ```ts
40
- const systems = asSystems<MyComponents>(
41
- function bleeding(entities, change) {
42
- for (const [id, components] of entities.select("health", "bleed")) {
40
+ export const entitiesReadonly = entities.readonly
41
+ ```
42
+ 1. ***define systems.*** select entities by components. changes are formalized.
43
+ ```ts
44
+ const systems = (change: Change<MyComponents>) => [
45
+ function bleeding() {
46
+ for (const [id, components] of entitiesReadonly.select("health", "bleed")) {
43
47
  if (components.bleed > 0) {
44
48
  const health = components.health - components.bleed
45
49
  change.merge(id, {health})
@@ -47,13 +51,13 @@ import {Entities, asSystems, makeId, executeSystems} from "@benev/archimedes"
47
51
  }
48
52
  },
49
53
 
50
- function death(entities, change) {
51
- for (const [id, components] of entities.select("health")) {
54
+ function death() {
55
+ for (const [id, components] of entitiesReadonly.select("health")) {
52
56
  if (components.health <= 0)
53
57
  change.delete(id)
54
58
  }
55
59
  },
56
- )
60
+ ]
57
61
  ```
58
62
  1. ***manually insert your first entity.***
59
63
  ```ts
@@ -63,9 +67,12 @@ import {Entities, asSystems, makeId, executeSystems} from "@benev/archimedes"
63
67
  console.log(entities.get(wizardId)?.health)
64
68
  // 100
65
69
  ```
66
- 1. ***execute systems to simulate each tick.***
70
+ 1. ***create an execute fn.*** run one tick at a time.
67
71
  ```ts
68
- executeSystems(entities, systems)
72
+ const execute = makeExecute(entities, systems)
73
+
74
+ // simulate one tick
75
+ execute()
69
76
 
70
77
  console.log(entities.get(wizardId)?.health)
71
78
  // 98
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@benev/archimedes",
3
- "version": "0.1.0-5",
3
+ "version": "0.1.0-7",
4
4
  "description": "game ecs with auto networking",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -17,14 +17,13 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "@e280/renraku": "^0.5.7",
20
- "@e280/stz": "^0.2.29",
20
+ "@e280/stz": "^0.2.32",
21
21
  "@msgpack/msgpack": "^3.1.3",
22
22
  "sparrow-rtc": "^0.2.15"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@e280/octo": "^0.1.0",
26
26
  "@e280/science": "^0.1.10",
27
- "npm-run-all": "^4.1.5",
28
27
  "typescript": "^6.0.2"
29
28
  },
30
29
  "author": "Chase Moskal <chasemoskal@gmail.com>",
package/s/ecs/index.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  export * from "./parts/apply-delta.js"
3
3
  export * from "./parts/change.js"
4
4
  export * from "./parts/entities.js"
5
- export * from "./parts/execute-systems.js"
5
+ export * from "./parts/execute.js"
6
6
  export * from "./parts/lifecycle.js"
7
7
  export * from "./parts/make-id.js"
8
8
  export * from "./parts/types.js"
@@ -41,7 +41,7 @@ export class Entities<C extends Components> extends GMap<Id, Partial<C>> {
41
41
  yield* this.#makeCache(componentKeys)
42
42
  }
43
43
 
44
- readonly() {
44
+ get readonly() {
45
45
  return this as EntitiesReadonly<C>
46
46
  }
47
47
 
@@ -0,0 +1,29 @@
1
+
2
+ import {Change} from "./change.js"
3
+ import {Entities} from "./entities.js"
4
+ import {applyDelta} from "./apply-delta.js"
5
+ import {Delta, Components, Systems} from "./types.js"
6
+
7
+ export function makeExecute<C extends Components>(
8
+ entities: Entities<C>,
9
+ systems: Systems<C>,
10
+ ) {
11
+
12
+ let deltas: Delta<C>[] = []
13
+
14
+ const change = new Change<C>(delta => {
15
+ applyDelta(entities, delta)
16
+ deltas.push(delta)
17
+ })
18
+
19
+ const fns = systems(change)
20
+
21
+ return () => {
22
+ for (const fn of fns)
23
+ fn()
24
+ const ret = deltas
25
+ deltas = []
26
+ return ret
27
+ }
28
+ }
29
+
@@ -1,20 +1,22 @@
1
1
 
2
2
  import {GMap} from "@e280/stz"
3
- import {Components, Id, LifecycleCallbacks, LifecycleEnter, System} from "./types.js"
3
+ import {EntitiesReadonly} from "./entities.js"
4
+ import {Components, Id, LifecycleCallbacks, LifecycleEnter} from "./types.js"
4
5
 
5
6
  export function lifecycle<C extends Components, K extends keyof C>(
7
+ entities: EntitiesReadonly<C>,
6
8
  componentKeys: K[],
7
9
  enter: LifecycleEnter<C, K>
8
- ): System<C> {
10
+ ) {
9
11
 
10
12
  const alive = new GMap<Id, LifecycleCallbacks<C, K>>()
11
13
 
12
- return (entities, commit) => {
14
+ return () => {
13
15
 
14
16
  // add fresh entities
15
17
  for (const [id, components] of entities.select(...componentKeys)) {
16
- const callbacks = alive.guarantee(id, () => enter(id, components, commit))
17
- callbacks.tick(id, components)
18
+ const callbacks = alive.guarantee(id, () => enter(id, components))
19
+ callbacks.tick(components)
18
20
  }
19
21
 
20
22
  // delete stale entities
@@ -22,7 +24,7 @@ export function lifecycle<C extends Components, K extends keyof C>(
22
24
  for (const [id, callbacks] of alive) {
23
25
  if (currentIds.has(id)) continue
24
26
  alive.delete(id)
25
- callbacks.exit(id)
27
+ callbacks.exit()
26
28
  }
27
29
  }
28
30
  }
@@ -1,6 +1,5 @@
1
1
 
2
2
  import {Change} from "./change.js"
3
- import {EntitiesReadonly} from "./entities.js"
4
3
 
5
4
  export type Id = string
6
5
  export type Components = Record<string, unknown>
@@ -13,16 +12,15 @@ export type DeltaMerge<C extends Components> = [kind: DeltaKind.Merge, id: Id, p
13
12
  export type DeltaDrop<C extends Components> = [kind: DeltaKind.Drop, id: Id, keys: (keyof C)[]]
14
13
  export type Delta<C extends Components> = DeltaSet<C> | DeltaMerge<C> | DeltaDrop<C>
15
14
 
16
- export type System<C extends Components> = (entities: EntitiesReadonly<C>, change: Change<C>) => void
17
- export const asSystem = <C extends Components>(system: System<C>) => system
18
- export const asSystems = <C extends Components>(...systems: System<C>[]) => systems
15
+ export type Systems<C extends Components> = (change: Change<C>) => (() => void)[]
16
+ export const asSystems = <C extends Components>(systems: Systems<C>) => systems
19
17
 
20
18
  export type LifecycleCallbacks<C extends Components, K extends keyof C> = {
21
- tick: (id: Id, components: Select<C, K>) => void
22
- exit: (id: Id) => void
19
+ tick: (components: Select<C, K>) => void
20
+ exit: () => void
23
21
  }
24
22
 
25
23
  export type LifecycleEnter<C extends Components, K extends keyof C> = (
26
- (id: Id, components: Select<C, K>, change: Change<C>) => LifecycleCallbacks<C, K>
24
+ (id: Id, components: Select<C, K>) => LifecycleCallbacks<C, K>
27
25
  )
28
26
 
@@ -2,19 +2,23 @@
2
2
  import {Change} from "../parts/change.js"
3
3
  import {asSystems} from "../parts/types.js"
4
4
  import {Entities} from "../parts/entities.js"
5
+ import {makeExecute} from "../parts/execute.js"
5
6
  import {applyDelta} from "../parts/apply-delta.js"
6
7
 
8
+ export type ExampleComponents = {
9
+ health: number
10
+ bleed: number
11
+ mana: number
12
+ manaRegen: number
13
+ }
14
+
7
15
  export function setupExample() {
8
- type MyComponents = {
9
- health: number
10
- bleed: number
11
- mana: number
12
- manaRegen: number
13
- }
14
-
15
- const systems = asSystems<MyComponents>(
16
- function manaRegen(entities, change) {
17
- for (const [id, components] of entities.select("mana", "manaRegen")) {
16
+ const entities = new Entities<ExampleComponents>()
17
+ const rentities = entities.readonly
18
+
19
+ const systems = asSystems<ExampleComponents>(change => [
20
+ function manaRegen() {
21
+ for (const [id, components] of rentities.select("mana", "manaRegen")) {
18
22
  if (components.manaRegen !== 0) {
19
23
  const mana = components.mana + components.manaRegen
20
24
  change.merge(id, {mana})
@@ -22,8 +26,8 @@ export function setupExample() {
22
26
  }
23
27
  },
24
28
 
25
- function bleeding(entities, change) {
26
- for (const [id, components] of entities.select("health", "bleed")) {
29
+ function bleeding() {
30
+ for (const [id, components] of rentities.select("health", "bleed")) {
27
31
  if (components.bleed >= 0) {
28
32
  const health = components.health - components.bleed
29
33
  const bleed = components.bleed - 1
@@ -34,17 +38,17 @@ export function setupExample() {
34
38
  }
35
39
  },
36
40
 
37
- function death(entities, change) {
38
- for (const [id, components] of entities.select("health")) {
41
+ function death() {
42
+ for (const [id, components] of rentities.select("health")) {
39
43
  if (components.health <= 0)
40
44
  change.delete(id)
41
45
  }
42
46
  },
43
- )
47
+ ])
44
48
 
45
- const entities = new Entities<MyComponents>()
46
- const change = new Change<MyComponents>(delta => applyDelta(entities, delta))
49
+ const change = new Change<ExampleComponents>(delta => applyDelta(entities, delta))
50
+ const execute = makeExecute(entities, systems)
47
51
 
48
- return {systems, entities, change}
52
+ return {systems, entities, change, execute}
49
53
  }
50
54
 
@@ -6,10 +6,15 @@ export function setupLifecycleCounts() {
6
6
  enters: 0,
7
7
  ticks: 0,
8
8
  exits: 0,
9
- expect: (enters: number, ticks: number, exits: number) => {
10
- expect(counts.enters).is(enters)
11
- expect(counts.ticks).is(ticks)
12
- expect(counts.exits).is(exits)
9
+ expect: (e: {enters: number, ticks: number, exits: number}) => {
10
+ expect(counts.enters, `enters, expected ${e.enters}, got ${counts.enters}`)
11
+ .is(e.enters)
12
+
13
+ expect(counts.ticks, `ticks, expected ${e.ticks}, got ${counts.ticks}`)
14
+ .is(e.ticks)
15
+
16
+ expect(counts.exits, `exits, expected ${e.exits}, got ${counts.exits}`)
17
+ .is(e.exits)
13
18
  },
14
19
  }
15
20
  return counts
package/s/ecs/test.ts CHANGED
@@ -1,9 +1,10 @@
1
1
 
2
2
  import {suite, test, expect} from "@e280/science"
3
+ import {asSystems} from "./parts/types.js"
3
4
  import {lifecycle} from "./parts/lifecycle.js"
4
- import {setupExample} from "./test/setup-example.js"
5
- import {executeSystems} from "./parts/execute-systems.js"
5
+ import {makeExecute} from "./parts/execute.js"
6
6
  import {setupLifecycleCounts} from "./test/setup-lifecycle-counts.js"
7
+ import {ExampleComponents, setupExample} from "./test/setup-example.js"
7
8
 
8
9
  export default suite({
9
10
  "create an entity": test(async() => {
@@ -92,76 +93,85 @@ export default suite({
92
93
  }),
93
94
 
94
95
  "wizard regens mana": test(async() => {
95
- const {entities, change, systems} = setupExample()
96
+ const {entities, change, execute} = setupExample()
96
97
  const wizardId = change.create({health: 100, mana: 50, manaRegen: 1})
97
- const changes = executeSystems(entities, systems)
98
+ const changes = execute()
98
99
  expect(changes.length).is(1)
99
100
  expect(entities.require(wizardId).mana).is(51)
100
101
  }),
101
102
 
102
103
  "death by bleeding": test(async() => {
103
- const {entities, change, systems} = setupExample()
104
+ const {entities, change, execute} = setupExample()
104
105
  const wizardId = change.create({health: 3, bleed: 2})
105
106
  expect(entities.require(wizardId).health).is(3)
106
- executeSystems(entities, systems)
107
+ execute()
107
108
  expect(entities.require(wizardId).health).is(1)
108
- executeSystems(entities, systems)
109
+ execute()
109
110
  expect(entities.has(wizardId)).is(false)
110
111
  }),
111
112
 
112
113
  "lifecycles": test(async() => {
113
114
  const {entities, change} = setupExample()
114
115
  const counts = setupLifecycleCounts()
115
- const system = lifecycle(["health"], () => {
116
- counts.enters++
117
- return {
118
- tick: () => void counts.ticks++,
119
- exit: () => void counts.exits++,
120
- }
121
- })
122
- counts.expect(0, 0, 0)
116
+ const systems = asSystems<ExampleComponents>(() => [
117
+ lifecycle(entities.readonly, ["health"], () => {
118
+ counts.enters++
119
+ return {
120
+ tick: () => void counts.ticks++,
121
+ exit: () => void counts.exits++,
122
+ }
123
+ }),
124
+ ])
125
+ const execute = makeExecute(entities, systems)
126
+ counts.expect({enters: 0, ticks: 0, exits: 0})
123
127
 
124
128
  const wizardId = change.create({health: 100, mana: 50})
125
- executeSystems(entities, [system])
126
- counts.expect(1, 1, 0)
129
+ execute()
130
+ counts.expect({enters: 1, ticks: 1, exits: 0})
127
131
 
128
132
  change.merge(wizardId, {health: 100, mana: 100})
129
- executeSystems(entities, [system])
130
- counts.expect(1, 2, 0)
133
+ execute()
134
+ counts.expect({enters: 1, ticks: 2, exits: 0})
131
135
 
132
136
  change.delete(wizardId)
133
- executeSystems(entities, [system])
134
- counts.expect(1, 2, 1)
137
+ execute()
138
+ counts.expect({enters: 1, ticks: 2, exits: 1})
135
139
  expect(entities.size).is(0)
136
140
  }),
137
141
 
138
- "lifecycle can commit": test(async() => {
142
+ "lifecycle can commit changes": test(async() => {
139
143
  const {entities, change} = setupExample()
140
- const system = lifecycle(["health"], (_id, _components, change) => {
141
- change.create({mana: 50})
142
- return {
143
- tick: () => {},
144
- exit: () => {},
145
- }
146
- })
144
+ const systems = asSystems<ExampleComponents>(change => [
145
+ lifecycle(entities.readonly, ["health"], () => {
146
+ change.create({mana: 50})
147
+ return {
148
+ tick: () => {},
149
+ exit: () => {},
150
+ }
151
+ }),
152
+ ])
153
+ const execute = makeExecute(entities, systems)
147
154
  change.create({health: 100})
148
- executeSystems(entities, [system])
155
+ execute()
149
156
  expect([...entities.select("mana")].length).is(1)
150
157
  }),
151
158
 
152
159
  "lifecycle self-deletion immediate cleanup": test(async() => {
153
160
  const {entities, change} = setupExample()
154
161
  let ranExit = 0
155
- const system = lifecycle(["health"], (id, _components, change) => {
156
- return {
157
- tick: () => change.delete(id),
158
- exit: () => { ranExit++ },
159
- }
160
- })
162
+ const systems = asSystems<ExampleComponents>(change => [
163
+ lifecycle(entities.readonly, ["health"], (id) => {
164
+ return {
165
+ tick: () => change.delete(id),
166
+ exit: () => { ranExit++ },
167
+ }
168
+ }),
169
+ ])
170
+ const execute = makeExecute(entities, systems)
161
171
  change.create({health: 100})
162
172
  expect([...entities.select("health")].length).is(1)
163
173
  expect(ranExit).is(0)
164
- executeSystems(entities, [system])
174
+ execute()
165
175
  expect(ranExit).is(1)
166
176
  expect([...entities.select("health")].length).is(0)
167
177
  }),
package/x/ecs/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export * from "./parts/apply-delta.js";
2
2
  export * from "./parts/change.js";
3
3
  export * from "./parts/entities.js";
4
- export * from "./parts/execute-systems.js";
4
+ export * from "./parts/execute.js";
5
5
  export * from "./parts/lifecycle.js";
6
6
  export * from "./parts/make-id.js";
7
7
  export * from "./parts/types.js";
package/x/ecs/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  export * from "./parts/apply-delta.js";
2
2
  export * from "./parts/change.js";
3
3
  export * from "./parts/entities.js";
4
- export * from "./parts/execute-systems.js";
4
+ export * from "./parts/execute.js";
5
5
  export * from "./parts/lifecycle.js";
6
6
  export * from "./parts/make-id.js";
7
7
  export * from "./parts/types.js";
@@ -1 +1 @@
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,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"}
@@ -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":"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"}
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,2 +1,3 @@
1
- import { Components, LifecycleEnter, System } from "./types.js";
2
- export declare function lifecycle<C extends Components, K extends keyof C>(componentKeys: K[], enter: LifecycleEnter<C, K>): System<C>;
1
+ import { EntitiesReadonly } from "./entities.js";
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>): () => void;
@@ -1,11 +1,11 @@
1
1
  import { GMap } from "@e280/stz";
2
- export function lifecycle(componentKeys, enter) {
2
+ export function lifecycle(entities, componentKeys, enter) {
3
3
  const alive = new GMap();
4
- return (entities, commit) => {
4
+ return () => {
5
5
  // add fresh entities
6
6
  for (const [id, components] of entities.select(...componentKeys)) {
7
- const callbacks = alive.guarantee(id, () => enter(id, components, commit));
8
- callbacks.tick(id, components);
7
+ const callbacks = alive.guarantee(id, () => enter(id, components));
8
+ callbacks.tick(components);
9
9
  }
10
10
  // delete stale entities
11
11
  const currentIds = new Set([...entities.select(...componentKeys)].map(([id]) => id));
@@ -13,7 +13,7 @@ export function lifecycle(componentKeys, enter) {
13
13
  if (currentIds.has(id))
14
14
  continue;
15
15
  alive.delete(id);
16
- callbacks.exit(id);
16
+ callbacks.exit();
17
17
  }
18
18
  };
19
19
  }
@@ -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;AAG9B,MAAM,UAAU,SAAS,CACvB,aAAkB,EAClB,KAA2B;IAG5B,MAAM,KAAK,GAAG,IAAI,IAAI,EAAgC,CAAA;IAEtD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;QAE3B,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,EAAE,MAAM,CAAC,CAAC,CAAA;YAC1E,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
+ {"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,UAAU,CAAC,CAAA;QAC3B,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,EAAE,CAAA;QACjB,CAAC;IACF,CAAC,CAAA;AACF,CAAC"}
@@ -1,5 +1,4 @@
1
1
  import { Change } from "./change.js";
2
- import { EntitiesReadonly } from "./entities.js";
3
2
  export type Id = string;
4
3
  export type Components = Record<string, unknown>;
5
4
  export type AsComponents<C extends Components> = C;
@@ -13,11 +12,10 @@ export type DeltaSet<C extends Components> = [kind: DeltaKind.Set, id: Id, compo
13
12
  export type DeltaMerge<C extends Components> = [kind: DeltaKind.Merge, id: Id, patch: Partial<C>];
14
13
  export type DeltaDrop<C extends Components> = [kind: DeltaKind.Drop, id: Id, keys: (keyof C)[]];
15
14
  export type Delta<C extends Components> = DeltaSet<C> | DeltaMerge<C> | DeltaDrop<C>;
16
- export type System<C extends Components> = (entities: EntitiesReadonly<C>, change: Change<C>) => void;
17
- export declare const asSystem: <C extends Components>(system: System<C>) => System<C>;
18
- export declare const asSystems: <C extends Components>(...systems: System<C>[]) => System<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>;
19
17
  export type LifecycleCallbacks<C extends Components, K extends keyof C> = {
20
- tick: (id: Id, components: Select<C, K>) => void;
21
- exit: (id: Id) => void;
18
+ tick: (components: Select<C, K>) => void;
19
+ exit: () => void;
22
20
  };
23
- export type LifecycleEnter<C extends Components, K extends keyof C> = ((id: Id, components: Select<C, K>, change: Change<C>) => LifecycleCallbacks<C, K>);
21
+ export type LifecycleEnter<C extends Components, K extends keyof C> = ((id: Id, components: Select<C, K>) => LifecycleCallbacks<C, K>);
@@ -4,6 +4,5 @@ export var DeltaKind;
4
4
  DeltaKind[DeltaKind["Merge"] = 1] = "Merge";
5
5
  DeltaKind[DeltaKind["Drop"] = 2] = "Drop";
6
6
  })(DeltaKind || (DeltaKind = {}));
7
- export const asSystem = (system) => system;
8
- export const asSystems = (...systems) => systems;
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":"AASA,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,QAAQ,GAAG,CAAuB,MAAiB,EAAE,EAAE,CAAC,MAAM,CAAA;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAuB,GAAG,OAAoB,EAAE,EAAE,CAAC,OAAO,CAAA"}
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,22 +1,14 @@
1
1
  import { Change } from "../parts/change.js";
2
2
  import { Entities } from "../parts/entities.js";
3
+ export type ExampleComponents = {
4
+ health: number;
5
+ bleed: number;
6
+ mana: number;
7
+ manaRegen: number;
8
+ };
3
9
  export declare function setupExample(): {
4
- systems: import("../parts/types.js").System<{
5
- health: number;
6
- bleed: number;
7
- mana: number;
8
- manaRegen: number;
9
- }>[];
10
- entities: Entities<{
11
- health: number;
12
- bleed: number;
13
- mana: number;
14
- manaRegen: number;
15
- }>;
16
- change: Change<{
17
- health: number;
18
- bleed: number;
19
- mana: number;
20
- manaRegen: number;
21
- }>;
10
+ systems: import("../parts/types.js").Systems<ExampleComponents>;
11
+ entities: Entities<ExampleComponents>;
12
+ change: Change<ExampleComponents>;
13
+ execute: () => import("../parts/types.js").Delta<ExampleComponents>[];
22
14
  };
@@ -1,33 +1,40 @@
1
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";
4
5
  import { applyDelta } from "../parts/apply-delta.js";
5
6
  export function setupExample() {
6
- const systems = asSystems(function manaRegen(entities, change) {
7
- for (const [id, components] of entities.select("mana", "manaRegen")) {
8
- if (components.manaRegen !== 0) {
9
- const mana = components.mana + components.manaRegen;
10
- 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
+ }
11
16
  }
12
- }
13
- }, function bleeding(entities, change) {
14
- for (const [id, components] of entities.select("health", "bleed")) {
15
- if (components.bleed >= 0) {
16
- const health = components.health - components.bleed;
17
- const bleed = components.bleed - 1;
18
- 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");
19
27
  }
20
- if (components.bleed <= 0)
21
- change.drop(id, "bleed");
22
- }
23
- }, function death(entities, change) {
24
- for (const [id, components] of entities.select("health")) {
25
- if (components.health <= 0)
26
- change.delete(id);
27
- }
28
- });
29
- const entities = new Entities();
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
+ ]);
30
36
  const change = new Change(delta => applyDelta(entities, delta));
31
- return { systems, entities, change };
37
+ const execute = makeExecute(entities, systems);
38
+ return { systems, entities, change, execute };
32
39
  }
33
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;AAC7C,OAAO,EAAC,UAAU,EAAC,MAAM,yBAAyB,CAAA;AAElD,MAAM,UAAU,YAAY;IAQ3B,MAAM,OAAO,GAAG,SAAS,CACxB,SAAS,SAAS,CAAC,QAAQ,EAAE,MAAM;QAClC,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,CAAC,KAAK,CAAC,EAAE,EAAE,EAAC,IAAI,EAAC,CAAC,CAAA;YACzB,CAAC;QACF,CAAC;IACF,CAAC,EAED,SAAS,QAAQ,CAAC,QAAQ,EAAE,MAAM;QACjC,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,CAAC,KAAK,CAAC,EAAE,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC,CAAC,CAAA;YAClC,CAAC;YACD,IAAI,UAAU,CAAC,KAAK,IAAI,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;QAC1B,CAAC;IACF,CAAC,EAED,SAAS,KAAK,CAAC,QAAQ,EAAE,MAAM;QAC9B,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,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC;IACF,CAAC,CACD,CAAA;IAED,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAgB,CAAA;IAC7C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAe,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IAE7E,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAC,CAAA;AACnC,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
@@ -13,7 +13,7 @@ declare const _default: {
13
13
  "wizard regens mana": import("@e280/science").Test;
14
14
  "death by bleeding": import("@e280/science").Test;
15
15
  lifecycles: import("@e280/science").Test;
16
- "lifecycle can commit": import("@e280/science").Test;
16
+ "lifecycle can commit changes": import("@e280/science").Test;
17
17
  "lifecycle self-deletion immediate cleanup": import("@e280/science").Test;
18
18
  };
19
19
  export default _default;
package/x/ecs/test.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import { suite, test, expect } from "@e280/science";
2
+ import { asSystems } from "./parts/types.js";
2
3
  import { lifecycle } from "./parts/lifecycle.js";
3
- import { setupExample } from "./test/setup-example.js";
4
- import { executeSystems } from "./parts/execute-systems.js";
4
+ import { makeExecute } from "./parts/execute.js";
5
5
  import { setupLifecycleCounts } from "./test/setup-lifecycle-counts.js";
6
+ import { setupExample } from "./test/setup-example.js";
6
7
  export default suite({
7
8
  "create an entity": test(async () => {
8
9
  const { entities, change } = setupExample();
@@ -79,69 +80,78 @@ export default suite({
79
80
  expect([...entities.select("health")].length).is(1);
80
81
  }),
81
82
  "wizard regens mana": test(async () => {
82
- const { entities, change, systems } = setupExample();
83
+ const { entities, change, execute } = setupExample();
83
84
  const wizardId = change.create({ health: 100, mana: 50, manaRegen: 1 });
84
- const changes = executeSystems(entities, systems);
85
+ const changes = execute();
85
86
  expect(changes.length).is(1);
86
87
  expect(entities.require(wizardId).mana).is(51);
87
88
  }),
88
89
  "death by bleeding": test(async () => {
89
- const { entities, change, systems } = setupExample();
90
+ const { entities, change, execute } = setupExample();
90
91
  const wizardId = change.create({ health: 3, bleed: 2 });
91
92
  expect(entities.require(wizardId).health).is(3);
92
- executeSystems(entities, systems);
93
+ execute();
93
94
  expect(entities.require(wizardId).health).is(1);
94
- executeSystems(entities, systems);
95
+ execute();
95
96
  expect(entities.has(wizardId)).is(false);
96
97
  }),
97
98
  "lifecycles": test(async () => {
98
99
  const { entities, change } = setupExample();
99
100
  const counts = setupLifecycleCounts();
100
- const system = lifecycle(["health"], () => {
101
- counts.enters++;
102
- return {
103
- tick: () => void counts.ticks++,
104
- exit: () => void counts.exits++,
105
- };
106
- });
107
- counts.expect(0, 0, 0);
101
+ const systems = asSystems(() => [
102
+ lifecycle(entities.readonly, ["health"], () => {
103
+ counts.enters++;
104
+ return {
105
+ tick: () => void counts.ticks++,
106
+ exit: () => void counts.exits++,
107
+ };
108
+ }),
109
+ ]);
110
+ const execute = makeExecute(entities, systems);
111
+ counts.expect({ enters: 0, ticks: 0, exits: 0 });
108
112
  const wizardId = change.create({ health: 100, mana: 50 });
109
- executeSystems(entities, [system]);
110
- counts.expect(1, 1, 0);
113
+ execute();
114
+ counts.expect({ enters: 1, ticks: 1, exits: 0 });
111
115
  change.merge(wizardId, { health: 100, mana: 100 });
112
- executeSystems(entities, [system]);
113
- counts.expect(1, 2, 0);
116
+ execute();
117
+ counts.expect({ enters: 1, ticks: 2, exits: 0 });
114
118
  change.delete(wizardId);
115
- executeSystems(entities, [system]);
116
- counts.expect(1, 2, 1);
119
+ execute();
120
+ counts.expect({ enters: 1, ticks: 2, exits: 1 });
117
121
  expect(entities.size).is(0);
118
122
  }),
119
- "lifecycle can commit": test(async () => {
123
+ "lifecycle can commit changes": test(async () => {
120
124
  const { entities, change } = setupExample();
121
- const system = lifecycle(["health"], (_id, _components, change) => {
122
- change.create({ mana: 50 });
123
- return {
124
- tick: () => { },
125
- exit: () => { },
126
- };
127
- });
125
+ const systems = asSystems(change => [
126
+ lifecycle(entities.readonly, ["health"], () => {
127
+ change.create({ mana: 50 });
128
+ return {
129
+ tick: () => { },
130
+ exit: () => { },
131
+ };
132
+ }),
133
+ ]);
134
+ const execute = makeExecute(entities, systems);
128
135
  change.create({ health: 100 });
129
- executeSystems(entities, [system]);
136
+ execute();
130
137
  expect([...entities.select("mana")].length).is(1);
131
138
  }),
132
139
  "lifecycle self-deletion immediate cleanup": test(async () => {
133
140
  const { entities, change } = setupExample();
134
141
  let ranExit = 0;
135
- const system = lifecycle(["health"], (id, _components, change) => {
136
- return {
137
- tick: () => change.delete(id),
138
- exit: () => { ranExit++; },
139
- };
140
- });
142
+ const systems = asSystems(change => [
143
+ lifecycle(entities.readonly, ["health"], (id) => {
144
+ return {
145
+ tick: () => change.delete(id),
146
+ exit: () => { ranExit++; },
147
+ };
148
+ }),
149
+ ]);
150
+ const execute = makeExecute(entities, systems);
141
151
  change.create({ health: 100 });
142
152
  expect([...entities.select("health")].length).is(1);
143
153
  expect(ranExit).is(0);
144
- executeSystems(entities, [system]);
154
+ execute();
145
155
  expect(ranExit).is(1);
146
156
  expect([...entities.select("health")].length).is(0);
147
157
  }),
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":"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"}
@@ -1,21 +0,0 @@
1
-
2
- import {Change} from "./change.js"
3
- import {Entities} from "./entities.js"
4
- import {applyDelta} from "./apply-delta.js"
5
- import {Delta, Components, System} from "./types.js"
6
-
7
- export function executeSystems<C extends Components>(entities: Entities<C>, systems: System<C>[]) {
8
- const entitiesReadonly = entities.readonly()
9
- const deltas: Delta<C>[] = []
10
-
11
- const change = new Change<C>(delta => {
12
- applyDelta(entities, delta)
13
- deltas.push(delta)
14
- })
15
-
16
- for (const system of systems)
17
- system(entitiesReadonly, change)
18
-
19
- return deltas
20
- }
21
-
@@ -1,3 +0,0 @@
1
- import { Entities } from "./entities.js";
2
- import { Delta, Components, System } from "./types.js";
3
- export declare function executeSystems<C extends Components>(entities: Entities<C>, systems: System<C>[]): Delta<C>[];
@@ -1,14 +0,0 @@
1
- import { Change } from "./change.js";
2
- import { applyDelta } from "./apply-delta.js";
3
- export function executeSystems(entities, systems) {
4
- const entitiesReadonly = entities.readonly();
5
- const deltas = [];
6
- const change = new Change(delta => {
7
- applyDelta(entities, delta);
8
- deltas.push(delta);
9
- });
10
- for (const system of systems)
11
- system(entitiesReadonly, change);
12
- return deltas;
13
- }
14
- //# sourceMappingURL=execute-systems.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execute-systems.js","sourceRoot":"","sources":["../../../s/ecs/parts/execute-systems.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAElC,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAG3C,MAAM,UAAU,cAAc,CAAuB,QAAqB,EAAE,OAAoB;IAC/F,MAAM,gBAAgB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAA;IAC5C,MAAM,MAAM,GAAe,EAAE,CAAA;IAE7B,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,KAAK,MAAM,MAAM,IAAI,OAAO;QAC3B,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;IAEjC,OAAO,MAAM,CAAA;AACd,CAAC"}