@benev/archimedes 0.1.0-1
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/LICENSE +23 -0
- package/README.md +19 -0
- package/package.json +44 -0
- package/s/_archive/GLOSSARY.md +31 -0
- package/s/_archive/README.md +209 -0
- package/s/_archive/core/authority.ts +62 -0
- package/s/_archive/core/contact/codecs.i.ts +3 -0
- package/s/_archive/core/contact/codecs.ts +14 -0
- package/s/_archive/core/contact/contact.test.ts +32 -0
- package/s/_archive/core/contact/contact.ts +63 -0
- package/s/_archive/core/contact/types.ts +24 -0
- package/s/_archive/core/contact/wiring.i.ts +3 -0
- package/s/_archive/core/contact/wiring.ts +212 -0
- package/s/_archive/core/fiber.ts +94 -0
- package/s/_archive/core/liaison.ts +73 -0
- package/s/_archive/core/parcels/inbox.ts +83 -0
- package/s/_archive/core/parcels/parceller.ts +20 -0
- package/s/_archive/core/parcels/parcels.test.ts +136 -0
- package/s/_archive/core/parcels/types.ts +5 -0
- package/s/_archive/core/parcels/utils/nanny.ts +23 -0
- package/s/_archive/core/simulator.ts +11 -0
- package/s/_archive/core/speculator.ts +63 -0
- package/s/_archive/core/types.ts +32 -0
- package/s/_archive/core/utils/handle-telegrams.ts +34 -0
- package/s/_archive/core/utils/is-input-dispatch.ts +10 -0
- package/s/_archive/core/utils/make-telegram-for-inputs.ts +12 -0
- package/s/_archive/core/utils/on-channel-message.ts +11 -0
- package/s/_archive/eureka/eureka.ts +20 -0
- package/s/_archive/eureka/index.ts +0 -0
- package/s/_archive/eureka/integration/context.ts +9 -0
- package/s/_archive/eureka/integration/simulator.ts +75 -0
- package/s/_archive/eureka/integration/types.ts +12 -0
- package/s/_archive/eureka/integration/utils/inputs.ts +24 -0
- package/s/_archive/eureka/integration/utils/relevance.ts +10 -0
- package/s/_archive/eureka/parts/entity.ts +37 -0
- package/s/_archive/eureka/parts/system.ts +38 -0
- package/s/_archive/eureka/parts/types.ts +21 -0
- package/s/_archive/eureka/parts/world.ts +140 -0
- package/s/_archive/eureka/testing/eureka.test.ts +27 -0
- package/s/_archive/eureka/testing/integration.test.ts +40 -0
- package/s/_archive/eureka/testing/situations/health.ts +43 -0
- package/s/_archive/eureka/testing/situations/integration.ts +45 -0
- package/s/_archive/index.ts +6 -0
- package/s/_archive/session/client.ts +56 -0
- package/s/_archive/session/host.ts +71 -0
- package/s/_archive/session/meta/meta-client.ts +5 -0
- package/s/_archive/session/meta/meta-host.ts +18 -0
- package/s/_archive/session/meta/types.ts +15 -0
- package/s/_archive/session/parts/client-on.ts +8 -0
- package/s/_archive/session/parts/fiber-rpc.ts +28 -0
- package/s/_archive/session/parts/host-on.ts +9 -0
- package/s/_archive/session/parts/hub.ts +40 -0
- package/s/_archive/session/parts/netfibers.ts +14 -0
- package/s/_archive/session/parts/seat.ts +35 -0
- package/s/_archive/session/parts/spoke.ts +10 -0
- package/s/_archive/sugar/easy-host.ts +68 -0
- package/s/_archive/tests.test.ts +17 -0
- package/s/_archive/tools/averager.ts +29 -0
- package/s/_archive/tools/bucket.ts +17 -0
- package/s/_archive/tools/chronicle.ts +32 -0
- package/s/_archive/tools/disposers.ts +5 -0
- package/s/_archive/tools/id-counter.ts +13 -0
- package/s/_archive/tools/loop.ts +12 -0
- package/s/_archive/tools/pub.ts +22 -0
- package/s/_archive/tools/ticker.ts +22 -0
- package/s/_archive/tools/u8.ts +7 -0
- package/s/_archive/transports/sparrow/fibers.ts +19 -0
- package/s/_archive/transports/sparrow/start-sparrow-host.ts +26 -0
- package/s/_archive/transports/sparrow/utils/netfibers-from-cable.ts +10 -0
- package/s/ecs/index.ts +7 -0
- package/s/ecs/parts/changers.ts +16 -0
- package/s/ecs/parts/make-id.ts +7 -0
- package/s/ecs/parts/world.ts +68 -0
- package/s/ecs/test/setup-example-world.ts +42 -0
- package/s/ecs/test/setup-lifecycle-counts.ts +17 -0
- package/s/ecs/test.ts +99 -0
- package/s/ecs/types.ts +19 -0
- package/s/ecs/utils/is-match.ts +7 -0
- package/s/ecs/utils/optimizer.ts +38 -0
- package/s/index.ts +3 -0
- package/s/net/test.ts +9 -0
- package/s/net/types.ts +1 -0
- package/s/sim/test.ts +9 -0
- package/s/sim/types.ts +1 -0
- package/s/test.ts +8 -0
- package/x/ecs/index.d.ts +4 -0
- package/x/ecs/index.js +5 -0
- package/x/ecs/index.js.map +1 -0
- package/x/ecs/parts/changers.d.ts +4 -0
- package/x/ecs/parts/changers.js +11 -0
- package/x/ecs/parts/changers.js.map +1 -0
- package/x/ecs/parts/make-id.d.ts +1 -0
- package/x/ecs/parts/make-id.js +5 -0
- package/x/ecs/parts/make-id.js.map +1 -0
- package/x/ecs/parts/world.d.ts +11 -0
- package/x/ecs/parts/world.js +59 -0
- package/x/ecs/parts/world.js.map +1 -0
- package/x/ecs/test/setup-example-world.d.ts +10 -0
- package/x/ecs/test/setup-example-world.js +31 -0
- package/x/ecs/test/setup-example-world.js.map +1 -0
- package/x/ecs/test/setup-lifecycle-counts.d.ts +6 -0
- package/x/ecs/test/setup-lifecycle-counts.js +15 -0
- package/x/ecs/test/setup-lifecycle-counts.js.map +1 -0
- package/x/ecs/test.d.ts +13 -0
- package/x/ecs/test.js +85 -0
- package/x/ecs/test.js.map +1 -0
- package/x/ecs/types.d.ts +12 -0
- package/x/ecs/types.js +2 -0
- package/x/ecs/types.js.map +1 -0
- package/x/ecs/utils/is-match.d.ts +2 -0
- package/x/ecs/utils/is-match.js +4 -0
- package/x/ecs/utils/is-match.js.map +1 -0
- package/x/ecs/utils/optimizer.d.ts +9 -0
- package/x/ecs/utils/optimizer.js +37 -0
- package/x/ecs/utils/optimizer.js.map +1 -0
- package/x/index.d.ts +1 -0
- package/x/index.js +2 -0
- package/x/index.js.map +1 -0
- package/x/net/test.d.ts +4 -0
- package/x/net/test.js +7 -0
- package/x/net/test.js.map +1 -0
- package/x/net/types.d.ts +1 -0
- package/x/net/types.js +2 -0
- package/x/net/types.js.map +1 -0
- package/x/sim/test.d.ts +4 -0
- package/x/sim/test.js +7 -0
- package/x/sim/test.js.map +1 -0
- package/x/sim/types.d.ts +1 -0
- package/x/sim/types.js +2 -0
- package/x/sim/types.js.map +1 -0
- package/x/test.d.ts +1 -0
- package/x/test.js +6 -0
- package/x/test.js.map +1 -0
package/x/ecs/test.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { suite, test, expect } from "@e280/science";
|
|
2
|
+
import { create, del, update } from "./parts/changers.js";
|
|
3
|
+
import { setupExampleWorld } from "./test/setup-example-world.js";
|
|
4
|
+
import { setupLifecycleCounts } from "./test/setup-lifecycle-counts.js";
|
|
5
|
+
export default suite({
|
|
6
|
+
"create an entity": test(async () => {
|
|
7
|
+
const { world } = setupExampleWorld();
|
|
8
|
+
expect(world.entities.size).is(0);
|
|
9
|
+
world.apply(create({ health: 100 }));
|
|
10
|
+
expect(world.entities.size).is(1);
|
|
11
|
+
}),
|
|
12
|
+
"delete an entity": test(async () => {
|
|
13
|
+
const { world } = setupExampleWorld();
|
|
14
|
+
const id = world.apply(create({ health: 100 }));
|
|
15
|
+
expect(world.entities.size).is(1);
|
|
16
|
+
world.apply(del(id));
|
|
17
|
+
expect(world.entities.size).is(0);
|
|
18
|
+
}),
|
|
19
|
+
"select an entity": test(async () => {
|
|
20
|
+
const { world } = setupExampleWorld();
|
|
21
|
+
world.apply(create({ health: 100 }));
|
|
22
|
+
expect([...world.select("health")].length).is(1);
|
|
23
|
+
}),
|
|
24
|
+
"select two entities": test(async () => {
|
|
25
|
+
const { world } = setupExampleWorld();
|
|
26
|
+
world.apply(create({ health: 100 }));
|
|
27
|
+
world.apply(create({ health: 100 }));
|
|
28
|
+
expect([...world.select("health")].length).is(2);
|
|
29
|
+
}),
|
|
30
|
+
"select with no component keys selects all": test(async () => {
|
|
31
|
+
const { world } = setupExampleWorld();
|
|
32
|
+
world.apply(create({ health: 100 }));
|
|
33
|
+
world.apply(create({ health: 100 }));
|
|
34
|
+
expect([...world.select()].length).is(2);
|
|
35
|
+
}),
|
|
36
|
+
"select doesn't include non-match": test(async () => {
|
|
37
|
+
const { world } = setupExampleWorld();
|
|
38
|
+
world.apply(create({ health: 100 }));
|
|
39
|
+
expect([...world.select("mana")].length).is(0);
|
|
40
|
+
}),
|
|
41
|
+
"select includes entities with extra components": test(async () => {
|
|
42
|
+
const { world } = setupExampleWorld();
|
|
43
|
+
world.apply(create({ health: 100, mana: 100 }));
|
|
44
|
+
expect([...world.select("health")].length).is(1);
|
|
45
|
+
}),
|
|
46
|
+
"wizard regens mana": test(async () => {
|
|
47
|
+
const { world, systems } = setupExampleWorld();
|
|
48
|
+
const wizardId = world.apply(create({ health: 100, mana: 50, manaRegen: 1 }));
|
|
49
|
+
const changes = world.execute(systems);
|
|
50
|
+
expect(changes.length).is(1);
|
|
51
|
+
expect(world.require(wizardId).mana).is(51);
|
|
52
|
+
}),
|
|
53
|
+
"death by bleeding": test(async () => {
|
|
54
|
+
const { world, systems } = setupExampleWorld();
|
|
55
|
+
const wizardId = world.apply(create({ health: 2, bleed: 1 }));
|
|
56
|
+
expect(world.require(wizardId).health).is(2);
|
|
57
|
+
world.execute(systems);
|
|
58
|
+
expect(world.require(wizardId).health).is(1);
|
|
59
|
+
world.execute(systems);
|
|
60
|
+
expect(world.entities.has(wizardId)).is(false);
|
|
61
|
+
}),
|
|
62
|
+
"lifecycles": test(async () => {
|
|
63
|
+
const { world } = setupExampleWorld();
|
|
64
|
+
const counts = setupLifecycleCounts();
|
|
65
|
+
const system = world.lifecycle(["health"], () => {
|
|
66
|
+
counts.enters++;
|
|
67
|
+
return {
|
|
68
|
+
tick: () => void counts.ticks++,
|
|
69
|
+
exit: () => void counts.exits++,
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
counts.expect(0, 0, 0);
|
|
73
|
+
const wizardId = world.apply(create({ health: 100, mana: 50 }));
|
|
74
|
+
world.execute([system]);
|
|
75
|
+
counts.expect(1, 1, 0);
|
|
76
|
+
world.apply(update(wizardId, { health: 100, mana: 100 }));
|
|
77
|
+
world.execute([system]);
|
|
78
|
+
counts.expect(1, 2, 0);
|
|
79
|
+
world.apply(del(wizardId));
|
|
80
|
+
world.execute([system]);
|
|
81
|
+
counts.expect(1, 2, 1);
|
|
82
|
+
expect(world.entities.size).is(0);
|
|
83
|
+
}),
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,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,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
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type Entities<C extends Components> = Map<Id, C>;
|
|
2
|
+
export type Components = Record<string, unknown>;
|
|
3
|
+
export type System = () => Generator<Change>;
|
|
4
|
+
export type Id = string;
|
|
5
|
+
export type AsComponents<C extends Components> = C;
|
|
6
|
+
export type Change = [id: Id, components?: Partial<Components>];
|
|
7
|
+
export type Select<C extends Components, K extends keyof C> = Pick<C, K> & Partial<C>;
|
|
8
|
+
export type LifecycleCallbacks<C extends Components, K extends keyof C> = {
|
|
9
|
+
tick: (id: Id, components: Select<C, K>) => void;
|
|
10
|
+
exit: (id: Id) => void;
|
|
11
|
+
};
|
|
12
|
+
export type LifecycleEnter<C extends Components, K extends keyof C> = ((id: Id, components: Select<C, K>) => LifecycleCallbacks<C, K>);
|
package/x/ecs/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../s/ecs/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-match.js","sourceRoot":"","sources":["../../../s/ecs/utils/is-match.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,OAAO,CAAC,GAAa,EAAE,UAAsB;IAC5D,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,UAAU,CAAC,CAAA;AAChD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Components, Entities, Id, Select } from "../types.js";
|
|
2
|
+
export declare class Optimizer<C extends Components> {
|
|
3
|
+
#private;
|
|
4
|
+
entities: Entities<Partial<C>>;
|
|
5
|
+
constructor(entities: Entities<Partial<C>>);
|
|
6
|
+
obtain<K extends keyof C>(componentKeys: K[]): Entities<Select<C, K>>;
|
|
7
|
+
update(id: Id, components: Partial<C>): void;
|
|
8
|
+
eliminate(id: Id): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { GMap } from "@e280/stz";
|
|
2
|
+
import { isMatch } from "./is-match.js";
|
|
3
|
+
export class Optimizer {
|
|
4
|
+
entities;
|
|
5
|
+
#index = new GMap();
|
|
6
|
+
constructor(entities) {
|
|
7
|
+
this.entities = entities;
|
|
8
|
+
}
|
|
9
|
+
obtain(componentKeys) {
|
|
10
|
+
for (const set of this.#index.keys()) {
|
|
11
|
+
if (set.size !== componentKeys.length)
|
|
12
|
+
continue;
|
|
13
|
+
if (componentKeys.every(key => set.has(key)))
|
|
14
|
+
return this.#index.require(set);
|
|
15
|
+
}
|
|
16
|
+
const set = new Set(componentKeys);
|
|
17
|
+
const ents = new GMap();
|
|
18
|
+
this.#index.set(set, ents);
|
|
19
|
+
for (const [id, components] of this.entities)
|
|
20
|
+
if (isMatch(set, components))
|
|
21
|
+
ents.set(id, components);
|
|
22
|
+
return ents;
|
|
23
|
+
}
|
|
24
|
+
update(id, components) {
|
|
25
|
+
for (const [set, ents] of this.#index) {
|
|
26
|
+
if (isMatch(set, components))
|
|
27
|
+
ents.set(id, components);
|
|
28
|
+
else
|
|
29
|
+
ents.delete(id);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
eliminate(id) {
|
|
33
|
+
for (const ents of this.#index.values())
|
|
34
|
+
ents.delete(id);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizer.js","sourceRoot":"","sources":["../../../s/ecs/utils/optimizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAA;AAGrC,MAAM,OAAO,SAAS;IAGF;IAFnB,MAAM,GAAG,IAAI,IAAI,EAAsC,CAAA;IAEvD,YAAmB,QAA8B;QAA9B,aAAQ,GAAR,QAAQ,CAAsB;IAAG,CAAC;IAErD,MAAM,CAAoB,aAAkB;QAC3C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC,MAAM;gBAAE,SAAQ;YAC/C,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAA2B,CAAA;QAC3D,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAA;QAClC,MAAM,IAAI,GAA2B,IAAI,IAAI,EAAE,CAAA;QAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;QAC1B,KAAK,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,QAAQ;YAC3C,IAAI,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;gBAC3B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAA0B,CAAC,CAAA;QAC1C,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,MAAM,CAAC,EAAM,EAAE,UAAsB;QACpC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC;gBAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;;gBACjD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACrB,CAAC;IACF,CAAC;IAED,SAAS,CAAC,EAAM;QACf,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;CACD"}
|
package/x/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./ecs/index.js";
|
package/x/index.js
ADDED
package/x/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../s/index.ts"],"names":[],"mappings":"AACA,cAAc,gBAAgB,CAAA"}
|
package/x/net/test.d.ts
ADDED
package/x/net/test.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../s/net/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AAEjD,eAAe,KAAK,CAAC;IACpB,MAAM,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACtB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC,CAAC;CACF,CAAC,CAAA"}
|
package/x/net/types.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/x/net/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../s/net/types.ts"],"names":[],"mappings":""}
|
package/x/sim/test.d.ts
ADDED
package/x/sim/test.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../s/sim/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AAEjD,eAAe,KAAK,CAAC;IACpB,MAAM,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACtB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC,CAAC;CACF,CAAC,CAAA"}
|
package/x/sim/types.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/x/sim/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../s/sim/types.ts"],"names":[],"mappings":""}
|
package/x/test.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/x/test.js
ADDED
package/x/test.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../s/test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAA;AACjC,OAAO,GAAG,MAAM,eAAe,CAAA;AAC/B,OAAO,GAAG,MAAM,eAAe,CAAA;AAC/B,OAAO,GAAG,MAAM,eAAe,CAAA;AAE/B,MAAM,GAAG,CAAC,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAC,CAAC,CAAA"}
|