@typeonce/ritmo 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/Clock.d.ts +19 -4
- package/dist/Clock.d.ts.map +1 -1
- package/dist/Clock.js +18 -2
- package/dist/Clock.js.map +1 -1
- package/dist/Command.d.ts +101 -45
- package/dist/Command.d.ts.map +1 -1
- package/dist/Command.js +22 -4
- package/dist/Command.js.map +1 -1
- package/dist/Debug.d.ts +66 -8
- package/dist/Debug.d.ts.map +1 -1
- package/dist/Descriptor.d.ts +27 -9
- package/dist/Descriptor.d.ts.map +1 -1
- package/dist/Descriptor.js +13 -9
- package/dist/Descriptor.js.map +1 -1
- package/dist/Entity.d.ts +15 -8
- package/dist/Entity.d.ts.map +1 -1
- package/dist/Entity.js.map +1 -1
- package/dist/FixedLoop.d.ts +106 -0
- package/dist/FixedLoop.d.ts.map +1 -0
- package/dist/FixedLoop.js +97 -0
- package/dist/FixedLoop.js.map +1 -0
- package/dist/HostClock.d.ts +1 -1
- package/dist/HostClock.d.ts.map +1 -1
- package/dist/HostClock.js +2 -1
- package/dist/HostClock.js.map +1 -1
- package/dist/Machine.d.ts +4 -1
- package/dist/Machine.d.ts.map +1 -1
- package/dist/Machine.js +4 -1
- package/dist/Machine.js.map +1 -1
- package/dist/Query.d.ts +52 -10
- package/dist/Query.d.ts.map +1 -1
- package/dist/Query.js +2 -1
- package/dist/Query.js.map +1 -1
- package/dist/Relation.d.ts +5 -14
- package/dist/Relation.d.ts.map +1 -1
- package/dist/Relation.js +0 -32
- package/dist/Relation.js.map +1 -1
- package/dist/Runtime.d.ts +58 -15
- package/dist/Runtime.d.ts.map +1 -1
- package/dist/Runtime.js +288 -70
- package/dist/Runtime.js.map +1 -1
- package/dist/Schedule.d.ts +24 -15
- package/dist/Schedule.d.ts.map +1 -1
- package/dist/Schedule.js +2 -1
- package/dist/Schedule.js.map +1 -1
- package/dist/Schema.d.ts +98 -29
- package/dist/Schema.d.ts.map +1 -1
- package/dist/Schema.js +4 -4
- package/dist/Schema.js.map +1 -1
- package/dist/Snapshot.d.ts +76 -1
- package/dist/Snapshot.d.ts.map +1 -1
- package/dist/Snapshot.js +42 -1
- package/dist/Snapshot.js.map +1 -1
- package/dist/System.d.ts +68 -24
- package/dist/System.d.ts.map +1 -1
- package/dist/System.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/cells.d.ts +2 -0
- package/dist/internal/cells.d.ts.map +1 -1
- package/dist/internal/cells.js +34 -8
- package/dist/internal/cells.js.map +1 -1
- package/dist/internal/debug.d.ts +3 -0
- package/dist/internal/debug.d.ts.map +1 -1
- package/dist/internal/debug.js +83 -15
- package/dist/internal/debug.js.map +1 -1
- package/dist/internal/fragments.d.ts +2 -6
- package/dist/internal/fragments.d.ts.map +1 -1
- package/dist/internal/fragments.js +25 -2
- package/dist/internal/fragments.js.map +1 -1
- package/dist/internal/game.d.ts +2 -0
- package/dist/internal/game.d.ts.map +1 -1
- package/dist/internal/game.js +16 -3
- package/dist/internal/game.js.map +1 -1
- package/dist/internal/queries.d.ts.map +1 -1
- package/dist/internal/queries.js +27 -18
- package/dist/internal/queries.js.map +1 -1
- package/dist/internal/relations.d.ts +10 -0
- package/dist/internal/relations.d.ts.map +1 -0
- package/dist/internal/relations.js +32 -0
- package/dist/internal/relations.js.map +1 -0
- package/dist/internal/streams.d.ts +2 -0
- package/dist/internal/streams.d.ts.map +1 -1
- package/dist/internal/streams.js +10 -0
- package/dist/internal/streams.js.map +1 -1
- package/dist/internal/world.d.ts +7 -1
- package/dist/internal/world.d.ts.map +1 -1
- package/dist/internal/world.js +53 -3
- package/dist/internal/world.js.map +1 -1
- package/package.json +1 -1
- package/src/Clock.ts +29 -4
- package/src/Command.ts +161 -67
- package/src/Debug.ts +61 -9
- package/src/Descriptor.ts +43 -17
- package/src/Entity.ts +16 -9
- package/src/FixedLoop.ts +218 -0
- package/src/HostClock.ts +2 -1
- package/src/Machine.ts +4 -1
- package/src/Query.ts +47 -10
- package/src/Relation.ts +5 -67
- package/src/Runtime.ts +345 -85
- package/src/Schedule.ts +31 -19
- package/src/Schema.ts +118 -35
- package/src/Snapshot.ts +90 -2
- package/src/System.ts +76 -23
- package/src/index.ts +4 -0
- package/src/internal/cells.ts +42 -10
- package/src/internal/debug.ts +84 -15
- package/src/internal/fragments.ts +23 -3
- package/src/internal/game.ts +19 -3
- package/src/internal/queries.ts +28 -2
- package/src/internal/relations.ts +52 -0
- package/src/internal/streams.ts +11 -0
- package/src/internal/world.ts +60 -4
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ pnpm add @typeonce/ritmo
|
|
|
14
14
|
```ts
|
|
15
15
|
import { Descriptor, Schema } from "@typeonce/ritmo"
|
|
16
16
|
|
|
17
|
-
const Position = Descriptor.Component<{ x: number; y: number }>()("Position")
|
|
17
|
+
const Position = Descriptor.Component<{ x: number; y: number }>()("Example/Position")
|
|
18
18
|
const Game = Schema.bind(Schema.fragment({ components: { Position } }))
|
|
19
19
|
```
|
|
20
20
|
|
|
@@ -23,9 +23,10 @@ Modules are also importable by path, for example `@typeonce/ritmo/Result`.
|
|
|
23
23
|
Related packages, released together with the same version:
|
|
24
24
|
|
|
25
25
|
- [`@typeonce/ritmo-math`](https://www.npmjs.com/package/@typeonce/ritmo-math): validated vectors, sizes, and bounding boxes
|
|
26
|
-
- [`@typeonce/ritmo-browser`](https://www.npmjs.com/package/@typeonce/ritmo-browser): fixed-step loop and
|
|
26
|
+
- [`@typeonce/ritmo-browser`](https://www.npmjs.com/package/@typeonce/ritmo-browser): animation-frame ticks for the fixed-step loop, keyboard, pointer, and touch input
|
|
27
27
|
- [`@typeonce/ritmo-render`](https://www.npmjs.com/package/@typeonce/ritmo-render): entity-to-node sync for any renderer
|
|
28
28
|
- [`@typeonce/ritmo-pixi`](https://www.npmjs.com/package/@typeonce/ritmo-pixi): Pixi container adapter for the render-node registry
|
|
29
29
|
- [`@typeonce/ritmo-devtools`](https://www.npmjs.com/package/@typeonce/ritmo-devtools): headless debug sessions and trace reports
|
|
30
|
+
- [`@typeonce/oxlint-plugin-ritmo`](https://www.npmjs.com/package/@typeonce/oxlint-plugin-ritmo): oxlint rules that keep simulation code deterministic and headless
|
|
30
31
|
|
|
31
32
|
Source: https://github.com/typeonce-dev/ritmo
|
package/dist/Clock.d.ts
CHANGED
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
* - `Clock.system(Game, { name, resource, hold })` advances it every tick:
|
|
10
10
|
* `step + 1` and `dt = 1/hz`, or `dt = 0` while a `hold` condition passes.
|
|
11
11
|
* - `Clock.duration(step, 0.5)` is a span in whole steps; `Clock.every(t, d)`
|
|
12
|
-
* is true on the step each period begins
|
|
12
|
+
* is true on the step each period begins after the start (steps `d`,
|
|
13
|
+
* `2d`, ...); `Clock.elapsed(t)` is exact.
|
|
13
14
|
*
|
|
14
15
|
* Time is counted in steps, never accumulated in floating point: elapsed
|
|
15
16
|
* seconds are `step / hz`.
|
|
@@ -20,7 +21,7 @@
|
|
|
20
21
|
* const Time = Clock.resource("Game/Time", step)
|
|
21
22
|
* const Game = Schema.bind(Schema.fragment({ resources: { Time } }))
|
|
22
23
|
* const AdvanceTime = Clock.system(Game, { name: "Game/AdvanceTime", resource: Time, hold: [paused] })
|
|
23
|
-
* const runtime = Game.Runtime.make({ services, resources: { Time: Clock.start(step) } })
|
|
24
|
+
* const runtime = Game.Runtime.make({ services, resources: { Time: Clock.start(step) } }).value
|
|
24
25
|
* ```
|
|
25
26
|
*
|
|
26
27
|
* @module Clock
|
|
@@ -170,16 +171,30 @@ export type ValidDuration<Hz extends number, Seconds extends number> = number ex
|
|
|
170
171
|
* rounded to the nearest whole step (half up), so `Clock.duration(Clock.hz(60), 0.025)`
|
|
171
172
|
* is 2 steps (1.5 rounds up). Shorter than one step is a compile error
|
|
172
173
|
* ("0.001s is shorter than one step (1/60s)"). For seconds read from data,
|
|
173
|
-
* use `durationRaw`.
|
|
174
|
+
* use `durationRaw`; for a count of steps, `durationOfSteps`.
|
|
174
175
|
*/
|
|
175
176
|
export declare const duration: <Hz extends number, const Seconds extends number>(step: Step<Hz>, seconds: ValidDuration<Hz, Seconds>) => Duration<Hz>;
|
|
176
177
|
/** Seconds from data as whole steps of `step`, the same rules as `duration`, as a `Result`. */
|
|
177
178
|
export declare const durationRaw: <Hz extends number>(step: Step<Hz>, seconds: number) => Result.Result<Duration<Hz>, InvalidDuration>;
|
|
179
|
+
type StepsMessage = "Clock.durationOfSteps needs a positive whole number of steps";
|
|
180
|
+
/** `N` when it is a positive whole number (or a computed `number`); otherwise the message. */
|
|
181
|
+
export type ValidSteps<N extends number> = number extends N ? N : `${N}` extends `-${string}` | `${string}.${string}` | `${string}e${string}` | "0" ? StepsMessage : N;
|
|
182
|
+
/**
|
|
183
|
+
* A whole number of steps of `step` as a duration: `Clock.durationOfSteps(Clock.hz(60), 3)`.
|
|
184
|
+
* Use it when the length is counted in steps (an animation of 3 frames, a
|
|
185
|
+
* cooldown stored as steps); use `duration` for literal seconds and
|
|
186
|
+
* `durationRaw` for seconds from data. A count cannot round, so nothing can
|
|
187
|
+
* fail for a positive whole number: a literal zero, negative, or fraction is
|
|
188
|
+
* a compile error, and a computed one throws.
|
|
189
|
+
*/
|
|
190
|
+
export declare const durationOfSteps: <Hz extends number, const N extends number>(step: Step<Hz>, steps: ValidSteps<N>) => Duration<Hz>;
|
|
178
191
|
/** The whole steps a duration spans. */
|
|
179
192
|
export declare const steps: (duration: Duration) => number;
|
|
180
193
|
/**
|
|
181
194
|
* Whether a period of `duration` begins on this tick: the clock advanced
|
|
182
|
-
* (not held) to a step that is a multiple of the period. False while held
|
|
195
|
+
* (not held) to a step that is a multiple of the period. False while held,
|
|
196
|
+
* and on the first step (0), which no advance reached: the first period
|
|
197
|
+
* begins at step `duration`.
|
|
183
198
|
*/
|
|
184
199
|
export declare const every: <Hz extends number>(time: Time<Hz>, duration: Duration<NoInfer<Hz>>) => boolean;
|
|
185
200
|
export {};
|
package/dist/Clock.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Clock.d.ts","sourceRoot":"","sources":["../src/Clock.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Clock.d.ts","sourceRoot":"","sources":["../src/Clock.ts"],"names":[],"mappings":"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"}
|
package/dist/Clock.js
CHANGED
|
@@ -88,7 +88,7 @@ const stepsOf = (hz, seconds) => {
|
|
|
88
88
|
* rounded to the nearest whole step (half up), so `Clock.duration(Clock.hz(60), 0.025)`
|
|
89
89
|
* is 2 steps (1.5 rounds up). Shorter than one step is a compile error
|
|
90
90
|
* ("0.001s is shorter than one step (1/60s)"). For seconds read from data,
|
|
91
|
-
* use `durationRaw`.
|
|
91
|
+
* use `durationRaw`; for a count of steps, `durationOfSteps`.
|
|
92
92
|
*/
|
|
93
93
|
export const duration = (step, seconds) => {
|
|
94
94
|
const steps = stepsOf(step.hz, seconds);
|
|
@@ -101,11 +101,27 @@ export const durationRaw = (step, seconds) => {
|
|
|
101
101
|
const steps = stepsOf(step.hz, seconds);
|
|
102
102
|
return steps.ok ? Result.success({ kind: "ClockDuration", steps: steps.value, hz: step.hz }) : steps;
|
|
103
103
|
};
|
|
104
|
+
/**
|
|
105
|
+
* A whole number of steps of `step` as a duration: `Clock.durationOfSteps(Clock.hz(60), 3)`.
|
|
106
|
+
* Use it when the length is counted in steps (an animation of 3 frames, a
|
|
107
|
+
* cooldown stored as steps); use `duration` for literal seconds and
|
|
108
|
+
* `durationRaw` for seconds from data. A count cannot round, so nothing can
|
|
109
|
+
* fail for a positive whole number: a literal zero, negative, or fraction is
|
|
110
|
+
* a compile error, and a computed one throws.
|
|
111
|
+
*/
|
|
112
|
+
export const durationOfSteps = (step, steps) => {
|
|
113
|
+
const count = steps;
|
|
114
|
+
if (!Number.isSafeInteger(count) || count <= 0)
|
|
115
|
+
throw new Error(`Clock.durationOfSteps needs a positive whole number of steps, got ${count}`);
|
|
116
|
+
return { kind: "ClockDuration", steps: count, hz: step.hz };
|
|
117
|
+
};
|
|
104
118
|
/** The whole steps a duration spans. */
|
|
105
119
|
export const steps = (duration) => duration.steps;
|
|
106
120
|
/**
|
|
107
121
|
* Whether a period of `duration` begins on this tick: the clock advanced
|
|
108
|
-
* (not held) to a step that is a multiple of the period. False while held
|
|
122
|
+
* (not held) to a step that is a multiple of the period. False while held,
|
|
123
|
+
* and on the first step (0), which no advance reached: the first period
|
|
124
|
+
* begins at step `duration`.
|
|
109
125
|
*/
|
|
110
126
|
export const every = (time, duration) => time.dt > 0 && time.step % duration.steps === 0;
|
|
111
127
|
//# sourceMappingURL=Clock.js.map
|
package/dist/Clock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Clock.js","sourceRoot":"","sources":["../src/Clock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Clock.js","sourceRoot":"","sources":["../src/Clock.ts"],"names":[],"mappings":"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"}
|
package/dist/Command.d.ts
CHANGED
|
@@ -65,6 +65,7 @@ import * as Entity from "./Entity.ts";
|
|
|
65
65
|
import type * as EntityScope from "./EntityScope.ts";
|
|
66
66
|
import type * as Relation from "./Relation.ts";
|
|
67
67
|
import * as Result from "./Result.ts";
|
|
68
|
+
import type { ReadonlyValue } from "./Query.ts";
|
|
68
69
|
import type { RequirementPair, Schema } from "./Schema.ts";
|
|
69
70
|
/**
|
|
70
71
|
* Type-level helpers for staged entity construction.
|
|
@@ -90,7 +91,7 @@ export declare namespace Draft {
|
|
|
90
91
|
/**
|
|
91
92
|
* A typed descriptor/value pair used by the flat command authoring APIs.
|
|
92
93
|
*/
|
|
93
|
-
export type Entry<D extends Descriptor<"component", string, any>> = readonly [D, Descriptor.Value<D
|
|
94
|
+
export type Entry<D extends Descriptor<"component", string, any>> = readonly [D, ReadonlyValue<Descriptor.Value<D>>];
|
|
94
95
|
/**
|
|
95
96
|
* Extracts the component-descriptor union from a schema.
|
|
96
97
|
*/
|
|
@@ -117,10 +118,13 @@ type EntryValue<T> = [
|
|
|
117
118
|
/**
|
|
118
119
|
* Folds entries into the component proof of the resulting draft.
|
|
119
120
|
*/
|
|
120
|
-
export type FoldEntries<Entries extends ReadonlyArray<SpawnEntry<any>>, P extends Entity.ComponentProof = {}> =
|
|
121
|
+
export type FoldEntries<Entries extends ReadonlyArray<SpawnEntry<any>>, P extends Entity.ComponentProof = {}> = Entries extends readonly [
|
|
121
122
|
infer Head extends SpawnEntry<any>,
|
|
122
|
-
...infer Tail extends
|
|
123
|
-
] ? FoldEntries<Tail, Draft.InsertEntry<P, EntryValue<Head>>> :
|
|
123
|
+
...infer Tail extends ReadonlyArray<SpawnEntry<any>>
|
|
124
|
+
] ? FoldEntries<Tail, Draft.InsertEntry<P, EntryValue<Head>>> : Entries extends readonly [
|
|
125
|
+
...infer Init extends ReadonlyArray<SpawnEntry<any>>,
|
|
126
|
+
infer Last extends SpawnEntry<any>
|
|
127
|
+
] ? FoldEntries<Init, Draft.InsertEntry<P, EntryValue<Last>>> : number extends Entries["length"] ? P & MaybeEntries<EntryValue<Entries[number]>> : P;
|
|
124
128
|
/** The proof of entries that may each be present: every component they can hold, optional. */
|
|
125
129
|
type MaybeEntries<Entry> = {
|
|
126
130
|
readonly [E in Entry as E extends readonly [infer D extends Descriptor<"component", string, any>, unknown] ? Descriptor.Name<D> : never]?: E extends readonly [infer D extends Descriptor<"component", string, any>, unknown] ? Descriptor.Value<D> : never;
|
|
@@ -136,9 +140,9 @@ export type EntryErrors<Entries extends ReadonlyArray<SpawnEntry<any>>> = {
|
|
|
136
140
|
* The draft produced from `Entries`, wrapped in a `Result` exactly when at
|
|
137
141
|
* least one entry is a `Result` and can therefore fail.
|
|
138
142
|
*/
|
|
139
|
-
export type DraftFor<S extends Schema.Any, Entries extends ReadonlyArray<SpawnEntry<S>>, P extends Entity.ComponentProof, Root> = [Extract<Entries[number], {
|
|
143
|
+
export type DraftFor<S extends Schema.Any, Entries extends ReadonlyArray<SpawnEntry<S>>, P extends Entity.ComponentProof, Root, Relates = never> = [Extract<Entries[number], {
|
|
140
144
|
readonly ok: boolean;
|
|
141
|
-
}>] extends [never] ? Entity.EntityDraft<S, FoldEntries<Entries, P>, Root> : Result.Result<Entity.EntityDraft<S, FoldEntries<Entries, P>, Root>, EntryErrors<Entries>>;
|
|
145
|
+
}>] extends [never] ? Entity.EntityDraft<S, FoldEntries<Entries, P>, Root, Relates> : Result.Result<Entity.EntityDraft<S, FoldEntries<Entries, P>, Root, Relates>, EntryErrors<Entries>>;
|
|
142
146
|
/**
|
|
143
147
|
* A deferred world mutation.
|
|
144
148
|
*
|
|
@@ -190,6 +194,12 @@ export interface InternalWorld<S extends Schema.Any> {
|
|
|
190
194
|
* written when an inserted component would miss one it requires.
|
|
191
195
|
*/
|
|
192
196
|
readonly insertComponents: (id: Entity.EntityId<S, any>, entries: ReadonlyArray<Entity.StagedComponent>) => void;
|
|
197
|
+
/**
|
|
198
|
+
* Reports a `despawn` or `remove` given a numeric id this run did not
|
|
199
|
+
* spawn: an id kept from an earlier run, or a raw id that erased types let
|
|
200
|
+
* through. The command is skipped.
|
|
201
|
+
*/
|
|
202
|
+
readonly reportStaleTarget: (command: "despawn" | "remove", id: Entity.EntityId<S, any>) => void;
|
|
193
203
|
/**
|
|
194
204
|
* Attempts to attach one relation edge between two live entities.
|
|
195
205
|
*/
|
|
@@ -206,10 +216,11 @@ export interface InternalWorld<S extends Schema.Any> {
|
|
|
206
216
|
/**
|
|
207
217
|
* Creates a typed component entry.
|
|
208
218
|
*/
|
|
209
|
-
export declare const entry: <D extends Descriptor<"component", string, any>>(descriptor: D, value: Descriptor.Value<D
|
|
219
|
+
export declare const entry: <D extends Descriptor<"component", string, any>>(descriptor: D, value: ReadonlyValue<Descriptor.Value<D>>) => Entry<D>;
|
|
210
220
|
/**
|
|
211
221
|
* Validates raw input through a constructed descriptor's own validator and
|
|
212
|
-
* returns an entry result for `spawn(...)` / `
|
|
222
|
+
* returns an entry result for `Game.Command.spawn(...)` / `extend(...)`.
|
|
223
|
+
* `commands.insert` takes valid entries only: check the result first.
|
|
213
224
|
*
|
|
214
225
|
* This is the one way to put unvalidated data on an entity: the descriptor
|
|
215
226
|
* owns its validator (`Descriptor.ConstructedComponent(...)`, built with
|
|
@@ -237,13 +248,13 @@ export declare const entryRaw: <D extends DescriptorModule.ConstructedDescriptor
|
|
|
237
248
|
* Use this while building what a spawn will hold. Use `commands.insert` to
|
|
238
249
|
* add or replace components on an entity that already exists.
|
|
239
250
|
*/
|
|
240
|
-
export declare const extend: <S extends Schema.Any, P extends Entity.ComponentProof, Root, const Entries extends ReadonlyArray<SpawnEntry<S
|
|
251
|
+
export declare const extend: <S extends Schema.Any, P extends Entity.ComponentProof, Root, const Entries extends ReadonlyArray<SpawnEntry<S>>, Relates = never>(draft: Entity.EntityDraft<S, P, Root, Relates>, ...entries: Entries) => DraftFor<S, Entries, P, Root, Relates>;
|
|
241
252
|
/**
|
|
242
253
|
* Starts a staged entity from component entries.
|
|
243
254
|
*
|
|
244
255
|
* Drafts are plain values: build them anywhere (including small factories),
|
|
245
256
|
* then queue them with `commands.spawn(...)`. Entries may be `[Descriptor,
|
|
246
|
-
* value]` pairs or results from `entryRaw(...)`; see `
|
|
257
|
+
* value]` pairs or results from `entryRaw(...)`; see `extend(...)` for how
|
|
247
258
|
* failures are reported.
|
|
248
259
|
*
|
|
249
260
|
* @example
|
|
@@ -261,7 +272,7 @@ export declare const spawn: <S extends Schema.Any, Root = unknown, const Entries
|
|
|
261
272
|
* Drafts stay pure: this only records intent so the runtime can attempt to
|
|
262
273
|
* attach the relation when the spawn command is applied.
|
|
263
274
|
*/
|
|
264
|
-
export declare const relate: <S extends Schema.Any, P extends Entity.ComponentProof, R extends Relation.Relation.Any, Root = unknown>(draft: Entity.EntityDraft<S, P, Root>, relation: R, target: Entity.EntityId<S, Root>) => Entity.EntityDraft<S, P, Root>;
|
|
275
|
+
export declare const relate: <S extends Schema.Any, P extends Entity.ComponentProof, R extends Relation.Relation.Any, Root = unknown, Relates = never>(draft: Entity.EntityDraft<S, P, Root, Relates>, relation: R, target: Entity.EntityId<S, Root>) => Entity.EntityDraft<S, P, Root, Relates | R>;
|
|
265
276
|
/** One permission of `Game.System.commands(...)`: a kind of command, and what it may touch. */
|
|
266
277
|
export interface Permission<out Kind extends PermissionKind, out Value> {
|
|
267
278
|
readonly permission: Kind;
|
|
@@ -273,25 +284,25 @@ type ComponentDescriptor = Descriptor<"component", string, any>;
|
|
|
273
284
|
* Allows `spawn` / `spawnIn` of drafts whose components are all among `components`.
|
|
274
285
|
* Use it for entities the system creates; use `extend` on a draft to build one.
|
|
275
286
|
*/
|
|
276
|
-
export declare const spawns: <const Components extends ReadonlyArray<ComponentDescriptor
|
|
287
|
+
export declare const spawns: <const Components extends readonly [ComponentDescriptor, ...ReadonlyArray<ComponentDescriptor>]>(...components: Components) => Permission<"spawns", Components[number]>;
|
|
277
288
|
/**
|
|
278
289
|
* Allows `insert(entity, [X, value])` with `X` among `components`: add or
|
|
279
290
|
* replace at the next `applyDeferred()`. To change a value now, on an entity
|
|
280
291
|
* you matched, write through a query (`Game.Query.write`) instead.
|
|
281
292
|
*/
|
|
282
|
-
export declare const inserts: <const Components extends ReadonlyArray<ComponentDescriptor
|
|
293
|
+
export declare const inserts: <const Components extends readonly [ComponentDescriptor, ...ReadonlyArray<ComponentDescriptor>]>(...components: Components) => Permission<"inserts", Components[number]>;
|
|
283
294
|
/** Allows `remove(entity, X)` with `X` among `components`. */
|
|
284
|
-
export declare const removes: <const Components extends ReadonlyArray<ComponentDescriptor
|
|
295
|
+
export declare const removes: <const Components extends readonly [ComponentDescriptor, ...ReadonlyArray<ComponentDescriptor>]>(...components: Components) => Permission<"removes", Components[number]>;
|
|
285
296
|
/**
|
|
286
297
|
* Allows `despawn(entity)` where `entity` comes from a query match proving one
|
|
287
298
|
* of `components` (`match.entity`), never a raw id: the system can only
|
|
288
299
|
* despawn what it has proven is, for example, an `Enemy`.
|
|
289
300
|
*/
|
|
290
|
-
export declare const despawns: <const Components extends ReadonlyArray<ComponentDescriptor
|
|
301
|
+
export declare const despawns: <const Components extends readonly [ComponentDescriptor, ...ReadonlyArray<ComponentDescriptor>]>(...components: Components) => Permission<"despawns", Components[number]>;
|
|
291
302
|
/** Allows `despawnScope(scope)` for this scope. */
|
|
292
303
|
export declare const despawnsScope: <const Scope extends EntityScope.EntityScope.Any>(scope: Scope) => Permission<"despawnsScope", Scope>;
|
|
293
304
|
/** Allows `relate`, `unrelate`, and `reorderChildren` for these relations. */
|
|
294
|
-
export declare const relates: <const Relations extends ReadonlyArray<Relation.Relation.Any
|
|
305
|
+
export declare const relates: <const Relations extends readonly [Relation.Relation.Any, ...ReadonlyArray<Relation.Relation.Any>]>(...relations: Relations) => Permission<"relates", Relations[number]>;
|
|
295
306
|
type PermissionValue<Permissions, Kind extends PermissionKind> = Permissions extends Permission<Kind, infer Value> ? Value : never;
|
|
296
307
|
/**
|
|
297
308
|
* The commands a system may queue, declared in its spec as
|
|
@@ -320,6 +331,10 @@ type Names<D> = D extends {
|
|
|
320
331
|
} ? Name : never;
|
|
321
332
|
/** Every key of every member of a union of proofs (a draft with a conditional entry is a union). */
|
|
322
333
|
type AllKeys<P> = P extends unknown ? keyof P & string : never;
|
|
334
|
+
/** Relations staged on a draft need `relates`, like `commands.relate`. */
|
|
335
|
+
type DraftRelationsAllowed<Relates, Declared> = [
|
|
336
|
+
Exclude<Relates, Declared>
|
|
337
|
+
] extends [never] ? unknown : Fix<`${Names<Exclude<Relates, Declared>>} is related by this draft but not declared in this system's commands: add it to Game.System.relates(...)`>;
|
|
323
338
|
type DraftAllowed<P, Spawns> = [
|
|
324
339
|
Exclude<AllKeys<P>, Names<Spawns>>
|
|
325
340
|
] extends [never] ? unknown : Fix<`${Exclude<AllKeys<P>, Names<Spawns>>} is not declared in this system's commands: add it to Game.System.spawns(...)`>;
|
|
@@ -329,51 +344,86 @@ type EntriesAllowed<Entries extends ReadonlyArray<readonly [ComponentDescriptor,
|
|
|
329
344
|
type RemoveAllowed<D, Removes> = [
|
|
330
345
|
D
|
|
331
346
|
] extends [Removes] ? unknown : Fix<`${Names<D>} is not declared in this system's commands: add it to Game.System.removes(...)`>;
|
|
332
|
-
|
|
347
|
+
/**
|
|
348
|
+
* Why each possible target of a despawn is not allowed (`never` when it is).
|
|
349
|
+
* Computed per member, so a target chosen from several queries
|
|
350
|
+
* (`cond ? a.entity : b.entity`) must pass for every one of them.
|
|
351
|
+
*/
|
|
352
|
+
type DespawnRejections<E, Despawns> = E extends {
|
|
333
353
|
readonly kind: "EntityRef" | "EntityMut";
|
|
334
|
-
readonly __proves?: (_:
|
|
335
|
-
} ? [Extract<Proves, Despawns>] extends [never] ?
|
|
354
|
+
readonly __proves?: (_: infer Proves) => void;
|
|
355
|
+
} ? [Extract<Proves, Despawns>] extends [never] ? `despawn needs an entity from a query proving ${Names<Despawns>} (declared in despawns)` : never : E extends {
|
|
336
356
|
readonly [spawnedTypeId]: (_: never) => infer Spawned;
|
|
337
|
-
} ? [Extract<Spawned, Names<Despawns>>] extends [never] ?
|
|
357
|
+
} ? [Extract<Spawned, Names<Despawns>>] extends [never] ? `despawn needs an entity spawned with ${Names<Despawns>} (declared in despawns)` : never : `despawn needs an entity from a query proving ${Names<Despawns>} (declared in despawns), not a raw id: pass match.entity`;
|
|
358
|
+
type DespawnAllowed<E, Despawns> = [
|
|
359
|
+
DespawnRejections<E, Despawns>
|
|
360
|
+
] extends [never] ? unknown : Fix<DespawnRejections<E, Despawns>>;
|
|
338
361
|
declare const spawnedTypeId: unique symbol;
|
|
339
362
|
/**
|
|
340
363
|
* The id `spawn` / `spawnIn` return: an `EntityId` that also records the
|
|
341
364
|
* components its draft holds in every case, so the system that queued it can
|
|
342
365
|
* `despawn` it before the next `applyDeferred()` (no query can match it yet).
|
|
366
|
+
* It is valid only in the run that spawned it: kept in a closure or a
|
|
367
|
+
* resource and passed to `despawn` / `remove` in a later run, the command is
|
|
368
|
+
* skipped and reported (the `stale-target` lint). Keep the entity id or a
|
|
369
|
+
* handle and resolve it again through a query instead.
|
|
343
370
|
* Stored as a plain `EntityId`, it is a raw id again.
|
|
344
371
|
*/
|
|
345
372
|
export type SpawnedId<S extends Schema.Any, Root, Components extends string> = Entity.EntityId<S, Root> & {
|
|
346
373
|
readonly [spawnedTypeId]: (_: never) => Components;
|
|
347
374
|
};
|
|
348
|
-
/** The requirements (`[requirer, required]`) of the components in `Held` that `Held` lacks. */
|
|
349
|
-
type MissingPairs<S extends Schema.Any, Held extends string> = Extract<Schema.Requires<S>, readonly [Held, string]> extends infer Pair ? Pair extends readonly [string, infer To extends string] ? To extends Held ? never : Pair : never : never;
|
|
350
375
|
/** One message per missing requirement: `"Player requires Velocity"`. */
|
|
351
376
|
type MissingMessages<Pairs> = Pairs extends readonly [infer From extends string, infer To extends string] ? `${From} requires ${To}` : never;
|
|
377
|
+
/** The requirements (`[requirer, required]`) of the components in `From` that `Held` lacks. */
|
|
378
|
+
type MissingPairsFrom<S extends Schema.Any, From extends string, Held extends string> = Extract<Schema.Requires<S>, readonly [From, string]> extends infer Pair ? Pair extends readonly [string, infer To extends string] ? To extends Held ? never : Pair : never : never;
|
|
352
379
|
/**
|
|
353
|
-
*
|
|
354
|
-
*
|
|
355
|
-
*
|
|
380
|
+
* The requirements a draft may break. A draft's proof is a union of
|
|
381
|
+
* alternatives when an entry is conditional, and has optional keys for
|
|
382
|
+
* spread entries: in each alternative, every component it may hold needs
|
|
383
|
+
* every component it requires surely held. Direct requirements are enough:
|
|
384
|
+
* each required component must be held too, with its own requirements.
|
|
356
385
|
*/
|
|
357
|
-
type
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
386
|
+
type DraftViolations<S extends Schema.Any, P> = P extends unknown ? MissingPairsFrom<S, keyof P & string, RequiredKeys<P>> : never;
|
|
387
|
+
type DraftRequirementsMet<S extends Schema.Any, P> = [
|
|
388
|
+
DraftViolations<S, P>
|
|
389
|
+
] extends [never] ? unknown : Fix<`${MissingMessages<DraftViolations<S, P>>}: add the missing entries to the draft`>;
|
|
390
|
+
/** What one possible target holds: a query match's proof, or a `SpawnedId`'s draft. A raw id proves nothing. */
|
|
391
|
+
type HeldBy<E> = E extends {
|
|
362
392
|
readonly kind: "EntityRef" | "EntityMut";
|
|
363
|
-
readonly __proves?: (_:
|
|
393
|
+
readonly __proves?: (_: infer Proves) => void;
|
|
364
394
|
} ? Names<Proves> : E extends {
|
|
365
395
|
readonly [spawnedTypeId]: (_: never) => infer Spawned extends string;
|
|
366
396
|
} ? Spawned : never;
|
|
367
|
-
/** What
|
|
368
|
-
type
|
|
397
|
+
/** What one possible target's query proves absent: its `without`. */
|
|
398
|
+
type LackedBy<E> = E extends {
|
|
369
399
|
readonly kind: "EntityRef" | "EntityMut";
|
|
370
|
-
readonly __lacks?: (_:
|
|
400
|
+
readonly __lacks?: (_: infer Lacks) => void;
|
|
371
401
|
} ? Names<Lacks> : never;
|
|
402
|
+
/** The names in `All` that some member of `E` does not hold (or lack). */
|
|
403
|
+
type MissingFromHeld<E, All> = E extends unknown ? Exclude<All, HeldBy<E>> : never;
|
|
404
|
+
type MissingFromLacked<E, All> = E extends unknown ? Exclude<All, LackedBy<E>> : never;
|
|
405
|
+
/**
|
|
406
|
+
* What an insert or remove target is known to hold. For a target chosen
|
|
407
|
+
* from several queries (`cond ? a.entity : b.entity`), only what every one
|
|
408
|
+
* of them proves.
|
|
409
|
+
*/
|
|
410
|
+
type TargetHolds<E> = Exclude<HeldBy<E>, MissingFromHeld<E, HeldBy<E>>>;
|
|
411
|
+
/** What a remove target is known to lack: its query's `without` (for several queries, what all of them exclude). */
|
|
412
|
+
type TargetLacks<E> = Exclude<LackedBy<E>, MissingFromLacked<E, LackedBy<E>>>;
|
|
372
413
|
type EntryNames<Entries extends ReadonlyArray<readonly [ComponentDescriptor, unknown]>> = Names<Entries[number][0]>;
|
|
373
|
-
/**
|
|
414
|
+
/** The names one entry surely holds: none when it is conditional between descriptors. */
|
|
415
|
+
type SureEntryNames<Entry, All extends string = EntryNamesOf<Entry>> = Exclude<All, Entry extends unknown ? Exclude<All, EntryNamesOf<Entry>> : never>;
|
|
416
|
+
type EntryNamesOf<Entry> = Entry extends readonly [infer D, unknown] ? Names<D> : never;
|
|
417
|
+
/** The names surely inserted: fixed entries, not spread or conditional ones. */
|
|
418
|
+
type SurelyInserted<Entries> = Entries extends readonly [infer Head, ...infer Tail] ? SureEntryNames<Head> | SurelyInserted<Tail> : Entries extends readonly [...infer Init, infer Last] ? SureEntryNames<Last> | SurelyInserted<Init> : never;
|
|
419
|
+
/**
|
|
420
|
+
* Inserted components (any entry may be one) with requirements neither
|
|
421
|
+
* surely inserted alongside nor proven held by the target.
|
|
422
|
+
*/
|
|
423
|
+
type InsertViolations<S extends Schema.Any, E, Entries extends ReadonlyArray<readonly [ComponentDescriptor, unknown]>> = MissingPairsFrom<S, EntryNames<Entries>, SurelyInserted<Entries> | TargetHolds<E>>;
|
|
374
424
|
type InsertRequirementsMet<S extends Schema.Any, E, Entries extends ReadonlyArray<readonly [ComponentDescriptor, unknown]>> = [
|
|
375
|
-
|
|
376
|
-
] extends [never] ? unknown : Fix<`${MissingMessages<
|
|
425
|
+
InsertViolations<S, E, Entries>
|
|
426
|
+
] extends [never] ? unknown : Fix<`${MissingMessages<InsertViolations<S, E, Entries>>}: insert it in the same call, or pass match.entity from a query that proves it`>;
|
|
377
427
|
/**
|
|
378
428
|
* Removing `Removed` is sound when every component that requires one of
|
|
379
429
|
* them is removed in the same call or proven absent by the target's query
|
|
@@ -384,11 +434,14 @@ type RemoveViolations<S extends Schema.Any, E, Removed extends string> = Extract
|
|
|
384
434
|
type RemoveRequirementsMet<S extends Schema.Any, E, Removed extends string> = [
|
|
385
435
|
RemoveViolations<S, E, Removed>
|
|
386
436
|
] extends [never] ? unknown : Fix<RemoveViolations<S, E, Removed>>;
|
|
387
|
-
/** A remove target: `match.entity`, or the id `spawn` returned in this run; never a raw id. */
|
|
388
|
-
type
|
|
437
|
+
/** A remove target: `match.entity`, or the id `spawn` returned in this run; never a raw id, not even as one of several. */
|
|
438
|
+
type RemoveTargetRejections<S extends Schema.Any, Root, E> = E extends {
|
|
389
439
|
readonly kind: "EntityRef" | "EntityMut";
|
|
390
440
|
readonly id: Entity.EntityId<S, Root>;
|
|
391
|
-
} ?
|
|
441
|
+
} ? never : E extends SpawnedId<S, Root, string> ? never : "remove needs an entity from a query (pass match.entity) or the id spawn returned in this run, not a raw id";
|
|
442
|
+
type RemoveTargetAllowed<S extends Schema.Any, Root, E> = [
|
|
443
|
+
RemoveTargetRejections<S, Root, E>
|
|
444
|
+
] extends [never] ? unknown : Fix<RemoveTargetRejections<S, Root, E>>;
|
|
392
445
|
/** The transitive closure of the names `N` require (cycles stop). */
|
|
393
446
|
type RequiredClosure<Pairs extends RequirementPair, N extends string, Seen extends string = never> = [
|
|
394
447
|
Exclude<N, Seen>
|
|
@@ -422,7 +475,8 @@ type HeldNames<P> = Exclude<AllKeys<P>, MissingSomewhere<P, AllKeys<P>>>;
|
|
|
422
475
|
* `spawn` needs `Game.System.spawns(...)` listing every component of the
|
|
423
476
|
* draft, `insert` needs `inserts`, `remove` needs `removes`, `despawn` needs
|
|
424
477
|
* `despawns` and an entity from a query proving one of them, `despawnScope`
|
|
425
|
-
* needs `despawnsScope`, and relation edits need `relates
|
|
478
|
+
* needs `despawnsScope`, and relation edits need `relates`, including
|
|
479
|
+
* relations a spawned draft stages with `Game.Command.relate(...)`.
|
|
426
480
|
*
|
|
427
481
|
* Resource and event writes are not commands: they go through the
|
|
428
482
|
* `writeResource(...)` / `writeEvent(...)` access a system declares.
|
|
@@ -434,13 +488,15 @@ export interface CommandsApi<S extends Schema.Any, Root = unknown, Spawns = neve
|
|
|
434
488
|
* The draft must hold every component its components require
|
|
435
489
|
* (`Schema.requires`); drafts are checked here, so a partial draft built
|
|
436
490
|
* with `Game.Command.spawn(...)` and completed with `extend(...)` is fine.
|
|
491
|
+
* A component the draft may hold (a conditional or spread entry) needs
|
|
492
|
+
* what it requires surely held.
|
|
437
493
|
*/
|
|
438
|
-
readonly spawn: [Spawns] extends [never] ? MethodNotDeclared<"spawn", "spawns"> : <P extends Entity.ComponentProof>(draft: Entity.EntityDraft<S, P, Root> & DraftAllowed<P, Spawns> & DraftRequirementsMet<S,
|
|
494
|
+
readonly spawn: [Spawns] extends [never] ? MethodNotDeclared<"spawn", "spawns"> : <P extends Entity.ComponentProof, R = never>(draft: Entity.EntityDraft<S, P, Root, R> & DraftAllowed<P, Spawns> & DraftRequirementsMet<S, P> & DraftRelationsAllowed<R, Relates>) => SpawnedId<S, Root, HeldNames<P>>;
|
|
439
495
|
/**
|
|
440
496
|
* Queues an entity spawn owned by one lifetime scope (removed together
|
|
441
497
|
* with `despawnScope(...)`). The draft is checked like `spawn(...)`.
|
|
442
498
|
*/
|
|
443
|
-
readonly spawnIn: [Spawns] extends [never] ? MethodNotDeclared<"spawnIn", "spawns"> : <P extends Entity.ComponentProof>(scope: EntityScope.EntityScope<string, Root>, draft: Entity.EntityDraft<S, P, Root> & DraftAllowed<P, Spawns> & DraftRequirementsMet<S,
|
|
499
|
+
readonly spawnIn: [Spawns] extends [never] ? MethodNotDeclared<"spawnIn", "spawns"> : <P extends Entity.ComponentProof, R = never>(scope: EntityScope.EntityScope<string, Root>, draft: Entity.EntityDraft<S, P, Root, R> & DraftAllowed<P, Spawns> & DraftRequirementsMet<S, P> & DraftRelationsAllowed<R, Relates>) => SpawnedId<S, Root, HeldNames<P>>;
|
|
444
500
|
/**
|
|
445
501
|
* Queues component inserts (or replacements) on an existing entity, applied
|
|
446
502
|
* at the next `applyDeferred()`. To change a value now, on an entity you
|
|
@@ -496,8 +552,8 @@ export interface CommandsApi<S extends Schema.Any, Root = unknown, Spawns = neve
|
|
|
496
552
|
}
|
|
497
553
|
/** The command queue the runtime gives each system: every command, unchecked, and `flush`. */
|
|
498
554
|
export interface CommandQueue<S extends Schema.Any, Root = unknown> {
|
|
499
|
-
readonly spawn: (draft: Entity.EntityDraft<S, any, Root>) => Entity.EntityId<S, Root>;
|
|
500
|
-
readonly spawnIn: (scope: EntityScope.EntityScope<string, Root>, draft: Entity.EntityDraft<S, any, Root>) => Entity.EntityId<S, Root>;
|
|
555
|
+
readonly spawn: (draft: Entity.EntityDraft<S, any, Root, any>) => Entity.EntityId<S, Root>;
|
|
556
|
+
readonly spawnIn: (scope: EntityScope.EntityScope<string, Root>, draft: Entity.EntityDraft<S, any, Root, any>) => Entity.EntityId<S, Root>;
|
|
501
557
|
readonly insert: (entity: Entity.EntityId<S, Root> | {
|
|
502
558
|
readonly id: Entity.EntityId<S, Root>;
|
|
503
559
|
}, ...entries: ReadonlyArray<SchemaEntry<S>>) => Entity.EntityId<S, Root>;
|